Built with Civility

The user brings the server. You bring the app.

Why use Civility?

Zero server maintenance

Users connect their own Civility accounts for data access, so there's no database for you to deploy, no auth to manage, and no S3 instance to connect!

We do the annoying stuff

You wanted to build a photo app, not a sync engine! We'll handle the syncing, sharing, and user access, so you can focus on the fun parts!

Open Source. Self-Hostable.

Your features deserve to live forever; not die when some VC serverless company changes direction. See the code →

See it in action

One system, very different apps.

ListenApp

An audio player + media server with support for synced libraries, podcasts, and voice memos. listen.bpev.me →

MapsApp

Offline-capable maps bookmarking — in the browser. maps.bpev.me →

Inro

A notes app with end-to-end encryption support. inro.bpev.me →

CookApp

A recipes app with AI-supported imports. cook.bpev.me →

How it works

  1. Manage state with @civility/store. Civility includes code to help you with schema declaration, versioning, and migration.
  2. Add @civility/sync and/or @civility/share Extend your store with cloud capability; your app keeps working fully offine, and uses `@civility/store` to handle conflicts when you reconnect.
  3. Users login to an instance. Your app opens the Civility popup; the user signs in to their own account and grants the access your app requests.