<!-- Source: https://docs.snoutdata.com/stack -->

# The SnoutData stack

The stack is what a project IS: a Postgres database and the servers in front of it, behind one
HTTPS door. A hosted project on SnoutData Cloud runs it, and so does a folder on your own machine
with Docker. Same servers, same paths, same two keys, same client code; only the URL changes. Every
part is open source.

## What is in it

- [Postgres 18](https://docs.snoutdata.com/stack/postgres): Upstream Postgres 18 with pgvector, pg_cron, pg_net, pg_graphql and SnoutTime built in. Your migrations, your extensions.
- [The project API](https://docs.snoutdata.com/stack/api): One door, six paths, two keys. Row-level security decides what every request can see.
- [Data API](https://docs.snoutdata.com/stack/data-api): REST and GraphQL generated from your schema, with nothing to deploy.
- [Auth](https://docs.snoutdata.com/stack/auth): Sign-up, sign-in, sessions, multi-factor, OAuth and SAML single sign-on, with the users in your own database.
- [Storage](https://docs.snoutdata.com/stack/storage): Files in buckets, governed by the same kind of policies as your rows, with image resizing.
- [Realtime](https://docs.snoutdata.com/stack/realtime): Broadcast, presence and table changes over WebSockets.
- [Functions](https://docs.snoutdata.com/stack/functions): Your own TypeScript next to the database, with its secrets.
- [Push](https://docs.snoutdata.com/stack/push): Notifications to iPhone, Android and the web, from one API and from SQL.
- [SnoutTime](https://docs.snoutdata.com/stack/snouttime/overview): Time series in plain Postgres: series tables, sealed columnar partitions, rollups.

## Where it runs

| | Hosted (SnoutData Cloud) | Your own Docker |
|---|---|---|
| Postgres 18, extensions, SnoutTime | yes | yes |
| Data API, auth, storage, realtime, functions, push | yes | yes |
| Backups every few seconds, point-in-time restore | yes ([durability](https://docs.snoutdata.com/cloud/durability)) | your own (`pg_dump`, volume backups) |
| Sleeps when idle, wakes on connect | yes | no |
| Plans, the dashboard, status page | yes | no |

- **[Run it yourself](https://docs.snoutdata.com/stack/self-hosting)**: the whole stack with Docker Compose, from
  [snoutdata/snout-stack](https://github.com/snoutdata/snout-stack).
- **[Local development](https://docs.snoutdata.com/stack/local)**: just the database, on your machine, in one command.
- **[Use the CLI with a local stack](https://docs.snoutdata.com/stack/cli-local-stack)**: migrations, types and functions
  against the stack on this machine.
- **[Create a hosted project](https://docs.snoutdata.com/cloud/getting-started)**: the same stack, run for you.

Moving between the two is a database dump and the files, since the schemas are the same
([move a database](https://docs.snoutdata.com/cloud/move-database)).

## The source

| Part | Repository |
|---|---|
| The stack (compose file, gateway, setup) | [snoutdata/snout-stack](https://github.com/snoutdata/snout-stack) |
| Auth | [snoutdata/snout-auth](https://github.com/snoutdata/snout-auth) |
| Storage | [snoutdata/snout-storage](https://github.com/snoutdata/snout-storage) |
| Image resizing | [snoutdata/snout-images](https://github.com/snoutdata/snout-images) |
| Realtime | [snoutdata/snout-realtime](https://github.com/snoutdata/snout-realtime) |
| Functions | [snoutdata/snout-functions](https://github.com/snoutdata/snout-functions) |
| Push | [snoutdata/snout-push](https://github.com/snoutdata/snout-push) |
| SnoutTime | [snoutdata/snouttime](https://github.com/snoutdata/snouttime) |
| JavaScript client | [snoutdata/snout-client](https://github.com/snoutdata/snout-client) (`@snoutdata/client` on npm) |

What changed, part by part, is in the [changelog](https://docs.snoutdata.com/cloud/changelog).
