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.
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.
| Item | Payload self-host | Sanity Business | Strapi self-host |
|---|---|---|---|
| Software | Rp 0 | Rp 547 juta | Rp 0 |
| Infra | Rp 63 juta | Rp 0 | Rp 12 juta |
| Ops time engineer | Rp 86 juta | Rp 18 juta | Rp 65 juta |
| Customization (plugin / extension) | Rp 45 juta | Rp 75 juta | Rp 90 juta |
| Insiden / DR | Rp 12 juta | Rp 0 | Rp 18 juta |
| Total 3 tahun | Rp 206 juta | Rp 640 juta | Rp 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.
| CMS | API p50 | API p99 | Admin UI load | Asset upload 10MB |
|---|---|---|---|---|
| Payload self-host | 65ms | 320ms | 1,8 detik | 4,2 detik |
| Sanity managed | 45ms | 280ms | 1,2 detik | 3,5 detik |
| Strapi self-host | 95ms | 380ms | 2,4 detik | 5,8 detik |
Dengan Cloudflare cache di depan:
| CMS | API p99 cached | Cache hit rate |
|---|---|---|
| Payload + Workers cache | 28ms | 87% |
| Sanity + CDN built-in | 35ms | 91% |
| Strapi + Cloudflare | 42ms | 82% |
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
| Capability | Payload | Sanity | Strapi |
|---|---|---|---|
| Schema as code (TypeScript) | ya | ya (JS) | ya (JS) |
| GraphQL API | ya | ya | ya |
| REST API | ya | ya (via GROQ) | ya |
| Real-time collab | terbatas | ya | tidak |
| Workflow approval multi-step | plugin / custom | ya (Studio) | plugin |
| Localization | ya | ya | ya |
| Field-level permission | ya | ya | ya |
| Asset DAM | dasar | matang | dasar |
| Image transformation | via plugin (Sharp) | built-in (CDN) | via plugin |
| Webhook | ya | ya | ya |
| Live preview di frontend | ya | ya (mature) | ya |
| Migration tooling | ya | terbatas | ya |
| Self-host Indonesia | ya | tidak (CDN global) | ya |
| Compliance data residency | ya | tidak | ya |
Editorial UX
Saya survey editor di 3 konteks:
| Aspek | Payload (18 editor fintech) | Sanity (12 editor BUMN) | Strapi (5 editor side-project) |
|---|---|---|---|
| Easy of authoring (1-10) | 7,8 | 8,9 | 7,2 |
| Review workflow comfort | 6,5 | 9,2 | 6,8 |
| Asset management ease | 7,2 | 8,5 | 6,4 |
| Search dalam admin | 8,1 | 8,8 | 6,8 |
| Mobile authoring | 6,0 | 7,5 | 5,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-importerada (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
- 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.
- 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.
- No content versioning strategy. Editor revert content lama → tidak ada history. Setup Payload Versions plugin atau Sanity history dari awal.
- Admin UI publik. Banyak setup expose admin di subdomain publik. Wrap dengan Cloudflare Access (zero-trust) atau WAF.
- 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