tidepool_docs pricing status

tidepool / how it works

Every pull request
gets its own database.

Postgres that branches like git. Four steps from a laptop to production, none of them a staging server.

  1. 01

    Branch

    Open a pull request and Tidepool forks your database with it. Copy-on-write, so a 200 GB branch costs you the rows you change, not the rows you have.

    • 1.8s for 212 GB
    • Scales to zero
    zsh1/4
    ~/api $ tide branch create pr-482 --from main
    resolving main@a91f3e2 ............ 212.4 GB
    copy-on-write snapshot ............. done 1.8s
    compute: 2 vCPU, scales to zero after 5 min idle
     
    ● branch pr-482 is ready
    url postgres://pr-482.eu-central.tidepool.dev/api
    cost €0.004 / hour while awake
     
    ~/api $
  2. 02

    Migrate

    Schema changes show up next to your code review. tide check flags table locks, missing concurrent indexes and long backfills before anyone hits merge.

    • 17 lock rules
    • Runs in CI
    0042_invoice_currency.sql2/4
    migrations/0042_invoice_currency.sql+4 −1
    41 create table invoices (
    42 id uuid primary key,
    43 customer_id uuid not null references customers,
    44- amount integer not null,
    44+ amount_minor bigint not null,
    45+ currency char(3) not null default 'EUR',
    46 issued_at timestamptz not null default now()
    47 );
    48
    49+create index concurrently invoices_customer_idx
    50+ on invoices (customer_id, issued_at desc);
    ▲ tide check: index built concurrently, no table lock. Safe for 1.2M rows.
  3. 03

    Preview

    Branches carry production-shaped data. Masking policies rewrite emails, names and IBANs on the way out, so your preview app and your contractor see the same shape and none of the secrets.

    • GDPR masking
    • Per-column policies
    psql3/4
    pr-482=> select id, email, plan, sum(amount_minor)/100.0
    -> from customers join invoices using (customer_id)
    -> group by 1,2,3 order by 4 desc limit 5;
    idemailplantotal
    c_81f2m•••@k•••.deTeam€1,240.00
    c_1a07j•••@o•••.ioScale€8,910.50
    c_77c3a•••@f•••.seTeam€412.00
    c_3e90l•••@h•••.nlStarter€39.00
    c_c214s•••@v•••.chScale€12,077.25
    (5 rows, 14 ms) · PII masked by policy mask_emails
  4. 04

    Merge

    Merging replays the migration on main in expand and contract phases. Reads swap over atomically; the old column waits 24 hours in case you change your mind.

    • 0 ms write pause
    • 24h undo
    deploy · main4/4
    Merge pr-482 into mainLive
    ✓Schema check0 blocking locks0.4s
    ✓Backfill amount_minor1,204,388 rows38.2s
    ✓Swap reads0 ms write pause0.1s
    Drop amountscheduled after 24hqueued
    p95 latency, mainflat through the swap, 11.8 ms
zsh1/4
~/api $ tide branch create pr-482 --from main
resolving main@a91f3e2 ............ 212.4 GB
copy-on-write snapshot ............. done 1.8s
compute: 2 vCPU, scales to zero after 5 min idle
 
● branch pr-482 is ready
url postgres://pr-482.eu-central.tidepool.dev/api
cost €0.004 / hour while awake
 
~/api $
0042_invoice_currency.sql2/4
migrations/0042_invoice_currency.sql+4 −1
41 create table invoices (
42 id uuid primary key,
43 customer_id uuid not null references customers,
44- amount integer not null,
44+ amount_minor bigint not null,
45+ currency char(3) not null default 'EUR',
46 issued_at timestamptz not null default now()
47 );
48
49+create index concurrently invoices_customer_idx
50+ on invoices (customer_id, issued_at desc);
▲ tide check: index built concurrently, no table lock. Safe for 1.2M rows.
psql3/4
pr-482=> select id, email, plan, sum(amount_minor)/100.0
-> from customers join invoices using (customer_id)
-> group by 1,2,3 order by 4 desc limit 5;
idemailplantotal
c_81f2m•••@k•••.deTeam€1,240.00
c_1a07j•••@o•••.ioScale€8,910.50
c_77c3a•••@f•••.seTeam€412.00
c_3e90l•••@h•••.nlStarter€39.00
c_c214s•••@v•••.chScale€12,077.25
(5 rows, 14 ms) · PII masked by policy mask_emails
deploy · main4/4
Merge pr-482 into mainLive
✓Schema check0 blocking locks0.4s
✓Backfill amount_minor1,204,388 rows38.2s
✓Swap reads0 ms write pause0.1s
Drop amountscheduled after 24hqueued
p95 latency, mainflat through the swap, 11.8 ms
01 / 04
$ brew install tidepool/tap/tide