
Hvis du søkte "supabase vs drizzle" og forventet en vinner, her er overraskelsen: det finnes ingen — fordi Supabase er et Postgres-backend (en Backend-as-a-Service) og Drizzle er et TypeScript ORM som kjører oppå en databasetilkobling — inkludert en Supabase-tilkobling. De befinner seg på ulike lag i stacken din, så de konkurrerer egentlig ikke. Ikke bekymre deg, dette er enklere enn det høres ut.
TL;DR: Bruk Supabase til backend (database, auth, storage, realtime). Legg til Drizzle hvis du vil ha typesikker SQL på de tyngre spørringene dine. De fleste produksjonsapper ender opp med å bruke begge — tenk "hus og verktøykasse," ikke "hus eller verktøykasse."
Supabase vs Drizzle på ett blikk
Her er side-ved-side-sammenligningen de fleste "vs"-sider hopper over. Legg merke til hvor lite disse to overlapper — det er hele poenget.
| Dimensjon | Supabase | Drizzle |
|---|---|---|
| Hva det er | Postgres Backend-as-a-Service | TypeScript ORM / spørringsbygger |
| Lag | Backend-plattform | Datatilgangsbibliotek |
| Database | Administrert Postgres | Kobler til alle Postgres (inkl. Supabase) |
| Auth / Storage / Realtime | Ja (innebygd) | Nei (utenfor scope) |
| Typesikre spørringer | Delvis (genererte typer) | Ja (første klasse, utledet) |
| Migrasjoner | SQL-editor / CLI | drizzle-kit (schema-as-code) |
| Edge / serverless | Edge Functions (Deno) | ~7.4 kb, edge-nativt |
| Priser | Gratis / $25 / $599 | Gratis (åpen kildekode) |
| Reelle konkurrenter | vs Firebase, andre BaaS | vs Prisma, andre ORMer |
Se hvor lite radene kolliderer? Supabase svarer på "hvor lever appen min?"; Drizzle svarer på "hvordan spør jeg etter data i TypeScript?" Uansett om du søker supabase vs drizzle eller drizzle vs supabase, er den forskjellen grunnlaget for hver beslutning nedenfor.
Hva Supabase egentlig er
Supabase er et administrert Postgres-backend som samler nesten alt en typisk app trenger fra dag én. BaaS — Backend-as-a-Service — betyr at du får et ekte backend (database pluss tjenester) uten å sette opp servere selv. Nøkkelordet er ekte: under panseret er det ekte PostgreSQL, ikke en proprietær abstraksjon du ikke kan rømme fra senere.
Her er hva du får ut av boksen:
- Auth — e-post/passord, magic links, sosiale pålogginger, SSO, passordløst.
- Storage — S3-basert fillagring med Row Level Security-policyer og bildetransformasjoner.
- Realtime — lytt til databaseendringer, presence og broadcast-kanaler.
- Edge Functions — TypeScript-funksjoner på Deno, distribuert globalt.
- Auto REST API via PostgREST (gjør tabellene dine til et øyeblikkelig REST API) pluss GraphQL gjennom
pg_graphql. - Vector-støtte for embeddings, slik at AI-funksjoner har et hjem.
Standardmåten du kommuniserer med alt dette fra appen din er supabase-js, det offisielle klientbiblioteket. Det håndterer databaselesing og -skriving (rutet gjennom PostgREST), auth-sesjoner, realtime-abonnementer og filopplastinger — én klient for hele plattformen. Hvis du vurderer backends i utgangspunktet, dekker vår fullstendige Supabase vs Firebase-gjennomgang den siden av beslutningen i detalj.
Hva Drizzle egentlig er
Drizzle er et lett TypeScript ORM og spørringsbygger. Et ORM (object-relational mapper) er bare et bibliotek som lar deg skrive databasespørringer i programmeringsspråket ditt i stedet for rå SQL-strenger — men Drizzle holder ting forfriskende nært SQL, så du kjemper aldri mot en tung abstraksjon.
Det som skiller det ut:
- Lite fotavtrykk — rundt 7.4 kb min+gzip med null eksterne avhengigheter, noe som gjør det edge-nativt.
drizzle-kit— CLI-en som håndterergenerate,migrateogpull(introspekterer en eksisterende database til TypeScript).- Drizzle Studio — en gratis visuell databaseleser for lokal utvikling.
- Typeinferens — definer skjemaet ditt én gang i TypeScript, og spørringsresultatene dine er fullt typet automatisk.
- Fler-database — fungerer med Postgres, MySQL, SQLite og mer.
- Fullt åpen kildekode — det koster $0.
Nå, den viktige delen: Drizzle er ikke et backend — ingen auth, ingen storage, ingen realtime, ingen API-server. Det gjør nøyaktig én ting: kommunisere med en database på en typesikker måte. Å kalle det et "ORM" svarer på det vanlige "supabase orm"-søket — Supabase leverer ikke et tungt ORM selv, så folk strekker seg etter Drizzle (eller Prisma) når de vil ha ett.
supabase-js vs Drizzle: den samme spørringen, skrevet på begge måter
Forskjellen mellom supabase-js og Drizzle: supabase-js er den fullstendige plattformklienten (database via PostgREST, pluss auth, realtime og storage), mens Drizzle er et typesikkert Postgres ORM som gjør ingenting annet enn å spørre etter databasen. For å gjøre det konkret, her er nøyaktig samme spørring — "hent publiserte innlegg med forfatteren" — skrevet først i supabase-js, deretter i Drizzle.
Først, supabase-js-versjonen (PostgREST):
import { createClient } from "@supabase/supabase-js";
const supabase = createClient(SUPABASE_URL, SUPABASE_ANON_KEY);
// Get published posts with their author
const { data, error } = await supabase
.from("posts")
.select("id, title, author:authors(name)")
.eq("published", true);
if (error) throw error;
// data: { id, title, author: { name } }[]Nå Drizzle-versjonen av den identiske spørringen:
import { drizzle } from "drizzle-orm/postgres-js";
import { eq } from "drizzle-orm";
import postgres from "postgres";
import { posts, authors } from "./schema";
const client = postgres(DATABASE_URL, { prepare: false });
const db = drizzle(client);
// Get published posts with their author
const data = await db
.select({
id: posts.id,
title: posts.title,
authorName: authors.name,
})
.from(posts)
.innerJoin(authors, eq(posts.authorId, authors.id))
.where(eq(posts.published, true));
// data is fully typed from your schema — no codegen stepLegger du merke til forskjellen i følelse? supabase-js bruker PostgREST-kjeding — .from().select().eq() — og uttrykker joiner gjennom den nestede author:authors(name)-strengsyntaksen, som leser vakkert for enkle former. Drizzle leser som SQL med TypeScript-superkrefter: eksplisitte joiner, eksplisitte betingelser, og resultattypen utledes rett fra skjemaet ditt uten et separat typegenerasjonstrinn.
Ingen er "bedre" i et vakuum: supabase-js-spørringen er kortere og leveres med plattformen, mens Drizzle-spørringen gir deg kompileringstidssikkerhet på joinen og blir tydeligere etter hvert som spørringer vokser kompliserte — tre joiner, betingede filtre, aggregeringer. Det er den reelle avveiningen.

Trenger du egentlig Drizzle med Supabase? (beslutningsrammeverk)
Nei, du trenger vanligvis ikke Drizzle med Supabase — supabase-js sender de fleste apper til produksjon på egenhånd. Legg til Drizzle bare når du vil ha kompileringstidstypesikkerhet på komplekse spørringer eller en mindre edge-pakke. Før du legger til en avhengighet, gå gjennom denne ærlige beslutningsmatrisen.
Hold deg med supabase-js når:
- Du støtter deg på realtime-abonnementer, fil/storage-operasjoner eller auth-flyter.
- Spørringene dine er stort sett rett frem CRUD.
- Du vil ha én enkelt klient for hele appen.
- Du prototyper og vil ha maksimal hastighet.
Legg til Drizzle når:
- Du har komplekse joiner eller aggregeringer som blir vanskelige i PostgREST-syntaks.
- Du vil ha kompileringstidstypesikkerhet på rå-ish SQL.
- Pakkestørrelse betyr noe fordi du sender til edge- eller serverless-kjøretider.
- Du foretrekker schema-as-code-migrasjoner du kan gjennomgå i en pull request.
Bruk begge (det vanligste utfallet) når:
- Du vil ha
supabase-jsfor auth, storage og realtime, pluss Drizzle for de tunge dataspørringene.
| Ditt behov | Bruk |
|---|---|
| Realtime, storage, rask CRUD, auth | supabase-js |
| Komplekse joiner, typesikker SQL, edge-pakkestørrelse | Drizzle |
| En typisk produksjons-SaaS | Begge |
Pro-tips: Start med
supabase-js. Bruk Drizzle når en spørring faktisk blir smertefull — ikke før. Prematur ORM-tillegging er en reell ting, og det legger bare til oppsett du ikke trenger ennå.
Hvis du skisserer en hel stack i stedet for én spørring, tar valg av riktig SaaS-teknologistack deg gjennom hvordan backend- og ORM-beslutningen passer inn i det større bildet.

Slik bruker du Supabase og Drizzle sammen (korrekt oppsett)
Ja, du kan bruke Supabase og Drizzle sammen — og de fleste produksjonsteam gjør det. Behold supabase-js for auth, storage og realtime, pek deretter Drizzle mot den samme Supabase Postgres-tilkoblingen for typesikre dataspørringer. Det er noen korrekthetdetaljer som snubler folk, så la oss få alle disse på plass.
Installer og koble til (postgres-js-driveren)
Installer de tre pakkene du trenger:
npm install drizzle-orm postgres
npm install -D drizzle-kitKoble deretter til ved hjelp av postgres-js-driveren og gi klienten til Drizzle:
import { drizzle } from "drizzle-orm/postgres-js";
import postgres from "postgres";
// prepare: false is REQUIRED with Supabase's transaction pooler
const client = postgres(process.env.DATABASE_URL!, { prepare: false });
export const db = drizzle(client);Det prepare: false-flagget er ikke valgfritt — les videre, fordi det er den eneste vanligste grunnen til at et Supabase + Drizzle-oppsett bryter.
Pooler vs direkte tilkobling: hvilken streng bruker du?
Supabase gir deg to tilkoblingsstrenger, og den riktige avhenger av kjøretiden din:
- Pooler (port 6543, transaksjonsmodpus) — bruk dette for serverless og edge-funksjoner. Hver invokasjon er kortvarig, så du vil ha en poolet tilkobling som deles ut per transaksjon.
- Direkte tilkobling (port 5432) — bruk dette for langvarige servere som holder en tilkobling åpen.
Velg feil og du vil enten tømme tilkoblinger (direkte på serverless) eller legge til unødvendig overhead. Pooleren er også nøyaktig det som gjør den neste gotchaen nødvendig.
prepare: false-gotchaen
Du trenger prepare: false fordi Supabase sin transaksjonsmoduspooler ikke støtter forberedte setninger, som Drizzle sin postgres-js-driver bruker som standard. Sett disse to fakta sammen, og uten flagget kaster spørringene dine feil i det øyeblikket de kjøres gjennom pooleren — som på serverless alltid er tilfellet.
I produksjon er dette linjen som biter folk: alt fungerer mot en direkte tilkobling lokalt, deretter mislykkes alle spørringer etter at du distribuerer til Vercel eller en Supabase Edge Function. Rettelsen er ett flagg:
const client = postgres(DATABASE_URL, { prepare: false });Gotcha: Hvis Drizzle-spørringene dine fungerer lokalt, men bryter i distribusjon, sjekk dette flagget først. Ni av ti ganger er det det.
Holde RLS intakt
Row Level Security (RLS) er en av Supabase sine beste funksjoner, og du trenger ikke gi den opp for å bruke Drizzle — men du må være bevisst. Det finnes to typer klienter:
- En adminklient som bruker service-role-nøkkelen omgår RLS fullstendig. Den er kraftig og farlig — hold den strengt server-side, aldri nær nettleseren.
- En RLS-respekterende klient pakker inn hver spørring i en transaksjon som setter Postgres auth-konfigurasjonen (gjeldende brukers rolle og påstander) slik at de eksisterende RLS-policyene dine gjelder nøyaktig slik de ville gjort gjennom
supabase-js.
Her er formen på en RLS-respekterende spørring — sett auth-konteksten, kjør deretter Drizzle-spørringen din inne i samme transaksjon:
import { sql } from "drizzle-orm";
async function rlsQuery(userJwtClaims: { sub: string; role: string }) {
return db.transaction(async (tx) => {
// Tell Postgres who's asking, so RLS policies kick in
await tx.execute(
sql`select set_config('request.jwt.claims', ${JSON.stringify(
userJwtClaims
)}, true)`
);
await tx.execute(sql`set local role authenticated`);
// This query now runs under the user's RLS policies
return tx.select().from(posts);
});
}Drizzle leverer også et native RLS API og en drizzle-orm/supabase-import med Supabase sine forhåndsdefinerte roller (authenticated, anon), noe som gjør schema-as-code-policyer renere. Overskriften: hold RLS på i Supabase, og la den RLS-respekterende Drizzle-klienten din respektere det.
Bør du slå av Data API / PostgREST?
Bare hvis du spør utelukkende gjennom Drizzle. Supabase lar deg deaktivere Data API (PostgREST) i API-innstillingene, noe som reduserer angrepsflaten. Men hvis noen del av appen din fortsatt bruker supabase-js for data — og det gjør den vanligvis, for realtime eller raske lesinger — la PostgREST være på. Det er ingen straff for å holde det.
Hvis appen din bor i Next.js (en veldig vanlig kombinasjon her), dekker valg av Next.js-rammeoppsett routing- og gjengivelsessiden som pakker rundt dette datalaget.
Å sette opp Drizzle + Supabase med RLS og pooling riktig snubler mange team. Trenger du et ekstra par øyne på backend? Få en gratis konsultasjon →
Edge og serverless: der Drizzle trekker frem
Hvis du distribuerer til edge, er dette der Drizzle fortjener plassen sin. Med rundt 7.4 kb og null native binærfiler glir det inn i begrensede kjøretider som tyngre ORMer sliter med — Cloudflare Workers, Vercel Edge, AWS Lambda og til og med Supabase Edge Functions på Deno.
Hvorfor betyr størrelse så mye her? Edge-funksjoner straffes av kaldstart og pakkegrenser, så et magert, avhengighetsfritt bibliotek betyr raskere kaldstart og pakker som faktisk passer. supabase-js fungerer ved edge også, men for ren datatilgang er Drizzle sitt fotavtrykk vanskelig å slå.
Et par ting å huske på ved edge:
- Bruk transaksjonsmoduspooleren tilkoblingsstreng (med
prepare: false). - Hold spørringslogikken mager slik at funksjonen forblir liten og rask.
Kjøretiden du distribuerer til former dette også — hvor du distribuerer edge-funksjonene dine sammenligner plattformene slik at du kan matche datalaget med riktig vert.
Migrering fra supabase-js til Drizzle uten en omskriving
Allerede sendt på supabase-js og vil nå ha Drizzle for noen kompliserte spørringer? Gode nyheter: du trenger ikke en stor-bang-omskriving. Du kan kjøre begge i samme fil. Her er den inkrementelle banen team faktisk bruker.
- Hold
supabase-jsnøyaktig der den er — auth, storage, realtime og den enkle CRUD-en den allerede håndterer godt. Ikke rør den. - Introspekter det eksisterende skjemaet til TypeScript slik at Drizzle kjenner tabellene dine (inkludert
auth-skjemareferansen hvis du trenger den):
npx drizzle-kit pull- Legg til Drizzle-klienten ved siden av den eksisterende Supabase-klienten — samme database, andre tilkobling, med
prepare: falseinnebygd. - Migrer én tung spørring om gangen. Velg din mest smertefulle join eller aggregering, skriv om nettopp den i Drizzle, og send den.
- La alt annet ligge på
supabase-js. Det er ingen premie for å konvertere spørringer som allerede var fine.
Ikke bekymre deg: Du kan kalle
supabase-jsog Drizzle i samme funksjon. Ingenting tvinger deg til å velge globalt — migrer i det tempoet som gir mening.
Å skrive om spørringer for hånd er den langsomme delen, og det er nøyaktig den typen mekanisk arbeid AI-kodingsagentene som fremskynder dette håndterer godt — pek en mot en PostgREST-spørring og la den utarbeide Drizzle-ekvivalenten for deg å gjennomgå.
Priser i 2026: hva hvert egentlig koster
Drizzle er gratis — det er fullt åpen kildekode, så det koster $0. Supabase har et gratis nivå, deretter betalte planer til $25/mnd (Pro) og $599/mnd (Team) i 2026. Så den eneste regningen du betaler for denne stacken er Supabase; å legge til Drizzle koster ingenting.
| Nivå | Supabase | Drizzle |
|---|---|---|
| Gratis | $0 (500 MB DB, 50k MAU; pauser etter 1 ukes inaktivitet, 2-prosjekttak) | $0 — fullt åpen kildekode |
| Pro | $25/mnd + bruk (8 GB DB, 100k MAU, $10 beregningskreditt) | — (gratis) |
| Team | $599/mnd (SOC2/ISO, 14-dagers sikkerhetskopier, prioritert støtte) | — (gratis) |
| Enterprise | Tilpasset (HIPAA, BYO cloud) | — (Studio sin innebygde B2B-versjon er det eneste betalte stykket) |
Drizzle er $0 og fullt åpen kildekode (Drizzle Studio inkludert), så din eneste datalags-regning er Supabase — ORM-en følger med gratis.
Et forbehold: Supabase sin gratis tier pauser prosjekter etter en ukes inaktivitet og begrenser deg til to — flott for prototyper, men du vil ha Pro for noe reelt. Hvis du er kostbevisst og bygger magert, holder vår oversikt over verktøy som faktisk er verdt det for startups det samme pragmatiske blikket.
Hva med Prisma?
Den naturlige oppfølgingen: hvis du vil ha et ORM, hvorfor Drizzle og ikke Prisma? Begge fungerer perfekt med Supabase, så dette er en rettferdig kamp — i motsetning til Supabase vs Drizzle.
- Drizzle — ~7.4 kb, edge-nativt, SQL-lignende syntaks, yngre men vokser raskt (omtrent 900k ukentlige npm-nedlastinger). Flott når pakkestørrelse og edge-kjøretider er viktig.
- Prisma — tyngre, men en berømt jevn utvikleropplevelse og bredere adopsjon (rundt 2,5M ukentlige nedlastinger). Flott på tradisjonelle langvarige servere der pakken ikke er en begrensning.
(Behandle disse tallene som omtrentlige — de skifter konstant.) Den ærlige oppsummeringen: velg Drizzle for edge/pakkestørrelse, velg Prisma for ergonomi på en vanlig server. Begge passer inn på en Supabase Postgres-tilkobling uten drama.
Slik nærmer Techsy seg dette
Hos Techsy sender vi produksjonstestede apper på Supabase, Next.js og PostgreSQL hver dag, så dette er ikke en dok-skimrende mening. Vår standard: supabase-js** for plattformfunksjoner** (auth, storage, realtime) og Drizzle på dataintensive stier der typesikkerhet og komplekse joiner lønner seg — RLS holdt på, prepare: false innebygd fra linje én.
Og ærlig talt? Mange prosjekter vi sender trenger aldri Drizzle i det hele tatt. Hvis en app for det meste er CRUD med realtime, er supabase-js alene det renere svaret — og vi vil fortelle deg det i stedet for å legge til en avhengighet for sin egen skyld.
Vil du ha en second opinion på Supabase-backend — skjema, RLS og tilkoblingsoppsett inkludert? Snakk med teamet vårt →
Ofte stilte spørsmål
Er Drizzle en erstatning for Supabase?
Nei. De befinner seg på ulike lag — Supabase er backend (database, auth, storage, realtime), mens Drizzle bare er et ORM som spør etter en database. Du erstatter ikke det ene med det andre; om noe spør Drizzle etter Postgres-databasen som Supabase er vert for.
Trenger jeg Drizzle hvis jeg allerede bruker Supabase?
Nei — det er helt valgfritt. supabase-js håndterer de fleste apper perfekt. Legg til Drizzle når du vil ha kompileringstidstypesikkerhet på komplekse spørringer eller du sender til edge-kjøretider der pakkestørrelse betyr noe.
Kan jeg bruke Supabase og Drizzle sammen?
Ja, og det er det vanligste oppsettet i praksis. Behold supabase-js for auth, storage og realtime, pek deretter Drizzle mot den samme Supabase Postgres-tilkoblingen for dataspørringene dine. De sameksisterer lykkelig i samme kodebase.
Hva er forskjellen mellom supabase-js og Drizzle?
supabase-js er en fullstendig klient — databasetilgang via PostgREST pluss auth, realtime og storage. Drizzle er et direkte, typesikkert Postgres ORM uten auth eller realtime; det gjør bare SQL i TypeScript. Den ene er hele plattformens klient, den andre er rent et spørringslag.
Fungerer Drizzle med Supabase Row Level Security (RLS)?
Ja. Hold RLS på og bruk en RLS-respekterende klient som pakker inn spørringer i en transaksjon som setter Postgres auth-konteksten. En service-role-adminklient omgår RLS, så bruk den kun server-side og aldri eksponer den for nettleseren.
Hvorfor trenger jeg prepare: false med Supabase og Drizzle?
Supabase sin transaksjonsmoduspooler støtter ikke forberedte setninger, som Drizzle sin postgres-js-driver bruker som standard. Å sette prepare: false unngår de resulterende feilene. Hopp over det og spørringene dine vil bryte i poolede eller serverless-oppsett — ofte bare etter at du distribuerer.
Bør jeg bruke pooler- eller direkte tilkoblingsstreng?
Bruk pooleren (transaksjonsmodpus, port 6543) for serverless og edge-funksjoner, og den direkte tilkoblingen (port 5432) for langvarige servere. Pooleren er også det som gjør prepare: false nødvendig, så de to valgene henger sammen.
Er Drizzle gratis? Er Supabase gratis?
Drizzle er fullt åpen kildekode — $0, inkludert Drizzle Studio for lokal utvikling. Supabase har et gratis nivå, deretter Pro til $25/mnd og Team til $599/mnd (2026-priser). Kort sagt: din eneste regning er Supabase, og Drizzle legger ingenting til den.
Drizzle vs Prisma for Supabase — hvilket ORM bør jeg velge?
Begge fungerer med Supabase, så du kan ikke gå veldig galt. Drizzle er lettere (~7.4 kb) og edge-nativt; Prisma har en mer moden utvikleropplevelse og bredere adopsjon. Velg Drizzle for edge og pakkestørrelse, Prisma for ergonomi på tradisjonelle servere.
Bunnlinjen
Så, Supabase vs Drizzle? Det var aldri egentlig en konkurranse. Her er hva du bør ta med deg:
- De er ikke konkurrenter. Supabase er backend; Drizzle er et valgfritt typesikkert ORM som sitter oppå det.
- Å bruke begge er det vanlige svaret —
supabase-jsfor auth/storage/realtime, Drizzle for de tunge dataspørringene. - Få korrekthetdetaljene riktig:
prepare: false, riktig tilkoblingsstreng og en RLS-respekterende klient. Det er disse som snubler team i produksjon. - Drizzle er gratis, så å legge det til koster ingenting — din eneste regning er Supabase.
- Start enkelt. Bruk Drizzle når en spørring faktisk gjør vondt, ikke før.

Sitter du fast og bestemmer mellom supabase-js, Drizzle eller begge for stacken din? Få en gratis backend-konsultasjon →