# Start where you are.

> Three ways in: rehearse on an imported copy of the Postgres you keep, start a new app on Stolon, or move an app here from another provider.

Source: https://stolondb.com/start/ · Page title: Get started with Stolon — start with a copy, not a migration

A Stolon database speaks Postgres, and every branch inside it is an instant copy of the database.

**Databases are free while Stolon is in preview.** Name a database and you get a connection string.

[Start free](https://stolondb.com/signup)

*Already have an account? [Sign in](https://stolondb.com/login).*

## Three ways in

### Rehearse: you have Postgres and you are keeping it

Import a copy, branch it per migration or per agent, and ship what you keep back to Postgres.

### Start here: greenfield, with no upstream

Build something new with Stolon as the system of record.

### Move here: you are on a provider and want out

A `pg_dump` from Neon, Supabase, RDS or Heroku imports. First, [run the compatibility gate against your schema and queries](https://stolondb.com/compatibility/).

## What the first hour looks like

1. **Sign up, name a database, create an app password**

   Copy the connection line; the password is shown once. The database name is `<database>.<branch>`, and the default branch is `main`.

   ```
   $ psql "postgresql://app:<password>@db.stolondb.com/acme.main"
   ```

2. **Load your data**

   Import a `pg_dump` from the console, or create tables from scratch.

3. **Branch, and do the frightening thing there**

   ```
   acme.main=> CREATE DATABASE rehearsal;
   CREATE DATABASE

   # connect with dbname=acme.rehearsal
   $ alembic upgrade head
   ```

4. **Review, then merge**

   The branch shows up in the console as a pull request. Or from SQL:

   ```
   acme.main=> MERGE DATABASE rehearsal
   acme.main->   INTO main DRY RUN;
          kind       |            detail
   ------------------+--------------------------------
    conflict         | accounts[1].balance, both sides
    rows to apply    | 2
    deletes to apply | 0

   acme.main=> MERGE DATABASE rehearsal
   acme.main->   INTO main RESOLVE OURS;
   ```

## And you can see it

Every database has a console, with pull requests, the Time Machine and a SQL tab.

![The console overview: main, what your app connects to, above a list of branches, each with what it changed and a button to review its changes.](https://stolondb.com/assets/console-overview.png)

*main and its branches, with what each one changed.*

![A pull request in the console: the conflicting rows named down to the column, with the value on each side shown beside the other.](https://stolondb.com/assets/console-merge.png)

*A pull request: every conflict named down to the row and column, with both values.*

## Durability

Nothing acknowledged is lost to a process crash, kill-9 or power loss.

## What it costs

Throughput and storage held, with no per-branch fees on paid plans. Free in preview. [The plans](https://stolondb.com/pricing/).

[Start free](https://stolondb.com/signup)

- [Docs](https://stolondb.com/docs/) — Compatibility, merge, durability and auth.
