Skip to content

Releases: WithAutonomi/ant-client

ant 0.3.7-rc.2

ant 0.3.7-rc.2 Pre-release
Pre-release

Choose a tag to compare

This is a pre-release. The quick-start installers below are not used for it —
they always install the latest stable ant. Install this build from the assets below.

-beta.N builds are the beta channel of the ant client. Once a beta build is on your
PATH, ant update keeps you on beta: a beta build tracks the beta channel by default,
accepting later -beta.N and stable releases but never a release candidate. To leave the
beta channel, install a stable build manually.

-rc.N builds are cut before the release gates have given a verdict and are not installed
by ant update on any channel.

Installation

Manual download

Download the archive for your platform from the assets below, extract it, and place the ant binary on your PATH. Copy bootstrap_peers.toml to the appropriate config directory:

Platform Config path
Linux ~/.config/ant/bootstrap_peers.toml
macOS ~/Library/Application Support/ant/bootstrap_peers.toml
Windows %APPDATA%\ant\bootstrap_peers.toml

Verification

All release archives are signed with ML-DSA-65 (FIPS 204) post-quantum signatures. Download ant-keygen from WithAutonomi/ant-keygen and the public key from resources/release-signing-key.pub, then verify:

ant-keygen verify --key release-signing-key.pub --input <file> --signature <file>.sig --context ant-release-v1

The Windows binary (ant.exe) is additionally signed with a DigiCert EV code-signing certificate. Windows will verify this signature automatically on download and execution.

SHA256 checksums provided in SHA256SUMS.txt.

Detailed Changes

No changelog entry was recorded for 0.3.7. See the commit history for the changes in this release; these notes will be corrected retroactively.

ant 0.3.7-beta.1

ant 0.3.7-beta.1 Pre-release
Pre-release

Choose a tag to compare

This is a pre-release. The quick-start installers below are not used for it —
they always install the latest stable ant. Install this build from the assets below.

-beta.N builds are the beta channel of the ant client. Once a beta build is on your
PATH, ant update keeps you on beta: a beta build tracks the beta channel by default,
accepting later -beta.N and stable releases but never a release candidate. To leave the
beta channel, install a stable build manually.

-rc.N builds are cut before the release gates have given a verdict and are not installed
by ant update on any channel.

Installation

Manual download

Download the archive for your platform from the assets below, extract it, and place the ant binary on your PATH. Copy bootstrap_peers.toml to the appropriate config directory:

Platform Config path
Linux ~/.config/ant/bootstrap_peers.toml
macOS ~/Library/Application Support/ant/bootstrap_peers.toml
Windows %APPDATA%\ant\bootstrap_peers.toml

Verification

All release archives are signed with ML-DSA-65 (FIPS 204) post-quantum signatures. Download ant-keygen from WithAutonomi/ant-keygen and the public key from resources/release-signing-key.pub, then verify:

ant-keygen verify --key release-signing-key.pub --input <file> --signature <file>.sig --context ant-release-v1

The Windows binary (ant.exe) is additionally signed with a DigiCert EV code-signing certificate. Windows will verify this signature automatically on download and execution.

SHA256 checksums provided in SHA256SUMS.txt.

Detailed Changes

No changelog entry was recorded for 0.3.7. See the commit history for the changes in this release; these notes will be corrected retroactively.

ant 0.3.7-rc.1

ant 0.3.7-rc.1 Pre-release
Pre-release

Choose a tag to compare

This is a pre-release. The quick-start installers below are not used for it —
they always install the latest stable ant. Install this build from the assets below.

-beta.N builds are the beta channel of the ant client. Once a beta build is on your
PATH, ant update keeps you on beta: a beta build tracks the beta channel by default,
accepting later -beta.N and stable releases but never a release candidate. To leave the
beta channel, install a stable build manually.

-rc.N builds are cut before the release gates have given a verdict and are not installed
by ant update on any channel.

Installation

Manual download

Download the archive for your platform from the assets below, extract it, and place the ant binary on your PATH. Copy bootstrap_peers.toml to the appropriate config directory:

Platform Config path
Linux ~/.config/ant/bootstrap_peers.toml
macOS ~/Library/Application Support/ant/bootstrap_peers.toml
Windows %APPDATA%\ant\bootstrap_peers.toml

Verification

All release archives are signed with ML-DSA-65 (FIPS 204) post-quantum signatures. Download ant-keygen from WithAutonomi/ant-keygen and the public key from resources/release-signing-key.pub, then verify:

ant-keygen verify --key release-signing-key.pub --input <file> --signature <file>.sig --context ant-release-v1

The Windows binary (ant.exe) is additionally signed with a DigiCert EV code-signing certificate. Windows will verify this signature automatically on download and execution.

SHA256 checksums provided in SHA256SUMS.txt.

Detailed Changes

No changelog entry was recorded for 0.3.7. See the commit history for the changes in this release; these notes will be corrected retroactively.

ant 0.3.6

Choose a tag to compare

@github-actions github-actions released this 02 Sep 20:44

Installation

Linux / macOS (quick-start)

curl -fsSL https://raw.githubusercontent.com/WithAutonomi/ant-client/main/install.sh | bash

Windows (quick-start)

irm https://raw.githubusercontent.com/WithAutonomi/ant-client/main/install.ps1 | iex

Manual download

Download the archive for your platform from the assets below, extract it, and place the ant binary on your PATH. Copy bootstrap_peers.toml to the appropriate config directory:

Platform Config path
Linux ~/.config/ant/bootstrap_peers.toml
macOS ~/Library/Application Support/ant/bootstrap_peers.toml
Windows %APPDATA%\ant\bootstrap_peers.toml

Verification

All release archives are signed with ML-DSA-65 (FIPS 204) post-quantum signatures. Download ant-keygen from WithAutonomi/ant-keygen and the public key from resources/release-signing-key.pub, then verify:

ant-keygen verify --key release-signing-key.pub --input <file> --signature <file>.sig --context ant-release-v1

The Windows binary (ant.exe) is additionally signed with a DigiCert EV code-signing certificate. Windows will verify this signature automatically on download and execution.

SHA256 checksums provided in SHA256SUMS.txt.

Detailed Changes

Fixed

  • A client whose routing table has been starved of peers now recovers at runtime
    instead of needing a restart. The fix is in saorsa-core 0.27.3 and reaches ant
    through this release's dependency uplift — see
    WithAutonomi/saorsa-core#153 (V2-1036).

Internal

  • Release notes are now extracted per version rather than always taking the first
    CHANGELOG section, so each release ships its own notes (#183).

ant 0.3.6-rc.1

ant 0.3.6-rc.1 Pre-release
Pre-release

Choose a tag to compare

This is a pre-release. The quick-start installers below are not used for it —
they always install the latest stable ant. Install this build from the assets below.

-beta.N builds are the beta channel of the ant client. Once a beta build is on your
PATH, ant update keeps you on beta: a beta build tracks the beta channel by default,
accepting later -beta.N and stable releases but never a release candidate. To leave the
beta channel, install a stable build manually.

-rc.N builds are cut before the release gates have given a verdict and are not installed
by ant update on any channel.

Installation

Manual download

Download the archive for your platform from the assets below, extract it, and place the ant binary on your PATH. Copy bootstrap_peers.toml to the appropriate config directory:

Platform Config path
Linux ~/.config/ant/bootstrap_peers.toml
macOS ~/Library/Application Support/ant/bootstrap_peers.toml
Windows %APPDATA%\ant\bootstrap_peers.toml

Verification

All release archives are signed with ML-DSA-65 (FIPS 204) post-quantum signatures. Download ant-keygen from WithAutonomi/ant-keygen and the public key from resources/release-signing-key.pub, then verify:

ant-keygen verify --key release-signing-key.pub --input <file> --signature <file>.sig --context ant-release-v1

The Windows binary (ant.exe) is additionally signed with a DigiCert EV code-signing certificate. Windows will verify this signature automatically on download and execution.

SHA256 checksums provided in SHA256SUMS.txt.

Detailed Changes

Fixed

  • A client whose routing table has been starved of peers now recovers at runtime
    instead of needing a restart. The fix is in saorsa-core 0.27.3 and reaches ant
    through this release's dependency uplift — see
    WithAutonomi/saorsa-core#153 (V2-1036).

Internal

  • Release notes are now extracted per version rather than always taking the first
    CHANGELOG section, so each release ships its own notes (#183).

ant 0.3.5

Choose a tag to compare

@github-actions github-actions released this 31 Aug 22:32

Installation

Linux / macOS (quick-start)

curl -fsSL https://raw.githubusercontent.com/WithAutonomi/ant-client/main/install.sh | bash

Windows (quick-start)

irm https://raw.githubusercontent.com/WithAutonomi/ant-client/main/install.ps1 | iex

Manual download

Download the archive for your platform from the assets below, extract it, and place the ant binary on your PATH. Copy bootstrap_peers.toml to the appropriate config directory:

Platform Config path
Linux ~/.config/ant/bootstrap_peers.toml
macOS ~/Library/Application Support/ant/bootstrap_peers.toml
Windows %APPDATA%\ant\bootstrap_peers.toml

Verification

All release archives are signed with ML-DSA-65 (FIPS 204) post-quantum signatures. Download ant-keygen from WithAutonomi/ant-keygen and the public key from resources/release-signing-key.pub, then verify:

ant-keygen verify --key release-signing-key.pub --input <file> --signature <file>.sig --context ant-release-v1

The Windows binary (ant.exe) is additionally signed with a DigiCert EV code-signing certificate. Windows will verify this signature automatically on download and execution.

SHA256 checksums provided in SHA256SUMS.txt.

Detailed Changes

Changed (breaking — external-signer merkle API, ADR-0003)

  • External-signer merkle uploads are no longer capped at one payment batch (MAX_LEAVES = 256 chunks ≈ 1 GiB): file_prepare_upload* now partitions the to-upload set into MerkleTree-sized sub-batches (ExternalPaymentInfo::Merkle carries prepared_batches: Vec<PreparedMerkleBatch>), the signer pays one transaction per batch, and the new Client::finalize_upload_merkle_multi takes one winner hash per batch. finalize_upload_merkle remains as the single-batch special case. A batch the signer never paid (None hash) no longer aborts the upload: paid batches store and the unpaid chunks surface via Error::PartialUpload.
  • External-signer merkle prepared uploads no longer hold the encrypted file in memory: chunk bodies stay in the on-disk encryption spill (opaque ExternalChunkStore inside ExternalPaymentInfo::Merkle, replacing the resident chunk_contents: Vec<Bytes>), and finalize stores them via the wallet path's bounded spill fan-out — peak RAM ~256 MB regardless of file size, plus deferred-retry rounds the external path previously lacked.

Added

  • Client::file_prepare_upload_with_mode: external-signer prepare with an explicit PaymentMode override, mirroring the wallet path's file_upload_with_mode.
  • ClientConfig::merkle_external_batch_cap: clamped test seam (3..=MAX_LEAVES) so E2E tests exercise real multi-batch external signing with kilobyte files.
  • Resumable external-signer finalize for both payment paths, so a post-payment storage shortfall no longer strands the payment (#140). Client::finalize_upload_resumable (wave-batch) and Client::finalize_upload_merkle_multi_resumable (merkle) — each with a _with_progress variant — return a FinalizeOutcome: Complete(FileUploadResult), or Partial { result, resume } carrying an opaque FinalizeResume handle (Wave / Merkle) that owns the already-paid material (the wave path's paid chunks, or the merkle path's on-disk spill + signed proofs). Client::finalize_resume (+ _with_progress) takes that handle and re-drives storage for only the still-unstored chunks against the same on-chain payment — no re-quoting, no second signature, no double payment — and is loopable until Complete (bound the loop: persistent store failures return Partial on every call, never Err). The merkle resumable finalize requires every sub-batch to be paid — a resume handle cannot acquire proofs for unpaid chunks, so a partial payment is rejected up front with a pointer at the non-resumable path. The existing consuming finalize_upload / finalize_upload_merkle_multi are unchanged (they still accept partial payment and surface a shortfall as Error::PartialUpload).

Fixed

  • External-signer merkle finalize (Client::finalize_upload_merkle) now returns Error::PartialUpload when chunks remain short of quorum after all retries, matching the wave-batch finalize. Previously it returned Ok with chunks_failed > 0, which callers (desktop app, mobile FFI) took as success — reporting a paid but not fully retrievable file as complete (#166).
  • ant node start/ant node stop with --service-name now resolve the node ID through the daemon API instead of reading node_registry.json directly, eliminating a race against concurrent registry mutations by the daemon.
  • ant node add --json no longer interleaves binary-download progress with the JSON result; progress output now goes to stderr (was stdout) and is suppressed entirely in JSON mode.

Changed

  • --evm-network still defaults to arbitrum-one, except when a devnet manifest carrying an EVM block is loaded: that combination now errors and asks for an explicit choice (local to use the manifest, or a preset to override it). The old behavior silently overrode the manifest's EVM config, producing no-op mainnet-vault transactions on other chains that spent gas and set a useless ANT allowance before every chunk PUT failed payment verification. An explicit preset selected alongside a manifest EVM block now prints a warning that the manifest's EVM config is ignored. No change for mainnet users or read-only operations.
  • Default network binding changed from IPv4-only to IPv6 dual-stack. Hosts without a working IPv6 stack should pass --ipv4-only to avoid advertising unreachable v6 addresses to the DHT (which causes slow connects and junk address records).
  • ant file upload now writes datamaps as <filename>.<extension>.datamap instead of stripping the extension. Uploading photo.jpg produces photo.jpg.datamap (was photo.datamap). Existing datamaps remain readable.
  • ant file upload no longer silently overwrites an existing datamap. Repeated uploads of the same source path produce name-2.datamap, name-3.datamap, … capped at 100 attempts. Pass --overwrite to restore the previous behaviour.

Added

  • ant file upload --overwrite: replace any existing <filename>.datamap rather than writing a suffixed sibling.
  • ant file download --datamap no longer requires -o/--output — defaults to the original filename derived from the datamap basename (photo.jpg.datamapphoto.jpg, written to the current directory). Pass -o to override.
  • ant file download --datamap now reads both msgpack (canonical) and legacy JSON datamaps, so datamaps produced by older versions of the GUI download cleanly via the CLI.

Internal

  • CLI-audit thinning (V2-189): PortRange parsing (FromStr), env KEY=VALUE parsing (AddNodeOpts::parse_env_vars), and bootstrap-peer resolution (config::resolve_bootstrap_peers) moved from ant-cli into ant-core; node add/node reset daemon calls now go through ant_core::node::daemon::client (new add_node/reset/resolve_node_id_by_name functions) instead of hand-rolled HTTP; the two CLI ProgressReporter impls collapsed into one.
  • New ant_core::datamap_file module owns the on-disk datamap format (msgpack canonical, JSON legacy auto-detect on read) and naming convention. ant-cli and consumers like ant-gui route through this single helper instead of reimplementing serialization.

ant 0.3.5-beta.2

ant 0.3.5-beta.2 Pre-release
Pre-release

Choose a tag to compare

This is a pre-release. The quick-start installers below are not used for it —
they always install the latest stable ant. Install this build from the assets below.

-beta.N builds are the beta channel of the ant client. Once a beta build is on your
PATH, ant update keeps you on beta: a beta build tracks the beta channel by default,
accepting later -beta.N and stable releases but never a release candidate. To leave the
beta channel, install a stable build manually.

-rc.N builds are cut before the release gates have given a verdict and are not installed
by ant update on any channel.

Installation

Manual download

Download the archive for your platform from the assets below, extract it, and place the ant binary on your PATH. Copy bootstrap_peers.toml to the appropriate config directory:

Platform Config path
Linux ~/.config/ant/bootstrap_peers.toml
macOS ~/Library/Application Support/ant/bootstrap_peers.toml
Windows %APPDATA%\ant\bootstrap_peers.toml

Verification

All release archives are signed with ML-DSA-65 (FIPS 204) post-quantum signatures. Download ant-keygen from WithAutonomi/ant-keygen and the public key from resources/release-signing-key.pub, then verify:

ant-keygen verify --key release-signing-key.pub --input <file> --signature <file>.sig --context ant-release-v1

The Windows binary (ant.exe) is additionally signed with a DigiCert EV code-signing certificate. Windows will verify this signature automatically on download and execution.

SHA256 checksums provided in SHA256SUMS.txt.

Detailed Changes

Changed (breaking — external-signer merkle API, ADR-0003)

  • External-signer merkle uploads are no longer capped at one payment batch (MAX_LEAVES = 256 chunks ≈ 1 GiB): file_prepare_upload* now partitions the to-upload set into MerkleTree-sized sub-batches (ExternalPaymentInfo::Merkle carries prepared_batches: Vec<PreparedMerkleBatch>), the signer pays one transaction per batch, and the new Client::finalize_upload_merkle_multi takes one winner hash per batch. finalize_upload_merkle remains as the single-batch special case. A batch the signer never paid (None hash) no longer aborts the upload: paid batches store and the unpaid chunks surface via Error::PartialUpload.
  • External-signer merkle prepared uploads no longer hold the encrypted file in memory: chunk bodies stay in the on-disk encryption spill (opaque ExternalChunkStore inside ExternalPaymentInfo::Merkle, replacing the resident chunk_contents: Vec<Bytes>), and finalize stores them via the wallet path's bounded spill fan-out — peak RAM ~256 MB regardless of file size, plus deferred-retry rounds the external path previously lacked.

Added

  • Client::file_prepare_upload_with_mode: external-signer prepare with an explicit PaymentMode override, mirroring the wallet path's file_upload_with_mode.
  • ClientConfig::merkle_external_batch_cap: clamped test seam (3..=MAX_LEAVES) so E2E tests exercise real multi-batch external signing with kilobyte files.
  • Resumable external-signer finalize for both payment paths, so a post-payment storage shortfall no longer strands the payment (#140). Client::finalize_upload_resumable (wave-batch) and Client::finalize_upload_merkle_multi_resumable (merkle) — each with a _with_progress variant — return a FinalizeOutcome: Complete(FileUploadResult), or Partial { result, resume } carrying an opaque FinalizeResume handle (Wave / Merkle) that owns the already-paid material (the wave path's paid chunks, or the merkle path's on-disk spill + signed proofs). Client::finalize_resume (+ _with_progress) takes that handle and re-drives storage for only the still-unstored chunks against the same on-chain payment — no re-quoting, no second signature, no double payment — and is loopable until Complete (bound the loop: persistent store failures return Partial on every call, never Err). The merkle resumable finalize requires every sub-batch to be paid — a resume handle cannot acquire proofs for unpaid chunks, so a partial payment is rejected up front with a pointer at the non-resumable path. The existing consuming finalize_upload / finalize_upload_merkle_multi are unchanged (they still accept partial payment and surface a shortfall as Error::PartialUpload).

Fixed

  • External-signer merkle finalize (Client::finalize_upload_merkle) now returns Error::PartialUpload when chunks remain short of quorum after all retries, matching the wave-batch finalize. Previously it returned Ok with chunks_failed > 0, which callers (desktop app, mobile FFI) took as success — reporting a paid but not fully retrievable file as complete (#166).
  • ant node start/ant node stop with --service-name now resolve the node ID through the daemon API instead of reading node_registry.json directly, eliminating a race against concurrent registry mutations by the daemon.
  • ant node add --json no longer interleaves binary-download progress with the JSON result; progress output now goes to stderr (was stdout) and is suppressed entirely in JSON mode.

Changed

  • --evm-network still defaults to arbitrum-one, except when a devnet manifest carrying an EVM block is loaded: that combination now errors and asks for an explicit choice (local to use the manifest, or a preset to override it). The old behavior silently overrode the manifest's EVM config, producing no-op mainnet-vault transactions on other chains that spent gas and set a useless ANT allowance before every chunk PUT failed payment verification. An explicit preset selected alongside a manifest EVM block now prints a warning that the manifest's EVM config is ignored. No change for mainnet users or read-only operations.
  • Default network binding changed from IPv4-only to IPv6 dual-stack. Hosts without a working IPv6 stack should pass --ipv4-only to avoid advertising unreachable v6 addresses to the DHT (which causes slow connects and junk address records).
  • ant file upload now writes datamaps as <filename>.<extension>.datamap instead of stripping the extension. Uploading photo.jpg produces photo.jpg.datamap (was photo.datamap). Existing datamaps remain readable.
  • ant file upload no longer silently overwrites an existing datamap. Repeated uploads of the same source path produce name-2.datamap, name-3.datamap, … capped at 100 attempts. Pass --overwrite to restore the previous behaviour.

Added

  • ant file upload --overwrite: replace any existing <filename>.datamap rather than writing a suffixed sibling.
  • ant file download --datamap no longer requires -o/--output — defaults to the original filename derived from the datamap basename (photo.jpg.datamapphoto.jpg, written to the current directory). Pass -o to override.
  • ant file download --datamap now reads both msgpack (canonical) and legacy JSON datamaps, so datamaps produced by older versions of the GUI download cleanly via the CLI.

Internal

  • CLI-audit thinning (V2-189): PortRange parsing (FromStr), env KEY=VALUE parsing (AddNodeOpts::parse_env_vars), and bootstrap-peer resolution (config::resolve_bootstrap_peers) moved from ant-cli into ant-core; node add/node reset daemon calls now go through ant_core::node::daemon::client (new add_node/reset/resolve_node_id_by_name functions) instead of hand-rolled HTTP; the two CLI ProgressReporter impls collapsed into one.
  • New ant_core::datamap_file module owns the on-disk datamap format (msgpack canonical, JSON legacy auto-detect on read) and naming convention. ant-cli and consumers like ant-gui route through this single helper instead of reimplementing serialization.

ant 0.3.4

Choose a tag to compare

@github-actions github-actions released this 27 Aug 00:02

Installation

Linux / macOS (quick-start)

curl -fsSL https://raw.githubusercontent.com/WithAutonomi/ant-client/main/install.sh | bash

Windows (quick-start)

irm https://raw.githubusercontent.com/WithAutonomi/ant-client/main/install.ps1 | iex

Manual download

Download the archive for your platform from the assets below, extract it, and place the ant binary on your PATH. Copy bootstrap_peers.toml to the appropriate config directory:

Platform Config path
Linux ~/.config/ant/bootstrap_peers.toml
macOS ~/Library/Application Support/ant/bootstrap_peers.toml
Windows %APPDATA%\ant\bootstrap_peers.toml

Verification

All release archives are signed with ML-DSA-65 (FIPS 204) post-quantum signatures. Download ant-keygen from WithAutonomi/ant-keygen and the public key from resources/release-signing-key.pub, then verify:

ant-keygen verify --key release-signing-key.pub --input <file> --signature <file>.sig --context ant-release-v1

The Windows binary (ant.exe) is additionally signed with a DigiCert EV code-signing certificate. Windows will verify this signature automatically on download and execution.

SHA256 checksums provided in SHA256SUMS.txt.

Detailed Changes

Changed (breaking — external-signer merkle API, ADR-0003)

  • External-signer merkle uploads are no longer capped at one payment batch (MAX_LEAVES = 256 chunks ≈ 1 GiB): file_prepare_upload* now partitions the to-upload set into MerkleTree-sized sub-batches (ExternalPaymentInfo::Merkle carries prepared_batches: Vec<PreparedMerkleBatch>), the signer pays one transaction per batch, and the new Client::finalize_upload_merkle_multi takes one winner hash per batch. finalize_upload_merkle remains as the single-batch special case. A batch the signer never paid (None hash) no longer aborts the upload: paid batches store and the unpaid chunks surface via Error::PartialUpload.
  • External-signer merkle prepared uploads no longer hold the encrypted file in memory: chunk bodies stay in the on-disk encryption spill (opaque ExternalChunkStore inside ExternalPaymentInfo::Merkle, replacing the resident chunk_contents: Vec<Bytes>), and finalize stores them via the wallet path's bounded spill fan-out — peak RAM ~256 MB regardless of file size, plus deferred-retry rounds the external path previously lacked.

Added

  • Client::file_prepare_upload_with_mode: external-signer prepare with an explicit PaymentMode override, mirroring the wallet path's file_upload_with_mode.
  • ClientConfig::merkle_external_batch_cap: clamped test seam (3..=MAX_LEAVES) so E2E tests exercise real multi-batch external signing with kilobyte files.

Fixed

  • External-signer merkle finalize (Client::finalize_upload_merkle) now returns Error::PartialUpload when chunks remain short of quorum after all retries, matching the wave-batch finalize. Previously it returned Ok with chunks_failed > 0, which callers (desktop app, mobile FFI) took as success — reporting a paid but not fully retrievable file as complete (#166).

Changed

  • Default network binding changed from IPv4-only to IPv6 dual-stack. Hosts without a working IPv6 stack should pass --ipv4-only to avoid advertising unreachable v6 addresses to the DHT (which causes slow connects and junk address records).
  • ant file upload now writes datamaps as <filename>.<extension>.datamap instead of stripping the extension. Uploading photo.jpg produces photo.jpg.datamap (was photo.datamap). Existing datamaps remain readable.
  • ant file upload no longer silently overwrites an existing datamap. Repeated uploads of the same source path produce name-2.datamap, name-3.datamap, … capped at 100 attempts. Pass --overwrite to restore the previous behaviour.

Added

  • ant file upload --overwrite: replace any existing <filename>.datamap rather than writing a suffixed sibling.
  • ant file download --datamap no longer requires -o/--output — defaults to the original filename derived from the datamap basename (photo.jpg.datamapphoto.jpg, written to the current directory). Pass -o to override.
  • ant file download --datamap now reads both msgpack (canonical) and legacy JSON datamaps, so datamaps produced by older versions of the GUI download cleanly via the CLI.

Internal

  • New ant_core::datamap_file module owns the on-disk datamap format (msgpack canonical, JSON legacy auto-detect on read) and naming convention. ant-cli and consumers like ant-gui route through this single helper instead of reimplementing serialization.

ant 0.3.5-beta.1

ant 0.3.5-beta.1 Pre-release
Pre-release

Choose a tag to compare

This is a pre-release. The quick-start installers below are not used for it —
they always install the latest stable ant. Install this build from the assets below.

-beta.N builds are the beta channel of the ant client. Once a beta build is on your
PATH, ant update keeps you on beta: a beta build tracks the beta channel by default,
accepting later -beta.N and stable releases but never a release candidate. To leave the
beta channel, install a stable build manually.

-rc.N builds are cut before the release gates have given a verdict and are not installed
by ant update on any channel.

Installation

Manual download

Download the archive for your platform from the assets below, extract it, and place the ant binary on your PATH. Copy bootstrap_peers.toml to the appropriate config directory:

Platform Config path
Linux ~/.config/ant/bootstrap_peers.toml
macOS ~/Library/Application Support/ant/bootstrap_peers.toml
Windows %APPDATA%\ant\bootstrap_peers.toml

Verification

All release archives are signed with ML-DSA-65 (FIPS 204) post-quantum signatures. Download ant-keygen from WithAutonomi/ant-keygen and the public key from resources/release-signing-key.pub, then verify:

ant-keygen verify --key release-signing-key.pub --input <file> --signature <file>.sig --context ant-release-v1

The Windows binary (ant.exe) is additionally signed with a DigiCert EV code-signing certificate. Windows will verify this signature automatically on download and execution.

SHA256 checksums provided in SHA256SUMS.txt.

Detailed Changes

Changed (breaking — external-signer merkle API, ADR-0003)

  • External-signer merkle uploads are no longer capped at one payment batch (MAX_LEAVES = 256 chunks ≈ 1 GiB): file_prepare_upload* now partitions the to-upload set into MerkleTree-sized sub-batches (ExternalPaymentInfo::Merkle carries prepared_batches: Vec<PreparedMerkleBatch>), the signer pays one transaction per batch, and the new Client::finalize_upload_merkle_multi takes one winner hash per batch. finalize_upload_merkle remains as the single-batch special case. A batch the signer never paid (None hash) no longer aborts the upload: paid batches store and the unpaid chunks surface via Error::PartialUpload.
  • External-signer merkle prepared uploads no longer hold the encrypted file in memory: chunk bodies stay in the on-disk encryption spill (opaque ExternalChunkStore inside ExternalPaymentInfo::Merkle, replacing the resident chunk_contents: Vec<Bytes>), and finalize stores them via the wallet path's bounded spill fan-out — peak RAM ~256 MB regardless of file size, plus deferred-retry rounds the external path previously lacked.

Added

  • Client::file_prepare_upload_with_mode: external-signer prepare with an explicit PaymentMode override, mirroring the wallet path's file_upload_with_mode.
  • ClientConfig::merkle_external_batch_cap: clamped test seam (3..=MAX_LEAVES) so E2E tests exercise real multi-batch external signing with kilobyte files.
  • Resumable external-signer finalize for both payment paths, so a post-payment storage shortfall no longer strands the payment (#140). Client::finalize_upload_resumable (wave-batch) and Client::finalize_upload_merkle_multi_resumable (merkle) — each with a _with_progress variant — return a FinalizeOutcome: Complete(FileUploadResult), or Partial { result, resume } carrying an opaque FinalizeResume handle (Wave / Merkle) that owns the already-paid material (the wave path's paid chunks, or the merkle path's on-disk spill + signed proofs). Client::finalize_resume (+ _with_progress) takes that handle and re-drives storage for only the still-unstored chunks against the same on-chain payment — no re-quoting, no second signature, no double payment — and is loopable until Complete (bound the loop: persistent store failures return Partial on every call, never Err). The merkle resumable finalize requires every sub-batch to be paid — a resume handle cannot acquire proofs for unpaid chunks, so a partial payment is rejected up front with a pointer at the non-resumable path. The existing consuming finalize_upload / finalize_upload_merkle_multi are unchanged (they still accept partial payment and surface a shortfall as Error::PartialUpload).

Fixed

  • External-signer merkle finalize (Client::finalize_upload_merkle) now returns Error::PartialUpload when chunks remain short of quorum after all retries, matching the wave-batch finalize. Previously it returned Ok with chunks_failed > 0, which callers (desktop app, mobile FFI) took as success — reporting a paid but not fully retrievable file as complete (#166).
  • ant node start/ant node stop with --service-name now resolve the node ID through the daemon API instead of reading node_registry.json directly, eliminating a race against concurrent registry mutations by the daemon.
  • ant node add --json no longer interleaves binary-download progress with the JSON result; progress output now goes to stderr (was stdout) and is suppressed entirely in JSON mode.

Changed

  • --evm-network still defaults to arbitrum-one, except when a devnet manifest carrying an EVM block is loaded: that combination now errors and asks for an explicit choice (local to use the manifest, or a preset to override it). The old behavior silently overrode the manifest's EVM config, producing no-op mainnet-vault transactions on other chains that spent gas and set a useless ANT allowance before every chunk PUT failed payment verification. An explicit preset selected alongside a manifest EVM block now prints a warning that the manifest's EVM config is ignored. No change for mainnet users or read-only operations.
  • Default network binding changed from IPv4-only to IPv6 dual-stack. Hosts without a working IPv6 stack should pass --ipv4-only to avoid advertising unreachable v6 addresses to the DHT (which causes slow connects and junk address records).
  • ant file upload now writes datamaps as <filename>.<extension>.datamap instead of stripping the extension. Uploading photo.jpg produces photo.jpg.datamap (was photo.datamap). Existing datamaps remain readable.
  • ant file upload no longer silently overwrites an existing datamap. Repeated uploads of the same source path produce name-2.datamap, name-3.datamap, … capped at 100 attempts. Pass --overwrite to restore the previous behaviour.

Added

  • ant file upload --overwrite: replace any existing <filename>.datamap rather than writing a suffixed sibling.
  • ant file download --datamap no longer requires -o/--output — defaults to the original filename derived from the datamap basename (photo.jpg.datamapphoto.jpg, written to the current directory). Pass -o to override.
  • ant file download --datamap now reads both msgpack (canonical) and legacy JSON datamaps, so datamaps produced by older versions of the GUI download cleanly via the CLI.

Internal

  • CLI-audit thinning (V2-189): PortRange parsing (FromStr), env KEY=VALUE parsing (AddNodeOpts::parse_env_vars), and bootstrap-peer resolution (config::resolve_bootstrap_peers) moved from ant-cli into ant-core; node add/node reset daemon calls now go through ant_core::node::daemon::client (new add_node/reset/resolve_node_id_by_name functions) instead of hand-rolled HTTP; the two CLI ProgressReporter impls collapsed into one.
  • New ant_core::datamap_file module owns the on-disk datamap format (msgpack canonical, JSON legacy auto-detect on read) and naming convention. ant-cli and consumers like ant-gui route through this single helper instead of reimplementing serialization.

ant 0.3.5-rc.1

ant 0.3.5-rc.1 Pre-release
Pre-release

Choose a tag to compare

This is a pre-release. The quick-start installers below are not used for it —
they always install the latest stable ant. Install this build from the assets below.

-beta.N builds are the beta channel of the ant client. Once a beta build is on your
PATH, ant update keeps you on beta: a beta build tracks the beta channel by default,
accepting later -beta.N and stable releases but never a release candidate. To leave the
beta channel, install a stable build manually.

-rc.N builds are cut before the release gates have given a verdict and are not installed
by ant update on any channel.

Installation

Manual download

Download the archive for your platform from the assets below, extract it, and place the ant binary on your PATH. Copy bootstrap_peers.toml to the appropriate config directory:

Platform Config path
Linux ~/.config/ant/bootstrap_peers.toml
macOS ~/Library/Application Support/ant/bootstrap_peers.toml
Windows %APPDATA%\ant\bootstrap_peers.toml

Verification

All release archives are signed with ML-DSA-65 (FIPS 204) post-quantum signatures. Download ant-keygen from WithAutonomi/ant-keygen and the public key from resources/release-signing-key.pub, then verify:

ant-keygen verify --key release-signing-key.pub --input <file> --signature <file>.sig --context ant-release-v1

The Windows binary (ant.exe) is additionally signed with a DigiCert EV code-signing certificate. Windows will verify this signature automatically on download and execution.

SHA256 checksums provided in SHA256SUMS.txt.

Detailed Changes

Changed (breaking — external-signer merkle API, ADR-0003)

  • External-signer merkle uploads are no longer capped at one payment batch (MAX_LEAVES = 256 chunks ≈ 1 GiB): file_prepare_upload* now partitions the to-upload set into MerkleTree-sized sub-batches (ExternalPaymentInfo::Merkle carries prepared_batches: Vec<PreparedMerkleBatch>), the signer pays one transaction per batch, and the new Client::finalize_upload_merkle_multi takes one winner hash per batch. finalize_upload_merkle remains as the single-batch special case. A batch the signer never paid (None hash) no longer aborts the upload: paid batches store and the unpaid chunks surface via Error::PartialUpload.
  • External-signer merkle prepared uploads no longer hold the encrypted file in memory: chunk bodies stay in the on-disk encryption spill (opaque ExternalChunkStore inside ExternalPaymentInfo::Merkle, replacing the resident chunk_contents: Vec<Bytes>), and finalize stores them via the wallet path's bounded spill fan-out — peak RAM ~256 MB regardless of file size, plus deferred-retry rounds the external path previously lacked.

Added

  • Client::file_prepare_upload_with_mode: external-signer prepare with an explicit PaymentMode override, mirroring the wallet path's file_upload_with_mode.
  • ClientConfig::merkle_external_batch_cap: clamped test seam (3..=MAX_LEAVES) so E2E tests exercise real multi-batch external signing with kilobyte files.
  • Resumable external-signer finalize for both payment paths, so a post-payment storage shortfall no longer strands the payment (#140). Client::finalize_upload_resumable (wave-batch) and Client::finalize_upload_merkle_multi_resumable (merkle) — each with a _with_progress variant — return a FinalizeOutcome: Complete(FileUploadResult), or Partial { result, resume } carrying an opaque FinalizeResume handle (Wave / Merkle) that owns the already-paid material (the wave path's paid chunks, or the merkle path's on-disk spill + signed proofs). Client::finalize_resume (+ _with_progress) takes that handle and re-drives storage for only the still-unstored chunks against the same on-chain payment — no re-quoting, no second signature, no double payment — and is loopable until Complete (bound the loop: persistent store failures return Partial on every call, never Err). The merkle resumable finalize requires every sub-batch to be paid — a resume handle cannot acquire proofs for unpaid chunks, so a partial payment is rejected up front with a pointer at the non-resumable path. The existing consuming finalize_upload / finalize_upload_merkle_multi are unchanged (they still accept partial payment and surface a shortfall as Error::PartialUpload).

Fixed

  • External-signer merkle finalize (Client::finalize_upload_merkle) now returns Error::PartialUpload when chunks remain short of quorum after all retries, matching the wave-batch finalize. Previously it returned Ok with chunks_failed > 0, which callers (desktop app, mobile FFI) took as success — reporting a paid but not fully retrievable file as complete (#166).
  • ant node start/ant node stop with --service-name now resolve the node ID through the daemon API instead of reading node_registry.json directly, eliminating a race against concurrent registry mutations by the daemon.
  • ant node add --json no longer interleaves binary-download progress with the JSON result; progress output now goes to stderr (was stdout) and is suppressed entirely in JSON mode.

Changed

  • --evm-network still defaults to arbitrum-one, except when a devnet manifest carrying an EVM block is loaded: that combination now errors and asks for an explicit choice (local to use the manifest, or a preset to override it). The old behavior silently overrode the manifest's EVM config, producing no-op mainnet-vault transactions on other chains that spent gas and set a useless ANT allowance before every chunk PUT failed payment verification. An explicit preset selected alongside a manifest EVM block now prints a warning that the manifest's EVM config is ignored. No change for mainnet users or read-only operations.
  • Default network binding changed from IPv4-only to IPv6 dual-stack. Hosts without a working IPv6 stack should pass --ipv4-only to avoid advertising unreachable v6 addresses to the DHT (which causes slow connects and junk address records).
  • ant file upload now writes datamaps as <filename>.<extension>.datamap instead of stripping the extension. Uploading photo.jpg produces photo.jpg.datamap (was photo.datamap). Existing datamaps remain readable.
  • ant file upload no longer silently overwrites an existing datamap. Repeated uploads of the same source path produce name-2.datamap, name-3.datamap, … capped at 100 attempts. Pass --overwrite to restore the previous behaviour.

Added

  • ant file upload --overwrite: replace any existing <filename>.datamap rather than writing a suffixed sibling.
  • ant file download --datamap no longer requires -o/--output — defaults to the original filename derived from the datamap basename (photo.jpg.datamapphoto.jpg, written to the current directory). Pass -o to override.
  • ant file download --datamap now reads both msgpack (canonical) and legacy JSON datamaps, so datamaps produced by older versions of the GUI download cleanly via the CLI.

Internal

  • CLI-audit thinning (V2-189): PortRange parsing (FromStr), env KEY=VALUE parsing (AddNodeOpts::parse_env_vars), and bootstrap-peer resolution (config::resolve_bootstrap_peers) moved from ant-cli into ant-core; node add/node reset daemon calls now go through ant_core::node::daemon::client (new add_node/reset/resolve_node_id_by_name functions) instead of hand-rolled HTTP; the two CLI ProgressReporter impls collapsed into one.
  • New ant_core::datamap_file module owns the on-disk datamap format (msgpack canonical, JSON legacy auto-detect on read) and naming convention. ant-cli and consumers like ant-gui route through this single helper instead of reimplementing serialization.