v6.0.0
What's Changed
6.0.0 is a major release that focuses on API ergonomics, multiplatform parity (JVM/JS/Wasm), and first‑class integrations. It introduces async builders, streaming monitors, a Spring Boot starter, richer primitives (time, future, validation), and a consolidated testing/mocking module. There are several breaking changes; see Migration below.
Highlights
- New
commons-spring-boot-startermodule: Spring conversions, R2DBC custom conversions, and SpringDoc/OpenAPI integration. Ideal for building Atto services with Spring Boot. - New streaming monitors in
commons-node: account, account‑entry, and transaction monitors with acknowledgeable progress. - Async client/worker APIs: builders for gradual setup and platform‑specific implementations (JVM/JS/Web/Wasm).
- Multiplatform improvements: JS/Wasm parity for key primitives, hashing, and crypto utilities.
- New examples: minimal Java client and JS client to get started fast.
- Mocks for development:
commons-testcan download and run an Atto node using Docker or Podman transparently — ideal for local development and quick integration tests.
Breaking changes
- Node client refactor
- The node client interface now lives in
commons-node(AttoNodeClient : AttoNodeOperations). - The HTTP implementation moved to
commons-node-remoteand is obtained viaAttoNodeClient.remote(baseUrl, headerProvider)or viaAttoNodeClientAsyncBuilder(url). - Older direct platform‑specific
AttoNodeOperationsimplementations were removed. Use the remote client or your own implementation ofAttoNodeOperations.
- The node client interface now lives in
- Testing modules consolidated
commons-node-testandcommons-worker-testwere removed.- New
commons-testmodule provides cross‑platform mocks:AttoNodeMock,AttoNodeMockAsync,AttoWorkerMock, and builders, with JS and Wasm bindings.
- Serialization cleanup
- Legacy serializers under
cash.atto.commons.serialiazer.*were removed. - Models now carry their own kotlinx.serialization where applicable (for example time via
AttoInstantAsStringSerializer). If you depended on those serializer classes directly, update usages to the new built‑in serializers or your own.
- Legacy serializers under
- Worker API adjustments
- JVM‑specific classes like
AttoWorkerJavawere removed; use the commonAttoWorkerand the remote/async builders. - Some Jvm/JS‑only files were removed or moved to common. Prefer
AttoWorkerAsyncBuilderfor configuration, caching, and retries.
- JVM‑specific classes like
New features
- Core primitives
AttoInstant: platform abstraction over time with (de)serialization helpers.AttoFuture: lightweight future/promise abstraction with platform implementations (JVM/JS/Wasm).AttoValidation: helpers to validate domain objects.AttoJobandAttoWorkTargettypes for worker operations.AttoKeyIndex: strongly‑typed key index for seed derivation; overloads forUIntandIntremain.
- Node monitoring
AttoAccountMonitor,AttoAccountEntryMonitor,AttoTransactionMonitorand their async counterparts plus builders (*AsyncBuilder) with JVM and Web implementations.- Height search utilities:
AccountHeightSearch,HeightSearchand convenientfromArrayconstructor.
- Remote clients and builders
AttoNodeClient.remote(baseUrl, headerProvider)convenience factory; time sync vianow()returns server‑adjustedAttoInstant.AttoNodeClientAsyncBuilderto configure headers incrementally on JVM/JS/Web.AttoSigner.remote(url, retryEvery, headerProvider)incommons-signer-remote.AttoWorker.remote(url, headerProvider), plusAttoWorkerAsync,AttoWorkerAsyncBuilder,AttoWorkerRetry, andAttoWorkerCacheincommons-worker(-remote).
- Wallet
AttoWalletAsyncandAttoWalletAsyncBuilderfor non‑blocking flows and integration with monitors.- Auto‑receiver helper to receive/open based on receivable stream.
- JS/Wasm
- Expanded JS and Wasm implementations for hashing and crypto; JS exports and TypeScript declarations updated.
- Examples
examples/java-clientandexamples/js-clientadded.
Improvements and fixes
- Unified timeouts and content negotiation on remote clients; improved error handling for 404s and streaming flows.
- Better docs and READMEs across modules with end‑to‑end examples.
- Build config updates and multiplatform refinements.
Migration
- Node client
- Replace any direct
AttoNodeOperationsplatform impl usage withAttoNodeClient.remote("<baseUrl>")or provide your ownAttoNodeOperations. - For incremental setup or when targeting the browser, use
AttoNodeClientAsyncBuilder.remote(url)then.header(name, value)and.build().
- Replace any direct
- Tests and mocks
- Replace
commons-node-test/commons-worker-testimports withcommons-testequivalents:cash.atto.commons.node.AttoNodeMock,AttoNodeMockAsync,AttoWorkerMock, etc. (available for JVM/JS/Wasm).
- Replace
- Serialization
- Remove usages of
cash.atto.commons.serialiazer.*classes. Use the serializers embedded in models (e.g.,AttoInstantAsStringSerializer) or define custom ones.
- Remove usages of
- Worker
- Migrate from JVM‑specific worker classes to
AttoWorkerwithremote(...),retry(...), andcached()helpers viaAttoWorkerAsyncBuilder.
- Migrate from JVM‑specific worker classes to
Bumps
- Bump kotlin to 2.2.20 by @rotilho in #140
- Bump actions/upload-artifact from 4 to 5 by @dependabot[bot] in #145
- Bump actions/setup-node from 5 to 6 by @dependabot[bot] in #144
- Bump github/codeql-action from 3 to 4 by @dependabot[bot] in #143
- Bump io.mockk:mockk from 1.14.5 to 1.14.6 by @dependabot[bot] in #142
- Bump gradle/actions from 4 to 5 by @dependabot[bot] in #141
- Bump org.bouncycastle:bcprov-jdk18on from 1.80 to 1.82 by @dependabot[bot] in #136
- Bump org.gradle.toolchains.foojay-resolver-convention from 0.10.0 to 1.0.0 by @dependabot[bot] in #115
- Bump ktorVersion from 3.2.0 to 3.2.2 by @dependabot[bot] in #130
- Bump org.testcontainers:mysql from 1.20.4 to 1.21.3 by @dependabot[bot] in #146
- Bump io.github.oshai:kotlin-logging from 7.0.7 to 7.0.13 by @dependabot[bot] in #147
- Bump org.jetbrains.kotlinx:kotlinx-serialization-core from 1.8.1 to 1.9.0 by @dependabot[bot] in #148
- Bump kotlinVersion from 2.2.20 to 2.2.21 by @dependabot[bot] in #149
- Bump org.jetbrains.kotlinx:kotlinx-browser from 0.3 to 0.5.0 by @dependabot[bot] in #150
- Bump org.springframework.boot:spring-boot-dependencies from 3.5.6 to 3.5.7 by @dependabot[bot] in #155
- Bump com.mysql:mysql-connector-j from 8.4.0 to 9.5.0 by @dependabot[bot] in #154
- Bump io.swagger.core.v3:swagger-annotations-jakarta from 2.2.37 to 2.2.40 by @dependabot[bot] in #153
- Bump org.jetbrains.dokka from 2.0.0 to 2.1.0 by @dependabot[bot] in #152
- Bump org.springdoc:springdoc-openapi-starter-webflux-ui from 2.8.13 to 2.8.14 by @dependabot[bot] in #156
- Bump ktorVersion from 3.3.1 to 3.3.2 by @dependabot[bot] in #157
Full Changelog: v5.4.0...v6.0.0