Registry Service
The registry is a separate backend service at registry.getarcan.dev. It is NOT part of the Arcan core binary.
Responsibilities
- Host plugin packages (
.arcanpkgfiles -- platform-independent when WASM, multi-platform for compiled) - Compile plugin source code into packages (build service -- authors push source, we build and sign)
- Serve plugin metadata (version, capabilities, checksums, signatures)
- Validate enterprise activation keys
- Track download counts and version adoption (for us, not user telemetry)
API Surface
Public (no auth)
GET /v1/plugins → list all plugins
GET /v1/plugins/{name} → plugin metadata + all versions
GET /v1/plugins/{name}/{version}/meta → checksums, signatures, capabilities
GET /v1/plugins/{name}/{version}/download/{os}/{arch} → binary download (official tier)
Enterprise (activation token required)
POST /v1/activate → validate key, bind to fingerprint
POST /v1/heartbeat → periodic validation (every 7 days)
GET /v1/plugins/{name}/{version}/download/{os}/{arch} → binary download (enterprise tier)
Header: Authorization: Bearer <activation_token>
Internal (CI/CD, admin API key)
POST /v1/plugins/{name}/{version}/publish → upload new version
POST /v1/plugins/{name}/{version}/yank → mark version as yanked
Plugin Metadata Format
{
"name": "postgres",
"version": "0.1.0",
"tier": "official",
"protocol_version": 1,
"min_core_version": "0.1.0",
"capabilities": ["dynamic_credentials", "root_rotation"],
"description": "Dynamic credentials for PostgreSQL databases",
"platforms": ["linux/amd64", "linux/arm64", "darwin/amd64", "darwin/arm64"],
"checksums": {
"linux/amd64": "sha256:abc123...",
"linux/arm64": "sha256:def456...",
"darwin/amd64": "sha256:789abc...",
"darwin/arm64": "sha256:012def..."
},
"signature": "ed25519:<base64-signature-of-checksums>",
"size_bytes": {
"linux/amd64": 12345678,
"darwin/arm64": 11234567
},
"published_at": "2026-04-01T00:00:00Z",
"yanked": false,
"yank_reason": ""
}
Backend Stack
- Go service (same standards as Arcan core)
- PostgreSQL (plugin metadata, activation records, download stats)
- S3 (binary storage -- versioned objects, immutable after upload)
- CloudFront (binary delivery -- edge cached)
- Domain:
registry.getarcan.dev
Security Rules
- All packages signed with Ed25519 before publishing (build service signs, never humans).
- Signing private key stored in AWS KMS, never on disk, never in code.
- Official signing public key embedded in Arcan core binary (compiled in).
- Enterprise signing public key distributed in activation response.
- Yanked versions return
410 Gonewith reason (security advisory link). - Rate limiting: 100 req/min per IP on download, 10 req/min on metadata.
- No user telemetry -- download counts are aggregate, not per-user.
- Plugin source code can be public (open-source) or private (enterprise/community).