---
title: Self-hosted Registry
description: Run Cuitty Registry as a standalone service backed by Cuitty Store.
section: Registry
order: 2
updatedAt: 2026-06-09
slug: registry/self-hosted
---
Cuitty Registry self-hosts as its own service. The deployment owns package metadata, protocol indexes, upload sessions, audit events, quotas, and blobs through Cuitty Store instead of writing artifacts into a Cuitty Code data directory.

## Minimal topology

| Component | Responsibility |
| --- | --- |
| Registry API | Admin API, npm, Cargo, PyPI, and OCI protocol endpoints |
| Store records | Namespaces, packages, versions, tokens, uploads, quotas, and indexes |
| Store blobs | Tarballs, crates, wheels, sdists, OCI manifests, and OCI layers |
| Store events | Publish, yank, unyank, visibility, transfer, cleanup, and migration events |
| SpiceDB | Namespace, package, token, publish, install, and admin permissions |
| Auth issuer | User and service-token identity |
| Worker | Outbox draining, upload cleanup, index rebuilds, scans, and replication |

## Example local profile

```toml
[profile.registry-local]
records = "sqlite:///var/lib/cuitty/registry/records.sqlite"
blobs = "file:///var/lib/cuitty/registry/blobs"
events = "sqlite:///var/lib/cuitty/registry/events.sqlite"
```

## Example production profile

```toml
[profile.registry-production]
records = "postgres://registry:change-me@postgres/registry"
blobs = "s3://cuitty-registry-artifacts"
events = "postgres://registry:change-me@postgres/registry_events"
```

## Environment

```bash
PUBLIC_REGISTRY_URL=https://registry.example.com
AUTH_ISSUER=https://auth.example.com
AUTH_CLIENT_ID=cuitty-registry
SPICEDB_ENDPOINT=https://spicedb.example.com
SPICEDB_PRESHARED_KEY=change-me
CUITTY_STORE_PROFILE=registry-production
REGISTRY_MAX_UPLOAD_BYTES=104857600
REGISTRY_OCI_UPLOAD_TTL_HOURS=24
```

## Operations checklist

1. Start Store records, events, and blob storage.
2. Start SpiceDB and load the Registry authorization schema.
3. Start the auth issuer and provision the `cuitty-registry` client.
4. Run Registry migrations.
5. Start the Registry API and worker.
6. Run native-client smoke checks for each enabled protocol.
7. Configure backup jobs for Store records, events, and blobs.

Use [the operator runbook](/docs/registry/operator-runbook) for smoke checks, recovery, and failure-mode handling.