← Catalog

RFC-013AcceptedToolchain

Binary Distribution

GitHub

Depends: RFC-000RFC-008

Blocks: RFC-012

1. Abstract

This RFC covers how Aura ships: platform matrix for the toolchain and for user applications, installers, archive layouts, code signing, checksums, self-update, and packaging of single-file app binaries. Default application deploy remains one executable produced by aura build.

Toolchain today (2026-08-17, S2): 0.1.1-alpha.8 is the next alpha after v0.1.1-alpha.7, with artifacts for Linux amd64/arm64 and macOS amd64/arm64. The installer uses versioned $AURA_HOME; cargo install --path crates/aura-cli uses the embedded runtime.c. Tag v* produces multi-OS tarballs, per-archive checksums, an aggregate SHA256SUMS, and a detached minisign signature; production tags fail closed unless both signing secrets are configured and the workflow verifies the signature. Windows amd64/arm64 remain tier2 policy targets and are not published.

2. Motivation

2.1 Problem statement

A language that compiles to native code still fails users if the toolchain is hard to install or app artifacts are multi-file messes. Distribution is part of the product.

2.2 Why now

Build outputs (RFC-008) and CLI (RFC-012) need install and release contracts.

2.3 Success metrics

MetricTarget
Toolchain installOne command or single archive
App shipOne file per OS/arch
IntegrityChecksums + signatures on releases

3. Goals

  • Document supported OS/arch matrix for v1.
  • Standard release artifact naming.
  • Signing & verification story.
  • Self-update for toolchain (optional but designed).
  • Clear guidance for app distribution (not an app store).

4. Non-goals

  • App Store / Play Store submission pipelines.
  • WASM distribution as v1 primary.
  • Guaranteeing notarization on day-one for all platforms (track per-OS requirements).

5. Prior art & alternatives

SystemNotesTake
RustupToolchain installInspiration
GoSingle static binariesApp ship model
Node installersMulti-fileContrast
Docker-onlyPopularCompatible, not exclusive

6. Design

6.1 Platform matrix (v1)

The machine-readable policy is scripts/release-targets.tsv. required rows are built, checksum-checked, and installer-supported. tier2 rows are explicit policy commitments only and must not be described as shipped until native build and install evidence exists.

The current required artifact suffixes are linux-amd64, linux-arm64, darwin-arm64, and darwin-amd64; windows-amd64 and windows-arm64 remain tier2 policy rows and have no release assets yet.

OSArch
Linux (gnu)amd64, arm64
macOSamd64, arm64
Windowsamd64, arm64 (tier2; not shipped)

Musl/static Linux: stretch goal for super-portable apps.

6.2 Toolchain artifacts

Naming:

code
aura-toolchain-{version}-{os}-{arch}.tar.gz
aura-toolchain-{version}-{os}-{arch}.zip   # windows

Contents:

code
bin/aura
lib/…          # if needed
share/…        # licenses, man
components…    # optional cross libs

6.3 Application artifacts

  • Default: target/release/<bin> single executable.
  • Optional: aura pack produces versioned tarball with binary + LICENSE + README (still one primary bin).
  • Embed version via build: aura build --release sets version from manifest.

6.4 Install methods

MethodAudience
Install script (curl | sh)Dev machines (document risks)
Package managersbrew, apt, winget—when available
Manual archiveAirgapped
aura toolchain installSelf-management post-bootstrap

6.5 Integrity & signing

  • Publish SHA256SUMS for every release.
  • Sign sums with release key (minisign for simplicity of offline verify; cosign optional later for provenance). Production release tags fail closed when signing material is absent; unsigned rehearsals must not be promoted to a release.
  • Windows Authenticode / macOS notarization: platform-specific checklist.

6.6 Self-update

  • aura toolchain upgrade checks release API, verifies signature, replaces binaries atomically.
  • Respects offline mode.
  • Channels: stable, beta, nightly (optional).

6.7 Container story

  • Official slim images optional; still demonstrate copying single static binary into FROM scratch / distroless when linked appropriately.

6.8 Examples

code
# install toolchain (illustrative)
curl -fsSL https://aura.dev/install.sh | sh

aura version
aura build --release -o greeter
scp greeter host:/usr/local/bin/

6.9 Error model / edge cases

CaseBehavior
Signature failAbort update
Partial downloadAtomic replace only on success
Unsupported platformClear message

6.10 Compatibility & migration

  • Toolchain versions independent of language editions.
  • App binaries: no guarantee to run under different runtime major if dynamically linked—static default avoids this.

7. Open questions

#QuestionOptionsOwnerStatus
1Signing technologyminisign firstDistResolved (cosign later optional)
2Musl tiertier1 / tier2DistResolved — musl tier2 initially
3Hosting URL / CDNProjectResolved — toolchain via GitHub Releases + docs site; packages use direct Git origins and immutable semver tags per RFC-005
4Windows arm64 tierDistResolved — Windows arm64 tier2

8. Rationale & trade-offs

Single-file apps maximize operational simplicity. Toolchain archives + checksums are table stakes for professional languages. Self-update improves DX but increases supply-chain criticality—hence signatures. Cost: platform signing bureaucracy (Apple/Microsoft) is ongoing ops work.

9. Unresolved / future work

  • Deb/rpm official packages
  • SBOM generation on release
  • Provenance (SLSA) levels

10. Security & safety considerations

  • Install scripts are sensitive—pin versions, document checksum verification alternative.
  • Release keys offline / HSM policy.
  • Rollback path for bad toolchains.
  • Do not auto-exec downloaded app code.

11. Implementation plan (optional)

PhaseScopeExit criteria
D0Manual archives + checksumsGitHub releases CI
D1Install script + matrix6 platform builds
D2Sign + self-updateVerified upgrade

The alpha gate validates the target manifest against the workflow, package script, installer, and this RFC before assets are built.

For alpha acceptance, a native target report is valid only when it records a successful binary execution on the matching OS/architecture; cross-file reports record format inspection and explicitly state that execution did not occur. This is intentionally weaker than foreign-host acceptance. Linux arm64 and Windows promotion still require native package/install/run evidence on their declared runners, and a production release still requires an actual tag-triggered signature verification using configured GitHub credentials.

12. References


Changelog

DateAuthorChange
2026-07-16Lock tiers + hosting; Status → Accepted
2026-07-16Status → In Review — Review: single-file + minisign locked; tiers/hosting still open
2026-07-15Initial skeleton
2026-07-15Solid draft: matrix, signing, single-file apps
2026-07-15Lock minisign for release signatures