ADR-039: Distribution and Packaging Strategy

Status

Proposed

Context

SEA-Forge™ is a distributed system with multiple components (CLI tools, backend services, generators, DSL compilers). Users currently need to manually install numerous dependencies (Node.js, Rust, Python, Docker, mise, devbox, just, sops, age) before they can start developing.

This friction:

Constraints:

Decision

Adopt a multi-layer distribution strategy:

  1. DevContainer (Primary): Zero-config development via .devcontainer/
  2. Rust CLI (sea-forge): Orchestration binary wrapping just recipes
  3. Package Managers: Homebrew and Cargo for CLI distribution

Layer 1: DevContainer

1
Developer → Opens in VS Code/Codespaces → Everything works

Layer 2: Rust CLI (sea-forge)

1
2
3
4
sea-forge doctor    # Check system prerequisites
sea-forge init      # Bootstrap project
sea-forge up        # Start all services
sea-forge validate  # Run spec-guard

IDE Support

| IDE | Setup Method | Status | |—–|————–|——–| | Zed IDE | just ui-setup / sea-forge setup | ✅ Primary | | VS Code | DevContainer | ✅ Alternative | | Codespaces | DevContainer | ✅ Alternative | | Other | just setup / sea-forge init | ✅ Supported |

Layer 3: Package Managers

1
2
3
cargo install sea-forge
# or
brew install sprime01/tap/sea-forge

Constraints

Consequences

Positive

Negative

Risks

Alternatives Considered

Approach Why Rejected
Tauri SEA™ is not a desktop app; integrates with external tools (Zed, LibreChat)
Nix Flake Steeper learning curve for users unfamiliar with Nix
Bun compile Larger binary, less mature, doesn’t leverage existing Rust
Docker-only Doesn’t address CLI tooling; some users prefer native development