Packages can declare a `surfaces` array with per-path access controls, titles, and layouts. A single package can serve a public form, an authenticated dashboard, and an admin page — each with independent access enforcement. Kernel: - Manifest validation for surfaces array (path, access, duplicates) - Auto-synthesis from legacy auth/layout for existing packages - Unified /s/:slug route tree (RegisterExtensionRoutes) dispatches between surface rendering and ext API calls - matchSurface() with Gin-style :param support and specificity ordering - evaluateAccess() for per-surface access checks - Nav filters out pending_review packages (pre-existing bug fix) Frontend: - __SURFACE_PATH__ and __SURFACE_PARAMS__ template injection - sw.navigate(path, params) for SPA-style intra-package routing - surface.navigate event + popstate handling - SDK version bumped to 0.9.0 Docs: - MULTI-SURFACE-GUIDE.md — full developer guide - PACKAGE-FORMAT.md — surfaces field reference - CHANGELOG.md, ROADMAP.md updated 22 new tests (11 manifest validation, 11 route matching/nav). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Armature
A self-hosted extension platform. Identity, teams, permissions, workflows, and a package system. Everything else ships as installable extensions.
What This Is
Armature is the kernel. It provides the primitives that extensions build on: users, teams, groups, scoped credentials, a Starlark sandbox, workflow orchestration, notifications, and a package installer. It does not include AI chat, providers, personas, or any domain-specific features — those are all extension packages.
Stack
- Backend: Go / Gin
- Frontend: Preact + htm (no build step)
- Database: PostgreSQL (production) + SQLite (dev/test/edge)
- Sandbox: Starlark with capability-gated modules
- Deployment: Single Docker image, Kubernetes
Quick Start
# Docker (recommended)
docker compose up --build
# → http://localhost:3000 (admin/admin)
# Or from source
git clone <repo-url> && cd armature
cp server/.env.example server/.env # edit DB credentials
cd server && go run .
# → http://localhost:8080
Bundled packages (workflows, surfaces, task manager) are auto-installed on first boot. See Distribution Guide for production deployment and customization.
Kernel Features
- Auth: Builtin password, mTLS (client cert), OIDC (Keycloak et al.)
- Teams & Groups: Horizontal isolation + vertical permissions
- Packages: Unified registry for surfaces, extensions, libraries, workflows
- Starlark Sandbox: Capability-gated server-side scripting for extensions
- Workflows: Staged processes with forms, review, and webhooks
- Connections: Scoped credential storage (global/team/personal), AES-256-GCM encrypted
- Notifications: In-app with per-type preferences
- Audit Log: All admin operations logged
- Object Storage: PVC or S3-compatible
- Multi-Replica HA: PG-backed WS tickets and rate limit counters
Documentation
- Distribution Guide — Docker, bundled packages, builder image, production deployment
- Architecture — kernel components and design reasoning
- Roadmap — current status and planned milestones
- Changelog — version history
Project Status
v0.5.0 — Realtime pub/sub primitive, dialog audit, and admin permissions
UI. Extensions can now publish events to WebSocket channels via Starlark;
clients subscribe with sw.realtime.subscribe(). Admin Packages page gains
per-permission grant/revoke controls and status badges. See
ROADMAP.md for the full journey from v0.1.0 kernel extraction
through v0.3.x workflows, v0.4.x Notes surface, to v0.5.x realtime and chat.
License
Proprietary. All rights reserved.