Skip to content

Split View: Backend-as-a-Service 2026 — Supabase·Firebase·Pocketbase·Appwrite·Convex·InstantDB 심층 비교 (1인 SaaS의 등뼈)

|

Backend-as-a-Service 2026 — Supabase·Firebase·Pocketbase·Appwrite·Convex·InstantDB 심층 비교 (1인 SaaS의 등뼈)

프롤로그 — "1인 SaaS"의 등뼈를 무엇으로 짤 것인가

2026년 5월. 새 프로젝트를 시작하는 첫 회의 풍경은 2020년과 묘하게 비슷하면서도 다르다.

"백엔드, 직접 짤 거예요? 아니면 BaaS 쓸 거예요?"

차이는 이제 **"BaaS를 안 쓰는 팀이 거의 없다"**는 점이다. 1인 SaaS, 인디 게임, 사이드 프로젝트, 심지어 시드 단계 스타트업까지. 풀스택 백엔드를 처음부터 짜는 일은 비용이 너무 크다. 인증·스토리지·실시간·벡터·DB·엣지 함수까지 모두 직접 짜는 건, "AI로 한 명이 SaaS를 만든다"는 2026년의 흐름과 정면으로 어긋난다.

BaaS의 풍경도 5년 전과 다르다.

  • Firebase 일변도가 끝났다. Google이 만든 거대한 도구는 여전히 큰 시장 점유율을 가지지만, Postgres 기반 오픈소스 대안 — Supabase가 진짜 2군이 됐다.
  • 셀프호스트 BaaS가 한 카테고리로 굳었다. Appwrite와 Pocketbase가 각자의 자리에서 살아남았고, 둘 다 v1.x 시리즈로 안정기에 진입했다.
  • 'Reactive 백엔드' 같은 새 모델이 등장했다. Convex는 함수 결과를 클라이언트가 구독하는 식의 React-native 서버 모델로 한 자리를 차지했다.
  • InstantDB는 'Firebase + Linear'의 길을 택했다. Tagged template + 실시간 그래프 쿼리로, "Firebase가 Vercel 시대에 다시 태어나면 이렇게 생겼을 것"이라는 평가를 받는다.

이 글은 2026년 5월 기준 BaaS 시장을 7개 도구로 직접 비교한다.

  • Supabase — Postgres 기반 오픈소스 BaaS의 사실상 표준
  • Firebase — 여전히 가장 큰 BaaS, Google Cloud 통합과 Genkit으로 AI 시대 진입
  • Pocketbase — SQLite 단일 바이너리, 인디 프로젝트의 첫 선택지
  • Appwrite — 멀티 기능 풀스택 BaaS, 셀프호스트 친화
  • Convex — Reactive 백엔드, TypeScript-native 함수
  • InstantDB — 실시간 TS-first 쿼리, "Vercel 시대의 Firebase"
  • PlanetScale + Clerk + 커스텀 — BaaS를 거부하고 직접 조립하는 길

비교 축은 7개. 데이터 모델·실시간·인증·벡터/AI·셀프호스트·벤더 락인·스케일 시 가격. 그리고 마지막에는 시나리오별 추천을 정직하게 정리한다.


1장 · 풍경 — 무엇이 BaaS인가, 누가 누구의 친구인가

먼저 분류부터. 모두 "BaaS"라고 부르지만, 실은 결이 다르다.

분류도구한 줄 요약
풀 BaaS (호스티드)Firebase·Supabase·Appwrite Cloud인증·DB·스토리지·함수·실시간을 한 자리에서
셀프호스트 풀 BaaSAppwrite·Supabase(self-host)Docker·Kubernetes 위에 직접 운영
단일 바이너리 BaaSPocketbaseSQLite + Go 바이너리 하나, 1인 SaaS 친화
Reactive 백엔드Convex함수 + 구독 + 자동 캐시, React/TS-first
실시간 DBInstantDB·Firestore클라이언트가 데이터를 그래프로 구독
빌드-유어-온PlanetScale + Clerk + Inngest + Resend 등BaaS 거부, 각 책임을 별도 서비스로

이 글의 핵심 비교는 위 표의 굵게 표시된 도구들 — Supabase·Firebase·Pocketbase·Appwrite·Convex·InstantDB. 마지막의 "빌드-유어-온"은 비교 끝에 짧게 다룬다.

왜 이 6개인가

  • Supabase — 2026년 BaaS 시장의 2위. GitHub 스타 78k+, 오픈소스 풀 BaaS의 사실상 표준. DataLab·SQL Editor v2·Branching이 최근 1년의 큰 변화.
  • Firebase — Google의 거대한 BaaS, 모바일 친화. App Hosting과 Genkit으로 AI 시대로 들어왔다. Firestore는 여전히 압도적인 도큐먼트 DB 점유율.
  • Pocketbase — Go 단일 바이너리, SQLite 기반. v0.22 시리즈에서 안정기에 들어왔고 1인 인디 프로젝트 사실상 1순위. GitHub 스타 42k+.
  • Appwrite — 셀프호스트 친화의 풀 BaaS. v1.6 ~ v1.7에서 Functions·Realtime·Storage가 모두 안정화. Appwrite Cloud는 호스티드 옵션으로 GA 진입.
  • Convex — TypeScript-native reactive 백엔드. 함수 + 자동 캐시 + WebSocket 구독을 묶어, "Next.js 같은 서버 컴포넌트와 동거하는 백엔드"를 표방.
  • InstantDB — 2024년 베타 이후 2025~2026년 빠르게 성장한 실시간 그래프 DB. TS-first 쿼리(useQuery({ todos: {} }))와 강한 권한 모델이 핵심.

2장 · 데이터 모델 — SQL인가 도큐먼트인가 그래프인가

BaaS 선택의 첫 갈래는 데이터 모델이다. 잘못 고르면 6개월 뒤에 후회한다.

관계형 (SQL)                   도큐먼트                   그래프/리액티브
     |                            |                            |
Supabase   Appwrite(SQL)    Firebase(Firestore)    InstantDB   Convex
Pocketbase(SQLite)         Appwrite(Docs)         Firestore Datastore

2.1 Supabase — Postgres 그 자체

Supabase의 본질은 **"Postgres에 BaaS 옷을 입혔다"**이다. 모든 데이터는 진짜 Postgres 테이블에 들어가고, JOIN·트리거·MV·CTE 같은 Postgres 기능을 다 쓸 수 있다.

-- Supabase는 진짜 Postgres이므로 그대로 동작한다
CREATE TABLE posts (
  id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
  author_id uuid REFERENCES auth.users (id),
  title text NOT NULL,
  body text,
  created_at timestamptz DEFAULT now()
);

-- Row Level Security가 권한 모델의 핵심
ALTER TABLE posts ENABLE ROW LEVEL SECURITY;
CREATE POLICY "own_posts" ON posts
  USING (author_id = auth.uid());

강점

  • 관계가 분명한 SaaS·B2B·CRUD-heavy 앱에 자연스럽다.
  • 운영 노하우가 곧 일반 Postgres 지식이다 (export·튜닝·인덱스).
  • pgvector 확장으로 벡터 검색이 빌트인. AI 앱 친화.

약점

  • 도큐먼트/임베디드 그래프 데이터 모델이 자연스럽지 않다.
  • 트랜잭션 + 실시간 + RLS의 상호작용이 처음엔 헷갈린다.

2.2 Firebase Firestore — 도큐먼트의 황제

Firestore는 컬렉션 + 도큐먼트 + 서브컬렉션의 NoSQL 도큐먼트 DB다. 스키마가 없고, 클라이언트에서 직접 읽고 쓰는 모델이 표준이다.

import { getFirestore, collection, addDoc } from 'firebase/firestore'

const db = getFirestore()
await addDoc(collection(db, 'posts'), {
  authorId: 'user_123',
  title: 'Hello',
  createdAt: serverTimestamp(),
})

강점

  • 모바일·오프라인 동기화의 사실상 표준.
  • 권한은 Security Rules로 선언적으로.
  • 자동 스케일링, 트래픽 급증에도 거의 안 죽는다.

약점

  • JOIN이 없다. 관계 데이터는 비정규화·복제로 풀어야 한다.
  • 쿼리 표현력이 제한적 (인덱스 사전 정의, OR 제약 등).
  • 비용이 "도큐먼트 읽기 회수"에 비례 — 스케일 시 비용 모델링이 어렵다.

2.3 Pocketbase — SQLite 기반의 깔끔한 관계형

Pocketbase는 SQLite 위에 컬렉션 모델을 얹은 형태다. "도큐먼트 같지만 실은 관계형"인 하이브리드.

  • 컬렉션 = SQLite 테이블 (스키마 있음).
  • 레코드 간 관계는 relation 필드 타입으로 표현.
  • 어드민 UI에서 스키마·레코드를 시각적으로 관리.

강점

  • 단일 바이너리. ./pocketbase serve 한 줄로 시작.
  • SQLite의 단순함 — 백업은 파일 복사, 운영 비용 0에 가까움.

약점

  • 단일 노드. 수평 확장은 본질적으로 어렵다 (LiteFS 같은 우회는 있음).
  • SQLite 한계 — 동시 쓰기·복잡 쿼리·확장 모듈에서는 Postgres에 못 미친다.

2.4 Appwrite — 도큐먼트형, 다중 DB

Appwrite는 도큐먼트 컬렉션 모델이지만 내부적으로 MariaDB·MySQL·MongoDB 백엔드를 고를 수 있다. 운영자가 자기 인프라에 맞춰 고를 수 있는 게 강점이자 복잡함이다.

2.5 Convex — 도큐먼트 + reactive view

Convex의 데이터 모델은 도큐먼트 + 인덱스 + 함수다. 데이터를 직접 노출하지 않고, 항상 TypeScript 함수를 통해서 본다.

// convex/posts.ts
import { query } from './_generated/server'

export const list = query(async (ctx) => {
  return await ctx.db.query('posts').order('desc').take(20)
})
// 클라이언트는 함수 결과를 구독한다 — 자동 실시간
const posts = useQuery(api.posts.list)

2.6 InstantDB — 트리플 스토어 + 그래프 쿼리

InstantDB는 entity-attribute-value(트리플 스토어) 모델 위에 그래프 쿼리를 얹은 구조다.

import { useQuery } from '@instantdb/react'

// 'todos를 가져오는데, 그 안의 owner도 함께'
const { data } = useQuery({ todos: { owner: {} } })

스키마는 선택적 — 처음에는 스키마 없이 시작하고, 점진적으로 강화할 수 있다.


3장 · 실시간 — "푸시"가 기본인가 옵션인가

2026년의 BaaS에서 실시간은 선택이 아니라 기본이다. 다만 구현 모델이 다르다.

도구실시간 모델비고
Supabase RealtimePostgres logical replication → WebSocketRLS 적용
Firebase Firestoresnapshot listener자동, 오프라인 친화
Firebase RTDBWebSocket 기반 트리/노드 구독가장 오래된 실시간 NoSQL
Pocketbase RealtimeSSE 기반 컬렉션 구독단순, 단일 노드
Appwrite RealtimeWebSocket 채널 구독컬렉션/도큐먼트별 채널
ConvexWebSocket — 함수 결과 자동 무효화가장 매끄러운 reactive
InstantDBWebSocket — 쿼리 그래프 구독변경 분 전체 푸시

3.1 Supabase — RLS와 실시간의 만남

Supabase Realtime은 Postgres의 logical replication을 듣고 있다가, RLS 정책을 만족하는 변경만 클라이언트로 푸시한다.

const channel = supabase
  .channel('posts')
  .on('postgres_changes',
      { event: '*', schema: 'public', table: 'posts' },
      (payload) => { /* ... */ })
  .subscribe()

RLS가 실시간에도 적용된다는 게 핵심이다 — 한 곳에서 정책을 짜면 read·write·realtime 셋 다 같은 정책으로 보호된다.

3.2 Firestore — 가장 매끄러운 모바일 실시간

onSnapshot은 모바일 친화 실시간의 사실상 표준이다. 오프라인 큐, 자동 재연결, 컬렉션 인덱스까지 묶여 있다.

3.3 Convex — 함수 결과가 곧 구독 대상

Convex의 차별점은 **"쿼리 함수의 결과 그 자체가 구독 단위"**라는 점이다. 함수가 읽은 데이터를 자동으로 추적해서, 그 데이터가 바뀌면 함수를 다시 실행하고 클라이언트에 새 결과를 푸시한다.

이 모델은 "어떤 채널을 구독해야 하나?" 같은 고민을 없앤다. 그러나 비용 모델·함수 작성 방식이 일반 BaaS와 다르므로 학습 곡선이 있다.

3.4 InstantDB — 그래프 변경 그대로 푸시

InstantDB는 클라이언트가 짠 그래프 쿼리({ todos: { owner: {} } })를 그대로 구독한다. 어떤 attribute가 바뀌었는지 서버가 안다.


4장 · 인증·권한 — 진짜 운영 가능한가

BaaS의 진짜 가치는 인증·권한 시스템에 있다. 직접 짜본 사람은 안다 — 토큰 회전·OAuth 콜백·이메일 인증·MFA·RLS가 얼마나 귀찮은지.

도구인증 방식권한 모델
Supabase Auth이메일·OAuth·매직링크·SAML·MFAPostgres RLS
Firebase Auth이메일·OAuth·매직링크·SAML·MFASecurity Rules
Pocketbase Auth이메일·OAuth컬렉션 API 규칙
Appwrite Auth이메일·OAuth·매직링크·SMS·MFATeams + Permissions
Convex AuthClerk·Auth0·NextAuth 어댑터함수 내 검사
InstantDB Auth매직링크 + ClerkRules (Datalog 비슷)

4.1 Supabase Auth + RLS

Supabase의 핵심은 JWT + Postgres RLS다. JWT의 subauth.uid() 함수로 모든 쿼리에서 사용 가능하다.

CREATE POLICY "select_own" ON posts FOR SELECT
  USING (author_id = auth.uid());

CREATE POLICY "insert_own" ON posts FOR INSERT
  WITH CHECK (author_id = auth.uid());

RLS는 데이터 자체에 권한이 박힌다는 점에서 강력하지만, 디버그 난이도가 있다 — 정책이 잘못 짜이면 "원인 없이 빈 결과"가 난다.

4.2 Firebase Security Rules

선언적 DSL로 권한을 짠다.

match /posts/{postId} {
  allow read: if true;
  allow write: if request.auth.uid == resource.data.authorId;
}

학습 곡선은 있지만, 한 번 익히면 매우 강력하다.

4.3 Convex — 함수 내 검사

Convex는 RLS 같은 DB 레벨 권한이 없다. 모든 권한 검사는 함수 안에서 이뤄진다.

export const updatePost = mutation(async (ctx, { id, body }) => {
  const identity = await ctx.auth.getUserIdentity()
  if (!identity) throw new Error('unauthorized')
  const post = await ctx.db.get(id)
  if (post.authorId !== identity.subject) throw new Error('forbidden')
  await ctx.db.patch(id, { body })
})

장점은 명시성 — 권한이 코드에 분명히 보인다. 단점은 일관성 — 모든 함수에 직접 짜야 한다.

4.4 InstantDB Rules

InstantDB는 Datalog과 비슷한 룰 DSL을 쓴다. 데이터 모델이 트리플 스토어이므로 룰도 그쪽 표현에 맞다.


5장 · AI·벡터 — 2026년의 BaaS 차별점

2026년 BaaS에서 가장 빠르게 진화한 영역이 벡터·임베딩·AI 기능이다.

도구벡터 검색AI 통합
Supabasepgvector + HNSWEdge Functions + AI SDK 통합
FirebaseVertex AI Vector Search 통합Genkit (정식 GA)
Pocketbase빌트인 X (외부 통합)별도
Appwritev1.7~ 벡터 컬렉션 베타Functions에서 직접
Convex벡터 인덱스 빌트인함수 내 OpenAI 호출 표준
InstantDB벡터 검색 베타트리거 + 외부

5.1 Supabase — pgvector의 본진

Supabase의 AI 친화도가 가장 높다고 평가받는 이유는 pgvector를 1급으로 다룬다는 점이다.

CREATE EXTENSION vector;

CREATE TABLE documents (
  id bigserial PRIMARY KEY,
  content text,
  embedding vector(1536)
);

CREATE INDEX ON documents USING hnsw (embedding vector_cosine_ops);

RAG·임베딩 검색·시맨틱 검색이 일반 Postgres 쿼리로 표현된다. AI 앱을 짤 때 BaaS와 벡터 DB를 분리할 필요가 없다.

5.2 Firebase Genkit — Google의 응답

Genkit은 Firebase 진영의 AI 프레임워크로 정식 GA 됐다. Vertex AI 통합, Gemini 모델, retrieval, flow definition, 평가까지 묶인다. Firebase 백엔드 + Genkit AI 흐름을 같이 짜고 싶은 팀에 자연스럽다.

5.3 Convex — 함수 안에서 LLM 호출이 기본 스타일

Convex 함수 안에서 OpenAI·Anthropic API를 직접 호출하는 패턴이 표준화돼 있다. 벡터 인덱스가 빌트인이라 RAG 파이프라인이 짧다.

// convex/rag.ts
export const search = query(async (ctx, { q }) => {
  const embedding = await embed(q)
  const docs = await ctx.db
    .query('docs')
    .withIndex('by_embedding', q => q.vectorSearch('embedding', embedding))
    .take(5)
  return docs
})

6장 · 셀프호스트 스토리 — "1인 SaaS"라면 핵심

셀프호스트는 단순한 비용 절감이 아니라, 벤더 락인을 끊는 보험이다.

도구셀프호스트난이도
Supabase공식 Docker compose / Kubernetes Helm중 (Postgres + 마이크로서비스 다수)
Firebase불가 (에뮬레이터만)해당 없음
Pocketbase단일 바이너리매우 낮음 (1분)
Appwrite공식 Docker compose낮음~중 (모놀리식, Docker 한 줄)
ConvexOSS 셀프호스트 출시(2025)
InstantDB베타 단계 셀프호스트 옵션중~높음

6.1 Pocketbase — 가장 단순한 셀프호스트

Pocketbase의 셀프호스트는 1분이다.

# 다운로드 후
./pocketbase serve --http=0.0.0.0:8090

Fly.io·Railway·VPS 어디든 단일 바이너리 + SQLite 파일이면 끝. 백업은 그 파일을 복사.

6.2 Supabase — 강력하지만 운영비

Supabase의 자체 호스팅은 가능하지만, 여러 서비스(Postgres + GoTrue + Realtime + Storage + Studio + ...)를 한꺼번에 운영해야 한다. Docker compose 한 줄로 시작은 가능하지만, 프로덕션은 진지한 운영 노력이 든다.

6.3 Appwrite — Docker 친화

Appwrite는 셀프호스트가 1급 시민이다. docker-compose up -d 한 줄로 풀스택이 뜬다. 인디 + 작은 팀에 자연스럽다.

6.4 Convex — OSS 등장

2025년 후반 Convex가 OSS 셀프호스트 버전을 공개했다. 호스티드와 100% 동등하진 않지만, 락인을 진지하게 줄였다.

6.5 Firebase — 불가능

Firebase는 셀프호스트 옵션이 없다. 로컬 에뮬레이터는 개발용. 이게 Firebase의 가장 큰 약점이다.


7장 · 벤더 락인 — 빠져나갈 수 있는가

셀프호스트와 별개로, 데이터·코드·운영 지식의 이식성이 락인의 본질이다.

도구데이터 락인코드 락인
Supabase낮음 (Postgres)낮음 (SDK는 얇음)
Firebase높음 (Firestore export 복잡)높음 (Security Rules·트리거·Hosting)
Pocketbase매우 낮음 (SQLite 파일)낮음
Appwrite중 (도큐먼트 export)
Convex중 (함수 + 인덱스 묶음)중~높음
InstantDB중 (트리플 스토어)

Supabase가 가장 낮은 이유

Supabase의 진정한 강점은 **"데이터는 그냥 Postgres"**라는 점이다. pg_dump로 옮기면 다른 Postgres에 그대로 들어간다. SDK도 PostgREST·GoTrue 같은 표준 위에 있어, 갈아타기 비용이 낮다.

Firebase가 가장 높은 이유

Firestore export → 다른 DB는 자동이 아니다. 모델이 다르고(도큐먼트 → 관계형 매핑 필요), Security Rules·트리거·Functions는 Google Cloud에 박혀 있다. 락인이 본질적이다.


8장 · 가격·스케일 — "에지 케이스"가 결정한다

가격 비교는 단순한 표가 아니다. **"무엇이 청구 단위인가"**가 핵심이다.

도구청구 단위
SupabaseDB 크기 + Egress + 활성 사용자 + 함수 호출
Firebase도큐먼트 read/write/delete + 저장 + Egress + 함수 호출
Pocketbase셀프호스트(VPS 비용) — 호스티드 없음
AppwriteProject + 함수 실행 + 스토리지 (Cloud) / 셀프호스트는 무료
Convex함수 호출 + 스토리지 + WebSocket 시간
InstantDB활성 사용자 + 트랜잭션

가격 함정

가장 흔한 실수는 **"무료 티어가 후하다"**만 보고 결정하는 것.

  • Firebase는 "도큐먼트 read"가 청구 단위이므로, "한 페이지에서 50개 도큐먼트를 보여주는 앱"은 사용자 1명당 페이지뷰마다 50회 read. 트래픽이 늘면 곡선이 가파르다.
  • Supabase는 Postgres + Egress 중심이라, 큰 페이로드(이미지·JSON 덩어리)가 Egress를 폭증시킨다.
  • Convex는 함수 호출 + WebSocket 연결 시간. 항상 떠 있는 모바일 앱이 많아지면 가파르다.

1인 SaaS 시나리오 (월 1000 사용자)

대략 (정확한 숫자는 항상 최신 페이지 확인 필수).

  • Supabase Pro — $25/월 시작 + 사용량 + Egress.
  • Firebase — 무료 티어 + Spark 초과 시 Blaze 사용량. read 회수 의존.
  • Pocketbase — VPS 5 5~10/월. 그 외 비용 사실상 0.
  • Appwrite Cloud — 무료 + 사용량. 셀프호스트면 0.
  • Convex — $25/월 시작 + 사용량.
  • InstantDB — 무료 + 사용량 기반.

이 단계에서는 Pocketbase·Appwrite 셀프호스트가 압도적으로 싸다. 다만 운영 부담은 본인 몫.

시드 SaaS 시나리오 (월 5만 사용자)

  • 셀프호스트 1인 운영은 슬슬 부담된다. VPS 모니터링·백업·업그레이드.
  • Supabase Pro / Convex / Firebase Blaze가 자연스러운 선택.
  • Firebase는 read 회수 모델링이 잘 안 되면 가파르게 비싸진다.
  • Supabase는 일관된 Postgres 운영 + Egress 관리가 핵심.

9장 · 7축 비교 — 한눈에

9.1 핵심 매트릭스

SupabaseFirebasePocketbaseAppwriteConvexInstantDB
데이터 모델SQL(Postgres)도큐먼트SQL(SQLite)도큐먼트도큐먼트트리플/그래프
실시간RLS + LRsnapshotSSEWSreactive그래프 푸시
인증RLSRulesAPI rulesTeams어댑터Magic + Rules
벡터·AIpgvector 1급Genkit/Vertex외부베타빌트인베타
셀프호스트O (Docker/K8s)XO (바이너리)O (Docker)O (OSS)베타
락인매우 낮음매우 높음매우 낮음낮음
1인 비용낮음(무료)매우 낮음낮음낮음

9.2 시나리오별 추천

AI 앱 (RAG·임베딩·LLM 흐름)

  1. Supabase — pgvector + Edge Functions, 가장 매끄러움.
  2. Convex — 함수 + 벡터 빌트인, TS-first.
  3. Firebase + Genkit — Google 진영을 이미 쓰는 경우.

B2B SaaS (관계 데이터·복잡 쿼리)

  1. Supabase — Postgres가 1순위.
  2. PlanetScale·Neon + Clerk + 자체 백엔드 — 빌드-유어-온 진영.
  3. Convex — TS-first 팀이고 reactive를 원할 때.

모바일 퍼스트 (오프라인·푸시·푸시 알림)

  1. Firebase — 여전히 사실상 표준. 오프라인 동기화 성숙.
  2. Supabase — 모바일 SDK 진화 중, 단 오프라인은 아직 Firebase 수준 아님.
  3. InstantDB — 실시간 그래프가 모바일 UX와 잘 맞음.

1인 SaaS·인디·사이드 프로젝트

  1. Pocketbase — 단순함이 압도적인 가치.
  2. Supabase — 무료 티어 + Postgres 운영 지식 재사용.
  3. InstantDB — 작은 팀 + 실시간 친화.

셀프호스트 우선 (규제·보안·비용)

  1. Appwrite — Docker 한 줄, 풀스택.
  2. Supabase 셀프호스트 — 강력하나 운영 부담.
  3. Pocketbase — 가장 단순.

10장 · 빌드-유어-온 — BaaS를 거부하는 길

마지막 카드. 어떤 팀은 BaaS를 의식적으로 거부하고, 각 책임을 별도 서비스로 조립한다.

Auth        Clerk / WorkOS / Auth.js
DB          PlanetScale / Neon / Supabase Postgres (만)
Realtime    Liveblocks / Ably / 자체 WS
Storage     S3 / R2 / UploadThing
Functions   Inngest / Cloudflare Workers
Email       Resend
Vector      Pinecone / Turbopuffer / pgvector

장점

  • 각 책임의 최고 도구를 골라 쓴다.
  • 한 서비스의 사고가 전체를 멈추지 않는다.
  • 가격 곡선을 세밀히 제어 가능.

약점

  • 통합 비용. 인증·DB·실시간 사이를 코드로 직접 짜야 함.
  • 장애 시 디버깅 표면이 넓다.
  • 신규 팀원 온보딩에 도구 N개를 가르쳐야.

언제 좋은가

  • Series A 이후 팀, 10명 이상 엔지니어.
  • 특정 도구의 한계를 분명히 본 후.
  • 규제·SLA·온프레미스 요구가 강할 때.

11장 · 최근 1년 동안 무엇이 바뀌었나

각 도구의 2025~2026년 핵심 변경.

Supabase

  • DataLab — 노트북 스타일의 SQL 분석 도구. Postgres + AI 어시스턴트로 데이터 탐색.
  • SQL Editor v2 — 더 빠르고 AI 자동완성이 강화된 쿼리 에디터.
  • Branching — DB 브랜치 기능이 GA. PR마다 isolated DB.
  • pgvector + HNSW 인덱스 안정화.
  • Edge Functions 콜드 스타트 개선.

Firebase

  • App Hosting GA — Next.js·Angular 호스팅이 1급으로.
  • Genkit GA — AI 흐름 프레임워크 정식 출시.
  • Data Connect — 관계형 데이터(Postgres) 통합이 빌트인으로.
  • Firestore 가격 모델 일부 조정.

Pocketbase

  • v0.22 시리즈 안정화.
  • Realtime SSE 성능 개선.
  • 외부 OAuth 프로바이더 확대.
  • Go API 깔끔한 정리.

Appwrite

  • v1.6 → v1.7 시리즈로 Functions·Realtime·Sites 안정화.
  • Appwrite Cloud GA.
  • Sites — 정적 사이트 호스팅이 빌트인으로.

Convex

  • 셀프호스트 OSS 출시.
  • 벡터 검색 정식 GA.
  • HTTP Actions, Crons, Scheduling 안정화.
  • Next.js·Tanstack Start 통합.

InstantDB

  • 베타 → 정식 GA (단계적).
  • 권한 룰 시스템 강화.
  • 셀프호스트 베타 옵션.
  • Clerk·Auth.js 통합.

에필로그 — "1인이 SaaS를 만든다"는 시대의 도구 선택

BaaS 선택은 "무엇을 청구 단위로 받아들일 것인가"의 결정이기도 하다. 1년 후의 청구서를 미리 머릿속에서 그려보는 게 가격표 외우는 것보다 중요하다.

2026년 5월의 결론을 정리한다.

  • Postgres에 비빌 수 있다면 Supabase — 락인 낮고, 운영 지식이 일반 Postgres와 같다.
  • 모바일·오프라인이 핵심이면 Firebase — 락인은 비싸지만 성숙도가 압도.
  • 1인·인디·작은 팀은 Pocketbase가 정답일 때가 많다 — 단순함이 곧 속도.
  • 셀프호스트 풀스택은 Appwrite — Docker 친화, 자기 인프라에서 결정.
  • TS-first reactive 백엔드는 Convex — 함수 + 구독 모델이 익숙해지면 매력적.
  • 실시간 그래프 + 작은 코드는 InstantDB — 빠르게 성장 중.
  • 본인이 무엇을 짓는지 분명하면 빌드-유어-온 — 단, 통합 비용은 진짜로 든다.

결정 체크리스트

  • 데이터 모델은 관계형인가 도큐먼트인가? — Yes 관계형이면 Supabase·Pocketbase, 도큐먼트면 Firebase·Appwrite·Convex·InstantDB.
  • 실시간이 본질인가? — Yes면 Convex·InstantDB·Supabase·Firestore.
  • 모바일 + 오프라인 동기화? — Yes면 Firebase 1순위.
  • AI·벡터·RAG가 핵심? — Supabase·Convex.
  • 셀프호스트 필수? — Pocketbase·Appwrite·Supabase·Convex.
  • 락인 최소화? — Supabase·Pocketbase.
  • 가장 빠르게 MVP? — Firebase·Pocketbase·Convex.

안티 패턴

  1. 무료 티어만 보고 결정 — 1년 뒤 청구서가 곡선이다. 청구 단위를 보라.
  2. "트렌드"만 보고 갈아타기 — Convex가 멋있어 보여서 옮겼는데 RLS-style 권한이 그리워지는 경우 많음.
  3. 셀프호스트를 1인 운영하는 SLA 계산 없이 — 백업·모니터·업그레이드 시간은 본인 시간.
  4. Firebase에서 30만 도큐먼트 read/일을 무료 티어 안에서 한다고 가정 — 청구 모델을 먼저 모델링하라.
  5. BaaS A와 B를 동시에 쓰기 — "Auth는 Firebase, DB는 Supabase". 통합 비용으로 한 시즌 날릴 수 있음.
  6. 벤더 락인 0을 추구하다가 아무것도 못 만듦 — 락인은 트레이드오프, 0은 불가능.
  7. AI 앱인데 벡터 빌트인 없는 도구 선택 — 그러면 BaaS의 가치 절반이 빠진다.

다음 글 예고

다음 글 후보: Supabase Branching + Drizzle ORM 1년 회고 — PR마다 isolated DB가 실제로 어떤지, Firebase Genkit vs Vercel AI SDK 실전 비교 — RAG 흐름 동일 시나리오, Pocketbase 단일 바이너리로 6개월 SaaS 운영한 솔직한 후기, Convex 셀프호스트 OSS — 호스티드와 실제로 무엇이 다른가.

"BaaS는 백엔드를 짜는 일이 아니다. 백엔드를 짜지 않는 결정을 짜는 일이다."

— BaaS 2026, 끝.


참고 / References

Backend-as-a-Service 2026 — Supabase vs Firebase vs Pocketbase vs Appwrite vs Convex vs InstantDB Deep Dive (The 1-Person SaaS Backbone) (english)

Prologue — What Will the "1-Person SaaS" Be Built On?

May 2026. The first meeting on a new project looks weirdly similar to 2020, and yet different.

"Backend — building it yourself or using a BaaS?"

The difference: almost no team builds backend from scratch anymore. One-person SaaS, indie games, side projects, even seed-stage startups. Writing your own auth, storage, realtime, vector, DB, and edge functions is too expensive — and frontally collides with the 2026 vibe of "one person ships a SaaS with AI."

The BaaS landscape itself is different from five years ago.

  • The Firebase monoculture is over. Google's giant tool still owns big mindshare, but a real number two has emerged — Supabase, the Postgres-based open-source alternative.
  • Self-host BaaS is now a real category. Appwrite and Pocketbase each found their niche and both reached stable v1.x territory.
  • A new model — the "reactive backend" — landed. Convex turned function results into client subscriptions, claiming a slot as a "backend that lives with server components."
  • InstantDB took the 'Firebase + Linear' path. Tagged templates and realtime graph queries — widely framed as "what Firebase would look like if it were reborn in the Vercel era."

This article compares seven tools as of May 2026.

  • Supabase — the de-facto open-source Postgres-based BaaS standard
  • Firebase — still the biggest BaaS, Google Cloud integration, AI era via Genkit
  • Pocketbase — single Go binary on SQLite, first pick for indie projects
  • Appwrite — multi-feature full BaaS, self-host friendly
  • Convex — reactive backend, TypeScript-native functions
  • InstantDB — realtime TS-first queries, "Firebase for the Vercel era"
  • PlanetScale + Clerk + custom — the build-your-own-stack alternative

We compare across seven axes — data model, realtime, auth, vector and AI, self-host, vendor lock-in, and pricing at scale — and end with honest scenario-based picks.


1. The Landscape — What Counts as BaaS, Who Fights Whom

First, taxonomy. They all say "BaaS" but the shapes differ.

CategoryToolsOne-line summary
Full BaaS (hosted)Firebase, Supabase, Appwrite CloudAuth + DB + Storage + Functions + Realtime in one place
Self-host full BaaSAppwrite, Supabase (self-host)Run yourself on Docker or Kubernetes
Single-binary BaaSPocketbaseSQLite + a Go binary, 1-person SaaS friendly
Reactive backendConvexFunctions + subscriptions + auto cache, React/TS-first
Realtime DBInstantDB, FirestoreClient subscribes to data as a graph
Build-your-ownPlanetScale + Clerk + Inngest + Resend, etc.Reject BaaS, compose discrete services

This article focuses on the bolded six — Supabase, Firebase, Pocketbase, Appwrite, Convex, InstantDB. Build-your-own gets a short chapter at the end.

Why these six

  • Supabase — number two in BaaS. GitHub stars over 78k, the de-facto open-source full-BaaS standard. DataLab, SQL Editor v2, and Branching are the big last-year changes.
  • Firebase — Google's massive BaaS, mobile-first. App Hosting and Genkit moved it into the AI era. Firestore still dominates the hosted document-DB slot.
  • Pocketbase — single Go binary, SQLite-based. The v0.22 line stabilized it and made it the default first pick for solo indie projects. GitHub stars over 42k.
  • Appwrite — self-host-friendly full BaaS. Functions, Realtime, and Storage all stabilized in v1.6 and v1.7. Appwrite Cloud is now GA as a hosted option.
  • Convex — TypeScript-native reactive backend. Functions + auto cache + WebSocket subscriptions, pitched as "a backend that lives next to your server components."
  • InstantDB — grew fast in 2025 and 2026 after its 2024 beta. TS-first queries (useQuery({ todos: {} })) and a strong rules model are the core.

2. Data Model — SQL, Document, or Reactive Graph

The first fork in BaaS choice is the data model. Get it wrong and you regret it six months in.

Relational (SQL)             Document               Graph/Reactive
     |                           |                       |
Supabase   Appwrite(SQL)    Firebase(Firestore)   InstantDB   Convex
Pocketbase(SQLite)          Appwrite(Docs)        Firestore Datastore

2.1 Supabase — Postgres, full stop

Supabase's essence is "Postgres with a BaaS skin." Data lives in real Postgres tables, and you keep JOINs, triggers, materialized views, CTEs, the whole language.

-- Supabase is actually Postgres, so this works as-is
CREATE TABLE posts (
  id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
  author_id uuid REFERENCES auth.users (id),
  title text NOT NULL,
  body text,
  created_at timestamptz DEFAULT now()
);

-- Row Level Security is the heart of the permission model
ALTER TABLE posts ENABLE ROW LEVEL SECURITY;
CREATE POLICY "own_posts" ON posts
  USING (author_id = auth.uid());

Strengths

  • Natural for relationship-heavy SaaS, B2B, CRUD apps.
  • Ops knowledge transfers — it's just Postgres (exports, tuning, indexes).
  • pgvector extension built in for AI apps.

Weaknesses

  • Document and embedded-graph models feel awkward.
  • The interaction between transactions, realtime, and RLS can be confusing at first.

2.2 Firebase Firestore — Emperor of Documents

Firestore is collections + documents + subcollections — a NoSQL document DB. Schemaless, with direct client reads and writes as the default model.

import { getFirestore, collection, addDoc } from 'firebase/firestore'

const db = getFirestore()
await addDoc(collection(db, 'posts'), {
  authorId: 'user_123',
  title: 'Hello',
  createdAt: serverTimestamp(),
})

Strengths

  • The de-facto standard for mobile and offline sync.
  • Permissions through declarative Security Rules.
  • Auto-scaling that almost never dies under traffic spikes.

Weaknesses

  • No JOINs. Relational data is denormalized and duplicated.
  • Limited query expressiveness — predefined indexes, OR constraints, etc.
  • Pricing scales with "document reads" — pricing modeling at scale is hard.

2.3 Pocketbase — Clean Relational on SQLite

Pocketbase is a collection model on top of SQLite. "Looks like documents, is actually relational" — a hybrid.

  • Collection = SQLite table (with schema).
  • Relations between records use the relation field type.
  • Schema and records managed visually in the admin UI.

Strengths

  • One binary. Run with ./pocketbase serve and you are done.
  • SQLite simplicity — backup is file copy, ops cost is near zero.

Weaknesses

  • Single node. Horizontal scaling is hard by design (LiteFS is a workaround).
  • SQLite limits — concurrent writes, complex queries, and extension modules trail Postgres.

2.4 Appwrite — Documents, Multi-Backend

Appwrite uses a document/collection model but supports MariaDB, MySQL, and MongoDB as the underlying backend. Choice is strength and complexity at the same time.

2.5 Convex — Documents + Reactive Views

Convex's data model is documents + indexes + functions. Data is never exposed directly — always through a TypeScript function.

// convex/posts.ts
import { query } from './_generated/server'

export const list = query(async (ctx) => {
  return await ctx.db.query('posts').order('desc').take(20)
})
// Clients subscribe to function results — realtime by default
const posts = useQuery(api.posts.list)

2.6 InstantDB — Triple Store + Graph Queries

InstantDB sits on an entity-attribute-value (triple store) model with a graph query layer on top.

import { useQuery } from '@instantdb/react'

// "Fetch todos and include each owner"
const { data } = useQuery({ todos: { owner: {} } })

Schema is optional — start without one, add structure gradually.


3. Realtime — Default or Optional?

In 2026 BaaS, realtime is default, not an option. The implementation models differ.

ToolRealtime modelNotes
Supabase RealtimePostgres logical replication → WebSocketRLS applied
Firebase Firestoresnapshot listenerAuto, offline-friendly
Firebase RTDBWebSocket tree/node subscriptionsOldest realtime NoSQL
Pocketbase RealtimeSSE collection subscriptionsSimple, single-node
Appwrite RealtimeWebSocket channel subscriptionsCollection/document channels
ConvexWebSocket — function result auto-invalidationSmoothest reactive feel
InstantDBWebSocket — query-graph subscriptionsPush full diff

3.1 Supabase — RLS Meets Realtime

Supabase Realtime listens to Postgres logical replication and only pushes changes that pass RLS policy.

const channel = supabase
  .channel('posts')
  .on('postgres_changes',
      { event: '*', schema: 'public', table: 'posts' },
      (payload) => { /* ... */ })
  .subscribe()

The key is that RLS applies to realtime too — write the policy once, and it covers read, write, and realtime in the same place.

3.2 Firestore — The Smoothest Mobile Realtime

onSnapshot is the de-facto realtime API on mobile. Offline queue, auto-reconnect, collection indexes — all bundled.

3.3 Convex — Function Results Are the Subscription Unit

Convex's twist is that the result of a query function is itself a subscription unit. Convex tracks the data a function reads, and when that data changes, it re-runs the function and pushes the new result to subscribed clients.

This makes the "which channel do I subscribe to?" question go away. But the pricing model and function authoring style differ from a typical BaaS, so there is a learning curve.

3.4 InstantDB — Push the Graph Diff

InstantDB lets clients subscribe directly to the graph query they wrote ({ todos: { owner: {} } }). The server knows which attribute changed.


4. Auth and Permissions — Are They Really Ops-Ready?

The real value of a BaaS lives in its auth and permission system. Anyone who has rolled their own knows — token rotation, OAuth callbacks, email verification, MFA, and RLS are tedious.

ToolAuth methodsPermission model
Supabase AuthEmail, OAuth, magic link, SAML, MFAPostgres RLS
Firebase AuthEmail, OAuth, magic link, SAML, MFASecurity Rules
Pocketbase AuthEmail, OAuthCollection API rules
Appwrite AuthEmail, OAuth, magic link, SMS, MFATeams + Permissions
Convex AuthAdapters for Clerk, Auth0, NextAuthPer-function checks
InstantDB AuthMagic link + ClerkRules (Datalog-ish)

4.1 Supabase Auth + RLS

The core is JWT + Postgres RLS. The sub claim is exposed as auth.uid() inside any query.

CREATE POLICY "select_own" ON posts FOR SELECT
  USING (author_id = auth.uid());

CREATE POLICY "insert_own" ON posts FOR INSERT
  WITH CHECK (author_id = auth.uid());

RLS is powerful because permission lives with the data itself, but it has a debug curve — a misconfigured policy yields silent empty results.

4.2 Firebase Security Rules

A declarative DSL.

match /posts/{postId} {
  allow read: if true;
  allow write: if request.auth.uid == resource.data.authorId;
}

Learning curve exists, but once you know it, it is very powerful.

4.3 Convex — Per-Function Checks

Convex has no DB-level RLS. All permission checks are inside functions.

export const updatePost = mutation(async (ctx, { id, body }) => {
  const identity = await ctx.auth.getUserIdentity()
  if (!identity) throw new Error('unauthorized')
  const post = await ctx.db.get(id)
  if (post.authorId !== identity.subject) throw new Error('forbidden')
  await ctx.db.patch(id, { body })
})

The pro is explicitness — permission lives visibly in code. The con is consistency — every function has to do it.

4.4 InstantDB Rules

InstantDB uses a Datalog-ish rules DSL. Because the underlying model is a triple store, the rule language matches that shape.


5. AI and Vector — The 2026 Differentiator

The fastest-evolving BaaS area in 2026 is vector, embedding, and AI features.

ToolVector searchAI integration
Supabasepgvector + HNSWEdge Functions + AI SDK integration
FirebaseVertex AI Vector Search integrationGenkit (GA)
PocketbaseNo built-in (external)Separate
Appwritev1.7+ vector collections betaDirect in Functions
ConvexBuilt-in vector indexesOpenAI calls from functions
InstantDBVector search betaTriggers + external

5.1 Supabase — pgvector's Home Base

Supabase has arguably the most AI-friendly story because pgvector is a first-class citizen.

CREATE EXTENSION vector;

CREATE TABLE documents (
  id bigserial PRIMARY KEY,
  content text,
  embedding vector(1536)
);

CREATE INDEX ON documents USING hnsw (embedding vector_cosine_ops);

RAG, embedding search, and semantic search read like normal Postgres queries. No separate vector DB needed.

5.2 Firebase Genkit — Google's Answer

Genkit is the Firebase-side AI framework, now GA. Vertex AI integration, Gemini models, retrieval, flow definitions, and evaluation — all bundled. Natural for teams that want Firebase backend plus Genkit AI flows together.

5.3 Convex — LLM Calls Inside Functions Are Standard

Calling OpenAI or Anthropic APIs directly inside a Convex function is the standard pattern. Vector indexes are built in, so RAG pipelines stay short.

// convex/rag.ts
export const search = query(async (ctx, { q }) => {
  const embedding = await embed(q)
  const docs = await ctx.db
    .query('docs')
    .withIndex('by_embedding', q => q.vectorSearch('embedding', embedding))
    .take(5)
  return docs
})

6. Self-Host Story — Core Concern for "1-Person SaaS"

Self-hosting is not just a cost story — it is insurance against vendor lock-in.

ToolSelf-hostDifficulty
SupabaseOfficial Docker compose / Kubernetes HelmMedium (Postgres + many microservices)
FirebaseNot possible (emulators only)n/a
PocketbaseSingle binaryVery low (one minute)
AppwriteOfficial Docker composeLow to medium (monolithic, single Docker run)
ConvexOSS self-host (released 2025)Medium
InstantDBBeta self-host optionMedium to high

6.1 Pocketbase — The Simplest Self-Host

Pocketbase self-host takes one minute.

# After downloading the binary
./pocketbase serve --http=0.0.0.0:8090

Fly.io, Railway, any VPS — a single binary and a SQLite file is the whole deployment. Backup is copying that file.

6.2 Supabase — Powerful but Ops-Heavy

Supabase self-hosting works, but you run several services together (Postgres + GoTrue + Realtime + Storage + Studio + ...). A Docker compose gets you started, but production-grade self-hosting takes serious ops effort.

6.3 Appwrite — Docker-Friendly

Appwrite is built self-host-first. docker-compose up -d and a full stack is alive. Natural for indies and small teams.

6.4 Convex — OSS Arrives

In late 2025 Convex shipped an OSS self-host version. It is not 100% feature-parity with hosted, but it seriously reduces lock-in.

6.5 Firebase — Not Possible

Firebase has no self-host. The local emulator is dev only. This is Firebase's single biggest weakness.


7. Vendor Lock-In — Can You Leave?

Beyond self-hosting, the real lock-in is portability of data, code, and ops knowledge.

ToolData lock-inCode lock-in
SupabaseLow (Postgres)Low (thin SDK)
FirebaseHigh (Firestore export is painful)High (Security Rules, triggers, Hosting)
PocketbaseVery low (SQLite file)Low
AppwriteMedium (document export)Medium
ConvexMedium (functions + indexes bundled)Medium to high
InstantDBMedium (triple store)Medium

Why Supabase Lock-In Is Lowest

Supabase's real strength is that the data is just Postgres. pg_dump and import elsewhere works. SDKs sit on standards (PostgREST, GoTrue), so swap cost is low.

Why Firebase Lock-In Is Highest

Firestore export → another DB is not automatic. The model is different (documents to relational mapping is manual), and Security Rules, triggers, and Functions are wired into Google Cloud. Lock-in is structural.


8. Pricing and Scale — Edge Cases Decide

Pricing comparison is not a flat table. What unit is billed? is the real question.

ToolBilling units
SupabaseDB size + Egress + active users + function calls
FirebaseDocument reads/writes/deletes + storage + Egress + function calls
PocketbaseSelf-host (VPS cost) — no hosted
AppwriteProjects + function executions + storage (Cloud) / free if self-hosted
ConvexFunction calls + storage + WebSocket time
InstantDBActive users + transactions

Pricing Traps

The most common mistake is looking only at the generous free tier.

  • Firebase bills per "document read." An app showing 50 docs per page reads 50 docs per user-per-pageview. Scale curves steeply.
  • Supabase is Postgres + Egress centric, so heavy payloads (images, big JSON blobs) blow up Egress.
  • Convex bills function calls + WebSocket connection time. Many always-on mobile clients curve steeply.

1-Person SaaS Scenario (1,000 users/month)

Rough estimates (always check the latest pricing page).

  • Supabase Pro — $25/month base + usage + Egress.
  • Firebase — Free tier + Blaze pay-as-you-go after, depends on read counts.
  • Pocketbase — VPS at 55–10/month. Other costs effectively zero.
  • Appwrite Cloud — Free + usage. Self-host is zero.
  • Convex — $25/month base + usage.
  • InstantDB — Free + usage.

At this scale Pocketbase or self-hosted Appwrite is dramatically cheaper. The cost is your ops time.

Seed-Stage SaaS Scenario (50,000 users/month)

  • Solo self-hosting starts to bite. VPS monitoring, backups, upgrades.
  • Supabase Pro, Convex, or Firebase Blaze become the natural choices.
  • Firebase, if you have not modeled read counts, gets expensive fast.
  • Supabase needs consistent Postgres operations + Egress management.

9. Seven-Axis Comparison — At a Glance

9.1 Core Matrix

AxisSupabaseFirebasePocketbaseAppwriteConvexInstantDB
Data modelSQL (Postgres)DocumentsSQL (SQLite)DocumentsDocumentsTriple/graph
RealtimeRLS + LRsnapshotSSEWSreactivegraph push
AuthRLSRulesAPI rulesTeamsadaptersMagic + Rules
Vector / AIpgvector first-classGenkit/Vertexexternalbetabuilt-inbeta
Self-hostyes (Docker/K8s)noyes (binary)yes (Docker)yes (OSS)beta
Lock-invery lowvery highvery lowlowmediummedium
1-person costmediumlow (free)very lowlowmediumlow

9.2 Scenario-Based Picks

AI app (RAG, embeddings, LLM flows)

  1. Supabase — pgvector + Edge Functions, smoothest path.
  2. Convex — functions + built-in vectors, TS-first.
  3. Firebase + Genkit — natural if you are already in Google's stack.

B2B SaaS (relational, complex queries)

  1. Supabase — Postgres is the first pick.
  2. PlanetScale or Neon + Clerk + your backend — the build-your-own camp.
  3. Convex — for TS-first teams that want reactivity.

Mobile-first (offline, push notifications)

  1. Firebase — still the de-facto standard. Mature offline sync.
  2. Supabase — mobile SDK evolving, but offline is not yet at Firebase level.
  3. InstantDB — realtime graph fits mobile UX.

1-person SaaS, indie, side projects

  1. Pocketbase — overwhelming value in simplicity.
  2. Supabase — free tier + reusable Postgres ops knowledge.
  3. InstantDB — small team + realtime friendly.

Self-host first (regulation, security, cost)

  1. Appwrite — Docker, full stack.
  2. Supabase self-host — powerful but ops-heavy.
  3. Pocketbase — simplest.

10. Build-Your-Own — Refusing BaaS

The final card. Some teams deliberately refuse BaaS and assemble responsibilities from discrete services.

Auth        Clerk / WorkOS / Auth.js
DB          PlanetScale / Neon / Supabase Postgres (only)
Realtime    Liveblocks / Ably / your own WS
Storage     S3 / R2 / UploadThing
Functions   Inngest / Cloudflare Workers
Email       Resend
Vector      Pinecone / Turbopuffer / pgvector

Strengths

  • Best-in-class for each responsibility.
  • An incident in one service does not freeze the whole stack.
  • Fine-grained cost control.

Weaknesses

  • Integration cost. You write the glue between auth, DB, and realtime.
  • Wider debug surface when things break.
  • Onboarding new teammates means teaching N tools.

When it is right

  • Series A onward, more than 10 engineers.
  • After clearly hitting the limits of a specific tool.
  • Strong regulatory, SLA, or on-prem requirements.

11. What Changed in the Last Year

Big shifts per tool, 2025–2026.

Supabase

  • DataLab — notebook-style SQL exploration with Postgres + AI assistant.
  • SQL Editor v2 — faster, stronger AI autocomplete.
  • Branching — DB branching went GA. Isolated DB per PR.
  • pgvector + HNSW indexes stabilized.
  • Edge Functions cold-start improvements.

Firebase

  • App Hosting GA — first-class Next.js and Angular hosting.
  • Genkit GA — AI flow framework formally launched.
  • Data Connect — relational (Postgres) integration built in.
  • Firestore pricing adjustments in places.

Pocketbase

  • v0.22 line stabilized.
  • Realtime SSE performance improved.
  • More external OAuth providers.
  • Cleaner Go API.

Appwrite

  • v1.6 → v1.7 — Functions, Realtime, and Sites stabilized.
  • Appwrite Cloud went GA.
  • Sites — static site hosting built in.

Convex

  • OSS self-host released.
  • Vector search hit GA.
  • HTTP Actions, Crons, and Scheduling stabilized.
  • Next.js and TanStack Start integrations.

InstantDB

  • Beta → GA (in stages).
  • Permission rules system strengthened.
  • Self-host beta available.
  • Clerk and Auth.js integrations.

Epilogue — Tool Choice in the "One-Person SaaS" Era

Picking a BaaS is also deciding what unit of work you accept as a billing line. Picturing next year's bill matters more than memorizing today's price page.

Conclusion as of May 2026.

  • If you can sit on Postgres, sit on Supabase — low lock-in, ops knowledge is just Postgres knowledge.
  • If mobile and offline are the product, Firebase — expensive lock-in, unmatched maturity.
  • For 1-person, indie, small teams, Pocketbase is often the right answer — simplicity is speed.
  • Self-host full-stack means Appwrite — Docker-friendly, run it on your own infra.
  • TS-first reactive backend is Convex — once the function-plus-subscription model clicks, it is delightful.
  • Realtime graph plus small code is InstantDB — growing fast.
  • Build-your-own if you really know what you are building — integration cost is real.

Decision Checklist

  • Is the data model relational or document? — Relational → Supabase or Pocketbase. Document → Firebase, Appwrite, Convex, InstantDB.
  • Is realtime core? — Yes → Convex, InstantDB, Supabase, Firestore.
  • Mobile + offline sync? — Yes → Firebase first.
  • AI, vector, RAG core? — Supabase, Convex.
  • Self-host required? — Pocketbase, Appwrite, Supabase, Convex.
  • Minimum lock-in? — Supabase, Pocketbase.
  • Fastest MVP? — Firebase, Pocketbase, Convex.

Anti-Patterns

  1. Choosing by free tier alone. Next year's bill is a curve. Watch the billing unit.
  2. Switching tools on vibes alone. Many teams move to Convex because it looks cool and then miss RLS-style permission.
  3. Solo self-hosting without an SLA budget. Backups, monitoring, and upgrades all eat your hours.
  4. Assuming 300,000 reads per day fits Firebase's free tier. Model the billing first.
  5. Running two BaaS at once. "Auth in Firebase, DB in Supabase." Integration cost burns a season.
  6. Optimizing for zero lock-in and shipping nothing. Lock-in is a trade-off, zero is impossible.
  7. An AI app on a BaaS with no built-in vector. You lose half the value.

Next-Article Candidates

  • Supabase Branching + Drizzle ORM after one year — what isolated-DB-per-PR is actually like
  • Firebase Genkit vs Vercel AI SDK — same RAG flow, head-to-head
  • Six months running a SaaS on Pocketbase — the honest review
  • Convex OSS self-host — what is actually different from hosted

"BaaS is not the work of writing a backend. It is the work of deciding not to write one."

— BaaS 2026, fin.


References