-**Bring your infrastructure, build your backend.**
+
The open backend for apps that need to stay yours.
-Pawabase is a backend you run yourself. You bring a database, object storage and mail credentials; Pawabase gives
-you the backend around them, ready to use and managed from one place, Studio. Define your data, decide who can see
-what, and your app gets a secure API, sign-in, files, realtime and background work, without assembling any of it.
+
+ Sign-in, a database with an API, files, realtime and functions, in one platform you run on your own infrastructure.
+
+ Everything Supabase and Firebase give you out of the box, without handing over your data or your bill.
+
-One Pawabase installation is one project. Start it, open Studio, and you are managing that backend: no accounts to
-create first, and no vendor in the middle.
+
-## What you get
+---
-- **Data and an API.** Describe a table once and get a REST API for it, with filtering, sorting, relations, validation
- and generated API docs. Import and export CSV or JSON, and see how your data connects in Topology.
-- **Sign-in and teams.** Email and password, social sign-in, two-step verification, organizations, roles and
- invitations, all readable from your permission rules.
-- **Permissions you can read.** Write who can list, read, create, update and delete in plain conditions. They are
- enforced on every request and every file.
-- **Files.** Buckets with the same rules as your data, uploads, and expiring download links, on local disk or any
- S3-compatible storage.
-- **Realtime.** Channels with broadcast, presence and recent history, over WebSockets.
-- **Logic and automation.** Write your own functions in Python, build workflows visually, and react to events with
- schedules, webhooks in and out, and retried background jobs.
-- **Environments.** Development, staging and production side by side, each with its own keys, settings and data,
- with releases and branches for safe changes.
-- **Operations.** Metrics, logs and alarms that email you, a public status page, backups and snapshots, secret and
- key rotation, custom domains and a firewall.
+## Ship the product, not the plumbing
-## Try it in two minutes
+Every app ends up needing the same things: people signing in, data with rules, files, live updates, and work that
+happens in the background. Pawabase is all of it, already connected, with one place to run it.
+
+| | |
+| --- | --- |
+| **A database with an API** Describe a table and get a secure REST API, with filtering, sorting, relations and generated docs. Your data stays in plain Postgres, MySQL or SQLite. | **Sign-in that scales to teams** Email, social sign-in, two-step verification, organizations, roles and invitations, built in and usable in your rules. |
+| **Rules you can read** Say who can list, read, create, update and delete in plain conditions. They hold on every request and every file. | **Files with the same rules** Buckets, uploads and expiring links on local disk or any S3-compatible storage. |
+| **Realtime** Channels with broadcast, presence and history, over WebSockets, guarded by the same rules. | **Functions and workflows** Write Python, or build the flow visually. Run it on a schedule, on an event, or from a webhook, with retries. |
+| **Studio** One dashboard for all of it: data, users, logs, queues, keys, topology of how your data connects. | **Real environments** Development, staging and production side by side, each with its own keys, with releases and branches for safe changes. |
+
+## Why teams choose Pawabase
+
+- **It is yours.** Run it anywhere you run containers. Your database, your storage, your network, your region. No
+ vendor in the middle and nothing to export when you grow.
+- **No meter on your users.** You pay for your own infrastructure, not per read, per write or per sign-in.
+- **Familiar underneath.** Real SQL databases, S3-compatible storage, plain HTTP and WebSockets. Move off whenever
+ you like.
+- **One platform, not twelve services.** Sign-in, data, files, realtime and automation share one set of rules and one
+ place to look when something is wrong.
+- **Operations included.** Metrics and alarms that email you, a public status page, backups and snapshots, key and
+ secret rotation, custom domains and a firewall.
+
+## How it compares
+
+| | Pawabase | Supabase | Firebase |
+| --- | :---: | :---: | :---: |
+| Self-host the whole platform | ✅ | ✅ | ❌ |
+| Bring your own database | ✅ Postgres, MySQL, SQLite | Postgres | ❌ |
+| Open source | ✅ BSD-3 | ✅ | ❌ |
+| Access rules you can read | ✅ | ✅ | ✅ |
+| Server logic in | Python | TypeScript | JavaScript, Python |
+| Visual workflow builder | ✅ | ❌ | ❌ |
+| Realtime and presence | ✅ | ✅ | ✅ |
+| Teams, roles and invitations built in | ✅ | ➖ build it | ➖ build it |
+
+Based on each product's public documentation. Check theirs for the details that matter to you.
+
+## Get started in two minutes
You need Docker.
```sh
+git clone https://github.com/Pawabase/pawabase && cd pawabase
cp .env.test .env
docker compose up -d
```
-Open **Studio** at . It starts with a `development` environment and opens straight into your
-backend. Your API is at .
-
-The values in `.env.test` are public, so use them only on your own machine.
-
-## Use your API
-
-Every environment has a publishable key for your apps and a secret key for your servers (Studio, API keys).
+Open **Studio** at and your API is at . Then:
```sh
-# Read a resource
+# Read a table
curl http://localhost:8080/rest/v1/todos -H "apikey: "
# Sign someone up
@@ -55,60 +84,44 @@ curl -X POST http://localhost:8080/auth/v1/signup \
-d '{"email":"ada@example.com","password":"Str0ng!pass"}'
```
-Client libraries:
+Or from your app:
+
+```ts
+import { createClient } from "@pawabase/client";
-- **Python**: `pip install pawabase`, also the CLI for deploying functions ([pawabase-python](https://github.com/Pawabase/pawabase-python))
-- **TypeScript**: `@pawabase/client` ([pawabase-js](https://github.com/Pawabase/pawabase-js))
+const pawabase = createClient({ url: "http://localhost:8080", apiKey: "" });
+const todos = await pawabase.from("todos").eq("done", false).perPage(20);
+```
+
+Using Python? `pip install pawabase`.
## Run it for real
```sh
-cp .env.example .env
-# Set the secrets: `openssl rand -hex 32` for each one.
+cp .env.example .env # set the secrets: `openssl rand -hex 32` for each one
docker compose up -d
```
-- **Your infrastructure.** The default stack brings Postgres, Redis and MinIO. Point Pawabase at your own database,
- Redis and S3-compatible storage (AWS S3, R2, Backblaze B2, Spaces) with the variables in `.env.example`, or run
- `docker-compose.external.yml` for a host that already has them.
-- **Secure by default.** In production mode Pawabase refuses to start while a development secret is still in place.
- Put TLS in front of the public port and Studio, set `PAWABASE_COOKIE_SECURE=true`, and turn on Studio's
- sign-in with `PAWABASE_STUDIO_USERNAME` and `PAWABASE_STUDIO_PASSWORD`.
-- **Scale out.** Run more than one server by pointing them at the same Redis. The queue worker and the scheduler
- are separate processes you can place and scale on their own.
-- **Limits.** Optional per-installation and per-environment limits on requests, connections, uploads, users and
- keys. They are off until you set them.
-- **Configuration.** Infrastructure and limits are environment variables. `PAWABASE_` applies everywhere and
- `_` overrides it for one environment, for example `PRODUCTION_STORAGE_BUCKET`. Studio's Settings page
- shows what is in effect and where each value came from.
-
-Functions you deploy run in processes of their own, with memory and time limits, so one misbehaving function does
-not take your backend down.
+Point Pawabase at your own Postgres, Redis and S3-compatible storage with the variables in `.env.example`. In
+production mode it refuses to start while a development secret is still in place. Put TLS in front of it, turn on
+Studio's sign-in, and you are live. When you outgrow one server, add more and share a Redis.
## Pawabase Cloud
-Prefer not to run it yourself? Pawabase Cloud runs a project for you, with its own database, and bills by
+Would you rather we run it? Pawabase Cloud gives you a project with its own database in a minute, and bills by
subscription. It is in pre-launch.
-## Documentation and related projects
+## Learn more
| | |
| --- | --- |
-| [pawabase-docs](https://github.com/Pawabase/pawabase-docs) | The documentation |
-| [pawabase-python](https://github.com/Pawabase/pawabase-python) | Python library and CLI |
-| [pawabase-js](https://github.com/Pawabase/pawabase-js) | TypeScript client |
-| [pawabase-website](https://github.com/Pawabase/pawabase-website) | The website |
-
-Upgrading an older installation? See [docs/upgrading.md](docs/upgrading.md).
-
-## Contributing
-
-```sh
-docker compose -f docker-compose.dev.yml up # live reload; Studio on :8090, API on :8080
-uv run pytest -q tests
-```
+| [Documentation](https://github.com/Pawabase/pawabase-docs) | Guides and reference |
+| [Python library and CLI](https://github.com/Pawabase/pawabase-python) | `pip install pawabase` |
+| [TypeScript client](https://github.com/Pawabase/pawabase-js) | `@pawabase/client` |
+| [Upgrading](docs/upgrading.md) | Moving an older installation forward |
+| [Architecture](ARCHITECTURE.md) | How it is built, for contributors |
-[ARCHITECTURE.md](ARCHITECTURE.md) explains how the code is organized.
+Contributing? `docker compose -f docker-compose.dev.yml up` starts everything with live reload.
## License
diff --git a/docs/assets/banner-dark.svg b/docs/assets/banner-dark.svg
new file mode 100644
index 0000000..211d836
--- /dev/null
+++ b/docs/assets/banner-dark.svg
@@ -0,0 +1,55 @@
+
diff --git a/docs/assets/banner.svg b/docs/assets/banner.svg
new file mode 100644
index 0000000..4aa7e32
--- /dev/null
+++ b/docs/assets/banner.svg
@@ -0,0 +1,55 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ pawabase
+ Your backend.
+ Your infrastructure.
+ Auth, database, files, realtime and functions,
+ in one platform you run yourself.
+
+
+
+
+
+
+ orders
+
+ 3 rows
+
+
+ 1042Mayapaid18,500
+
+ 1043Tundepending6,200
+
+ 1044Adapaid41,000
+
+
+
+
+ GET /rest/v1/orders
+
+ 200
+ 41 ms
+
+
+
+
+ Signed in
+
+
+