{
  "id": 10387481,
  "title": "Running Real Postgres Locally Without Docker (with Tinbase)",
  "url": "https://urgent.news/2026/09/28/running-real-postgres-locally-without-docker-with-tinbase",
  "topic": "tech",
  "section": "Tech",
  "published": "2026-09-28T06:35:29.000Z",
  "source": {
    "name": "Dev.to",
    "slug": "dev-to",
    "url": "https://dev.to/chloe_smith0104/running-real-postgres-locally-without-docker-with-tinbase-cgg"
  },
  "original_language": "en",
  "account": "Running Real Postgres Locally Without Docker (with Tinbase)\n\nDocker Supabase on an 8 GB laptop consumes 12 containers and approximately 1.6 GB of RAM at idle, taking 45 seconds to cold boot. Tinbase addresses these issues by providing a single 58 MB binary that runs real Postgres 17 and all Supabase features, such as authentication, real-time updates, and edge functions. This results in a much faster cold boot time of around 2.5 seconds and minimal RAM usage of ~100 MB.\n\nTo install Tinbase on macOS or Linux, users can run the following command:\ncurl -fsSL https://tinbase.dev/install.sh | sh\nThen, they can start the server with the command:\ntinbase start --data-dir ~/tinbase-data\nThis command creates a directory to store data and starts the server listening on http://localhost:8080. The boot time is reported as ~2.5 seconds cold, with ~800 milliseconds warm.\n\nSupabase-specific code remains unchanged when using Tinbase. Developers only need to update two environment variables:\nSUPABASE_URL=http://localhost:8080\nSUPABASE_ANON_KEY=<generated_key>\nThese variables are typically printed by the tinbase start command. After updating the environment variables, existing Supabase code can be used with Tinbase without any modifications.\n\nTo migrate an existing Supabase project to Tinbase, users can first dump the schema and data with the command:\nsupabase db dump --file dump.sql --data-only = false\nNext, they can load the data into Tinbase using:\ntinbase import --file dump.sql\nAfter the import, they can verify the data by running:\npsql postgresql://postgres@localhost:5432/postgres -c \\dt\n\nTinbase supports various Postgres extensions, such as pgvector for embeddings, pg_trgm for fuzzy text matching, pg_stat_statements for query profiling, and more. Users can enable these extensions manually or let Tinbase do it automatically by running:\ntinbase import --file dump.sql\n\nRLS (Row-Level Security) policies, edge functions, and realtime subscriptions behave identically in Tinbase compared to hosted Supabase. Tinbase's RLS policies work exactly as they do in Supabase, ensuring that policies written for Supabase continue to function correctly when migrated to Tinbase.\n\nEdge functions in Tinbase are run in an embedded V8 engine, with a cold start time of about 15 milliseconds. The following example shows a simple edge function written in JavaScript:\n// functions/hello.ts\nexport default async (req : Request) = {\nreturn new Response ( JSON . stringify ({ msg : hi }), { headers : { content-type : application/json }, });\n};\nTinbase serves this function with the command:\ntinbase functions serve\nThe function can be accessed at http://localhost:8080/functions/v1/hello, returning the expected output:\n{ msg : hi }\nRealtime subscriptions in Tinbase work similarly to Supabase. Users can create a channel and subscribe to specific events, such as INSERT operations on the projects table:\nsupabase . channel ( projects ) . on ( postgres_changes , { event : INSERT , schema : public , table : projects }, ( payload ) = {\n// Handle the event\n});\nThis allows developers to build real-time features using the same contract as Supabase.",
  "summary": "TL;DR Docker Supabase on an 8 GB laptop: 12 containers, ~1.6 GB RAM idle, 45 s cold boot Tinbase: one ~58 MB binary, real Postgres 17, ~100 MB RAM idle, ~2.5 s cold boot supabase-js works with zero code changes: swap one env var Migrate an existing project with supabase db dump | tinbase import RLS, edge functions, and realtime use the same contract as hosted Supabase Not for you if you live in…",
  "key_points": [],
  "editors_take": null,
  "illustration": null,
  "coverage": {
    "outlets": 1,
    "also_reported_by": []
  },
  "ai_generated": true,
  "disclaimer": "Summaries, key points and the editor’s take are written by software from other outlets’ reporting and may contain errors — always check the linked original."
}