Libraries
5
Leptos components
160+
Infra modules
14all feature-gated
On crates.io
v0.4.0soma-schema

Everything ends up open source. This goes first.

The whole platform — every suite, every library, this website — is Apache 2.0. Repos open in maturity order, not marketing order: the foundation is already public, the flagship follows, and each suite opens as it hardens.

Open-source release order: SOMA-DevKit is public now, SOMA-Control is next, remaining suites open as each matures. Everything is Apache 2.0. SOMA-DevKit public today repo open · soma-schema on crates.io SOMA-Control next — the flagship control plane Remaining suites as each matures — Insights · Growth · AI · Security · Radar No open-core split · no features held back · the order is maturity, not gatekeeping

The shared foundation

Every SOMA suite builds on a common foundation: SOMA-DevKit, a git submodule consumed by every suite workspace. It provides five libraries — backend plumbing, a migration runner, a component library, a cryptographic audit trail, and client SDKs. One build graph must see exactly one DevKit copy, which is why the submodule model is non-negotiable: a lockfile collision surfaces immediately if two copies slip in.

DevKit foundation: six SOMA suites each consuming SOMA-DevKit as a git submodule; one build graph sees exactly one DevKit copy SOMA-Control git submodule SOMA-Insights git submodule SOMA-Growth git submodule SOMA-AI git submodule SOMA-Delights git submodule SOMA-Ecosystem git submodule SOMA-DevKit soma-infra 14 feature-gated modules backend plumbing soma-schema migration runner crates.io v0.4.0 soma-ui 160+ Leptos components web (CSR) + site (SSR) soma-audit core / pg / client cryptographic audit trail soma-sdks crypto · iam · flags · sdk 4 client crates

soma-infra

soma-infra is the backend plumbing layer every SOMA suite consumes instead of re-implementing. It ships the primitives: the Postgres pool, the AES-256-GCM cipher, the OTLP telemetry init, the preconfigured rustls HTTP client. Every dependency is feature-gated and [optional]; a service that needs only a pool and Argon2 links zero LLM, Redis, or storage code. The central invariant is called the line: soma-infra owns the mechanism, the service owns the policy. A service passes its own HKDF info string and maps SQLSTATE to its own domain errors. The primitive lives here. The decision does not.

the pain

  • Service B copies the pool config, changes one param, leaks connections under load.
  • Hand-rolled AES-GCM in four services: four IV implementations, four items on the security audit.
  • OpenSSL version collision from a transitive dep breaks CI at 3am.
  • Copy-pasted telemetry init points at the wrong OTLP endpoint; errors vanish for weeks.

with soma-infra

  • Every dependency is [optional]; a Postgres-only binary links zero LLM, Redis, or storage.
  • connect_from_env() is the one pool configuration; every service uses the same tested path.
  • 100% rustls across every binary; no OpenSSL in the build graph.
  • AES-256-GCM, Argon2id, HKDF-SHA256, HMAC-SHA256, AES-KW in one location; each service passes its own parameters.
soma-infra: the line between policy (stays in the service) and mechanism (soma-infra provides the decision-free plumbing) SERVICE policy — stays in the service map_sqlx → domain errors (Conflict, WhitelistViolation, …) Migrator wiring schema name + advisory lock key HKDF info strings "soma-vault-tenant-kek-v1" crypto parameters KEK/envelope scheme, AES-KW agent loops prompt construction ingestion pipelines service supplies params soma-infra mechanism — decision-free plumbing db connect_from_env tracing telemetry::init signal shutdown_signal config require_env · env_or · env_parse errors redact_db_error testing TestDb crypto AES-GCM · Argon2id · HKDF · HMAC cache Redis + typed helpers storage-s3 / azure StorageClient abstraction llm LlmClient (Anthropic API) http reqwest · rustls · timeouts kg knowledge graph (pgvector) email send_otp · Postmark v1 + otlp · push · iam-client every dep is optional
The line: soma-infra owns mechanisms like the pool, crypto, and telemetry init; each service owns policy like its HKDF info strings and domain error mapping. Parameters cross one way, primitives the other. THE LINE soma-infra — the mechanism connect_from_env() — the one pool config AES-256-GCM · Argon2id · HKDF · AES-KW telemetry::init() — OTLP wiring rustls HTTP client, timeouts preset StorageClient — S3 / Azure behind one trait generic · decision-free · feature-gated your service — the policy the HKDF info string it passes in SQLSTATE → its own domain errors schema name + advisory lock key when to encrypt, what to store the prompt, the pipeline, the agent loop every decision the service owns parameters cross primitives return Mechanism lives in DevKit. Decisions stay in the service. Services stay small; the library stays generic.

soma-schema

soma-schema is a Postgres migration runner published at v0.4.0. It embeds in the server binary and migrates at startup, or runs as a standalone CLI. Execution order comes from migration-order.yaml; the manifest is the source of truth, not filesystem sort, so two branches landing the same day cannot produce different schema states. Every UP and DOWN script is SHA-256 checksummed; a rollback script that rotted untested registers as a startup error, not a 2am discovery. A Postgres advisory lock, keyed per service, prevents two replicas racing to apply the same migration on a rolling restart.

the pain

  • Two branches create migrations with the same timestamp; both run on the merge deploy.
  • A DOWN script untouched for six months drops a column now constrained NOT NULL.
  • Someone edits an applied migration; environments silently diverge on the next replica start.
  • Two replicas restart after a crash; both see an empty migration table and race.

with soma-schema

  • migration-order.yaml controls execution order; timestamp collisions cannot affect sequencing.
  • SHA-256 over UP and DOWN detects rollback script drift before it runs.
  • Applied migrations are immutable by checksum; editing one flags the runner on next startup.
  • Postgres advisory lock per service; concurrent replica restarts cannot double-apply a migration.
soma-schema migration flow: migrations/ artifact feeds the soma-schema runner (advisory lock, manifest order, SHA-256 checksum), which applies UP or rolls back DOWN against Postgres migrations/ ├─ 0001_init.up.sql ├─ 0001_init.down.sql ├─ 0002_…up.sql ├─ 0002_…down.sql └─ migration-order.yaml [manifest = source of truth] UP → ← DOWN (rollback) soma-schema crates.io v0.4.0 · library + CLI Postgres advisory lock (unique key per service) applies in manifest order SHA-256 checksum both UP and DOWN sections drift detected before any rollback UP → ← DOWN Postgres per-service schema (schema name = lock key) tracking table records applied migrations safe for concurrent replica restarts

soma-ui

soma-ui is the component library shared across every SOMA frontend: 160+ Leptos 0.8 components across 13 categories, written in Rust with no JavaScript framework. A single file, tokens.css, is the design-token source for soma-ui/web (the CSR/WASM dashboard kit) and soma-ui/site (the SSR kit that renders this website); visual consistency between the two packages is structural, not a convention teams agree to maintain. Component props are Rust types: a renamed field is a compile error, not a runtime shape mismatch. Fonts are self-hosted; the page makes no third-party requests for assets.

the pain

  • Rename a backend field; the JS component receives a string and silently breaks.
  • Tokens in two repos: six months later, amber is two different hex values.
  • A forgotten Google Fonts @import reaches out to a third party before first paint.
  • A JS major version forces a component library rewrite; typed contracts don't transfer.

with soma-ui

  • 160+ Leptos 0.8 components across 13 categories, including SecurityGraph and SchemaDiagram ERD.
  • Rust-typed component props: a mismatched prop is a compile error, caught before any deploy.
  • tokens.css is the single design-token source for soma-ui/web and soma-ui/site.
  • Self-hosted fonts: no Google Fonts requests, no third-party DNS lookups at runtime.
soma-ui: a shared tokens.css feeds two runtime packages — soma-ui/web (CSR/WASM dashboard kit) and soma-ui/site (SSR-safe site kit used by this page) tokens.css one token source · two targets soma-ui / web CSR / WASM · dashboard kit 160+ Leptos 0.8 components 13 categories · 106 playground pages SecurityGraph · SchemaDiagram ERD soma-ui / site SSR-safe · site kit Section · Container · ProseArticle TerminalFrame · Callout · … ← the components rendering this page

soma-audit

soma-audit is a three-crate cryptographic audit trail. The core crate is zero-IO — pure chain math: each event's HMAC-SHA256 covers the previous link, keys derive per source via HKDF, and Ed25519 seals let an auditor verify a range without write access. The Postgres sink and the outbox client are separate crates, so a service can adopt the chain without adopting the storage. Every crate carries #![forbid(unsafe_code)].

soma-audit hash chain: each event's HMAC-SHA256 covers the previous link, ending in an Ed25519 seal. Editing any past event breaks every later link. event 1 hmac(key, genesis ‖ e1) event 2 hmac(key, link1 ‖ e2) event 3 hmac(key, link2 ‖ e3) event 4 hmac(key, link3 ‖ e4) Ed25519 seal edit any past event → every later HMAC breaks · verify catches it in one pass core is zero-IO pure chain math · pg sink and outbox client are separate crates · #![forbid(unsafe_code)]

soma-sdks

Four client crates for talking to SOMA services — or for using the primitives standalone.

soma-crypto

Argon2id · ES256 JWT · AES-256-GCM

the crypto primitives, usable outside SOMA

soma-iam-sdk

JWKS verifier

validate IAM tokens server-side, no round-trip

soma-flags-core

IO-free flag evaluation · WASM-safe

sub-millisecond local evaluation, zero network

soma-sdk

Server-side + local evaluation wrapper

the one dependency a consuming service adds

License

All of it ships under the Apache License 2.0: every suite binary, every DevKit library (soma-infra, soma-schema, soma-ui, soma-audit, the SDKs), and this website. You can use, modify, and distribute under those terms — including commercially, without royalties, without asking.

There is no open-core split. No features are reserved for a paid tier. There is no plan to relicense. The Apache 2.0 commitment covers the codebase as it exists today and as it grows.

Repositories

The SOMA repos are on GitHub under the soma-platform organization. Repos go public in the order drawn above — the platform is pre-1.0 and some suites are still in active early development. The roadmap page has the current state of every component; to follow along, watch the changelog or the GitHub organization directly.