self-hosted · MIT licensed

Your backend, your hardware.

Primora is a self-hosted backend platform — auth, Postgres-backed APIs, S3-style object storage, JSON collections, scoped API keys, and a full audit log behind one dashboard. No hosted tier.

$ curl -fsSL https://raw.githubusercontent.com/Dvorinka/Primora/master/install.sh | bash
http://localhost
Primora project overview dashboard
1 cmd
install — Docker Compose up
0 hosted tiers
data never leaves the box
MIT
open source license
100% audit
every mutation logged
// features

Everything a backend needs. Nothing it doesn't.

Inspired by the UX of Appwrite and Supabase — rebuilt as a single self-hosted stack you own outright.

Organizations & projects

Workspaces with scoped org and project roles. Invite members by link, assign owner/admin/developer.

rbac

Auth

Email/password via Better Auth, optional GitHub, Google, Discord and Microsoft OAuth. JWTs verified against JWKS.

better-auth + jwks

Object storage

S3-style buckets on your own filesystem, public or private. Upload, move, rename, inline preview.

local fs

Collections

Schema-flexible JSON documents stored in Postgres JSONB. Query, create and update without migrations.

postgres jsonb

Scoped API keys

prm_<prefix>_<secret> credentials, shown once at creation. Revocable, rate-limited per key.

prm_*

Audit log

Every mutating request recorded — actor, action, target. Filterable in the UI, exportable as CSV or JSON.

csv / json export

Automation

Scheduled jobs and live event streams. Webhooks and connectors push project events to external systems.

schedules + webhooks

Instance admin

Sign-up policy, mail transport, and rate limits managed in-app — no restart, secrets stored AES-256-GCM.

settings → instance

Demo mode

Fully client-side seeded workspace — append ?demo=true to the URL, no sign-up required.

?demo=true
// stack

Boring on purpose.

One Postgres, one API, one process boundary per concern. Everything ships in Docker Compose.

Browser ──▶ Nginx ──┬──▶ Frontend       SolidJS + Vite
                    ├──▶ Auth           Better Auth + Hono
                    └──▶ API            Go + Gin
                            │
                            ├──▶ PostgreSQL   primary datastore
                            ├──▶ DragonflyDB  cache + rate limits
                            └──▶ Local FS     object storage
// screenshots

The console, as shipped.

Real UI, no mockups. Every screen is dark-first, hairline-divided, and keyboard-driven.

Object storage buckets and files
Storagebuckets / objects
JSON document collections
Collectionsjsonb documents
Telemetry and component health
Telemetrycomponent health
Scheduled automation jobs
Automationschedules
Live automation events
Live eventsreal-time stream
Audit log with export
Audit logcsv / json export
// ecosystem

Beyond the browser.

The same API powers a CLI, an MCP server, a desktop shell, and an installable PWA.

CLI

primora manages orgs, projects, buckets, objects, keys, and audit from the terminal.

$ primora storage objects --bucket assets --limit 10

MCP server

Exposes primora_* tools to MCP clients — drive the platform from an agent.

primora_list_projects · primora_upload_object · …

Desktop

Tauri 2 shell that connects to your deployment, with tray presence and native notifications.

apps/desktop · tauri 2

PWA

The dashboard installs on mobile and desktop browsers — same console, native frame.

installable · offline-aware shell

Run it on your own box.

Docker with the Compose plugin is the only prerequisite. Up in one command.