Tomas DvorakandDevin 9707f307a1 fix: silence errcheck on test-response writes
Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-09-24 23:08:15 +02:00
2026-04-10 12:03:31 +02:00
2026-04-14 16:06:57 +02:00
2026-04-10 12:03:31 +02:00
2026-04-10 12:03:31 +02:00
2026-04-10 12:03:31 +02:00

Primora

Primora

Self-hosted backend platform for building products.
Auth, Postgres-backed APIs, object storage, and audit logs on your own hardware.

Quick Start · Documentation · Releases · Contributing

CI Release License

What is Primora?

Primora is a self-hosted backend platform: organizations, projects, auth, S3-style object storage, JSON document collections, scoped API keys, and a full audit log behind one dashboard. Inspired by the UX of Appwrite and Supabase, with no hosted tier - your data stays on your hardware.

Screenshots

Overview Storage Telemetry
Project overview Object storage Telemetry and component health
More screenshots
Collections Automation Audit log
JSON document collections Scheduled jobs and live events Audit log with export

Features

  • Organizations & projects - workspaces with scoped org and project roles.
  • Auth - email/password plus optional GitHub, Google, Discord, and Microsoft OAuth. JWTs verified by the API against JWKS.
  • Storage - S3-style buckets on local disk or any S3-compatible backend (AWS, MinIO, Garage, R2), public or private. With s3 the API mints presigned upload/download URLs so large objects skip the backend.
  • Collections - schema-flexible JSON documents in Postgres JSONB, with filter/order queries.
  • Functions - project-scoped JS/TS run by bun/deno — on the host (exec) or in ephemeral locked-down containers (docker driver) — with per-run logs. Trigger them four ways: manual invoke, cron schedules (function_id on a job), inbound hooks (mode: "function"), or domain events (event_pattern like document.*).
  • Vault - AES-256-GCM project secrets plus an Argon2id/XChaCha20 local vault in the CLI and desktop app.
  • Automation - scheduled jobs, inbound webhooks, telemetry alert rules, and secret:// refs resolved at delivery.
  • Realtime - SSE event stream with a typed client SDK (@primora/client) — channel subscriptions, presence counts, and client-published custom.* events that fan out to webhooks and functions.
  • API keys - prm_<prefix>_<secret> credentials, shown once.
  • Audit log - every mutating request recorded, with CSV/JSON export.
  • Demo mode - fully client-side seeded workspace via ?demo=true.

Architecture

Browser ──▶ Nginx ──▶ Frontend (SolidJS + Vite)
                 ├──▶ Auth service (Better Auth + Hono)
                 └──▶ API (Go + Gin) ──▶ PostgreSQL
                                     ──▶ DragonflyDB (Redis-compatible cache)
                                     ──▶ Local filesystem object storage

Quick Start

Prerequisites: Docker with the Compose plugin.

curl -fsSL https://raw.githubusercontent.com/Dvorinka/Primora/master/install.sh | bash

Installs into ./primora, generates secrets, and starts the stack on port 80. Or from a clone:

git clone https://github.com/Dvorinka/Primora.git && cd Primora
./scripts/setup.sh          # creates .env, generates secrets, starts the stack

Then open http://localhost - or append ?demo=true to explore a seeded workspace without signing up. For prebuilt images, native development, port conflicts, and troubleshooting see QUICK_START.md.

Configuration

All configuration lives in .env - see .env.example for the annotated list and QUICK_START.md for the important ones.

Ecosystem

  • CLI - primora for orgs, projects, buckets, objects, keys, jobs, and audit — plus an encrypted local secrets vault (vault:*, secrets:*, inject), the shared project vault (secrets:* --remote, secret://NAME refs in job payloads), an agent credential broker (agent), and compose-stack operator commands (stack:*).
  • MCP server - exposes primora_* tools to MCP clients.
  • Desktop - Tauri 2 shell connecting to your deployment, with tray presence and a local Secrets Vault window (drives the CLI's vault).
  • PWA - the dashboard is installable on mobile and desktop browsers.

Documentation

Contributing

See CONTRIBUTING.md for the development workflow.

Security

See SECURITY.md for reporting vulnerabilities.

License

MIT

S
Description
No description provided
Readme MIT
2.4 MiB
0 Stars 1 Watchers 0 Forks
Languages
TypeScript 61.8%
Go 30.2%
CSS 2.4%
HTML 2.4%
Shell 1.4%
Other 1.8%