← Semua picks

Stack Comparison Conditional

Payload CMS vs Sanity vs Strapi 2026

Tiga CMS headless saya jalankan di enterprise Jakarta paralel 20 bulan. Payload self-host = Rp 1,8 juta/bulan kontrol penuh. Sanity managed = USD 99-499/bulan tergantung seat. Strapi self-host stabil tapi ekosistem plugin variatif. Verdict per use case.

30 Juni 2026 · 11 menit ·Use case: Headless CMS untuk content-heavy SaaS / portal enterprise Indonesia
Payload CMSSanityStrapiDirectus

TL;DR

  • Payload CMS (self-host, Postgres/Mongo): TypeScript-first, schema as code, full data ownership. Recommended default developer-led.
  • Sanity (managed SaaS): real-time collab, GROQ query, Studio matang. Recommended editorial-heavy.
  • Strapi (self-host, Node): ekosistem plugin lebar tapi variatif kualitas. Recommended SMB budget-sensitive.
  • Verdict: Conditional — Payload untuk fintech / portal enterprise data-sensitif, Sanity untuk media / brand site, Strapi untuk SMB dengan tim mixed editor-dev.

Konteks

Saya operate ketiga CMS ini paralel 20 bulan (September 2024 - Mei 2026) di 2 konteks:

  • Fintech series-B Jakarta: Payload CMS self-host untuk knowledge base internal + customer-facing help center. 18 editor (CS + product writer), 240 article aktif, 4.500 dokumen internal.
  • BUMN energy Jakarta: Sanity managed untuk corporate website + investor relation portal. 12 editor (PR + legal + compliance), workflow approval 3 step.
  • Side eval: Strapi self-host untuk side-project portal pemerintahan daerah, 8 bulan.

Sebelum ini saya jalankan WordPress 6 tahun (2018-2024), Contentful 2 tahun (2022-2024). Pengalaman headless CMS total 4+ tahun.

Pricing (Juni 2026)

Payload CMS

  • Open Source self-host: software gratis (MIT)
  • Infra Payload di fintech saya:
    • GKE node group 2x e2-small: Rp 920 ribu/bulan
    • Cloud SQL Postgres db-g1-small: Rp 720 ribu/bulan
    • R2 storage 200GB asset: Rp 95 ribu/bulan
    • Bandwidth ~500GB/bulan: included R2
    • Total infra: Rp 1,75 juta/bulan
  • Payload Cloud (managed): USD 35-199/bulan per project, masih tier early

Sanity

  • Free: 3 user, 10k document, 100GB bandwidth
  • Growth: USD 99/bulan, 20 user, 250k document, 500GB bandwidth
  • Business: USD 949/bulan, 50 user, 1M document, 2TB bandwidth
  • Enterprise: quoted, mulai USD 4.500/bulan
  • BUMN saya: Business tier USD 949 = Rp 15,2 juta/bulan

Strapi

  • Community (Open Source): gratis
  • Enterprise: USD 9.000-15.000/tahun (Rp 12-20 juta/bulan equivalent) — saya tidak pakai
  • Infra Strapi side-project:
    • VPS Hetzner CX21 4 vCPU 8GB: Rp 280 ribu/bulan
    • Postgres self-host di VPS sama: included
    • R2 asset: Rp 50 ribu/bulan
    • Total: Rp 330 ribu/bulan

Komparasi cost ownership 36 bulan

Skenario: 240 article + 4.500 internal doc + 18 editor + 50k pageview/bulan.

ItemPayload self-hostSanity BusinessStrapi self-host
SoftwareRp 0Rp 547 jutaRp 0
InfraRp 63 jutaRp 0Rp 12 juta
Ops time engineerRp 86 jutaRp 18 jutaRp 65 juta
Customization (plugin / extension)Rp 45 jutaRp 75 jutaRp 90 juta
Insiden / DRRp 12 jutaRp 0Rp 18 juta
Total 3 tahunRp 206 jutaRp 640 jutaRp 185 juta

Sanity 3x lebih mahal. Trade-off: 0 ops overhead, SLA 99,9% kontraktual, real-time collab.

Performance benchmark

Setup: 1 instance CMS di GKE Jakarta (atau managed regional Asia), endpoint GET document by ID + GET list 20 document with embedded asset URL.

CMSAPI p50API p99Admin UI loadAsset upload 10MB
Payload self-host65ms320ms1,8 detik4,2 detik
Sanity managed45ms280ms1,2 detik3,5 detik
Strapi self-host95ms380ms2,4 detik5,8 detik

Dengan Cloudflare cache di depan:

CMSAPI p99 cachedCache hit rate
Payload + Workers cache28ms87%
Sanity + CDN built-in35ms91%
Strapi + Cloudflare42ms82%

Sanity managed unggul tipis di latency raw, terutama karena CDN built-in match content delivery pattern. Untuk content yang jarang berubah, Cloudflare cache di depan menyamakan playing field.

Capability matrix

CapabilityPayloadSanityStrapi
Schema as code (TypeScript)yaya (JS)ya (JS)
GraphQL APIyayaya
REST APIyaya (via GROQ)ya
Real-time collabterbatasyatidak
Workflow approval multi-stepplugin / customya (Studio)plugin
Localizationyayaya
Field-level permissionyayaya
Asset DAMdasarmatangdasar
Image transformationvia plugin (Sharp)built-in (CDN)via plugin
Webhookyayaya
Live preview di frontendyaya (mature)ya
Migration toolingyaterbatasya
Self-host Indonesiayatidak (CDN global)ya
Compliance data residencyyatidakya

Editorial UX

Saya survey editor di 3 konteks:

AspekPayload (18 editor fintech)Sanity (12 editor BUMN)Strapi (5 editor side-project)
Easy of authoring (1-10)7,88,97,2
Review workflow comfort6,59,26,8
Asset management ease7,28,56,4
Search dalam admin8,18,86,8
Mobile authoring6,07,55,5

Sanity menang di editorial UX. Studio mature, real-time collab + presence indicator (mirip Figma) sangat appreciated editor BUMN. Untuk team editorial > 5 orang dengan workflow ketat, ini bisa justify cost premium.

Trade-off arsitektural

Pilih Payload kalau:

  • Tim developer-led (engineer punya kontrol penuh atas schema + customization)
  • Data residency Indonesia wajib (knowledge base internal, dokumen sensitif)
  • TypeScript-first stack (schema as code, type safety end-to-end ke frontend)
  • Budget Rp 1,5-3 juta/bulan infra + ops capacity 8-12 jam/bulan
  • Customization deep (custom field, custom admin component, custom hook)

Pilih Sanity kalau:

  • Tim editorial dominan (> 5 editor)
  • Workflow approval kompleks multi-step (legal, brand, compliance)
  • Real-time collab penting (multiple editor on same doc)
  • Content public-facing (data residency tidak ketat)
  • Budget USD 200-500/bulan oke
  • Tidak ada kapasitas ops untuk self-host

Pilih Strapi kalau:

  • SMB budget Rp 500 ribu - 1 juta/bulan
  • Tim mixed (developer + editor 2-3 orang)
  • Ekosistem plugin Strapi cover use case Anda (cek marketplace dulu)
  • Tidak butuh real-time collab
  • Self-host comfort

High availability + DR

Payload self-host

  • Deployment: 2 replica API + Postgres regional HA + R2 asset replicated
  • RPO: 5 menit (Postgres PITR + R2 versioning)
  • RTO: 18-25 menit untuk failover ke region backup
  • Asset binary backup di S3 Glacier untuk long-term retention (7 tahun audit BUMN)

Sanity managed

  • Vendor SLA 99,9% (Business tier), 99,95% (Enterprise tier)
  • RPO: 0 (replicated state vendor)
  • RTO: vendor-managed, biasanya < 5 menit
  • Backup snapshot daily, downloadable via API
  • Data residency: tidak controllable (CDN global)

Strapi self-host

  • Deployment: 1-2 replica + Postgres standalone (saya tidak pakai HA di side-project)
  • RPO: 60 menit (cron backup ke R2)
  • RTO: 1-2 jam manual restore
  • Cukup untuk side-project, tidak cukup untuk production enterprise

Untuk fintech Indonesia dengan availability target 99,95%: Payload self-host dengan HA setup, atau Sanity Business+. Strapi standalone tidak meet SLO enterprise.

Migration risk

dari WordPress

Path: scrape via WP REST API → transform → import via CMS API.

  • ke Payload: 3-5 hari kerja untuk schema mapping + ETL. Migration script di Node, run 1x per snapshot.
  • ke Sanity: 5-7 hari. GROQ query model beda dengan SQL-like — perlu rethink content model.
  • ke Strapi: 2-3 hari. Plugin strapi-plugin-wordpress-importer ada (community).

Pengalaman saya: 1.200 article WordPress → Payload, 4 hari kerja + 2 hari QA. Bug: media URL rewrite (WP serve media dari sub-folder, Payload dari R2 root). Fix di transform layer.

dari Contentful

Contentful → Sanity: smoothest karena schema model similar. Tool contentful-to-sanity community ada. Contentful → Payload: 7-10 hari, schema mapping manual. Contentful → Strapi: 5 hari, schema mapping manual.

dari Strapi v3/v4 ke v5

Internal upgrade Strapi major version: painful. Saya skip Strapi production karena pengalaman komunitas dengan migrasi major version high friction.

Common pitfall

  1. Schema lock-in awal. CMS schema susah refactor setelah 100+ document populated. Invest time di content modeling phase. Saya alokasikan 1-2 minggu purely untuk schema design sebelum data masuk.
  2. Asset DAM under-engineered. Banyak project mulai dengan local upload, sadar 6 bulan kemudian butuh image transformation + CDN. Setup R2 + Sharp transform di week 1, bukan retrofit.
  3. No content versioning strategy. Editor revert content lama → tidak ada history. Setup Payload Versions plugin atau Sanity history dari awal.
  4. Admin UI publik. Banyak setup expose admin di subdomain publik. Wrap dengan Cloudflare Access (zero-trust) atau WAF.
  5. Search underestimate. Native search Payload/Strapi pakai LIKE Postgres — lambat di 10k+ document. Plug Meilisearch atau Typesense untuk full-text search yang serius.

Indonesia specific

Data residency

OJK + UU PDP 2022 mensyaratkan data nasabah / data pribadi di Indonesia. Untuk fintech / bank / asuransi: self-host (Payload / Strapi) di asia-southeast2 GKE Jakarta. Sanity tidak controllable region — skip untuk content dengan data sensitif.

Bahasa Indonesia

Localization di ketiga CMS bekerja. Tip: Payload + i18n plugin, Sanity native multi-locale, Strapi + i18n plugin. Untuk konten campuran Indonesia + Inggris (common di portal enterprise Indonesia), schema design wajib mendukung field per-locale dari awal.

Hiring

Developer berpengalaman Payload masih relatif sedikit di Indonesia (newer ecosystem). Sanity developer experience lebih luas (managed SaaS makes it easier to onboard). Strapi familiar tapi senior engineer sering skeptis karena pengalaman dengan v3/v4 instability. Untuk team building di Indonesia: factor hiring difficulty.

Yang surprising

Saya kira Sanity premium price tidak akan justify untuk enterprise BUMN Indonesia. Realita: editor BUMN sangat happy dengan Studio + workflow approval. Editorial productivity naik 40-50% (measured via article published per editor per minggu) post-migration dari WordPress. Worth-nya bukan di feature, tapi di reduce friction harian editor.

Surprise lain: Payload schema-as-code (TypeScript) ternyata jadi advantage besar untuk engineer-editor handoff. Engineer ubah schema → editor langsung dapat field baru di Studio + frontend langsung typed. Iteration speed naik dibanding model schema-in-database (WP, lama Strapi).

Verdict

Conditional dengan rule konkret:

  • Default fintech / portal enterprise data-sensitif: Payload CMS self-host. Data residency + TypeScript-first + Rp 200 juta/3 tahun cost = winner untuk Indonesia regulated.
  • Editorial-heavy publik (media, corporate site, brand site): Sanity Business+. Worth premium untuk editorial UX + real-time collab.
  • SMB Indonesia budget < Rp 500 ribu/bulan: Strapi self-host di VPS murah. OK untuk < 5 editor, < 1k document.
  • Skip kalau: content site Anda < 50 article static — gunakan MDX/Astro langsung, tidak butuh CMS sama sekali.

Threshold konkret untuk adopt CMS: editor > 3 + content update frequency > 5 per minggu + non-developer perlu authoring. Di bawah ini, MDX di Git lebih sederhana.

Ditulis oleh Asti Larasati

// Pick Stack Comparison lain


← Semua picks RSS feed