Skip to content

supabase-community/postgres-new

Repository files navigation

database.build (formerly postgres.new)

In-browser Postgres sandbox with AI assistance.

github-repo-hero

With database.build, you can instantly spin up an unlimited number of Postgres databases that run directly in your browser (and soon, deploy them to S3).

Each database is paired with a large language model (LLM) which opens the door to some interesting use cases:

  • Drag-and-drop CSV import (generate table on the fly)
  • Generate and export reports
  • Generate charts
  • Build database diagrams

How it works

All queries in database.build run directly in your browser. There’s no remote Postgres container or WebSocket proxy.

How is this possible? PGlite, a WASM version of Postgres that can run directly in your browser. Every database that you create spins up a new instance of PGlite that exposes a fully-functional Postgres database. Data is stored in IndexedDB so that changes persist after refresh.

Monorepo

This is a monorepo split into the following projects:

  • Web: The primary web app built with Next.js
  • Browser proxy: Proxies Postgres TCP connections back to the browser using pg-gateway and Web Sockets
  • Deploy worker: Deploys in-browser databases to database platforms (currently Supabase is supported)

Setup

From the monorepo root:

  1. Install dependencies

    npm i
  2. Start local Supabase stack:

    npx supabase start
  3. Store local Supabase URL/anon key in ./apps/postgres-new/.env.local:

    npx supabase status -o env \
      --override-name api.url=NEXT_PUBLIC_SUPABASE_URL \
      --override-name auth.anon_key=NEXT_PUBLIC_SUPABASE_ANON_KEY |
        grep NEXT_PUBLIC >> ./apps/postgres-new/.env.local
  4. Create an OpenAI API key and save to ./apps/postgres-new/.env.local:

    echo 'OPENAI_API_KEY="<openai-api-key>"' >> ./apps/postgres-new/.env.local
  5. Store local KV (Redis) vars. Use these exact values:

    echo 'KV_REST_API_URL="https://localhost:8080"' >> ./apps/postgres-new/.env.local
    echo 'KV_REST_API_TOKEN="local_token"' >> ./apps/postgres-new/.env.local
  6. Start local Redis containers (used for rate limiting). Serves an API on port 8080:

    docker compose -f ./apps/postgres-new/docker-compose.yml up -d
  7. Fill in the remaining variables for each app as seen in:

    • ./apps/postgres-new/.env.example
    • ./apps/browser-proxy/.env.example
    • ./apps/deploy-worker/.env.example

Development

From the monorepo root:

npm run dev

Important: This command uses turbo under the hood which understands the relationship between dependencies in the monorepo and automatically builds them accordingly (ie. ./packages/*). If you by-pass turbo, you will have to manually build each ./packages/* before each ./app/* can use them.

Why rename postgres.new?

This project is not an official Postgres project and we don’t want to mislead anyone! We’re renaming to database.build because, well, that’s what this does. This will still be 100% Postgres-focused, just with a different URL.

Video

image

License

Apache 2.0