a4-cli
Command-line tool for building, deploying, and managing Arete stream stacks.
Installation
From Source
Quick Start
# Initialize project
# Authenticate
# Build explicit artifacts and deploy the exact manifest
The deployment returns operational bindings for the exact StackManifest.
Command Overview
| Command | Description |
|---|---|
a4 init |
Initialize project |
a4 program build <idl> |
Build a portable ProgramSpec |
a4 program push <idl-or-program-spec> |
Upload an owner-private hosted ProgramSpec |
a4 program status <upr-id> |
Inspect admission and runtime health |
a4 stack compose |
Compose ProgramSpecs and aliased LiveSpecs |
a4 up <manifest> |
Deploy an exact StackManifest |
a4 status |
Show project overview |
a4 stack list |
List all stacks |
a4 stack show <name> |
Show stack details |
a4 stack rollback <name> |
Rollback to previous version |
Private Program Uploads
Uploads are explicit and never happen as a side effect of a4 up:
# The stable ID returned by push is an unambiguous fallback:
# Continue when the previous page prints "Next cursor":
# Continue when the previous page prints "Next cursor":
Every upload begins owner-private. Promotion consent means the baseline IDL may
be reviewed and committed to a public OSS repository; it does not grant a
managed or public release automatically. Archival retains immutable content
while references exist. Private installs require the credentials saved by
a4 auth login and resolve only the caller's exact alias or upr_... ID. They
do not appear in a4 explore programs. Managed registry names take precedence
over private aliases, so use the stable ID if an alias collides.
Daily Workflow
# Make changes to your stack, rebuild
# Deploy
# Check status
Stack Commands
a4 stack list
List all stacks with deployment status:
STACK STATUS VERSION URL
settlement-game active v3 wss://settlement-game.stack.arete.run
token-tracker active v1 wss://token-tracker.stack.arete.run
a4 stack show <name>
Show detailed information:
Shows: entity info, deployment status, version history, recent builds.
a4 stack push [name] (legacy)
Push a legacy configured composite input. This compatibility path is retained only through August 31, 2026:
a4 stack versions <name>
Show version history:
a4 stack rollback <name>
Rollback to a previous version:
a4 stack delete <name>
Delete a stack:
Deployment
a4 up <manifest>
Deploy one exact local StackManifest:
The last flag is explicit consent to persist a V2 deployment plan containing
owner-private, observed-executable programs. It is never inferred from upload,
is not supported by legacy .stack.json deployments, and does not make a
program global or public.
Composite .stack.json is an input-only compatibility adapter through August
31, 2026. New deployments use the manifest path.
Authentication
Credentials: ~/.arete/credentials.toml
Registry Exploration
Exploration uses the same deployment-pinned install descriptors as a4 install, so the reported StackManifest, LiveSpec, AST, and Program Release
identities are the ones an installation will consume.
Legacy stack forms remain valid:
Every JSON explore response includes schemaVersion. Stack exploration shows
LiveSpec aliases without flattening multi-live compositions and includes only
the views selected by the exact StackManifest. If descriptor assembly fails,
the command reports the deployment/publication problem instead of falling back
to a different AST.
SDK Generation
SDK generation writes local source and does not publish a package.
Configuration
File: arete.toml
[]
= "my-project"
[]
= "./generated"
# Legacy composite inputs (compatibility only through August 31, 2026)
[[]]
= "my-game"
= ".arete/SettlementGame.stack.json"
For most projects, you only need:
[]
= "my-project"
New SDK and deployment workflows pass an explicit StackManifest path.
Endpoint and DNS Handoff
Live, Program Read, chain, and transaction endpoints are independent bindings.
Operators map them through their chosen DNS/CDN provider and publish generated
SDK packages manually. Hosted TypeScript, Python, and Rust installs preserve
the full Solana gateway descriptors. Their ordinary clients select the hosted
chain and transaction transports automatically; explicit transports are
overrides. TypeScript compositions also retain a
create<StackName>HostedSession convenience helper. Local/self-hosted output
does not contain hosted bindings and keeps using explicitly configured or
tenant-local transports.
Environment Variables
| Variable | Description |
|---|---|
ARETE_API_URL |
Override API endpoint |
Troubleshooting
| Error | Solution |
|---|---|
Not authenticated |
Run a4 auth login |
Stack not found |
Check a4 stack list |
StackManifest not found |
Run cargo build and use the generated manifest path |
Build failed |
Check a4 status for build details |
License
Apache-2.0