Self-hosted Git platform

Your code. Your repos. Your runners.

A full self-hosted git platform: repositories, pull requests, issue tracking, forking, and CI/CD on a Rust backend with an Astro and SolidJS frontend. Built for teams that want the collaboration of a modern forge without giving up control of their code, packages, app automations, runners, or auth plane.

What ships in v0.1

Repositories, apps, packages, and CI on one permission plane.

Repositories

Git that you own, from bare repo to branch protection.

Backed by git2-rs. Native ref locking, smart HTTP and SSH transports, and branch protections that map directly to SpiceDB relations.

Apps

Install exact-permission automations.

Cuitty Code Apps are versioned in Git, reviewed through a permission manifest, installed to users, orgs, repos, registry namespaces, or packages, and run through Airflow.

Learn more ->
Registry

Private packages by default.

Host npm packages, Cargo crates, OCI images, and Python packages in a registry that respects user and organization slugs, package scopes, and install policy.

Learn more ->
Market

Share apps with your org or the public.

Publish app listings from signed Git tags, keep apps private, share with selected organizations, or make them discoverable in the Code App Market.

Learn more ->
Pull requests

Review, threaded comments, merge strategies you control.

Squash, rebase, or merge-commit on a per-target-branch basis. Every comment, approval, and merge becomes an audit event in Observe.

Issues

Bidirectional Yapture sync.

Issues live in Yapture lists and workspaces. Comment on an issue from Code, see it in Yapture. Close it in Yapture, the PR closes too.

CI/CD

Apache Airflow + Dagger. Bring your own runners.

Pipelines are Airflow DAGs, steps run in Dagger containers. No proprietary runner protocol. Your hardware, your minutes, your secrets.

Auth

BetterAuth sessions, SpiceDB relations.

Instance-lockdown auth out of the box. Zanzibar-style relations let you express "reviewers can comment but not merge" without writing custom middleware.

Ratatui TUI

A terminal-native client for every workflow.

Browse repos, read PRs, comment, and trigger CI from the keyboard. The same wire protocol the web frontend uses.

Control plane

SpiceDB decides access. Airflow runs work. Git keeps the record.

Cuitty Code Apps, the App Market, and the Code Registry all share the same authorization graph as repositories. App installs, package publishes, scans, index rebuilds, and ownership transfers are durable Airflow runs. App source, release manifests, package indexes, and markdown docs stay Git-backed where it matters.

See it in action

Open a PR from the terminal. Watch CI flow into Observe.

A scripted replay of a real cui code pr create session: branch, push, PR open, pipeline run, audit + deploy events surfaced. Switch tabs for the Persist and Observe scenes.

~/projects/webapp — cui (code)scene 1 / 3
0 / 34 frames

Architecture

Three clients, one Axum API, five engines, one Persist store. Every action emits to Observe.

Cuitty Code platform architecture Frontend, TUI, and CLI clients reach the Axum REST and WebSocket API. The API delegates to Git core (git2-rs), PR engine, Issues, CI orchestrator, and BetterAuth + SpiceDB. All state persists through Cuitty Persist. Every action emits to Observe modules (audit, deploys, logs). CLIENTS Frontend (Astro + Solid) TUI (Ratatui) CLI (forge ext) API REST + WebSocket Axum + Tower BetterAuth session + token SpiceDB CODE ENGINES Git Core (git2-rs) PR Engine (review, merge) Issues (Yapture sync) CI Orchestrator (Airflow + Dagger) Cuitty Persist records, events, blobs, key-value Observe (audit, deploys, logs) every push, PR comment, CI run, and merge emits an event Dotted arrows are Observe emits. Every Code action becomes an event in the same Observe instance you point your apps at.

Drive Code from your code

Open PRs, list repos, trigger CI. Same wire protocol the TUI and web frontend use.

import { createCodeClient } from "@cuitty/sdk/code";

const code = createCodeClient({
  instanceUrl: "https://code.example.com",
  apiKey: process.env.CUITTY_CODE_TOKEN!,
});

const pr = await code.pulls.create({
  repo: "acme/api",
  source: "feat/rate-limit",
  target: "main",
  title: "Add per-tenant rate limiting",
  body: "Implements token-bucket limiter scoped to tenant id.",
  reviewers: ["alice", "bob"],
});

console.log(pr.url);

SDK in preview. The wire protocol is stable and documented.

Bring your code home.

Self-host the whole Git workflow on your hardware. The Docker Compose that runs Code is the same one that runs the rest of Cuitty (Persist, Observe, BetterAuth, SpiceDB). One install, one auth plane, one place to look.