Przejdź do treści

Payload CMS czy Sanity: który headless CMS wybrać?

Payload CMS vs Sanity bez marketingowych skrótów: hosting, koszty, TypeScript, workflow redakcyjny, bezpieczeństwo danych i test przed wdrożeniem.

Maciej Sala

Founder StriveLab

11 min czytaniaAktualizacja

Najprostszy opis brzmi: Payload jest otwartym backendem opartym na Next.js, który wdrażasz we własnej infrastrukturze, a Sanity jest platformą SaaS z zarządzanym . To dobry początek, lecz zbyt mało do decyzji architektonicznej.

Payload daje panel, REST, GraphQL, Local API, uwierzytelnianie, kontrolę dostępu, pliki i preview w jednym repozytorium TypeScript. Sanity rozdziela Studio, które możesz dostosować i hostować, od zarządzanej usługi przechowującej treść. Frontendy pytają Content Lake przez GROQ, GraphQL lub biblioteki klienckie.

Wybierasz model odpowiedzialności systemu. Funkcje można często odtworzyć po obu stronach, ale koszt ich utrzymania spada na inny zespół.

Payload po przejęciu przez Figmę

Payload dołączył do Figmy w czerwcu 2025 roku i pozostaje projektem open source. W sierpniu 2026 roku ma to jeden praktyczny skutek, którego nie wolno pominąć w nowej architekturze: wdrażanie nowych projektów do Payload Cloud jest wstrzymane. Istniejące instancje nadal działają, lecz oficjalny komunikat zapowiada ich późniejszą migrację do rozwiązania, które dopiero powstaje.

Nowy projekt Payload trzeba więc liczyć jako self-hosting na platformie potrafiącej uruchomić Next.js. Może to być kontener, serwer Node albo wspierana platforma serverless. Sama aplikacja nie zamyka infrastruktury. Produkcja zwykle potrzebuje jeszcze bazy, trwałego storage dla uploadów, dostawcy e-mail, CDN-u, sekretów, logów i backupów.

Koszt Payload i Sanity: abonament to tylko jedna linia

Sanity ma limity planu i zużycia

Według cennika sprawdzonego 1 sierpnia 2026 roku plan Free obejmuje między innymi 20 miejsc, 2 publiczne datasety, 10 tysięcy dokumentów, milion żądań API CDN, 250 tysięcy zwykłych żądań API, 100 GB assetów i 100 GB transferu miesięcznie. Growth kosztuje od 15 USD za miejsce miesięcznie oraz umożliwia płatne zwiększanie części limitów.

Te liczby są pomocne przy estymacji, ale nie powinny być kopiowane do umowy bez ponownej kontroli cennika. W planie Free przekroczenie limitu żądań, CDN lub transferu nie tworzy rachunku za nadwyżkę. Usługa blokuje odpowiednią funkcję do resetu okresu albo przejścia na wyższy plan. Plan Growth rozlicza wybrane nadwyżki, natomiast limit dokumentów wymaga dodatku lub zmiany planu.

Dokument także zużywa limit. Drafty i dokumenty systemowe mogą wpływać na licznik, więc liczba publicznych podstron nie jest wystarczającą podstawą prognozy. Osobno policz ruch przez CDN, niecachowane zapytania API, transfer obrazów, miejsca zespołu i wymagane dodatki.

Payload nie ma zerowego kosztu

Licencja MIT pozwala używać i modyfikować rdzeń bez opłat licencyjnych. Koszt rośnie jednak wraz z infrastrukturą i wymaganą niezawodnością:

  • instancje aplikacji Next.js i ich autoskalowanie,
  • PostgreSQL, MongoDB albo SQLite wraz z migracjami i kopiami,
  • obiektowy storage plików, transformacje obrazów i CDN,
  • e-mail transakcyjny oraz kolejki zadań,
  • logi, metryki, alerty i śledzenie błędów,
  • aktualizacje bezpieczeństwa oraz dyżur po awarii,
  • środowiska testowe i odtwarzanie backupu.

Mały serwis może działać tanio. Duży ruch nie pozostaje bezpłatny i nie daje automatycznie stałego rachunku, ponieważ płacisz dostawcom infrastruktury za zasoby. Payload zamienia abonament w operacje, a ich opłacalność zależy od kompetencji zespołu oraz skali.

Dane, RODO i granica kontroli

Payload obsługuje oficjalne adaptery dla MongoDB, PostgreSQL oraz SQLite. Wybierasz operatora, region, szyfrowanie, politykę backupów i retencję. To pomaga przy wymaganiach lokalizacyjnych albo integracji z bazą aplikacji, ale firma staje się odpowiedzialna za poprawną konfigurację oraz reakcję na incydenty.

Sanity przechowuje dokumenty w Content Lake. Plan Free pozwala używać wyłącznie publicznych datasetów. Publiczny dataset można odpytywać bez tokenu, więc nie nadaje się do prywatnych profili, zamówień ani wewnętrznych materiałów. Dataset prywatny jest funkcją płatną. Dokumentacja zaznacza również, że pliki assetów nie stają się prywatne razem z prywatnym datasetem.

RODO nie sprowadza się do mapy serwerowni. Przed wyborem sprawdź:

  • role administratora, procesora i podprocesorów,
  • umowę powierzenia oraz warunki transferu danych,
  • regiony przechowywania, przetwarzania, backupów i logów,
  • usuwanie danych, retencję wersji i realizację praw osoby,
  • szyfrowanie, SSO, MFA, historię audytową i reakcję na incydenty,
  • rodzaj danych, które w ogóle powinny znaleźć się w CMS-ie.

Self-hosting daje kontrolę, nie zgodność. SaaS odbiera część decyzji infrastrukturalnych, lecz może zapewnić procesy trudne do zbudowania małemu zespołowi. Ostateczna ocena zależy od konkretnego wdrożenia i umów.

Schemat treści i TypeScript

Payload generuje typy z konfiguracji

W Payload konfiguracja kolekcji jest wykonywalnym kodem TypeScript. Z niej powstaje panel, API i plik typów. Hooki, walidacja oraz dostęp mogą korzystać z kontekstu żądania.

Code
// collections/Posts.ts
import type { CollectionConfig } from 'payload'
 
export const Posts: CollectionConfig = {
  slug: 'posts',
  access: {
    read: ({ req }) => Boolean(req.user),
  },
  versions: {
    drafts: { autosave: true },
    maxPerDoc: 50,
  },
  fields: [
    { name: 'title', type: 'text', required: true },
    { name: 'slug', type: 'text', required: true, unique: true },
    { name: 'content', type: 'richText', required: true },
  ],
}

Komenda payload generate:types tworzy interfejsy z konfiguracji. Przy PostgreSQL i SQLite zmiany schematu wymagają też kontrolowanego procesu migracji bazy. Automatyczne dopasowanie w development nie zastępuje migracji sprawdzonej na kopii produkcyjnych danych.

Payload ma jeszcze Local API, które w projekcie Next.js omija sieciowy roundtrip i pracuje bezpośrednio z backendem. Tutaj kryje się pułapka bezpieczeństwa: operacje Local API domyślnie omijają Access Control. Jeśli przekazujesz użytkownika i oczekujesz sprawdzenia reguł, jawnie ustaw overrideAccess: false.

Code
const posts = await payload.find({
  collection: 'posts',
  user: currentUser,
  overrideAccess: false,
  draft: false,
})

Bezpośredni dostęp zwiększa siłę błędu. Reguły kolekcji, pola i scenariusze administracyjne trzeba pokryć testami autoryzacji.

Sanity generuje typy ze schematu i GROQ

Sanity Studio również definiuje schemat w TypeScript. Portable Text zapisuje treść blokową jako dane strukturalne, dzięki czemu frontend nie musi przyjmować dużego fragmentu HTML-u.

Code
// schemaTypes/postType.ts
import { defineField, defineType } from 'sanity'
 
export const postType = defineType({
  name: 'post',
  type: 'document',
  title: 'Wpis',
  fields: [
    defineField({
      name: 'title',
      type: 'string',
      validation: (r) => r.required(),
    }),
    defineField({ name: 'slug', type: 'slug', options: { source: 'title' } }),
    defineField({ name: 'body', type: 'array', of: [{ type: 'block' }] }),
  ],
})

Sanity TypeGen osiągnęło status GA w 2026 roku. Narzędzie generuje typy ze schematu Studio oraz z rezultatów zapytań GROQ oznaczonych przez defineQuery. Stare porównanie, w którym Payload ma typy end-to-end, a Sanity wyłącznie luźną konfigurację JS, jest już nieaktualne.

Różnica nadal istnieje. Payload odwzorowuje własny model backendu i może współdzielić typy w jednej aplikacji. Sanity TypeGen analizuje projekcję zapytania, co dobrze pasuje do frontendów pobierających różne kształty tego samego dokumentu. Oba podejścia wymagają automatyzacji CI, aby zmiana schematu nie ominęła generowania typów i testów.

API, zapytania i wydajność

Payload udostępnia REST, GraphQL i Local API. Gdy CMS oraz frontend działają w tej samej aplikacji Next.js, Local API ogranicza liczbę usług w ścieżce żądania. Oddzielny frontend korzysta z sieciowego API i musi uwzględnić cache, limity głębokości relacji oraz ochronę przed kosztownymi zapytaniami GraphQL.

Sanity opiera typowy frontend na GROQ i API CDN. Projekcja pozwala pobrać tylko potrzebne pola oraz rozwiązać referencje. Dla treści zmieniającej się często dostępny jest Live Content API, który subskrybuje aktualizacje. Nadal trzeba świadomie rozdzielić zapytania cachowane od świeżych, aby nie zużywać niepotrzebnie limitu zwykłego API.

Żaden CMS nie naprawi automatycznie złego wzorca pobierania. N+1, ogromna głębokość relacji, zapytanie wykonywane dla każdego komponentu i brak cache potrafią zniszczyć koszt oraz TTFB po obu stronach.

Workflow redakcyjny: Sanity kontra Payload

Sanity Studio oferuje edycję w czasie rzeczywistym, obecność współpracowników, Live Preview i Visual Editing. Content Source Maps łączą element podglądu z polem w Studio, dzięki czemu redaktor może przejść z komponentu strony do właściwego miejsca edycji. Komentarze, zadania, zaplanowane drafty oraz bardziej rozbudowane role zależą od planu.

Payload ma wersje dokumentu, różnice wersji, przywracanie, drafty, autosave oraz Live Preview oparte na iframe i komunikacji postMessage. Panel powstaje z konfiguracji i można go rozszerzać komponentami React. Funkcje wieloosobowej edycji i zaawansowanych workflow mogą należeć do oferty enterprise, więc trzeba sprawdzić zakres konkretnej umowy.

Nie ogłaszaj zwycięzcy na podstawie demonstracji. Przygotuj dla redaktorów te same zadania:

  1. Utworzenie strony z SEO, obrazem i blokiem niestandardowym.
  2. Równoczesna poprawka dwóch osób w tym samym dokumencie.
  3. Podgląd draftu w kilku rozmiarach ekranu.
  4. Zaplanowanie publikacji i wycofanie zmiany.
  5. Odtworzenie poprzedniej wersji po błędzie.
  6. Tłumaczenie treści z kontrolą brakujących pól.

Minuty i błędy rozstrzygają lepiej niż liczba funkcji na stronie produktu.

Lokalizacja, wersje i wiele serwisów

Payload lokalizuje wybrane pola w jednym dokumencie i pozwala definiować fallbacki. Oficjalny plugin multi-tenant dodaje tenant do kolekcji i filtruje panel. To elastyczne narzędzia, ale izolacja tenantów zależy od poprawnych reguł dostępu i filtrów. Test przekrojowy musi udowodnić, że użytkownik jednej organizacji nie zobaczy danych drugiej.

Sanity pozwala modelować języki jako pola lub osobne dokumenty. Datasets mogą oddzielać środowiska albo zbiory danych, lecz zapytania GROQ i GraphQL nie łączą dokumentów między datasetami. Plan Free oraz Growth zawierają po dwa datasety, a dodatkowe środowiska mogą wymagać innego planu lub dodatku.

W dużym projekcie sprawdź jeszcze granularność ról, workflow akceptacji, liczbę marek, możliwość współdzielenia treści oraz sposób wersjonowania tłumaczeń. Sam przełącznik języka w panelu nie rozwiązuje procesu lokalizacyjnego.

Backup, awaria i odtwarzanie

Przy Payload zespół definiuje RPO i RTO, czyli dopuszczalną utratę danych oraz czas odtworzenia. Backup bazy bez plików jest niepełny, a kopia bez regularnego testu restore pozostaje założeniem. Trzeba zsynchronizować wersje aplikacji, migracje, bazę i storage.

W Sanity infrastruktura Content Lake jest zarządzana, ale aplikacja nadal zależy od zewnętrznej usługi. Potrzebujesz eksportu danych, monitoringu błędów API i decyzji, czy frontend podczas awarii poda cache. Historia dokumentu nie jest tym samym co niezależna kopia umożliwiająca migrację do innego systemu.

Backup bez procedury odtworzenia nie działa. W obu wariantach wykonaj próbę wyjścia: wyeksportuj treść, pliki i referencje, a potem odtwórz reprezentatywną stronę poza głównym środowiskiem.

Vendor lock-in i koszt późniejszej migracji

Własna baza Payload ułatwia dostęp do surowych danych. Nie oznacza to, że inne narzędzie zrozumie kolekcje, relacje, wersje i format rich text bez transformacji. Bezpośrednie zapytania do tabel z pominięciem API mogą też związać dodatkowy kod z wewnętrznym schematem CMS-a.

Sanity udostępnia eksport dokumentów i assetów, lecz aplikacja korzystająca intensywnie z GROQ, Portable Text, stega encoding oraz Presentation Tool będzie wymagała nowej warstwy po migracji. Lock-in mierzy się liczbą kontraktów do przepisania, nie tym, czy istnieje przycisk eksportu.

Przed wyborem przygotuj mały skrypt eksportu do neutralnego JSON-u i zapisz mapowanie assetów. Plan wyjścia powstaje przed wejściem.

Tabela porównawcza Payload CMS i Sanity

ObszarPayload CMSSanity
ModelOpen source MIT, self-hostingZarządzany Content Lake, konfigurowalne Studio
Nowa chmura producentaWdrożenia Payload Cloud wstrzymaneUsługa SaaS dostępna w planach
BazaMongoDB, PostgreSQL lub SQLiteContent Lake przez API
Interfejs do danychLocal API, REST, GraphQLGROQ, GraphQL, klienty i API CDN
TypyGenerowane z Payload ConfigTypeGen dla schematu i zapytań GROQ
KosztInfrastruktura i operacje zespołuMiejsca, plan, dodatki i zużycie
WspółpracaDrafty, wersje, autosave, Live PreviewReal-time, presence, Visual Editing
Kontrola danychWłasny operator, region i politykiWarunki oraz możliwości platformy SaaS
Najmocniejszy wariantBackend produktu w stosie Next.jsWielokanałowa platforma treści dla redakcji
Główne ryzykoUtrzymanie, bezpieczeństwo i migracjeLimity, zależność od usługi i model cenowy

Matryca decyzji

  • Wybierz Payload dla wspólnego backendu, gdy CMS ma obsługiwać treść i logikę aplikacji, a zespół zna Next.js, bazę oraz produkcyjne operacje.

  • Wybierz Payload dla własnej infrastruktury, gdy umowy wymagają wskazanego operatora i regionu, a organizacja przejmie obowiązki bezpieczeństwa.

  • Wybierz Sanity dla intensywnej współpracy, gdy wielu redaktorów pracuje równolegle i potrzebuje dojrzałego podglądu wizualnego.

  • Wybierz Sanity dla wielu kanałów, gdy ten sam model treści zasila kilka frontendów, a zarządzane API ogranicza obciążenie zespołu platformowego.

  • Nie wybieraj darmowego Sanity, jeśli treść musi pozostać prywatna albo zatrzymanie usługi po dojściu do limitu jest niedopuszczalne.

  • Nie wybieraj Payload bez właściciela, który odpowie za aktualizacje, backupy, monitoring, pojemność i incydenty.

Proof of Concept przed wyborem CMS-a

Zbuduj w obu systemach jeden pionowy wycinek, a nie dwa efektowne dema. Powinien obejmować ten sam schemat, jeden blok złożony, obraz, relację, lokalizację, role, draft, preview, publikację, webhook, frontend i eksport.

Mierz:

  • czas dewelopera od schematu do typowanego widoku,
  • czas redaktora od pustego dokumentu do publikacji,
  • liczbę ręcznych kroków i błędów,
  • zachowanie po zmianie pola oraz cofnięciu wersji,
  • TTFB i liczbę requestów przy zimnym oraz ciepłym cache,
  • koszt dla obecnego ruchu, potrójnego ruchu i większego zespołu,
  • czas odtworzenia danych po kontrolowanej awarii.

Decyzję zapisz jako dokument architektoniczny z założeniami. Gdy zmieni się liczba redaktorów, ruch albo wymagania prawne, będzie wiadomo, czy pierwotne uzasadnienie nadal działa.

Połączenie perspektywy produktu, dewelopera i marketingu w jednym miejscu
Konsultacje

Często zadawane pytania

Czy Payload CMS jest naprawdę darmowy?

Rdzeń Payload jest open source na licencji MIT i możesz hostować go bez opłaty licencyjnej. Produkcja nadal kosztuje: aplikacja Next.js, baza, trwały storage plików, CDN, e-mail, kopie zapasowe, monitoring, aktualizacje i praca operacyjna. Brak abonamentu za CMS nie oznacza zerowego ani stałego kosztu systemu.

Czy Payload Cloud przyjmuje nowe projekty?

Nie według komunikatu dostępnego 1 sierpnia 2026 roku. Po dołączeniu Payload do Figmy wdrażanie nowych projektów w Payload Cloud zostało wstrzymane. Istniejące projekty działają, lecz w przyszłości mają migrować do nowego rozwiązania. Nowe wdrożenie trzeba obecnie planować jako self-hosting u wybranego dostawcy.

Czy darmowy plan Sanity wystarczy do produkcji?

Może wystarczyć dla małego publicznego serwisu, jeśli mieści się w limitach. Plan Free ma publiczne datasety i twarde limity, po których część operacji jest blokowana do resetu okresu lub zmiany planu. Nie przechowuj w publicznym datasecie informacji wymagających uwierzytelnienia.

Który CMS ma lepszą obsługę TypeScriptu?

Oba oferują generowanie typów. Payload generuje interfejsy z konfiguracji CMS-a i działa szczególnie spójnie w jednym projekcie Next.js. Sanity TypeGen generuje typy ze schematu Studio oraz wyników zapytań GROQ. Wybór zależy od tego, czy zespół woli bezpośredni model danych aplikacji, czy projekcje z zarządzanego Content Lake.

Który CMS jest lepszy dla zespołu redakcyjnego?

Sanity ma dojrzałą współpracę w czasie rzeczywistym, obecność użytkowników i Visual Editing. Payload zapewnia wersje, drafty, autosave oraz Live Preview, a panel można głęboko rozszerzać. Nie wybieraj na podstawie listy funkcji. Redaktorzy powinni wykonać własny scenariusz publikacji w obu prototypach.

Czy self-hostowany Payload automatycznie ułatwia zgodność z RODO?

Daje kontrolę nad dostawcą, regionem bazy, storage i logów, lecz przenosi na Ciebie obowiązki bezpieczeństwa, retencji, backupów oraz umów z operatorami. Sanity jako SaaS także może działać w zgodnej architekturze po analizie umów, lokalizacji, podprocesorów i kategorii danych. Sam model hostingu nie stanowi potwierdzenia zgodności.

Czy własna baza Payload usuwa vendor lock-in?

Zmniejsza zależność od usługi przechowującej dane, ale nie usuwa kosztu migracji. Schemat Payload, relacje, kontrola dostępu i format rich text nadal wiążą aplikację z implementacją. Sanity umożliwia eksport danych, lecz GROQ, Portable Text i workflow Studio również wymagają mapowania przy zmianie CMS-a.

Kiedy wybrać Payload, a kiedy Sanity?

Payload wybierz, gdy chcesz mieć backend i CMS w stosie Next.js, potrzebujesz własnej logiki serwerowej, bezpośredniej kontroli bazy oraz masz kompetencje operacyjne. Sanity wybierz, gdy priorytetem jest zarządzana infrastruktura treści, praca redakcyjna w czasie rzeczywistym i szybkie uruchomienie wielu kanałów korzystających z tego samego Content Lake.

O autorze

Maciej Sala

Maciej Sala — konsultant technologiczny produktów cyfrowych i web developer z bogatym doświadczeniem w marketingu internetowym oraz SEO. Na co dzień pracuje z Reactem, Next.js i TypeScriptem, a ostatnio także z Astro i narzędziami do automatyzacji procesów AI. Sprawnie łączy perspektywę produktową z praktycznym podejściem do kodu. Przez kilka lat był związany z branżą gier wideo jako project manager i game designer. Absolwent historii na Uniwersytecie Jagiellońskim oraz studiów podyplomowych z marketingu internetowego na AGH w Krakowie. Po godzinach trenuje na siłowni, maluje figurki i rozwija własne projekty.

Pomagam przekładać takie tematy na konkretne wdrożenia w frontendzie, SEO, analityce i procesie produktowym.

Skontaktuj się ze mną
LH.pl – Hosting Mango

Biblioteka wiedzy na temat Backend

Czytaj dalej

Zobacz więcej wpisów
Integracja Astro i Payload CMS: szybka strona pod kontrolą

Wyobraź sobie stronę internetową, której koszt utrzymania nie rośnie wraz z liczbą odwiedzin. Otrzymasz taki efekt, łącząc lekki frontend w Astro z własnym CMS-em w postaci Payload, odizolowanym od ruchu użytkowników. To architektura, która daje wysoką wydajność i pełną kontrolę nad danymi, jednocześnie trzymając koszty pod kontrolą.

Maciej Sala

Maciej Sala

Founder StriveLab

Integracja Sanity CMS z Next.js od instalacji po Live Preview

Sanity to headless CMS, w którym schemat treści definiujesz w TypeScript. Schemat żyje w repozytorium razem z kodem, a nie w GUI. Sanity hostuje backend i API za Ciebie, więc nie potrzebujesz własnego serwera. W tym przewodniku budujesz pełny setup: schema, zapytania GROQ , on-demand ISR przez webhooki, Draft Mode i Visual Editing z Presentation Tool.

Maciej Sala

Maciej Sala

Founder StriveLab

Jak połączyć Astro z Sanity CMS krok po kroku

Jeśli budujesz bloga, portfolio albo stronę firmową, gdzie liczy się każdy punkt w Google, połączenie Astro z Sanity jest jednym z najlepszych wyborów , jakie możesz zrobić w 2026 roku. Sanity dostarcza ustrukturyzowaną treść, a Astro zamienia ją w czysty HTML bez zbędnego JavaScriptu. Strona ładuje się zanim użytkownik zdąży mrugnąć, a Lighthouse 100/100 jest w zasięgu dzięki decyzjom architektonicznym podjętym już na samym początku.

Maciej Sala

Maciej Sala

Founder StriveLab

LH.pl – Cloud Server 1C4G