Server · #216 trending MCP repo · ↗ +22 stars this week

Carbon

crbnos/carbon

Open-source manufacturing ERP, MES and QMS. Quoting, MRP, inventory, shop floor, quality and lot/serial traceability on one Postgres schema, with a REST API and MCP server. Self-host or use Carbon Cloud.

Stars
2.8k
This week
+22
Forks
396
Open issues
130
Skills inside
35
Star trend · last 13 days+52 ★
Oct 25, 2026: 2,758 starsOct 26, 2026: 2,765 starsOct 27, 2026: 2,769 starsOct 28, 2026: 2,778 starsOct 29, 2026: 2,783 starsOct 30, 2026: 2,784 starsOct 31, 2026: 2,788 starsNov 1, 2026: 2,787 starsNov 2, 2026: 2,790 starsNov 3, 2026: 2,793 starsNov 4, 2026: 2,795 starsNov 5, 2026: 2,807 starsNov 6, 2026: 2,809 starsNov 7, 2026: 2,810 stars

Get started

Add it to your agent

claude mcp add --transport http carbon https://docs.carbon.ms/api/mcp

A hosted server: nothing to install. Run /mcp in Claude Code to sign in if it asks.

Inside this repo

35 skills

agent-browserBrowser automation CLI for AI agents. Use when the user needs to interact with websites, including navigating pages, filling forms, clicking buttons, taking screenshots, extracting data, testing web apps, or automating any browser task. Triggers include requests to "open a website", "fill out a form.claude/skills/agent-browserauthLog into the local Carbon ERP dev server with agent-browser using the DEV_BYPASS_EMAIL bypass. Use before any browser automation that needs an authenticated session (/test, /smoke-test, manual verification). Requires a running dev stack (crbn up). Building block — it leaves the session open for the .claude/skills/authcarbon-design- Carbon's design language — the principles, page archetypes, components, states, copy rules and anti-patterns that make UI look and behave like the rest of Carbon (ERP + MES). Use whenever designing, building, restyling or reviewing any user-facing UI in apps/erp, apps/mes, packages/react or packag.claude/skills/carbon-designcarbon-docs- Author, edit, or extend the Carbon documentation site at `docs` (a built Fumadocs + Next.js app). Use whenever creating or changing reader-facing docs for Carbon: editorial Guide chapters, Reference/entity pages, the docs IA, or "document this feature" requests — anything destined for the docs sit.claude/skills/carbon-docschangelog-entry- Write and ship a Carbon changelog entry end to end: ground it in what actually merged, write the MDX in the house format, generate its thumbnail, and verify the feed, the permalink and the RSS newsletter all still render. Use whenever someone asks to add, write, draft or publish a changelog entry,.claude/skills/changelog-entrycheck-and-commitPre-commit verification gate — runs Carbon's validation gates in order (generate:types if schema changed, biome, scoped typecheck, scoped tests, build if needed, and /translate to fill missing i18n .po strings when UI/locale files changed), fixes straightforward failures, then commits the specific f.claude/skills/check-and-commitconductorAutonomous loop conductor — drive a single work item (a bug, a usability tweak, a small feature) through a doer→gate→judge→keep-or-revert→ledger cycle to a gated PR, unattended. Use when asked to "conduct", "loop on", or build/fix one tightly-scoped item with explicit acceptance criteria, and as the.claude/skills/conductorcreate-agents-mdCreate or refresh an AGENTS.md for a Carbon package or ERP module by reading the actual source code — every claim traced to a real function, table, or export. Use when adding a new module/package, when the conductor's freshness audit or /self-review flags a stale AGENTS.md, or on explicit request. D.claude/skills/create-agents-mddebugging-difficult-bugsRuntime-instrumentation debugging for bugs that static reading can't pin down — add temporary unconditional JSONL logging to the real code path, reproduce, read the log, then fix. Use when /root-cause lands at MEDIUM/LOW confidence, when a bug involves runtime state, ordering, caching, streaming, co.claude/skills/debugging-difficult-bugserrorCapture a screenshot plus element snapshot of the current browser page when an error appears during e2e testing, saved to gitignored .ai/scratch/e2e/. Use whenever an agent-browser snapshot shows "Something went wrong", an auth error, a blank page, or an unexpected redirect. Building block — it capt.claude/skills/errorexecuteExecute an approved implementation plan from .ai/plans/ task by task, running each task's verification and committing per task via the check-and-commit gate. Use when asked to "execute the plan", "implement the plan", or after /plan approval. Do not use without an approved plan file — run /plan firs.claude/skills/executeexplainRender a spec, plan, or research file from .ai/ as a self-contained HTML explainer saved beside it (same name, .html) — plain STE-80 prose, one SVG diagram of the whole change, before/after tabs, collapsible decisions and tasks — so a human understands it in minutes instead of reading the markdown. .claude/skills/explainfeatureEnd-to-end feature pipeline that orchestrates /research, /spec-writing, /plan, /execute, /test, and /self-review. At start it picks an autonomy mode (approval-before-each-phase vs fully autonomous) and a phase set (plan + execute are mandatory; research, spec, test, self-review are optional), auto-d.claude/skills/featurefixEnd-to-end bug-fix pipeline that diagnoses, implements, and proves the fix. It orchestrates /root-cause, /debugging-difficult-bugs, /test, and /check-and-commit, and performs the fix itself — the minimal code change from the proven cause plus a mandatory red→green proof (committed as a regression te.claude/skills/fixgrillInterview the user relentlessly, one question at a time, to stress-test a plan, spec, or design until every open decision is resolved — recommended answer per question, answers cross-checked against the codebase and the @carbon/content/glossary domain terms, resolutions written back to the artifact .claude/skills/grillimproveSurvey the Carbon codebase as a senior advisor and produce prioritized, self-contained implementation plans for OTHER models/agents to execute. Strictly read-only on source code — never implements, fixes, or refactors anything itself. Use when asked to audit Carbon, find improvement opportunities (b.claude/skills/improveinngestInngest platform reference for Carbon's background jobs — durable functions, steps, events, flow control, error handling, and local dev, all in the v3 syntax Carbon actually runs (inngest ^3.52 in @carbon/jobs). Use when writing or reviewing Inngest functions, choosing flow-control (concurrency/thro.claude/skills/inngestmake-interfaces-feel-betterDesign engineering principles for making interfaces feel polished. Use when building UI components, reviewing frontend code, implementing animations, hover states, shadows, borders, typography, micro-interactions, enter/exit animations, or any visual detail work. Triggers on UI polish, design detail.claude/skills/make-interfaces-feel-betterplanTurn a finalized spec into a step-by-step implementation plan at .ai/plans/{YYYY-MM-DD}-{slug}.md, where every task has exact file paths, exact commands, and a verification with expected output. Use when asked to "plan the implementation", "create a plan", or after a spec's open questions are resolv.claude/skills/planpr-explainerBuild a self-contained HTML review aid at .pr-review/{branch}.html that teaches a reviewer what a PR changes and why — problem, system context, before/after flow, focused diffs, verification evidence, takeaway. Use when asked to explain a PR, help reviewers understand a complex change, or produce a .claude/skills/pr-explainerpr-splitterSplit a large, messy, or hard-to-review pull request into smaller reviewable PRs (stacked or parallel) without losing any of the original work — snapshot the branch, extract changes non-interactively, verify each PR independently, and track drift as review feedback lands. Use when a PR is too big to.claude/skills/pr-splitterresearchSurvey how best-in-class ERPs and point solutions implement a feature, and produce a findings file at .ai/research/{slug}.md. Use when designing a new feature, evaluating approaches, or answering "how do competitors / SAP / the industry do X". Required before designing any ERP-domain feature (accoun.claude/skills/researchresolving-merge-conflictsUse when you need to resolve an in-progress git merge/rebase conflict..claude/skills/resolving-merge-conflictsroot-causeRead-only root-cause analysis for any bug, test failure, or unexpected behavior — before proposing or writing any fix. Produces a brief with the root cause, files to change, approach, and risks. No edits, no commits, no state-changing commands. Use before /fix or /conductor whenever the cause isn't .claude/skills/root-causerust-best-practicesGuide for writing idiomatic Rust code based on Apollo GraphQL's best practices handbook. Use this skill when: (1) writing new Rust code or functions, (2) reviewing or refactoring existing Rust code, (3) deciding between borrowing vs cloning or ownership patterns, (4) implementing error handling with.claude/skills/rust-best-practicesrustRust reference for Carbon's cargo workspace (crates/* + apps/assembler) — tokio discipline for CPU-heavy C++ FFI, ownership/interior-mutability choices, rayon isolation, error conventions, performance and profiling, all grounded in measured results from this codebase. Use when writing or reviewing R.claude/skills/rustself-reviewCritically review your own branch work before or just after opening the PR, producing Must fix / Risks / Suggested improvements plus a docs-freshness check. Use when finishing a branch, before opening or merging a PR, or to sanity-check a diff against main. Supports an opt-in strict "thermo-nuclear".claude/skills/self-reviewsmoke-testQuick e2e smoke test of the local Carbon ERP dev server — logs in via /auth, then loads each core module and verifies it renders without errors. Use after booting a stack, after wide-reaching changes, or when asked to "smoke test" the app. For feature-specific testing use /test instead..claude/skills/smoke-testspec-writingDesign a feature and write its spec at .ai/specs/{YYYY-MM-DD}-{slug}.md, with competitor research and explicit design decisions. Open questions are resolved with the user BEFORE the spec is written — the interview comes first, the document second. Use when designing or brainstorming a new feature, a.claude/skills/spec-writingsupabase-postgres-best-practicesPostgres performance optimization and best practices from Supabase. Use this skill when writing, reviewing, or optimizing Postgres queries, schema designs, or database configurations..claude/skills/supabase-postgres-best-practicestddTest-driven development. Use when the user wants to build features or fix bugs test-first, mentions "red-green-refactor", or wants integration tests..claude/skills/tddtest-driven-developmentCarbon's red→green loop with vitest — prove a change with a failing test first, then decide whether that test earns a place in the repo or stays a scratch proof. Use when implementing a feature or bug fix test-first, or when about to add or change a committed test. The house style it enforces is `.c.claude/skills/test-driven-developmenttranslateFill missing i18n translations in the Lingui .po catalogs cheaply and CONSISTENTLY — extract every empty msgstr, attach the approved domain terminology from packages/locale/locales/glossary.json, fan out chunked jobs to Haiku subagents (model override, not the main model), merge results back determi.claude/skills/translateuiExplore, build, and refine UI..claude/skills/uiwriting-skillsHouse guide for creating or editing agent skills in this repo (.claude/skills/). Use when writing a new skill, restructuring an existing one, or reviewing skills for quality. Covers the frontmatter contract, the install wiring, the house template, and the weak-executor writing rules every Carbon ski.claude/skills/writing-skills

Documentation

README

View on GitHub ↗
Carbon

Build hardware at the speed of software

Carbon combines ERP, MRP, MES and QMS.
Plan materials, run the shop floor, manage quality and track actual costs in one system.

Hard tech unicorns build on Carbon.

Start 30-day trial · Self-host · Docs · API · MCP · Discord · Roadmap

GitHub stars Discord TypeScript React Postgres Rust License: AGPL-3.0


Carbon assembly instructions: step-by-step 3D work instructions authored from the CAD model
Sales orders list with status, linked jobs and order totals

One record from quote to cash. Link quotes, orders, jobs and invoices.

Multi-level bill of materials with planning and supersession

Generate configurations from rules. Control BOMs, routings and revisions.

Lot and serial traceability graph

Trace every unit to its source. Follow lot and serial genealogy in both directions.


Contents


Why Carbon

Manufacturing teams often run planning, production, quality and accounting in separate systems. That creates predictable problems:

  • BOMs and revisions are re-keyed between engineering and production
  • Material shortages surface after work has started
  • Job costs and quality records are reconstructed after the fact
  • Integrations depend on vendor-specific tools and consultants

Carbon puts ERP, MRP, MES and QMS in one Postgres database you can inspect, own and extend. Engineering, planning, production, quality and accounting update the same data, without synchronization jobs between separate product databases.

Carbon is an open-source alternative to NetSuite, Epicor, SAP Business One, Plex, Odoo and ERPNext. It supports complex assembly, contract manufacturing, configure-to-order and high-mix, low-volume production. See all comparisons.


Features

ERP — Inventory & Costing Quotes, orders, purchasing, inventory, invoicing and actual job costs
MRP — Planning Demand, supply planning, versioned BOMs and routings, finite-capacity scheduling
MES — Execution Digital travelers, operator terminals, 3D instructions, barcode and labor capture
QMS — Quality Inspections, FAI, nonconformance, CAPA, calibration and risk management
Traceability Forward and backward lot and serial genealogy
Engineering Multi-level BOMs, revisions, change orders, supersession and product configuration
Accounting General ledger, journals, multi-entity, multi-currency and accounting integrations
Workflows Rule-based automation with triggers, actions and run history
Maintenance & Assets Scheduled maintenance, fixed assets and kanban replenishment
API, Webhooks & MCP Typed REST operations, event-driven webhooks and a permission-aware MCP server
Custom Fields Extend records without changing the core schema
Integrations Onshape, SolidWorks, Paperless Parts, Linear, Jira, Slack, Ramp, Stripe and Zebra

See the full roadmap for what's next.

Technical highlights

  • Generated types shared by the database, application and API
  • Postgres row-level security and tenant-scoped records
  • Role- and attribute-based access for employees, customers and suppliers
  • Realtime database subscriptions
  • Shared identity and permissions across the application, API and MCP server
  • Explicit dependency graphs for manufacturing operations
  • Rust geometry services for STEP conversion and assembly motion planning

Get Carbon

Carbon Cloud Managed application, database, updates and backups. Start a 30-day trial without a sales call.
Self-hosted Run Carbon in your VPC, on-prem or air-gapped. See the self-hosting guide.
Develop locally Run the application and supporting services from source. Follow Local Development.

API & MCP

The Carbon API exposes the same manufacturing operations used by the application. Each operation validates its input, updates dependent records and enforces the authenticated identity's permissions. Operations are available through two interfaces with the same arguments:

  • HTTP: POST https://app.carbon.ms/api/v1/{module}/{operation}, with a published OpenAPI spec for generating a typed client in any language
  • MCP: as tools for hosted or local AI agents, scoped to the permissions of the API key or signed-in user

Create a key under Settings → API Keys, then:

curl -X POST https://app.carbon.ms/api/v1/sales/getSalesOrders \
  -H "Authorization: Bearer $CARBON_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "args": { "limit": 10 } }'

Self-hosted deployments serve the same API at /api/v1. The Data API provides direct access to permitted tables and views when an operation is not available in the service layer.

API keys and MCP are included with Business and Enterprise plans. Using them in a self-hosted deployment requires a commercial license.


Architecture

ERP and MES are React Router apps over a single Postgres database. Permissions (row-level security), computed totals and change events live in the database itself; background work runs through Inngest, which calls back into the ERP to execute jobs. The architecture guide follows one click all the way down.

How Carbon fits together: shop floor, office and customers reach the MES and ERP, which read and write Postgres; subscribed writes queue Inngest jobs that run back in the ERP

Building E2E Systems

Carbon is intended to be the core of a bespoke end-to-end manufacturing system. We provide an apps/starter and allow you to build a custom sales and shop-floor engine with Carbon at the center.

Carbon Functionality

Carbon Architecture


Tech Stack

Layer Technology
Apps React Router 7 on Vite, TypeScript
UI Tailwind 4, Radix, React Aria, TanStack Table and Query
Forms Zod with @carbon/form
Database Postgres with row-level security, PostgREST and Kysely
API oRPC with OpenAPI, MCP server
AI AI SDK (Anthropic, OpenAI)
Jobs & events Inngest
Cache Redis
3D & CAD three.js / react-three-fiber; Rust with OpenCASCADE and FCL
Documents React PDF, React Email, TipTap
i18n Lingui
Tooling pnpm, Turborepo, Biome, Vitest
Docs Next.js + Fumadocs
Hosting AWS via SST, or self-hosted with Docker

Monorepo

A pnpm + Turborepo monorepo:

carbon
├── apps         # ERP, MES and the Rust assembler
├── packages     # shared TypeScript packages
├── crates       # Rust crates behind the assembler (CAD conversion, collision, motion planning)
└── docs         # docs.carbon.ms, with content and glossary as @carbon/content

/apps

App Description
erp ERP: sales, purchasing, inventory, planning, quality, accounting
mes MES: the shop floor app, run on tablets next to the machines
assembler Rust geometry service: STEP → GLB and assembly motion planning
academy Training
starter Example app built on the API

/packages

Package Description
@carbon/database Schema, migrations, generated types and database clients
@carbon/auth Authentication, RBAC, sessions, API keys and OAuth
@carbon/api API contract: the generated operation manifest behind the Carbon API and MCP
@carbon/react Shared UI components (Radix, React Aria, Tailwind)
@carbon/form ValidatedForm and field components for zod + FormData
@carbon/jobs Inngest background jobs: events, integrations, notifications, workflows
@carbon/planning MRP and scheduling engines
@carbon/documents PDFs, email templates, ZPL labels, QR and barcodes
@carbon/printing Printer routing, label queue and ProxyBox delivery
@carbon/viewer 3D models and animated assembly instructions (react-three-fiber)
@carbon/files File handling: images, HEIC, CAD formats
@carbon/tiptap Rich-text editor extensions and components
@carbon/onboarding Implementation Hub: guided company setup
@carbon/notifications Notification event taxonomy shared by apps and jobs
@carbon/workflows-core Community-licensed contracts for workflow triggers
@carbon/locale Lingui i18n runtime for ERP and MES
@carbon/lib Server utilities: event system, Inngest client, SMTP, Slack
@carbon/kv Redis client and rate limiting
@carbon/env Validated environment variables, secrets kept server-side
@carbon/logger Isomorphic logger built on LogTape
@carbon/utils Pure shared utilities (dates, precision, BOM, formatting)
@carbon/stripe Stripe billing (Carbon Cloud only)
@carbon/ee Enterprise features and integrations (commercial license)
@carbon/checks Conformance checks that keep the codebase consistent
@carbon/dev The crbn dev CLI: worktrees, Docker stacks, dev URLs
@carbon/harness Harness for AI coding agents working on this repo
@carbon/config Shared Vitest, TypeScript and Tailwind configuration

Local Development

Prerequisites: Docker, Node.js 24.22.1+ and pnpm (via Corepack). On Windows, use WSL or Git Bash.

git clone https://github.com/crbnos/carbon.git && cd carbon
corepack enable && pnpm install
cp .env.example .env
pnpm dev

pnpm dev boots the whole backend in Docker (Postgres, PostgREST, auth, storage, realtime, Inngest, Redis and a mail catcher), applies migrations, generates types and starts the apps:

Surface URL
ERP http://localhost:3000
MES http://localhost:3001
API http://localhost:54321

Sign in as test@carbon.ms: the dev stack seeds that user and skips the magic link. To fill a company with a full demo story (items, BOMs, orders, jobs, inspections, journals), seed one of the industry datasets (satellite, robotics, precision, motor):

pnpm db:seed:dev -- --email test@carbon.ms --dataset satellite

No external accounts are needed to run locally. Email, Google/Microsoft sign-in, Stripe, PostHog and AI providers are all optional and configured in .env; see environment variables.

Worktrees and the crbn CLI

pnpm dev is shorthand for crbn up --no-portless. Run source ./setup.sh once to put crbn on your PATH and you get a separate, isolated stack per git worktree, so several branches can run side by side, each on its own HTTPS .dev URLs via portless:

crbn checkout -b feat/my-thing   # new branch + worktree off HEAD
crbn up                          # boot this worktree's stack at erp.<branch>.dev
crbn checkout 760                # check out PR #760 into its own worktree
crbn status | down | reset       # ports and health, stop, wipe and reboot

The full command reference is in the local development guide.

Optional: the assembler geometry service

assembler is a Rust service (STEP → GLB + assembly motion planning) over C++ FCL and OpenCASCADE. ERP/MES run fine without it — set it up only if you need the 3D /convert and /plan endpoints.

  1. Toolchain + native build deps (macOS):

    curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh   # Rust, if not already installed
    brew install fcl cmake ninja draco                               # collision libs (+ libccd/eigen/octomap), build tools, Draco mesh compression
    

    On Linux, install the equivalents from your package manager: libfcl-dev libccd-dev libeigen3-dev liboctomap-dev libdraco-dev cmake ninja-build plus a C/C++ toolchain.

    ./setup.sh already installs Draco on macOS. If yours lives outside the Homebrew keg (/opt/homebrew/opt/draco on arm64), point draco-bridge's build at it with DRACO_PREFIX=/path/to/draco cargo build.

  2. Build OCCT once — a patched static OpenCASCADE, cached in ~/.cache/carbon-occt. Slow (~15–30 min) but one-time per machine; re-running is a no-op once cached:

    ./apps/assembler/scripts/build-occt.sh
    
  3. Build the service — seconds once OCCT is cached (build.rs finds it automatically):

    cargo build --release -p assembler
    

crbn up spawns the binary when it's present. Verify it's up with curl -sf "$ASSEMBLER_SERVICE_URL/health" (the URL is in your worktree's .env.local) or by watching the asm | lines in the crbn up output. Without the binary the rest of the stack still runs — only /convert and /plan are unavailable.

Restoring a production snapshot

To restore a production database snapshot locally, use crbn restore. It handles both plain-text .backup and custom-format .dump archives, drops and rebuilds the public schema, fits the backup to your stack's auth/storage/realtime schemas, verifies that every index, constraint, trigger and policy landed, realigns internal sequences, resets storage metadata, then applies any migrations the backup predates and regenerates types. If verification fails, it exits nonzero and applies no migrations.

  1. Export a backup of your production database with pg_dump.

  2. Run it from your worktree root:

    crbn restore /path/to/db_cluster.backup
    # …or for .dump archives:
    crbn restore /path/to/postgres_YYYYMMDD.dump
    

    It prompts before replacing the database. The stack must already be running (crbn up) — a restore rewrites the auth and storage schemas, which GoTrue and Storage build through their own migrations when those containers boot, so crbn restore refuses rather than restore into an uninitialized stack.

    To also get local admin access, pass your production email — your account is upgraded to Admin in the companies it already belongs to and the password is reset locally:

    crbn restore /path/to/backup.backup --admin-email you@example.com
    # Optional: set a custom local password (default: localpass)
    crbn restore /path/to/backup.backup --admin-email you@example.com --admin-password mypass
    

    Useful flags: --no-scrub-emails keeps real addresses (see the warning below), --mode prod restores exactly as-is without localizing config/webhooks/integrations, --no-migrate / --no-regen skip the trailing steps, --yes skips the prompt.

    Emails are scrubbed by default — every address is rewritten to @example.test (your --admin-email is preserved so you can still log in). If you pass --no-scrub-emails, real production addresses will be present in the local DB; ensure local email sending is disabled or pointed at a sandbox (e.g. Mailpit) before triggering any email flows.

    Note: storage.objects is truncated by default, so a restore does not populate local file storage — kept rows would reference files that only exist in the source environment's backend. Pass --keep-storage-objects to retain the metadata (and the backup's buckets) anyway; downloads will still 404, but the rows are there for work that needs realistic storage volume.

The underlying script, scripts/restore-database.sh, can still be invoked directly — it takes the same options as environment variables (SCRUB_EMAILS, ADMIN_EMAIL, ADMIN_PASSWORD, RESTORE_MODE), but note it defaults to not scrubbing emails and leaves the trailing pnpm db:migrate / pnpm db:types to you.


Commands

Command Description
pnpm dev Boot the stack and apps on localhost
pnpm db:migrate:new <name> Create a database migration
pnpm db:migrate Apply pending migrations
pnpm generate:types Regenerate database types after a migration
pnpm db:seed:dev -- --dataset <key> Seed a demo company
pnpm lint / pnpm test Biome lint / unit tests
pnpm exec turbo run typecheck --filter=<pkg> Typecheck one package
pnpm --filter <pkg> <cmd> Run a command in one workspace

This project uses Biome for formatting and linting; install the VS Code extension for format-on-save.


Security

Found a vulnerability? Please email support@carbon.ms instead of opening a public issue. We respond within 3 business days and credit reporters once a fix ships. The full policy is in SECURITY.md.

Security is enforced by the database, not left to application code:

  • Tenant isolation in Postgres. Every table is scoped to a company and guarded by row-level security, so a query can only see its own company's rows.
  • Granular permissions. Role-based access per module and action for employees, customers and suppliers, applied the same way in the app, the API and MCP.
  • Scoped API keys. Keys carry explicit permissions, are stored only as hashes and are rate limited per key.
  • Sign-in. Passkeys, SSO, and enforced two-factor authentication on the Business plan.
  • Audit log. A record of who changed what and when, on the Business plan.
  • Your perimeter. Deploy in your VPC, on-prem or air-gapped to keep CUI inside infrastructure you control while supporting ITAR and CMMC requirements.

Contributing

We welcome contributions of all sizes. Read CONTRIBUTING.md to get started, and say hi in Discord. Good first issues are labelled good first issue.

Contributors

Star history

Star history chart

License

Carbon is open core. Everything in this repository is licensed under AGPLv3, except the Enterprise files (packages/ee and any file whose name contains .ee.), which are under the Carbon Commercial License. See Licensing for what that means in practice.


Built by the Carbon team · Join the Discord