Target Milestone
This is Amaru second public beta release which comes with most features that can be expected of a full relay node with two main caveats:
-
One of the recent ledger rules introduced in Van Rossem regarding VRF key uniqueness is not yet enforced; we are investigating discrepancies with the Haskell implementation and need further refinements.
-
Network connections aren't full-duplex yet. Amaru can initiate outbound connections and receive inbound connections, but through two separate TCP bearers. However, connections are multiplexed, allowing to run multiple protocols from the same TCP bearer. Said differently, different roles (initiator / responder) require different TCP connections.
Minimum Hardware Requirements
| Arch | x86_64 / aarch64 |
| CPU | 2+ cores, >=2GHz |
| RAM | 2GiB |
| Storage | 20-300GiB1 |
| Storage type | NVMe/SATA SSD, eMMC, or UFS |
[1]
Amaru does not (yet) download the entire chain history on bootstrap. This can be done separately via the amaru mithril sync command. Therefore, storage requirements may vary depending on the amount of history being synced.
Changelog
Added
- amaru-kernel:
PeerCandidateisSocket(already aPeer),Host(hostname+port, A/AAAA) orSrv(DNS name).Host/Srvnames are a validated [DnsName] (no colons, brackets, or IP literals). Outbound mix pools arePeerCandidates (static included); Host/SRV names are resolved on each dial so DNS changes are picked up. Host lookup takes the first viable A/AAAA; SRV lookup tries_cardano._tcp.<name>in RFC 2782 priority order and stops at the first viable target address. Ledger relays pass through as candidates (socket, hostname+port, or CIP-0155 SRV when the port is omitted). - amaru-pure-stage:
Effects::detachruns an external effect without occupying the airlock. The transition is resumed with()immediately; whenrun()completes the interpreter applies the provided constructor and enqueues the value on the calling stage’s bulk mailbox. - amaru-tui: the Peers card shows the bootstrap
PeerCandidatenext to a resolved socket address when that name came from a Host or SRV lookup. - amaru: allow operators to select the OTLP providers constructed at startup with
--with-open-telemetry=<SIGNALS>orAMARU_WITH_OPEN_TELEMETRY=<SIGNALS>; it accepts any comma-separated subset of
metrics,traces, andlogs, and defaults to all three signals when enabled without a value.
Changed
- amaru-consensus:
BlockValidatornow runs the ledger on a dedicated thread that owns the ledger state exclusively; operations are requested through a bounded channel and answered via per-request reply channels, replacing the shared lock around the state.BlockValidatoris no longer generic over the store types. ([#1094][]) - amaru-protocols:
NetworkOps::connecttakes aPeer. Outbound dialling no longer resolves names; that stays in peer selection. - amaru-node: add world test simulation, both with generated fake chain and with a real chain fragment from preprod.
- amaru-node:
Telemetry::installno longer readsAMARU_OPEN_TELEMETRY_SIGNALS; embedders that select OTLP signals must passTelemetryOptionstoinstall_with_options.
Fixed
- amaru-node: the stake-distribution callback no longer holds a strong
Resourceshandle, so dropping a node graph closes its dummy RocksDB ledgers instead of leaking file descriptors across simulation runs. - amaru: replace repeated low-level OpenTelemetry export errors with batched state-transition messages: one warning listing unavailable signals, one info listing recovered signals, and a fresh warning after a later failure.
- amaru-bootstrap: emit phase lifecycle events and periodic progress heartbeats when bootstrap runs without a terminal, so redirected and service logs no longer appear stuck during long imports.
- amaru-node: attempt to flush and shut down every configured OpenTelemetry provider even when an earlier provider reports an error.
Tip
Want a complete inventory of the changes? Read the full CHANGELOG.md.
Want even more details? See the commit history since the last release.
Documentation
| What | What for |
|---|---|
| Getting Started | First steps with Amaru |
| Bootstrapping | Creating snapshots and/or restoring from available snapshots |
| Monitoring | Filtering traces, understanding metrics and observability in general |
| Using Docker | Using Amaru with Docker or spinning up local testnets |
| Submit API | Submitting transaction to Amaru local mempool |
| crates.io / lib (coming soon) | Developers using Amaru as a library |
Linux
| Type | File Extension | Download Links |
|---|---|---|
| Pre-compiled executable | .tar.gz |
aarch64 | x86_64 |
| Debian package | .deb |
aarch64 | x86_64 |
| RPM package | .rpm |
aarch64 | x86_64 |
macOS
| Type | File Extension | Download Links |
|---|---|---|
| Pre-compiled executable | .tar.gz |
aarch64 |
Windows
| Type | File Extension | Download Links |
|---|---|---|
| Pre-compiled executable | .zip |
x86_64 |
| MSI installer | .msi |
x86_64 |
Docker
| Image | Registry |
|---|---|
ghcr.io/pragma-org/amaru:v10.11.20260903 |
https://github.com/pragma-org/amaru/pkgs/container/amaru |