DEV Community

Sara
Sara

Posted on

Self-hosted Convex alternatives in 2026

Convex offers a fantastic developer experience. You write standard TypeScript functions. Your frontend subscribes directly to them. The screen stays live without managing complex websocket code.

However, you might want to run it on your own server. Perhaps you need your data in a region Convex doesn't host. Today Convex hosts in US East, Ireland, Sydney, and Canada. You might just want no vendor between you and your data.

Let's look at four options you can run yourself, starting with Convex itself.

1. Convex, self-hosted

What it is: Convex ships an open-source backend running the same code as its cloud service. It is written mostly in Rust, using TypeScript for your functions.

How live updates work: Queries are cached and subscribable. This means the UI updates automatically when data changes. You write queries, mutations, and actions just like on Convex Cloud.

Good to know:

  • The self-hosted backend uses the FSL Apache 2.0 license. Each release becomes full Apache 2.0 two years after shipping.
  • Convex recommends its cloud service for a more hands-off setup. They note that self-hosting is not for everyone.
  • In a 2025 Reddit reply, a Convex co-founder described the open-source build as single-node. They also said the team was considering opening more of the scale-out side. Check the current docs to see where this stands.
  • Full-text and vector search are built in.

Pick it if: You want exactly Convex and you are happy running one server.

2. Supabase

What it is: This is Postgres paired with generated REST and GraphQL APIs. It includes auth, storage, and realtime features. The core tools are open source. You can self-host them with Docker or the Supabase CLI.

How live updates work: Supabase Realtime has three distinct parts. Postgres Changes listens directly to database changes. Broadcast sends messages between your clients. Finally, Presence tracks who is currently online.

Good to know:

  • Permissions use Row Level Security policies written in SQL. These run inside the database.
  • Server code runs as Edge Functions using TypeScript on Deno.
  • Full-text search uses the built-in functions provided by Postgres. Vector search uses pgvector.

Pick it if: You prefer thinking in SQL and want real Postgres with a big ecosystem. It presents a different model from Convex. Your logic sits closer to the database rather than in TypeScript functions.

3. PocketBase

What it is: This is one Go binary containing an embedded SQLite database. It brings auth, file storage, an admin dashboard, and realtime capabilities.

How live updates work: It relies on Server-Sent Events. You subscribe to specific records or whole collections. Then you receive create, update, and delete events.

Good to know:

  • Permissions are handled through API rules per collection. These are filter expressions like @request.auth.id != "".
  • You can extend it using Go or JavaScript hooks.
  • It is self-hosted only. There is no managed cloud offering.
  • It scales vertically on one server. Its FAQ says it can handle 10,000+ realtime connections on modest hardware.
  • This is a personal open-source project maintained by volunteers. It has an intentionally limited scope.

Pick it if: You want the simplest self-hosted backend available. It is just one file you can copy to a server. Choose this if collections plus rules fit your app.

4. Concile

What it is: A self-hosted, reactive TypeScript backend. You write query, mutation, and action functions. Your frontend subscribes using a simple hook. When data a query read changes, that query re-runs and pushes the new result.

// concile/tasks.ts
import { query, mutation } from "./_generated/server";

export const list = query(async (ctx) => ctx.db.query("tasks").collect());

export const add = mutation(async (ctx, { text }) => {
  await ctx.db.insert("tasks", { text, done: false });
});
Enter fullscreen mode Exit fullscreen mode
const tasks = useQuery(api.tasks.list); // stays live
Enter fullscreen mode Exit fullscreen mode

Good to know:

  • It runs as one process. Run npx concile dev to start. Use docker compose up or a single binary to deploy.
  • It uses SQLite by default. You can use Postgres with a flag while running the same code.
  • Auth, file storage, cron jobs, durable workflows, and a dashboard are included.
  • Offline writes can survive a page reload. This uses an opt-in outbox that is replayed exactly once.
  • Coming from Convex, a handy codemod (concile migrate) rewrites your imports. It also writes a report of what it could not move.
  • The license is FSL-1.1-Apache-2.0. This makes it free to use and self-host, including commercially. However, you cannot resell it as a hosted service. Each release becomes Apache 2.0 after two years.

The honest gaps:

  • The software is currently pre-1.0.
  • There is no full-text or vector search yet.
  • There is no managed cloud available.
  • Running one server is free forever. The multi-server tiers are commercial products.

Pick it if: You really like Convex's model of live queries as TypeScript functions. It is a great fit if you want to run it yourself with SQLite or Postgres underneath.

Quick picker

You want... Look at
Exactly Convex, on your own server Convex self-hosted
SQL, Postgres and a large ecosystem Supabase
One tiny binary, simplest setup PocketBase
Convex-style live TypeScript functions, self-hosted, SQLite or Postgres Concile
Built-in full-text or vector search today Convex or Supabase
No servers at all None of these. Use a managed cloud.

I also put together an interactive chooser to compare these with Firebase row by row. It includes a link to each project's docs:

If I got something wrong about any of these projects, please tell me in the comments. I will be happy to fix it!

Top comments (0)