Skip to main content

Release Notes

Airframe uses YY.MM.patch versioning scheme, so the version numbers match with the release year and month.

Since Airframe 23.6.0, the detailed release notes will be available in the GitHub release page.

23.5.6​

Release notes

23.5.5​

This is an upgrade to support the latest Scala 3.3.0 Release notes

23.5.4​

Release notes

23.5.3​

Release notes

23.5.2​

The previous 23.5.1 is not available due to a release failure. This version is the same with 23.5.2 except the build process.

Release notes

23.5.1​

Release notes

23.5.0​

Release notes

23.4.8​

Release notes

23.4.7​

Release notes

23.4.6​

A bug fix release around HTTP clients in Scala.js

Release notes

23.4.5​

This release enhances AirSpec (shouldContain, shouldNotContain, flaky {...} block, etc.) and introduces a breaking interface change for customizing test-scoped design: test(name, design: Design => Design)

  • This release also removes scalajs HTTP client genration in sbt-airframe. Now Http.client.newJSClient can be used instead.
  • Async HTTP clients will use Rx[X] return types from this release.

Release notes

23.4.4​

Migration to Scala 3 has been completed, except airframe-finagle. For Scala 3, we can use airframe-http with the Netty-based HTTP server.

Release notes

23.4.3​

More Scala 3 support in airframe-http-netty and introduced a new RxRouter interface for locating RPC definitions. Release notes

23.4.2​

Release notes

23.4.1​

Release notes

23.4.0​

Release notes

23.3.4​

Release notes

23.3.3​

Release notes

23.3.2​

Release notes

23.3.1​

Release notes

23.3.0​

This version includes fixes for supporting sbtn (sbt native client)

Release notes

23.2.5​

Release notes

23.2.4​

Release notes

23.2.3​

Release notes

23.2.2​

Release notes

23.2.1​

Release notes

23.2.0​

Release notes

23.1.4​

Release notes

23.1.3​

Release notes

23.1.2​

Release notes

23.1.1​

Release notes

23.1.0​

Release notes

22.12.6​

Release notes

22.12.5​

Release notes

22.12.4​

Release notes

22.12.3​

Release notes

22.12.2​

Release notes

22.12.1​

Release notes

22.12.0​

Release notes

22.11.4​

Upgrade to Scala.js 1.12.0

Release notes

22.11.3​

Release notes

22.11.2​

Release notes

22.11.1​

Release notes

22.11.0​

This version upgrades slf4j to 2.0.x series. No application code change is necessary, but if you are using an slf4j binder, the binder needs to be upgraded to the version that support slf4j-api 2.0.x. See slf4j FAQ for more details.

Release notes

22.10.4​

Release notes

22.10.3​

This version upgrades to Scala 3.2.1 for Scala 2.13.10 compatibility through TASTy reader.

Release notes

22.10.2​

Release notes

22.10.1​

Release notes

22.10.0​

Upgrade to Scala 2.13.10 to address a regression in Scala 2.13.9. And also, an experimental module airframe-http-netty is added to support REST/RPC server in Scala 3.

22.9.3​

This version includes JDK19 support for Scala 2.13 and several bug fixes.

22.9.2​

From this version, AirSpec testing library supports Scala 3 + Scala.js!

22.9.1​

Upgrade to Scala.js 1.11.0.

22.9.0​

Added SQL type resolver to airframe-sql and improved Scala 3 compatibility of airframe-surface.

22.8.0​

Other updates:

22.7.3​

This version removes the absolute source code paths embedded to the compiled binaries when using airframe-log, airframe-di, airspec. This will reduce the generated class file size and protect the privacy of your local folder information.

22.7.2​

This version recompiles airframe for Java8 target.

22.7.1​

This version includes minor updates and upgrades to Scala 3.1.3.

22.7.0​

This version upgrades Scala.js to 1.10.1, msgpack-core 0.9.3 (JDK17 support). AirSpec 22.7.0 fixes JUnit test report (test-repot.xml) output.

22.6.4​

This version has a minor fix for supporting upcoming Scala 2.13.9

22.6.3​

This version is a fix for a furture version of Scala 2.13

22.6.2​

This version is mostly internal updates.

22.6.1​

This is a bug fix release of airframe-http client.

  • airframe-http: Fix deadlock at http client threads (#2223) [a900e0e88]

Internal updates​

22.6.0​

This version extends Scala 3 support for additional modules, including config, fluentd, http, jdbc, jmx, launcher, rx-html, sql, parquet.

From this version, we drop the support of Java 8 for improving the maintainability and for adopting new Java client of JDK11, which can be used without any additional dependencies. airframe-http added a new standard http client implementation (Http.client.newSync/AsyncClient), which works both in JVM and Scala.js.

Major changes​

Internal changes​

22.5.0​

This version changes the behavior of AirSpec in order to support async testing for tests that return Future[_] values. With async testing, you don't need to wait the completion of Future[_] objects in your test cases. This is especially useful when you need to await network responses in your Scala and Scala.js test code.

If you have tests that acquire resources around Future, you may see unexpected execution test order due to this change. To properly acquire and release resources for async testing, consider using newly added methods Control.withResourceAsync(resource) and wvlet.airframe.control.Resource[A].wrapFuture.

This version also adds wvlet.airframe.http.RPCStatus error code, which will be the standard error reporting method in Airframe RPC. In the upcoming Airframe versions, you can use RPCStatus.newException(...) to propagate RPC server-side errors into clients in the form of wvlet.airframe.http.RPCException.

Major updates​

  • AirSpec: Add async test support (#2159) [8046872d9]
  • airframe-http: #1559 Use Jitter by default with max retry = 15 in http clients (#2180) [f72605a42]
  • airframe-rx: Add RxVar.stop to send OnCompletion event
  • airframe-ulid: Make ULID a regular class and map to string in OpenAPI (#2155) [ea7de71e3]
  • airframe-control: Add Resource[R] for releasing resources at ease in AirSpec (#2162) [c7fcfe7d4]
  • Upgrade to Scala 3.1.2 (#2161) [4ba827f86]
  • Update scalajs-dom to 2.2.0 (#2173) [17fbf20fc]
  • Update grpc-netty-shaded, grpc-protobuf, ... to 1.46.0 (#2138) [0c6d81e87]
  • Update finagle-core, finagle-http, ... to 22.4.0 (#2133) [852f5cf5c]

Minor updates​

  • airframe-log: Add Logger.supporessLog, suppressLogAroundFuture
  • airframe-control: Add Control.withResourceAsync
  • airframe-control: Add Resource.wrapFuture
  • airframe-http: Add the default mappings from gRPC code to RPCStatus
  • airframe-http: Add @description annotation (#2157) [d43e5b26b]
  • airframe-sql: Mark CTAS as Update type (#2181) [c12a7760e]
  • airframe-grpc: Add GrpcClient for consolidating a logic for handling RPCException (#2172) [4c8f1c24b]
  • airframe-grpc: Add GrpcClient to handle RPCException properly
  • Add RPCHttpClient to handle RPCException at client side (#2165) [782b3434f]
  • airframe-http: Add RPCEncoding object for managing application/msgpack, json content types (#2144) [a9a04eb40]
  • openapi: Suppress package prefix from tags (#2158) [cc284547f]
  • openapi: Support removing package prefixes from object names (#2154) [6ffe483ab]
  • #2419: Use optional OpenAPI parameter if a default value is defined (#2153) [ebc7b86f1]
  • airframe-http-finagle: Propagate RPCException to clients (#2141) [e43122068]
  • airframe-grpc: Propagate RPCException to clients (#2139) [7f211936b]
  • airframe-rpc: Add RPC status code (#1973) [dccb460de]
  • Update fluency-core, fluency-fluentd, ... to 2.6.4 (#2137) [a4b463e22]
  • Update postgresql to 42.3.5 (#2152) [7b522f269]
  • Update portable-scala-reflect to 1.1.2 (#2134) [ba4f4efa7]

Internal dependency updates​

22.4.2​

A minor bug fix release.

22.4.1​

This version upgrades to Scala.js 1.10.0 to address a security vulnerability CVE-2022-28355 found in java.util.UUID.randomUUID() implementation of Scala.js. If UUID.randomUUID() is used for generting publicly visible IDs, generated IDs were preditable in the former Scala.js versions.
Similarily, airframe-ulid for Scala.js is fixed to use SecureRandom to avoid generating predictable ULID values.

22.4.0​

This is a maintenance release for upgrading internal libraries.

22.3.0​

This version is a maintenance release for dependency updatates:

22.2.0​

This version upgrades Scala.js vertion to 1.9.0, and improves support for Scala 3

  • Update sbt-scalajs, scalajs-compiler, ... to 1.9.0 (#2071) [78035500]

Bug Fixes​

  • airframe-metrics: Support positive base duration in TimeWindow (#2079) [40a31711]
  • airframe-surface: Handle case fields as method arguments in Scala 3 (#2051) [93635586]
  • airframe-surface: Scala 3: Pass all tests on JVM (#2052) [7b0d96cc]

Internal Updates​

22.1.0​

This version introduces type-safe event handlers (e.g., onclick -> { e: MouseEvent => ... }) for airframe-rx-html. Thanks @exoego for the contribution!

  • airframe-rx-html: Add type-safe event handler (#2044) [9b23ccc7]

From this version, AirSpec will be built using a sub folder of Airframe project. This is for simplyfing the build definition of Airframe.

Minor fixes​

Major dependency updates​

Internal dependency updates​

21.12.1​

This release is for upgrading to Scala.js 1.8.0 and using a safer version of logback-core 1.2.8, which removes JNDI/JDBC related codei LOGBACK-1591. Note that it's a different issue from the log4j vulnerability CVE-2021-44228. logback-core is used inside airframe-log for rotating log files and airframe-log doesn't use any logback configuration file, which can be a target of JNDI lookup security hole.

21.12.0​

21.11.0​

This version supports nested record read/write of Parquet files and includes major dependency updates (Scala, Scala.js, scalajs-dom, Finagle, okhttp, etc.)

New Features​

  • airframe-parquet: Support nested schema (#1917) [d2ab8fad]
  • airframe-parquet: Parquet nested record support - M2 (#1943) [8b3c88bd]

Bug Fixes​

  • airspec: Fixes #1845 MISSING_DEPENDENCY for no-arg tests (#1895) [01792ff7]
  • airframe-http: Fixes #1843: Sanitize class names in Surface and http/RPC logs (#1894) [a1b68688]
  • airframe-http: Scala 3 support prep (#1760) [68322a4b]
  • airframe-http-recorder: Ignore pragma, cache-control header for request match (#1892) [2ac80e6e]
  • airframe-finagle: Handle ChannelClosedException sub classes (#1891) [15045eab]

Major Dependency Updates​

Internal Dependency Updates​

21.10.0​

This is a maintainance release with dependency updates.

  • JDK17 support
  • Scala 2.12.15 support
  • Scala.js 1.7.1 support

Dependency updates​

Internal Changes​

21.9.0​

This is mostly a dependency update release.

Internal Dependency Updates:

21.8.1​

airframe-parquet now supports AWS S3, writing dynamic records, and reading column statistics.
airframe-log added ThreadLogFormatter to show the current thread name in the log. This is suited to multi-thread applications.

New Features​

Bug Fixes​

Dependency Updates​

21.8.0​

Upgraded to Scala.js 1.7.0, which fixed all of the known bugs in Scala.js 1.6.0.

Minor Fixes:

  • airframe-http: Fixes #1772 Properly decode URL-encoded paths when scanning jar files (#1773) [9d7184df3]
  • airframe-log: Fix formatStacktrace dropping last line (#1759) [a093436b3]
  • airframe-log: Add a workaround if System.err is replaced for logging (#1756) [3c5eed424]

Dependency Updates:

21.7.0​

This version adds support for JDK16 and uses Scala.js 1.6.0 for JS projects.

Dependency updates:

21.6.0​

This version is mostly a bug-fix release for Scala 3. To simplify the cross build settings with Scala 3, sbt-airframe becomes a separate GitHub project.

New Features​

  • airframe-ulid: Support non-secure random ULID generator (#1722) [0a5524d0d]
  • airframe-ulid: Make ULIDGenerator public (#1721) [31c179138]
  • airframe-codec: Support reading JSON as an object field (#1720) [dc0f1eccd]
  • airframe-grpc: Show the exception error message in RPC implementations (#1716) [78fcdda1c]

Minor Fixes​

  • airframe-http-recorder: Delete duplicated server creation methods (#1703) [8f186064b]
  • airframe-codec: Fix MapCodec to read nil as an empty Map (#1717) [e0fe0a63a]
  • airframe-surface: Resolve type parameters for Scala 3 (#1700) [ae947249c]
  • airframe-codec: Fix tests for Scala 3 (#1699) [28e8df563]
  • airframe-surface: Support building abstract class impl for Scala 3 (#1697) [d5ae6ec4f]
  • airframe-surface: Support local class surfaces for Scala 3 (#1695) [69538969e]
  • airframe-surface: Use compile-time surface for Scala 3 (#1694) [cdf921018]
  • airframe-surface: Support EnumSurface for Scala 3 (#1693) [6be492a4d]
  • airframe-surface: Surface.ofClass(...) for Scala 3 (#1692) [d8ae38956]

Internal Updates​

21.5.4​

This is a minor bug fix release. We've found airframe-surface for Scala 3 still has several issues, which may cause errors in Airframe DI.

  • airframe-di: Fixes macro-compilation errors by using only inline methods for Scala 3 (#1673) [db2cdf690]
  • airspec: Show deprecation warning messages for scalaJSSupport usage.
  • airframe-json: Deprecate JSON query (path / to).value syntax. Use (path / to).getValue instead becuase .value can be ambiguous in Scala 3.
  • internal: Migrating test codes for Scala 3 (#1672) [76943cfd0]

21.5.3​

AirSpec, a testing library for Scala, now supports Scala 3.0.0! From this version, AirSpec only supports test(...) { ... } syntax, and deprecates using public functions as test cases. See also AirSpec documentation.

21.5.2​

This is a minor bug fix release for AirSpec and surfce.

21.5.1​

Major Changes​

  • From this version, Airframe DI for Scala 3.0.0 is available. For Scala 3, Airframe DI only supports constructor injection. We will deprecate in-trait injection support in upcoming versions. For more details, see also airframe-di migraiton plan.

  • AirSpec deprecates function-style test specs and only uses test("...") { ... } syntax. This version shows warning messages if you are still using public functions as test cases. This test support will be removed from the next version of AirSpec. This is a necessary step toward supporting Scala 3.

  • airframe-di: Scala 3 support (Phase 3) (#1655) [235025063]

  • airframe-di: Next generation DI (#1653) [1a5725800]

  • AirSpec: Show deprecation warning message to function spec (#1662) [92193db48]

Internal Changes​

21.5.0​

New Features​

  • Added airframe-parquet, Parquet columnar file reader and writer. So that you can read and write Scala objects at ease in columnar format.

  • Scala 3.0.0 support (Dropped 3.0.0-RC3 support).

  • airframe-parquet: #1621 Support is null and is not null (#1624) [a0b4fbd28]

  • airframe-parquet: SQL query support (#1620) [87f79c128]

  • airframe-parquet: Support column projection (#1617) [15878d24a]

  • airframe-parquet: Support for row-group filter (#1615) [8381f44ae]

  • airframe-parquet: Add Parquet format reader and writer (#1613) [1fb076162]

  • Upgrade to Scala 3.0.0 (#1639) [2e27fd3da]

  • airframe-codec: Scala 3 support (#1640) [038fcc9b6]

  • airframe-http-recorder: Add methods to dump HttpRecordStore as JSON and YAML (#1622) [9ed313c89]

  • airframe-http-finagle: Update finagle-core, finagle-http, ... to 21.4.0 (#1603) [9b5c59670]

Dependency Updates​

21.4.1​

Added Scala 3.0.0-RC3 support. This version has no functional difference with 21.4.0.

Now, the following 9 modules support Scala 3.0.0-RC3:

  • airfarme-log
  • airframe-surface
  • airframe-canvas
  • airframe-control
  • airframe-metrics
  • airframe-msgpack
  • airframe-json
  • airframe-rx
  • airframe-ulid

Changes:

Internal changes:

21.4.0​

New Features​

  • airframe-ulid (ULID generator for Scala) is now an independent module that can be used as a standalone library for Scala and Scala.js. With our optimizaiton effort, airframe-ulid becomes the fastest ULID generator for Scala and can produce more than 5 million ULIDs per second.

  • airframe-ulid: Performance optimization (#1586) [28a763371]

  • airframe-ulid: Extract ULID as a new module (#1585) [1c8574610]

  • airframe-rx: Add Rx.timer/delay (#1583) [49158a183]

  • airframe-rx-widget: Add GoogleAuth.getCurrentUser: Option[GoogleAuthProfile] (#1576) [dfa27cb91]

  • airframe-rx: Add Rx.cache.getCurrent (#1572) [6fa646866]

  • airframe-rx: Add Rx.startWith (#1571) [b46be2a94]

  • airframe-rx: Add RxVar.setException(Throwable) (#1556) [7b360c70d]

  • airframe-grpc: Use ForkJoinPool with nCPU x 2 max threads by default to handle concurrent requests (#1557) [bc86c269d]

  • airframe-http: Discourage using HttpRequest[x] adapter in the endpoint definitions [a015acc87]

  • sbt-airframe: Generate ServiceJSClientRx for Scala.js + RPC + Rx (#1570) [093be4948]

Dependency Updates​

Bug Fixes​

  • airframe-http: Add a proper retry wait to JSHttpClient (#1561) [0e0c27690]
  • airframe-rx: Lazily evaluate Cancelable.merge (#1582) [d4ba91b53]

Internal Updates​

21.3.1​

This is a bug fix release of airframe-http.

  • airframe-http: Fixes #1546 by adding path prefixes to disambiguate NFA nodes (#1547) [910e20324]
  • airframe-http: Fix OpenAPI generator to merge PathItems in the same path (#1541) [f079f8c1d]
  • grpc: Update grpc-netty-shaded, grpc-protobuf, ... to 1.36.1 (#1550) [426d27e89]

Internal Updates​

21.3.0​

This version enhances airframe-rx with convenient operators: Rx.cache, Rx.andThen(Future). This version also includes various bug fixes for gRPC support.

Since this version, airframe-log and airframe-surface support Scala 3.0.0-RC1. We dropped support for Scala 3.0.0-M3.

Enhancement​

Bug Fixes​

Dependency Updates​

21.2.0​

New Features​

Airframe 21.2.0 enhances support for gRPC with logging, multiple server factory, and JSON messaging. sbt-airframe has also been updated to support nested API package strucutres so that you can build HTTP servers and clients for complex services. airframe-rx-widget added a support for Google Auth and rich text editor of Visual Studio Code (Monaco Editor) for Scala.js. Since this version, Scala.js 1.5.0 is required for JS projects.

  • Update sbt-scalajs, scalajs-compiler, ... to 1.5.0 (#1471) [84cdbbab0]
  • sbt-airframe: Support nested API packages for HTTP client generation (#1429) [07df5a405]

airframe-grpc:

airframe-http:

airframe-rx-widget:

Bug Fixes​

Other updates​

21.1.1​

This is a minor bug fix release of airframe-grpc for Scala 2.13

  • airframe-grpc: Update grpc-netty-shaded, grpc-protobuf, ... to 1.35.0 (#1427) [feed252]
  • sbt-airframe: Fix code gRPC client generator for Scala 2.13 (#1426) [f458180]
  • internal: Update antlr4, antlr4-runtime to 4.9.1 (#1424) [3a72a5a]
  • internal: Update spark-sql to 3.1.0 (#1423) [a9bd431]
  • internal: airframe-sql: Migrate from Presto to Trino (#1421) [8d4f7d6]

21.1.0​

This release fixes a missing dependency issue in 20.12.2:

20.12.2​

Scala 3 support (experimenal)​

airframe-log, airframe-surface are experimentally supporting Scala 3.0.0-M3. We are now working on Scala 3 support for Airframe DI. The progress can be tracked at #1077. We have found one blocking issue that needs a fix at Scala 3 side #10931. After this issue is resolved, porting other Airframe modules, including AirSpec, to Scala 3 would not be so difficult for us.

  • airframe-log: Upgrade to Scala 3.0.0-M3 (#1398) [3b2c795]
  • airframe-surface: Surface.methodsOf[X] for Scala 3 (#1403) [f26d216]
  • airframe-surface: Support Surface.of[X] for Scala 3 (Dotty) (#1385) [91ecac5]
  • airframe-di: Split Scala 2 and Scala 3 source folders (#1405) [02ae40e]
  • airframe-di: Add Scala3 impl base (#1407) [f37f807]
  • Update sbt-dotty to 0.5.1 (#1399) [87dd372]

Other updates:

  • airframe-rpc: Update grpc-netty-shaded, grpc-protobuf, ... to 1.34.1 (#1394) [01615b9]
  • airframe-http-finagle: Update finagle-core, finagle-http, ... to 20.12.0 (#1389) [e4108bd]
  • airframe-fluentd: Add fluency-treasuredata to the library dependency (#1404) [e5ee9ba]
  • airframe-jdbc: Update sqlite-jdbc to 3.34.0 (#1390) [2849c01]
  • airframe-sql: Update presto-main to 350 (#1414) [d7e2973]
  • airspec: Update scalacheck to 1.15.2 (#1397) [8056d84]
  • airframe-msgpack: Update msgpack-core to 0.8.22 (#1401) [0b4f744]
  • Update scala-collection-compat to 2.3.2 (#1406) [ec83785]
  • internal: Upgrade setup-node to v2 (#1411) [fc9373f]
  • internal: Update coursier to 2.0.8 (#1408) [919c47b]
  • internal: Update sbt, sbt-dependency-tree, ... to 1.4.6 (#1409) [6a575d3]
  • internal: Update sbt-mdoc to 2.2.14 (#1396) [9232d8a]
  • internal: Update sbt script for Apple Silicion (#1395) [63d3bae]
  • internal: Update jmh-core, jmh-generator-bytecode, ... to 1.27 (#1388) [4d65de2]
  • internal: Update swagger-parser to 2.0.24 (#1382) [b32368d]

20.12.1​

This version has added an experimental support for Dotty (Scala 3.0.0-M2) for airframe-log.

Internal Changes​

  • internal: Update sbt-dotty to 0.4.6 (#1378) [cb49d7b]
  • internal: Separate AirSpec build (#1380) [1b39ece]
  • internal: Add configuration for testing Scala 3 (Dotty) (#1377) [64feb58]
  • iinternal: Use a different sonatype session name for Scala.js release [9bac053]

20.12.0​

This is a minor dependency update release.

  • airframe-grpc: Update grpc-netty-shaded, grpc-protobuf, ... to 1.34.0 (#1371) [65cd466]
  • sbt-airframe: Embed the service name to OpenAPI tag (#1362) [306bf81]
  • Update scala-collection-compat to 2.3.1 (#1366) [d7392c0]
  • internal: Update sbt-pgp to 2.0.2 (#1370) [ba279f2]
  • internal: Update presto-main to 347 (#1368) [3a19419]
  • internal: Update antlr4, antlr4-runtime to 4.9 (#1365) [44fe2db]
  • internal: Update sbt-mdoc to 2.2.13 (#1367) [c3aecb4]
  • internal: Update sbt, sbt-dependency-tree, ... to 1.4.4 (#1364) [9c7adde]
  • internal: Update scala-collection-compat to 2.3.0 (#1363) [0fd99c8]
  • internal: Add a GitHub Action for creating release note links [927a99c]
  • internal: Update sbt-pgp to 2.1.1 (#1373) [060ff7a]
  • internal: sbt-pgp 2.1.1 no longer requires gpg 1.x [f022394]

20.11.0​

From this release, we no longer support Scala 2.11. This is because Spark, the last major libarary using Scala 2.11, has updated to use Scala 2.12 since Spark 3.0.x.

  • Remove support for Scala 2.11 (#1347) [484587a]
  • sbt-airframe: Various fixes of Open API generator (#1357) [f227e1e]
  • airframe-fluentd: Update fluency-core, fluency-fluentd, ... to 2.5.0 (#1353) [88cf476]
  • airframe-http: Add a method for storing server exceptions to TLS: TLS_KEY_SERVER_EXCEPTION (#1351) [f35b64e]
  • airframe-jdbc: Remove duplicated close message (#1343) [bb06ec9]
  • airframe-json: Improve empty JSON array and object formatting (#1345) [c1de7ed]
  • internal: Update coursier to 2.0.7 (#1360) [9a116c1]
  • internal: Upgrade to setup-scala@v10 (#1361) [91ec6a0]
  • internal: Update sbt, sbt-dependency-tree, ... to 1.4.3 (#1359) [568e945]
  • internal: Update sbt-scalajs, scalajs-compiler, ... to 1.3.1 (#1358) [2b8787f]
  • internal: Update protobuf-java to 3.14.0 (#1356) [06c602e]
  • internal: Update presto-main to 346 (#1350) [2a9979e]
  • internal: Update sbt-mdoc to 2.2.12 (#1349) [549e5a5]
  • internal: Update swagger-parser to 2.0.23 (#1338) [1c6c191]
  • internal: Update sbt-sonatype to 3.9.5 (#1339) [2951d0c]

20.10.3​

  • airframe-http: Return 400 when invalid JSON data is passed and fix Timestamp json formatting (#1336) [831b71c]
  • airframe-rpc: Update grpc-netty-shaded, grpc-protobuf, ... to 1.33.1 (#1334) [58f4589]
  • airframe-finagle: Update finagle-core to 20.10.0 (#1333) [5cd901b]
  • internal: Use Airframe 20.10.2 in the demo code [8938c54]
  • internal: Update presto-main to 345 (#1331) [ddb0c52]

20.10.2​

This version is a bug fix and small maintenance release.

  • airframe-grpc: Fixes #1329. Use jdk8 compatible stream reader (#1330) [810bda8]
  • airframe-grpc: Update grpc-netty-shaded, grpc-protobuf, ... to 1.33.0 (#1326) [2749d9e]
  • airframe-rx: Fix Rx.interval (#1328) [91a501d]
  • airframe-rx-html: Add a demo code for airframe-rx-html (#1283) [70dda74]
  • airframe-log: Fixes #1321. Set the default log level for Scala.js (#1327) [d27748d]
  • airframe-http: Support a Date instance as an argument for withDate method (#1184) [89347f3]
  • airframe-rpc: Add an RPC demo code using Scala + Scala.js (#1322) [e407847]
  • internal: Update antlr4, antlr4-runtime to 4.8-1 (#1325) [b89453a]
  • internal: Update sbt-mdoc to 2.2.10 (#1320) [2f69780]
  • Internal: Update sbt, sbt-dependency-tree, ... to 1.4.1 (#1324) [521202d]
  • internal: Update scalafmt-core to 2.7.5 (#1323) [22e4ac8]

20.10.1​

  • airframe-http, rx: Update sbt-scalajs, scalajs-compiler, ... to 1.3.0 (#1316) [73a7129]
  • airframe-finagle: Support raw-string and MsgPack responses [1828afb]
  • airframe-finagle: Update finagle-core, finagle-http, ... to 20.9.0 (#1298) [bf8b1e6]
  • airframe-grpc: Update grpc-netty-shaded, grpc-protobuf, ... to 1.32.2 (#1314) [7e55229]
  • airframe-jdbc: Update postgresql to 42.2.18 (#1317) [f61c3e5]
  • internal: Update presto-main to 344 (#1313) [6efd9f5]
  • internal: Update jmh-core, jmh-generator-bytecode, ... to 1.26 (#1311) [b59c129]

20.10.0​

This is a minor maintenance release. Mostly for intenral library upgrades.

  • sbt-airframe: Support Future/Response response type in OpenAPI generator (#1308) [3ea1e9c]
  • internal: Upgrade to sbt 1.4.0 (#1306) [8b5f373]
  • internal: Update scalafmt-core to 2.7.3 (#1302) [4618206]
  • internal: sbt-airframe: Update swagger-parser to 2.0.22 (#1304) [d6815c1]
  • internal: Update json4s-jackson to 3.6.10 (#1301) [a0b6360]
  • internal: Update presto-main to 343 (#1300) [b7b1dfa]
  • internal: Update sbt-pack to 0.13 (#1297) [93a1735]
  • internal: Update scalafmt-core to 2.7.2 (#1296) [53e52cb]
  • internal: Update sbt-mdoc to 2.2.9 (#1295) [8ee9a6e]

20.9.2​

This version upgrades Scala.js to 1.2.0 and includes RxOption rendering bug fixes.

  • Upgraded Scala.js version to 1.2.0 (#1272) [627a4a8]
  • airframe-rx: Interface hierarchy change: Rx[A], RxOption[A], and RxStream[A] (#1292) [10d9e29]
  • airframe-rx: Add throttleFirst/Last(sample) (#1291) [4fb0dce]
  • airframe-rx: internal: Add RxResult for propergating downstream operator states (#1294) [835dbaf]
  • airframe-msgpack: Update msgpack-core to 0.8.21 (#1285) [5768da4]
  • airframe-config: Update snakeyaml to 1.27 (#1282) [639162a]
  • ariframe-grpc: Update grpc-netty-shaded, grpc-protobuf, ... to 1.32.1 (#1278) [2610ad3]
  • internal: Update scalafmt-core to 2.7.1 (#1288) [09edd54]
  • internal: Update sbt-antlr4 to 0.8.3 (#1287) [8df7e70]
  • internal: Update spark-sql to 2.4.7 (#1286) [e66f981]
  • internal: Update scala-collection-compat to 2.2.0 (#1280) [b08b195]
  • internal: Update protobuf-java to 3.12.4 (#1277) [48c958c]
  • internal: Exclude airframe-benchmark from artifacts to resolve protobuf scaladoc generation errors (#1276) [547c1e2]

20.9.1​

This release is for enhancing the usability of airframe-rx.

  • airframe-rx: Make RxOption public and add Rx.join/zip/concat helper methods (#1275) [a13006d]
  • airframe-rx: Add Rx.take(n) and Rx.interval (#1269) [febba6d]
  • airframe-rx: Add RxOption.getOrElse/orElse/transform (#1268) [670f11a]
  • internal: Update presto-main to 341 (#1274) [327bede]
  • internal: Upgrade to scalafmt 2.7.0 (#1271) [b4c707c]
  • internal: Update protobuf-java to 3.13.0 (#1267) [470b69e]
  • internal: Update sbt-mdoc to 2.2.6 (#1262) [a578830]
  • internal: Use GIT_DEPLOY_KEY env [afc49f7]
  • internal: Fix env var name [e476dec]
  • internal: Update to sbt-mdoc 2.2.6 and use GIT_DEPLOY_KEY env for doc deployment [236f6ba]
  • internal: Add packaging test (#1264) [8ac4707]
  • internal: Update jmh-core, jmh-generator-bytecode, ... to 1.25.2 (#1265) [35c970a]

20.9.0​

This version is a minor bug fix release.

  • airframe-rx: Fix the compilation error when binding RxVar (#1263) [b6c8e0f]
  • airframe-http: Client generator clieanup (#1254) [0b312f2]
  • airframe-jdbc: Update postgresql to 42.2.16 (#1252) [2e6f9ff]
  • airframe-grpc: Add benchmark for grpc-java (#1251) [8ddf320]
  • airframe-rpc: Add an RPC project example (#1250) [942f11e]
  • internal: Update sbt-jmh to 0.4.0 (#1260) [d690eb8]
  • internal: Fix Scala.js CI and upgrade scala-js-dom to 1.1.0 (#1261) [5259c64]
  • internal: Update sbt script (#1259) [b999f14]
  • internal: Update jmh-core, jmh-generator-bytecode, ... to 1.25.1 (#1256) [589a16c]

20.8.0​

Major And Breaking Changes​

  • Airframe RPC now supports HTTP/2 based gRPC backend: airframe-grpc. Our initial benchmark result showed 3x faster rpc/sec over Finagle backend.
  • airframe-rx becomes an independent module (wvlet.airframe.rx.Rx[X]) for providing ReactiveX streaming interface. This module is used for gRPC-streaming and interctive DOM rendering (airframe-rx-html)
    • The package wvlet.airframe.http.rx has been renamed to wvlet.airframe.rx (#1237) [99c54b2]
  • airframe-http-rx, airframe-http-widgets are renamed to airframe-rx-http and airframe-rx-widgets respectively (#1238) [b58d40a]

New Features​

Bug fixes​

  • sbt-airframe: Limit the scope of finding @RPC/@Endpoint annotaitons (#1244) [202f94b]
  • airfame-codec: Throw an exception for invalid enum strings (#1220) [a55cb68]
  • airframe-okhttp: Replace the request body content to a byte array in memory. (#1233) [242d3c0]
  • airframe-okhttp: Shutdown OkHttpClient explicitly (#1196) [5917804]
  • airframe-http: Retry on 408 request timeout (#1218) [ceea5b1]

Other changes​

  • Upgrade to Scala 2.12.12, 2.13.3 (#1199) [b07b7ac]
  • airframe-http-okhttp: Update okhttp to 3.14.9 (#1096) [372f98d]
  • airframe-grpc: Add a simple finagle/grpc benchmark (#1247) [ba85551]
  • airframe-grpc: Support gRPC server interceptors (#1246) [53db2e0]
  • airframe-grpc: Add async grpc client for streaming (#1241) [a1660cd]
  • airframe-grpc: Support client, server, and bidirectional streaming (#1239) [bbfef41]
  • airframe-grpc: Update grpc-netty-shaded, grpc-stub to 1.31.1 (#1230) [ede91c5]
  • airframe-grpc: Generate both sync and async clients inside the same class (#1224) [a9bb18b]

Internal Changes​

  • airframe-grpc: Update grpc-netty-shaded, grpc-stub to 1.31.0 (#1197) [30eb3b9]
  • internal: Update presto-main to 340 (#1219) [9671111]
  • Update jmh-core, jmh-generator-bytecode, ... to 1.25 (#1231) [7794143]
  • airframe-http: Update swagger-parser to 2.0.21 (#1193) [f9fd30b]
  • Update sbt-scalafmt to 2.4.2 (#1198) [3a8660f]
  • airframe-jdbc: Update postgresql to 42.2.15 (#1236) [3a1bc66]
  • airframe-jdbc: Update sqlite-jdbc to 3.32.3.2 (#1195) [07f42e1]
  • Update scalajs-dom to 1.1.0 (#1215) [d0866a5]
  • internal: Update sbt-buildinfo to 0.10.0 (#1222) [96e78f3]

20.7.0​

This release supports generating Open API schema from Aiframe HTTP/RPC interfaces by using sbt-airframe plugin.

Changes:

  • airframe-http: Generate Open API schema from Endpoint/RPC interfaces (#1178) [8a55a5f]
  • airframe-http: Fix the issue that HTTP response headers except for Content-Type are ignored (#1183) [3f3ff3d]
  • airframe-fluentd: Add convenient factories for initializing fluentd/td loggers (#1190) [60882c2]
  • Update sbt-scalajs, scalajs-compiler, ... to 1.1.1 (#1173) [c509dca]
  • Add Airframe RPC documentation (#1174) [d027772]

Internal changes:

20.6.2​

This is a minor bug fix and improvement release.

  • airframe-codec: Support Either and Throwable class serde (#1163) [68998fb]
  • airframe-http-okhttp: Add SocketTimeoutException as a retryable failure. (#1170) [e5cd4b8]
  • airframe-http: Fixes #1158 Import higherKinds for generated AsyncHttpClient (#1164) [008366e]
  • airframe-msgpack: #1159 Support packTimestamp(unixtime) to use timestamp32 (#1160) [b49a79f]

20.6.1​

This release introduced URLConnection-based HTTP client for handy http request testing, and improved RPC request handling to support arbitrary number of RPC function arguments.

Internal changes:

20.6.0​

  • airframe-codec: #1091 Support complex types in AnyCodec (#1098) [d333515]
  • airframe-http: #1112 Report RPC interface class in the http_access logs (#1114) [cb0edbe]
  • airframe-json: Add convenient operations for JSONValues (#1123) [4675f09]
  • airframe-jdbc: Update postgresql to 42.2.13 (#1121) [4bf5cfb]
  • airframe-metrics: Add Count (succinct counter) (#1109) [cb6d659]

20.5.2​

Airframe 20.5.2 added a built-in http/RPC request logging and fixed several http request handling bugs. We also upgraded to Scala.js 1.1.0, whose binary is compatible with Scala.js 1.0.x.

airframe-codec is enhanced to support mapping from JSON array strings to Array[X] types.

  • airframe-http: #399 Add a standard JSON request logger (#1073) [22716fb]
  • airframe-http: Add RPC call logging (#1076) [119ada2]
  • airframe-http: Suppress request objects from rpc_args logs (#1090) [cfb0fe0]
  • airframe-http: Retry on Finagle's ChannelClosedException (#1089) [ca4980c]
  • airframe-http: #1086 Support query_string mapping for non GET requests (#1087) [2b77ad5]
  • airframe-http: Fix query_string parsing of HttpMessage.Request (#1085) [5e6d52f]
  • airframe-http: Report exception traces inside RPC/Endpoint methods (#1081) [217bc88]
  • airframe-http: Evaluate request/response body lazily (#1074) [762ee16]
  • airframe-http-rx: Fix EntityRef rendering (#1075) [079ac12]
  • airframe-surface, airframe-codec: #1092 Support Enum-like classes in Scala.js (#1099) [7ee82d7]
  • Update sbt-scalajs, scalajs-compiler, ... to 1.1.0 (#1088) [fa6bc92]
  • airframe-codec: #1083 Support JSON arrays to Array[X] mapping (#1097) [3a2d703]
  • airframe-codec: #1093 Add MessageCodec.fromString(String) (#1095) [5cbdcc1]
  • airframe-http-okhttp: Update okhttp to 3.12.12 (#1094) [93fa2eb]

20.5.1​

  • airframe-http: Read error response body and headers properly in Scala.js (#1069) [8936055]
  • airframe-di: #1068 Do not close loggers upon session shutdown (#1070) [af323d2]

20.5.0​

Now that Scala.js 1.0.x is publicly available, we will drop support for Scala.js 0.6.x since 20.5.0.

  • airframe-http: Fix a bug of JSHttpClient when the port number is empty string (#1060) [6015849]
  • airframe-http-finagle: Update finagle-core, finagle-http, ... to 20.4.1 (#1045) [0a52b93]
  • airframe-http-okhttp: Update okhttp to 3.12.11 (#1047) [35a5008]
  • airframe-jdbc: Update HikariCP to 3.4.3 (#1044) [4a18359]

Minor changes:

Internal changes:

20.4.1​

  • airframe-http: #1025 Support custom server exception response (#1036) [d3a872a]
  • airframe-http-rx: Support Rx.filter (#1030) [b619bfe]
  • sbt-airframe: Fixes client code generation when companion objects of API classes exist #1034 (#1035) [abe4167]

Internal changes:

20.4.0​

Changes and bug fixes:

  • airframe-http-finagle: Update finagle-core, finagle-http, ... to 20.4.0 (#1024) [fc850c2]
  • airframe-http: #1003 Use custom codec for request mapping (#1018) [2d719bc]
  • airframe-http: Simplify Request/Response adapters (#1017) [5b4ef31]
  • airframe-jdbc: Fix port in jdbcUrl (#1028) [9f38aea]
  • airframe-jdbc: Update postgresql to 42.2.12 (#1022) [1aec50b]
  • airframe-control: Break execution in Parallel (#1023) [7dc6d9d]
  • airspec: #1019 Add scala-reflect to the airspec dependency (#1020) [269224a]

Internal changes:

  • Update sbt, scripted-plugin to 1.3.9 (#1021) [d5f928d]
  • Add note for workarounds for using Future with Airframe (#918) [a51b9ad]
  • Update sbt-sonatype to 3.9.2 (#1016) [8228ce1]

20.3.3​

  • airframe-http: #989 Add @RPC Annotation (#1012) [cdd626d]
  • airframe-surface: Resolve Surfaces properly within sbt classloader #1014) [f6b6cbf]
  • airframe-surface: Fix a rare case when $ symbol is found in Surface.name (#1013) [67d0dfd]

20.3.2​

This release is a hot fix to properly deploy airframe-http-okhttp library to Maven central.

  • airframe-http-okhttp: Fix for Scala 2.11 and release process in build.sbt (#1008) [b63bbe5]
  • airframe-http-okhttp: Update okhttp to 3.12.10 (#1009) [ab367a8]
  • sbt-airframe: Wrap primitive args into Map[String, Any] (#1010) [8b8582a]

20.3.1​

Airframe 20.3.1 added several modules for developing Scala.js applictions using airframe-http framework.

New Modules:

  • airframe-http-rx: A module for building reactive DOM components. Renamed from airframe-rx.
  • airframe-http-widget: An extension of airframe-http-rx for using Twitter Bootstrap CSS collections. Renamed from airframe-rx-widget
  • airframe-http-okhttp: A sync HTTP client implementation backed by okhttp3 (#946) [038e960]
  • sbt-airframe: An sbt-plugin for generating HTTP client code for accesing REST APIs defined in airframe-http (#943) [d78781e]

New Features:

  • airframe-control: Support Scala.js [0a2c90e]
  • airframe-http: Support Scala.js for defining Web interfaces as well as Scala JVM [0e017db]
  • airframe-http: Support adding a custom codec to clients (#1004) [9675669]
  • airframe-http: Add cross-platform HttpMessage.Request and Response classes (#982) [f55d438]
  • airframe-http-finagle: Update finagle-core, finagle-http, ... to 20.4.0 (#965) [111e5ad]
  • airframe-http-rx: #993 Support Future[X] to Rx[X] conversion (#996) [b54bbe7]
  • airframe-http-rx: #961 Support add/overwrite of DOM attributes (#976) [02b54b2]
  • airframe-codec: Add Unit codec (#980) [58ef3ff]
  • airframe-codec: Support UUID and MessageCodec.fromMap(Map[String, Any]) (#972) [31eea9a]

Major changes:

  • airframe-http: Deprecated SimpleHttpRequest/Response in favor of HttpMessage.Request/Response
  • airframe-surface: Moved @secret annotation to wvlet.airframe.surface package. (#962) [b79783e]

Minor Fixes:

  • airframe-http: Find Endpoint annotations in parent interfaces (#997) [8f54793]
  • airframe-http: Support JSHttpClient config filter airframe-http: Fix protocol check [c7f34d5]
  • airframe-http: Support Future[], F[] return types in IDL (#1001) [abf0595]
  • airframe-http: #956 Do not generate response body for 204 responses (#975) [bb979dd]
  • ariframe-http-finagle: Use HttpMessage.Response for static content server (#984) [2c91a73]
  • airframe-http-rx: Migrate airframe-rx as a companion module of airframe-http (#986) [39e9be3]
  • airframe-http-rx: Fix flatMap evaluation and improve the test coverage (#979) [8ad4e59]
  • airframe-http-rx: #958 Support embedding Iterable[X <: RxElement] inside DOM (#974) [f224234]
  • airframe-di: Improve the error message for abstract types [de50bbb]
  • sbt-airframe: Fix import cleanup [41523f2]
  • sbt-airframe: Cache the previous client generation results (#1002) [a51a9e2]
  • sbt-airframe: Use pre-built airframe-http package for generating client code (#998) [a893a26]
  • sbt-airframe: Update client code only when necessary (#985) [122c49c]
  • sbt-airframe: Use airframeHttpClients := Seq("(api pkg):(type):(target pkg)") format (#973) [346b24f]
  • sbt-airframe: Fix a class loader issue (#971) [8917e42]
  • sbt-airframe: Support generating Scala.js client [16a2551]
  • airframe-control: Remove dependency to airframe-jmx (#977) [154f283]
  • #995: Embed release notes into git annotated tags [45b3e53]

Internal changes:

20.3.0​

  • airframe-codec: Support reading Array[AnyRef] in JDBCCodec (#960) [d1c1342]
  • airframe-codec: Support more variations of time strings for InstantCodec (#955) [e36c328]
  • airframe-rx: Support embedding raw HTMLElements (#952) [70a393e]
  • airframe-metrics: Fix TimeVector tests across leap years #953 (#954) [f536f82]

20.2.1​

  • airframe-di: Fix a compilation error while binding sealed traits #939 (#940) [e381bfa]
  • airframe-http-finagle: #930 Use bridged schduler for sync client (#937) [9ffd0d5]
  • Update scalajs-dom to 1.0.0 (#936) [89e5bb7]
  • Update scalajs-java-logging to 1.0.0 (#934) [efcd37a]
  • Update portable-scala-reflect to 1.0.0 (#933) [fb97343]
  • Update scalajs-java-time to 1.0.0 (#935) [4ebf554]

20.2.0​

Airframe and Airspec now support the first major release of Scala.js 1.0.0, and airframe-http-finagle becomes available for Scala 2.13.

  • Upgrade to Scala.js 1.0.0 (#926) [c3bd7c1]
  • airspec: Support js.Objects in shouldBe comparison (#922) [fa2d66c]
  • airspec: Add AirSpecLauncher for standalone testing (#921) [366bca4]
  • airframe-http: Fiangle Scala 2.13 support (#920) [03c65af]
  • airframe-http: Update finagle-core, finagle-http, ... to 20.1.0 (#916) [755ea01]
  • airframe-di: #887 Support bind only lifecycle hooks (#919) [db3648d]
  • airframe-codec: Support Instant codec in Scala.js (#914) [9974409]
  • airframe-surface: #913: Fixed Surface.of[X] with alias parameters (#924) [f30277b]

Internal changes:

20.1.3​

Minor bug fix release:

  • airframe-rx-html: Fix Rx node rendering (#912) [ec91f15]
  • airframe-config: various config mapping improvements (#911) [a9b9be7]

Internal changes:

  • Update jmh-core, jmh-generator-bytecode, ... to 1.23 (#908) [64fd0c9]
  • Update presto-main to 329 (#910) [0711050]

20.1.2​

This release introduces airframe-rx-html for rendering complex DOM elements (html tags, canvas, SVG, etc.) at ease with Scala.js. You can compose your own DOM elements by defining RxElement and RxComponent classes.

  • airframe-surface: Fix private field access (#907) [16866f4]
  • airspec: #906 Show warning if scalaJsSupport is missing (#909) [f272e5d]
  • airframe-rx-html: Rewrite Gallery with airframe-rx-html (#905) [657db9e]
  • airframe-rx-html: Add more tags, attrs, and SVG elements (#904) [669e71a]
  • airframe-rx: Add wvlet.airframe.rx.html (#903) [2b7e7d6]
  • airframe-control: Add CircuitBreaker.withRecoveryPolicy() (#900) [133f8c9]
  • airframe-di: Add an option to disable implicit instance creation: Design.noDefaultInstanceInjection (#886) [15b2558]

Internal changes:

  • Rename SCALA_JS_VERSION -> SCALAJS_VESRION to be consistent with other Scala.js projects (#898) [029f000]
  • Update sbt to 1.3.7 (#897) [f63b9d7]

20.1.1​

  • airframe-log: Fix warning log message color (#896) [a1f6e1d]
  • airframe-rx: Support generic event handlers (#893) [774687c]
  • airframe-rx-widget: Support embedding Seq of Rx[A], RxElement inside XML literal (#892) [7a8fd0c]
  • airframe-rx-widget: Fix mounting point of Rx element (#891) [09170d1]

20.1.0​

Happy new year! In this release, we added new components: airframe-rx and airframe-rx-widget for building reactive web user-interface with Scala.js. In addition, AirSpec testing framework supports test("...", design="...") syntax for easily nesting test cases and modifying designs for each test case. airframe-control now has CircuitBreaker to control connections to remote services with fail-fast behavior.

Changes:

  • airframe-rx-widget: Support RxVar subscription (#890) [19b00f4]
  • airframe-rx-widget: Use the latest nodejs and jsdom (#889) [baf4729]
  • airframe-rx-widget: Update scalajs-env-jsdom-nodejs to 1.0.0-RC3 (#888) [3345235]
  • airframe-rx-widget: Scala.js UI widget collection (#883) [00496b0]
  • airspec: Add test(...) syntax (#876) [00d8ba9]
  • airframe-control: Add CircuitBreaker (#763) [e55521b]
  • airframe-http: #864 Support empty strings for /*path endpoint (#879) [552e30f]
  • airframe-http: #865 Support multiple static content paths (#877) [9a1f50f]
  • airframe-http: Fix static content directory path (#882) [5412a31]
  • airframe-http: #863 Find inherited endpoints (#878) [db7f792]

Intennal changes:

19.12.4​

  • Publish Scala.js binaries for Scala 2.13 (#870) [23b94cd]
  • airframe-jdbc: Add transaction call support (#861) [c48154f]
  • airframe-jdbc: Support standalone usage of JDBC connection pools without DI (#858) [405e3e0]
  • airframe-sql: SQL typer (#494) [ede9f23]
  • internal: Update slf4j-jdk14 to 1.7.30 (#859) [5af0887]

19.12.3​

  • Upgrade Scala.js to 1.0.0-RC2 (#821) [6b458dc]
  • Updated the documentation site using Docusaurus (#851) [59d090f]
  • airframe-http: Update finagle-core, finagle-http, ... to 19.12.0 (#855) [3bcff69]
  • airframe-jdbc: Update postgresql to 42.2.9 (#848) [d3d79fe]
  • Note: version 19.12.1, 19.12.2 was discarded due to release failure.

19.12.0​

  • airframe-di: Support in-class bind[X] for classes with DISupport trait (#816) [c3ce56b]
  • airframe-http: Add CORS filter and filter-instance support (#846) [58245b2]
  • airframe-http: Support leaf filters without @Endpoint mapping (#844) [d342530]
  • airframe-http: Support StaticContent (#843) [d415025]
  • airframe-http: Add thread-local context parameter support (#829) [25e312e]
  • airframe-http-client: Add raw response methods to HttpClient (#831) [6390bb3]
  • airframe-fluentd: Fix warnings in airframe-fluentd (#833) [856a644]
  • airframe-codec: Support Base64 encoded binary (#819) [f60af4e]
  • airframe-codec: Rename MessageHolder -> MessageContext (#817) [33c10c6]
  • airframe-launcher: #523 Add coloring to the help message (#815) [74eb427]

internal changes:

  • airframe-msgpack: Update msgpack-core to 0.8.20 (#830) [2db9289]
  • airframe-http: Move the internal routing code to wvlet.airframe.http.router package (#824) [58cbb90]
  • airframe-http: Simplify HttpFilter hierarchy (#842) [cb4b595]
  • Update sbt-scoverage to 1.6.1 (#814) [39ad0e1]
  • Update scalajs-java-time to 0.2.6 (#825) [6cf66a0]
  • Update scalajs-java-logging to 0.1.6 (#823) [e8eb636]
  • Upgrade Scala.js to 0.6.31 (#820) [4d259c2]
  • Update sbt-sonatype to 3.8.1 (#818) [0c73d84]
  • Update sbt to 1.3.4 (#826) [7610c99]

19.11.2​

  • airframe-codec: #156 Suppress null value output for None: Option[X] (#811) [6e8f70e]
  • internal: Use GitHub Action cache (#808) [574b5a9]

19.11.1​

  • airframe-di: Add in-trait bindLocal (#805) [22ce396]
  • airframe-control: #767 Add bounded backoff retry (#803) [730617a]
  • airframe-http: #796 Support returning Scala Future (#802) [4135a57]
  • airframe-http-finagle: Update finagle-core, finagle-http, ... to 19.11.0 (#800) [681dbcd]

19.11.0​

Major changes:

  • airframe-http-finagle now supports builder patterns Finagle.server.withXXX or Finagle.client.withXXX to fully customize HTTP servers and clients. These methods are preferred over using FinagleServerConfig or FinagleClientConfig directly.
  • Added Scala.js support for airframe-codec. Now you can build http servers (Scala JVM) and client pages (Scala.js) that interact together through airframe-codec.

Change log:

  • airframe-http: Support server customization with FinagleServerConfig (#797) [7f525d0]
  • airframe-http: Use 201 (POST/PUT) and 204 (DELETE) status code for empty responses [b63d4a9]
  • airframe-http: Fix the client builder pattern and use no record expiration time by default (#777) [8e96d95]
  • airframe-http-finagle: Update Finagle to 19.10.0 (#765) [44d5e9d]
  • airframe-config: Airframe DI integration for Config.overrideWithPropertiesFile() (#798) [5d3d7ad]
  • airframe-codec: Scala.js support with Pure Scala packer/unpacker (#789) [e565fea]
  • airframe-codec: Add @required to mark must-have parameters (#779) [b33ce25]
  • airframe-di: Deprecate runtime provider binding definitions (#786) [45aab9b]
  • airframe-di: Support design.runA,B:B (#785) [661cd6b]
  • airframe-jdbc: Do not shutdown ConnectionPoolFactory explicitly (#773) [b87b18d]

internal changes:

19.10.1​

  • airspec: Add inGitHubAction and inCI (#762) [0765f11]
  • airframe-control: Add retryableFailure(e).withExtraWaitMillis/Factor (#761) [40b7a58]
  • airframe-http-finagle: Add Finagle.client builder (#760) [48f44cb]
  • airframe-control: Use this.copy for RetryContext (#759) [4251c84]
  • airframe-http: Support patch, patchOps, deleteOps methods (#755) [7603f16]
  • Internal changes
  • Enhancement of GitHub Actions configuration

19.10.0​

  • This is a maintenance release for migrating to GitHub Atcions. There is no feature change. (#749) [74f84b5]

19.9.9​

  • This version is only for internal changes.
  • From this release, airfarme will use GitHub actions.
  • Update scalafmt-core to 2.1.0 (#747) [c851834]
  • Migrate to GitHub Actions (#744) [f543442]
  • Update sbt-scalafmt to 2.0.6 (#745) [daa7e8f]
  • Update sbt-sonatype to 3.8 (#746) [a6e8db0]

19.9.8​

19.9.7​

  • Add support for Scala.js 1.0.0-M8 (#732) [48a58e5]
  • airspec: Show the deatailed reason of MISSING_DEPENDENCY (#729) [1c24971]
  • airframe-msgpack: Optimize JSON->MsgPack stream conversion (#725) [6a07fb4]
  • internal changes:

19.9.6​

  • airframe-codc: Fix AnyCodec to proceed cursor when Nil is found (#722) [3d82c26]
  • airframe-msgpack: Add MessagePack.fromJSON(JSONSource) (#721) [584ccbf]
  • airframe-config: Use left-aligned config display (#719) [2a20752]
  • internal: Use .cache folder for coursier (#720) [cb4fca7]

19.9.5​

  • airspec: Deprecate configure(design) (#714) [9277263]
  • airspec: Isolate spec loggers (#718) [7ea85f8]
  • airframe-di: Fix duplicated Closeable hook registration (#704) [0ca5da2]
  • airframe-config: Add @secret annotation (#710) [c82008f]
  • airframe-http-recorder: Add PathOnlyMatcher (#711) [e92536c]
  • airframe-http-recorder: Add name config (#709) [26d3cba]
  • airframe-http: Remove redundant Router nesting (#708) [cdc410c]
  • airframe-http-finagle: Update finagle-core, finagle-http, ... to 19.9.0 (#694) [c587c86]- airframe-http-finagle: Add finagleBaseDesign for using FinagleServerFactory (#707) [ea8d56b]
  • airframe-http-finagle: Fix FinagleServer lifecycle (#703) [ce9ef85]
  • airframe-jdbc: Update postgresql to 42.2.8 (#717) [43e63f7]
  • Internal Changes:

19.9.4​

  • airframe-http-finagle: Support streaming JSON/MsgPack responses for Reader[X] (#691) [4ebe0ec]
  • airframe-http-finagle: Support Reader[Buf] stream response (#690) [fb237f7]

19.9.3​

  • Deprecate airframe-tablet (#684) [6d2bb77]
  • airframe-jdbc:
  • airframe-fluentd
    • Update fluency-core, fluency-fluentd, ... to 2.4.0 (#681) [bc1e5bc]
  • airframe-codec
  • airframe-di
  • Update javax.annotation-api to 1.3.2 (#669) [1ca65c4]
  • airframe-config
    • Use airframe-codec instead of airframe-tablet for mapping Yaml to Objects
    • Update snakeyaml to 1.25 (#679) [81ae0a9]
  • internal changes:

19.9.2​

  • airframe-di: Fixes #658. Do not remove shutdown hook thread while it is running (#661) [60f35d3]
  • internal changes for Travis CI builds:
    • Add sonatypeDropAll before the release [5de0594]
    • [doc] Support doc only release [25073d2]
    • Split publish tasks (#659) [1d72f22]

19.9.1​

  • airframe-di:
    • Fix an issue in 19.9.0 which closes Sessions unexpectedly by calling Session.close().
    • Move lifecycle related code to wvlet.airframe.lifecycle (#657) [a51927c]
    • Deprecate LifeCycle trait as it confuses the owner of the resource when traits are mixed into other classes
  • airframe-http-recorder: Reduce unecessary warning messages for in-memory recorders.
  • internal: Revert to the previous release script [3f802b7]

19.9.0​

  • airframe-di: #651 Support design-time lifecycle hooks (#655) [de526a5]
  • airframe-di: Ensure running all shutdown hooks (#653) [56cf14a]
  • airframe-di: Automatically register shutdown hooks for Closeable resources (#645) [937342b]
  • airframe-di: Add interfaces to define LifeCycle hooks (#656) [cf161ec]
  • airframe-http: Fix Option[X] arg binding (#642) [9e9e509]
  • airframe-http-finagle: Upgrade to Finagle 19.8.0 (#652) [e30d400]
  • airframe-msgpack: Add a stream json-msgpack converter (#643) [b20fd4e]
  • internal changes:
    • Release only Scala 2.12 projects for snapshots [b2a8d92]
    • Upgrade to sbt 1.3.0-RC5 (#647) [ff4d209]
    • Add note on airspec and aiframe-log integration [61af200]
    • Use scalafmt 2.0.1 syntax (#654) [46eb9a1]

19.8.10​

  • airspec: synchonize logger cleanup to stabilize tests [121ef76]
  • airframe-http-recorder: Avoid unnecessary db update [6353233]
  • airframe-http-client: use a consistent header customization order #638 (#639) [576b9c9]
  • airframe-http-finagle: Make FinagleServer start/stop idempotent (#637) [bc39b75]
  • airframe-surface: Support inner classes (#635) [112a3f9]
  • airframe-di: Fix #632 to run inherited lifecycle hooks (#633) [c9ccafe]
  • internal changes:

19.8.9​

  • airspec: Support AirSpec.design, localDesign (#631) [dfd7a86]
    • This also fixes an issue in finding test methods defined in sub classes.
  • internal: Run tests in parallel (#629) [779f80d]
  • internal: Upgrade to sbt 1.3.0-RC4 (#628) [5a0807b]

19.8.8​

  • airframe-http-recorder: Fix exclude flag behavior (#627) [c73d8a7]
  • airframe-http-client: Add HOST header if missing (#626) [7d1c91e]
  • airframe-di: Fix design option override (#625) [576fab7]
  • airspec: Support skipping the whole spec (#624) [f7d5f59]
  • airframe-http-finagle: Add sendRaw(request) (#623) [c54da5e]
  • airspec: Add inCicleCI (#622) [972f9bf]

19.8.7​

  • airframe-http-recorder: Store records to .airframe folder (#619) [e22b5ed]
  • airframe-http-recorder: Support custom http request matchers (#618) [37aea23]
  • Upgrade to sbt-dyvner 4.0.0 (#617) [02fee65]
  • Upgrade scalafmt to 2.0.1 (#616) [4112e95]
  • airspec: Add airspec-light project settings (#615) [34e56f6]

19.8.6​

  • airspec
    • Fix shouldNotBe null error message [c869db1]
    • #612: Fixes java.lang.ClassNotFoundException: scala.reflect.api.Trees (#613) [06b70d8]
    • #610: Avoid registering JVM shutdown hooks in airspec sessions (#611) [44b84d3]
  • internal: Upgrade to sbt 1.3.0-RC3 with turbo mode (#614) [59d9d48]

19.8.5​

  • airspec: Fix log message duplication issue (#609) [4536123]
  • airspec: Support shouldBe null (#607) [78c87dd]
  • airframe-log: Handle InstanceAlreadyExistsException at logger JMX mbeam registration (#608) [bd13110]

19.8.4​

  • AirSpec is renamed to a simple package wvlet.airspec.
    • airspec: Rename to wvlet.airspec (#605) [6d6ff91]
    • airspec: Add optional PropertyBased testing [9fbe8ca]
    • airspec: #597: Add AirSpecContext to run nested tests (#602) [a41211a]
    • Make airspec an all-in-jar (#601) [18d3970]
    • airspec: Add assertEquals(a, b, delta) [2ca677a]
    • airspec: Add inTravisCI checker [9302a70]
    • airspec: Return Nothing for asserts throwing exceptions [7fb68e2]
    • Migrated all airframe module tests from ScalaTest to AirSpec
  • airframe-surface: disable createObjectFactry for abstract classes in Scala.js [45b22ac]

19.8.3​

  • AirSpec:
    • airspec is now a standalone project without any cyclic dependencies to airframe module (#592) [d0db028]
    • Support shouldBe matchers (#590) [0caf159]
    • Always use ANSI color logs for Travis CI (#596) [1c791fd]
  • internal chaange: airframe-control: Use AirSpec for test cases (#594) [d08c603]
  • Upgrade to Scala.js 0.6.28 (#593) [00e88ab]

19.8.2​

  • airspec: Use airframe-log for AirSpec logging for improving the log messages (#584) [857ae2c]
  • internal: Migrate test cases of airframe-log/surface to airspec

19.8.1​

  • AirSpec: Added a new function-based testing library for Scala and Scala.js #580
  • airframe-scalatest: Rename airframe-spec to airframe-scalatest [51f8922]
  • airframe-surfaace: Support symbolic method names in Scala.js [57d67fe]
  • airframe-surface: Sort methodSurface based on the source code order [bdf1a86]
  • Handle ClassNotFound issue of sbt-1.3.x by cleaning-up all custom LogHandlers [e70ab0d]

19.8.0​

  • airframe-http-recorder: Support binary requests and responses (#579) [a0c5894]
  • airframe-http-recorder: Support custom recording (#578) [d9b8ed2]
  • airframe-json: Throw IntegerOverflow exceptions for too big numbers (#575) [0e541ee]
  • airframe-benchmark: Aggregate benchmark programs (msgpack-benchmark, json-benchmark) into one project (#573) [67656ba]
  • #475: Use Scala 2.13 compatible collection syntaxes (#572) [6f20a16]
  • airframe-json: Use exhaustive match for JSONValue.value (#571) [f138d74]
  • airframe-http: Support Router.add[Filter], andThen[Filter] (#570) [8335c39]
  • airframe-http: Wrap exceptions with Future for each filter and context (#569) [1324385]

19.7.6​

  • airframe-http-recorder: #559 Support expiration (#567) [32a0224]
  • airframe-http: Allow setting FinagleServer name (#566) [3f810f1]
  • airframe-http: Return the last failed response with HttpClientException (#565) [2099555]
  • airframe-http-recorder: Exclude unnecessary request headers from records (#563) [2246316]
  • airframe-http-recorder: Exclude Date header from request hash (#562) [8b75221]
  • airframe-http-recorder: Use case-insensitive request hashing (#561) [20467a6]
  • airframe-http-recorder: Add createRecorderProxy (#557) [bbba4db]
  • Rename airframe-macros to airframe-di-macros (#560) [9a6e871]

19.7.5​

  • airframe-http: Support reading raw response as is (#553) [1ccedae]
  • airframe-http-client: Add getResource for GET with query strings (#552) [fd5849c]
  • airframe-http-client: Support customizing http requests #550 (#551) [1542beb]
  • airframe-http: Add HttpFilter support to Router (#540) [1cb7096]

19.7.4​

  • airframe-log: GraalVM support (#549) [df8b408]
  • airframe-http: Fix over routing in airframe-http (#547) [4eb6245]
  • airframe-config: Allow reading config files from classpath, and add more examples (#544) [697b04e]
  • airframe-json: Reuse StringBuilder #381 (#546) [04bd01f]

19.7.3​

  • airframe-metrics: Add TimeWindow.howMany(unit), minutesDiff, etc. (#545) [77f7be9]

19.7.2​

19.7.1​

  • airframe-http: Fix routing when common token is present in the path (#535) [abdea65]
  • Add example of programmable http-recorder (#532) [cbab375]
  • fix type annotation syntax (#534) [1b3daa1]
  • remove unused string interpolations (#533) [a2267ac]
  • airframe-http-finagle: Upgrade to Finagle 19.6.0 to support chunked reader [61a0316]
  • airframe-http-client: Add requestFilter [c32ba1e]
  • airframe-di: Show binding line numbers (#530) [a136907]

19.7.0​

  • airframe-http-recorder: Programmable HTTP mock server (#529) [f33cdba]
  • HTTP support in http-recorder (#527) [4365522]
  • airframe-control: Add Retry.retryable/nonRetryableFailure method (#524) [4a7744b]
  • airframe-codec: Add convenient methods to convert JSON <-> Scala object (#519) [0c6bd55]
  • airframe-codec: #513: Handle empty inputs at unpackJson and unpackMsgPack (#514) [99d9cc6]
  • internal: Upgrade to sbt-1.3.0-RC2 (#510) [3583430]

19.6.1​

19.6.0​

19.5.2​

19.5.1​

  • Support Scala 2.13.0-RC2 (#500) [7c3b329]
  • Recover Scala 2.11 build as Spark 2.4.x still uses this Scala version for a while. (#498) [30561c7]

19.5.0​

  • The first release of the new Reiwa era!
  • From this version, we will no longer support Scala 2.11. This is because Spark 2.4.2 now uses Scala 2.12 by default, and Spark has been the only reason for us to keep maintaining Airframe releases for Scala 2.11. (#496) [4e37be8]
  • Add more Airframe DI code examples (#495) [8d3b311]

19.4.2​

  • airframe-http: Add HttpClient (#482) [4bb9463]
  • airframe-control: Simplified Retry interface so that it can be used as an independent module.

19.4.1​

  • Add Scala 2.13.0-RC1 support. (#487) [3eb68a8]
  • airframe: Support DI tracing and coverage stats (#486) [143c629]
  • airframe-control: Add trace logs and JMX monitoring to Parallel (#481) [29141a5]
  • airframe-codec: Support JSONValue, Json (raw json string) (#484) [70022a4]
  • Add airframe code [examples (#485) [2e585b9]
  • internal: Replace fluentd-standalone to MockFluentd (#488) [fd7d075]

19.4.0​

19.3.7​

  • airframe-jmx: Add the default JMXAgent(#465) [f9937e5]
  • airframe-jmx: Fix the registration of Scala-specific class names (#461) [f853bf0]
  • airframe-http: Remove the unnecessary finatra dependency (#464) [681b006]

19.3.6​

  • airframe-json: Add JSON.parseAny(json) (#458) [bce0589]
  • airframe-http: Support Router.add[X].add[Y]... syntax (#456) [0ec6430]

19.3.5​

  • airframe-http: Accept: application/x-msgpack response support (#448) [ccb55b7]
  • airframe-http: Support non-JSON content body (#446) [f351916]
  • airframe-http: Show the cause of an exception upon an internal server error (#447) [52a6b02]
  • airframe-http-finagle: Upgrade to Finagle 19.2.0 (#442) [f6d3941]
  • airframe-codec: Support MsgPack type (= Array[Byte]) codec (#441) [5923aac]
  • airframe-codec: #437 Case-insensitive enum mapping (#439) [5b26e5a]
  • airframe-jdbc: Upgrade sqlite-jdbc to 3.27.2 for upsert support (#445) [b7f3a57]
  • airframe-surface: Add Zero.register(surface, A) (#440) [f16002f]
  • airframe-launcher: Fixes #435. Hide the default command from the help message (#438) [bcdd154]
  • airframe-msgpack: Add a msgpack benchmark using JMH (#437) [e5f8526]

19.3.4​

  • airframe-http-finagle: Fixes #432: Router should be given from FinagleServerConfig (#433) [a6a0687]
  • airframe-sql: Embed table names into query signatures (#431) [37e8f7a]
  • airframe-control: Implicit classes for parallel map syntax sugar (#429) [09dd9d8]

19.3.3​

  • airframe-http-finagle: Support adding tracing to FinagleServer (#430) [1ab7281]
    • Since this version Router needs to be included in FinagleServerConfig(port, router) instead of using bind[Router]
  • airframe-fluentd: Upgrade to Fluency 2.1.0 and disable SSL by default (#428) [bb3498e]
  • airframe-sql: A new module for SQL parsier and logical query plan models

19.3.2​

  • airframe: Fix compilation error of bind[X].toInstance when using scope-local objects (#423) [4840a93]
  • airframe-json: Fix StackOverflowError when parsing large arrays of JSONObjects (#421) [1ef5a02]

19.3.1​

  • airframe-http: Allow more flexible http path routing (#418) [76b7995]
  • Add airframe overview illustration [3cbdb45]
  • Add README for modules (#416) [93e1b89]
  • Move launcher annotations to Java src folder to reduce compiler warnings [ce58f6e]

19.3.0​

  • #413: Add a workaround for bind[X].toInstance(...) compilation error [9d0da31]
  • Fixes #373 Resolve build[X] compilation error in Scala 2.12 [31c929c]
  • Support reading String as JSON array or map (#411) [b5e4956]
  • Add ResultSetCodec.toJsonSeq (#409) [61c9627]
  • airframe-control: Add a simple library Parallel for parallel execution (#406) [e04166e]

19.2.1​

  • airframe-fluentd: Fluency 2.0 based Fluentd interface (#404) [bd9d75e]
  • airframe-codec: Add MessageCodec.toJson (#405) [8fbdcab]

19.2.0​

  • From this version, we will use YY.MM.(patch) version numbers.
  • Add codecs for airframe-metrics (#403) [112d2f6]
  • Add MessageCodec.unpackJson (#402) [cc0f9b3]
  • Add Design.empty (#398) [bbeaa06]
  • Use @command(isDefault=true) instead of @defaultCommand (#397) [55439e5]
  • Add translucent background logo [e2b0ac2]
  • Add codecs for converting JDBC ResultSets to msgpack (#391) [9d0f29b]
  • Add ServerAddress for passing host and port data (#390) [3b7e083]
  • Upgrade to scala.js 0.26 (#388) [a415c71]
  • Add airframe-http-recorder (#380) [d34702f]
  • Upgrade Finagle to 19.1.0 (#379) [a211073]
  • Add airframe-canvas, an off-heap memory buffer library (#367) [e55a3f4]

0.80​

  • Add ArrayJSONCodec to parse JSON array string (#375) [8c624a7]
  • Get ConfigHolders directly from Design (#374) [da4d3ba]
  • Not ignore resource closing exception in withResource (#371) [129868a]
  • airframe-stream is moved to wvlet/msgframe (#365) [d150ae8]
  • Fixes #362: Set Option[Boolean] with --(option) in airframe-launcher (#364) [f383c5e]
  • Change airframe-control to a Scala JVM project (#363) [5d6632d]
  • Set the code coverage test threshold to 80% overall, 5% diff (#361) [0519d4b]

0.79​

  • Enhance loan pattern for AutoCloseable (#359) [f971934]
  • Add name conversion functionallity to CName (#360) [366caca]
  • Allows using bindFactory outside of wvlet.airframe package (#358) [d8836e4]
  • Upgrade to Scala 2.11.12 (#356) [bc6b172]

0.78​

0.77​

  • airframe-launcher: Fix array argument mapping (#342) [00145b6]
  • Upgrade to Scala 2.12.8 (#341) [b5b6f9e]
  • internal: Enhance SQL parser

0.76​

[airframe DI]

  • Support creating child sessions with session.withChildSession. #321
  • Improve Design.+ performance by checking Design duplicates right before building a new Session (#334) [3e13659]
  • Add session id to logs [0cbd9cc]
  • Improved the debug log message by showing session hierarchy and injection behavior [05c014d]
  • [internal] Do not register shutdown hooks for child sessions to avoid closing loggers [a6460cd]

[airframe-launcher]

  • [bug] Fix in getting the default values of method arguments. (#339) [438f2cc]

[airframe-log]

  • Show logs during shutdown hooks by using a custom LogManager so as not to close logger during shutdown hooks [4dffce2]
  • Show millisec in log timestamps (#335) [7b6ec05]

[misc.]

0.75​

  • airframe-di: Fix a bug the default values in a constructor are registered as singletons [40d97ca]
  • airframe-control: Allow passing retry context (#327) [afb34b9]
  • [internal] Upgrade to sbt 1.2.7 (#325) [b6ebaf1]

0.74​

  • Airframe now has its brand logo!

logo

  • airframe-launcher: Fix sub method command help message [3b22d74]
  • Deprecate in-trait bindInstance[X] (#317) [1f15aef]
  • Deprecate in-trait bindSingleton[X] now that bind[X] binds singletons by default (#300) [fe75bb0]
  • airframe-http: Register a trait factory when Route.of[A] is called (#307) [2cf505b]
  • airframe-surface: Rename surface.of[X] -> Surface.of[X] (#306) [cea2cbb]
  • airframe-codec is now a pure-Scala SPI (#302) [7677d26]
  • airframe-codec: Scala.js support (#303) [ff7bd97]
  • Internal changes:
    • airframe-macros is now a pure Scala project (#319) [43ec5d5]
    • Add an aggregated project for Scala community-build (#316) [fa78beb]
    • Upgrade to sbt-microsites 0.7.26 [40f0b7f]
    • Fix twitter icon card [0217f54]
    • Update logos [e295e8e]
    • Add a workaround: Surface.of[A] throws InternalError on REPL (#308) [1be3796]

0.73​

  • airfarme-opts is redesigned as airframe-launcher Option parser v2 (#295) [a270128]
  • Support netsted offset in time window (#296) [0c6e218]
  • Add untruncate notation ) to offset of time window [3d479be]
  • Add wvlet.airframe.log.init for using default log configurations (#291) [a08d15d]
  • Use fluentd-standalone 1.2.6.1, which supports Scala 2.13.0-M5 (#289) [ed7012b]

0.72​

  • Support Scala 2.13.0-M5 (#232) [c31a4da]
    • Notice: Due to a bug of Scala 2.13.0-M5, serialization of Design objects may not work when using sbt with Scala 2.13.0-M5. Using fork in Test := true is a workaround.

0.71​

0.70​

  • airframe-control: Add a shell command launcher (#287) [1339caf]
  • Upgrade to sbt 1.2.6 (#285) [614dba6]
  • Fix typos in docs

0.69​

0.68​

  • Support JDK11 (#265) [7e8799d]
  • Use openjdk because we will mostly use this free JDK versions (#266) [fd7f641]
  • Upgrade to Scala 2.12.7 for Travis builds [ce10f55]
  • Remove snapshot repo resolver to speedup dependency download (#267) [247fa28]

0.67​

0.66​

0.65​

0.64​

  • Support higher kinded types more naturally (#244) [e21baef]

0.63​

  • Support higher-kinded type bindings. (#242) [cfe35ed]
  • Upgrade to scala.js 0.6.25 (#243) [fc91387]
  • Change withoutLifeCycleLogging -> noLifeCycleLogging [501b88b]

0.62​

  • Add unpackBytes for compatibility (#240) [ecd8367]
  • Truncate to duration unit when the exact date is given to the offset (#239) [68d497e]

0.61​

  • Support bind[Design] to reference the original design (#237) [7d362c9]

0.60​

  • Added Design.withoutLifeCycleLogging, Design.withProductionMode, Design.withLazyMode
  • Support Future[X] return type in http-finagle (#230) [3642cc6]
  • Upgrade to scalafmt 1.5.1 (#231) [da84852]

0.59​

  • Do not escape forward slashes in JSONStrings (#229) [66f77f6]
  • Fix a bug when reading None in OptionCodec (#228) [cda0d36]

0.58​

  • use canonical names for arguments of method surface on MethodCallBuilder (#227) [33cad91]

0.57​

  • Move wvlet.config to wvlet.airframe.config (#226) [e103a89]
  • Allow setting object codec factory for generating natural JSON responses (#224) [0b42960]
  • Use private[this] to optimize json parsing (#225) [8432af8]

0.56​

0.55​

  • airframe-http: Add rest mapping (#207) [43bcb0a]
    • Support HTTPRequest binding, request body to custom class binding
  • airframe-json performance optimization (#214) [7b83bea]
  • Drop jdk9 build for time saving [dc96c00]

0.54​

  • Add airframe-json. A fast JSON parser for Scala and Scala.js. This also supports JSON pull parsing.
  • Add release automation script (eeb4d2b)

0.53​

0.52​

  • Support Scala 2.13.0-M4

0.51​

  • airframe-log: Add Logger.clearAllHandlers (#195)

0.50​

0.49​

  • Important: bind[X], bind[X].to[Y], etc. now use singleton bindings by default. This is because most of the use cases expect binding the same objects to traits. If you need to explicitly instantiate objects for each binding, use bindInstance[X] or bind[X].toInstanceOf[Y].
  • Add a handy method to start a session and build an object: Design.build[A]{ a => ... }.
  • Support eager singleton initialization with Design.buildProduction[A] and Design.withProductionSession.
  • (internal) Upgrade to sbt 1.1.6, Scala.js 0.6.23, scalajs-java-logging 0.1.4

0.48​

  • Java 9/10 support
  • airframe-msgpack. Fixes a bug in encoding Timestamp (Instant) values
  • airframe DI: Enhanced warning/error messages upon missing dependencies.

0.47​

  • airframe-msgpack: Add a pure Scala MessagePack implementation

0.46​

  • Add airframe-bootstrap to define application modules that can be configured with airframe-config and DI
  • Upgrade to Scala 2.12.6

0.45​

  • airframe-codec: Support List[X] coding
  • airframe-surface: Support Parameter.getDefaultValue and Parameter.get(obj) in Scala.js

0.44​

  • airframe-metrics: Require minus sign to represent last time ranges (e.g., -7d, -1h, etc.)
  • airframe: Enable bind[Session] binding to retrieve the current session

0.43​

  • airframe-log: Set a default log handler (JSConsoleLogHandler) for Scala.js for convenience

0.42​

  • airframe-log: Add an option to totally disable logging code generation.

0.41​

  • Fix a singleton binding bug: If bind[A].toSingletonOf[B] is used and A is non-abstract trait, A was used instead of B.

0.40​

  • airframe-launcher: Fixes #147 when reading the default values of nested options

0.39​

  • Add a unified scaladoc for all modules

0.38​

  • airframe-tablet: Using json4s-native instead of play-json for Scala 2.13.0-M3 support

0.37​

  • airframe-tablet: Add play-json based JSONCodec to enable transformation between JSON <-> MessagePack <-> Object.
  • Temporarily remove Scala 2.13.0-M2 build. Now preparing 2.13.0-M3 build in #143

0.36​

  • Fixes Logger.scanLoglevels to use given log level files appropriately #141

0.35​

  • Minor fixes to project structures and build scripts.

0.34​

0.33​

  • Add airframe-jdbc, a reusable JDBC connection pool implementation.

0.32​

  • Fix ObjectCodec for map type value #131

0.31​

  • Support recursive types

0.30​

  • airframe-metrics: Add support for Scala.js (DataSize, ElapsedTime)
  • Add ElapsedTime for succinct duration representation

0.29​

  • Add airframe-codec, a MessgePack-based schema-on-read data transcoder.

0.28​

  • Add support for Scala 2.13.0-M2

0.27​

  • aiframe-config: Fixes nested case class binding #108
  • Dropped support of Scala.js + Scala 2.11 combination. Scala.js libraries will support only Scala 2.12 (or higher) in upcoming releases

0.26​

0.25​

  • airframe-log Upgrade the internal log rotation library to logback-core 1.2.3
  • Upgrade to Scala 2.12.4 and sbt 1.0.3.

0.24​

0.23​

  • Moved to org.wvlet.airframe organization because Airframe will have more modules in future.
  • Added airframe-spec (a common library for testing airframe modules)

0.22​

  • Add Logger.clearAllHandlers to clean-up existing log handlers set by third-party libraries
  • Apply scalafmt code style

0.21​

0.20​

0.19​

0.18​

  • Add beforeShutdown, onInject lifecycle hooks
  • Support @PostConstruct and @PreDestroy JSR-250 annotations (Scala.js is not supported)
  • Fix to call onInit, onStart only once for singletons

0.17​

  • Upgrade to Scala 2.12.3, Scala.js 0.6.19
  • Add Design.add
  • Fix a bug, onStart lifecycle hook is not called when a session is already started
  • Fix to use default constructor argument values for constructor bindings
    • Note: Scala.js does not support default parameter binding yet

0.16​

  • Support reading Map type values in YamlReader (airframe config)

0.15​

  • Surface will be generated by using runtime-type information. This improves the compilation speed in Scala JVM projects.
    • Scala.js version still uses compile-time surface generation
  • Interface change: Surface.of[X] to surface.of[X].
    • This is for providing different implementations of Surface for ScalaJVM and Scala.js.
  • Fixed an issue when tagged type is used inside constructor parameters.
  • Fixed an issue that lifecycle hooks are wrongly called when debug level logging is used.
  • Merged wvlet-config as airframe-config. This module is useful for creating configuration objects from YAML file.

0.14​

  • Surface is now a part of Airframe
  • Added RuntimeSurface for the convenience of creating Surface from runtime-type information (reflect.universe.Type)
  • Added ObjectBuilder to build objects from Surface information

0.13​

  • Add tagged binding support

0.12​

  • Airframe is now refrection-free.
    • Using a reflection free Surface instead of ObjectSchema
    • Cyclic dependencies now can be found at compile-time thanks to Surface
  • Initial Scala.js support
  • Split Travis build process for the matrix of Scala 2.12/2.11, ScalaJVM/JS
  • Add shortcut for life cycle events: bind[X].onInit/onStart/onShutdown
  • Deprecated tagged type binding. Instead you can use type alias bind[(type alias)].
  • Deprecated @PreDestroy, @PostConstruct lifecycle binding because it complicates the order of life cycle hooks when mixed in
  • Deprecated passing Session as a class parameter or method return value.
  • Simplified Scala macro codes

0.10​

  • Session now implements AutoClosable
  • Add Design.withSession{ session => ... } to close Session at ease

0.9​

  • Add Scala 2.12 support

0.8​

  • Split the project into two sub projects: airframe and airframe-macro. However, you only need airframe.jar for using Airframe.
  • Improved the performance by replacing run-time code generation to compile-time code generation #25
  • Upgrade to wvlet-log 1.0
  • Upgrade wvlet-obj 0.26 (support type aliases)
  • Allow binding to type aliases

0.7​

  • Fix lifecycle management of objects generated by bindSingleton

0.6​

  • Add bindSingleton[X]

0.5​

  • Fix a bug in FILO order init/shutdown when objects are singleton
  • Add toProvider/toSingletonProvider/toEagerSingletonProvider
  • Add Design.remove[X]

0.4​

  • Improved binding performance
  • Fix FIFO lifecycle hook executor
  • Improved injection logging

0.3​

  • Support bind(ObjectType).toXXX

0.2​

  • Add lifecycle manager
  • Reorganize Session, Design classes
  • Test coverage improvement
  • Deprecated Design.build[X]. Use Design.newSession.build[X]

0.1​

  • Migrated from wvlet-inject