
Strapi 5 Guide: Installation, API, Plugins och Deploy (2026)
Strapi är ett öppen källkod-baserat headless CMS byggt på Node.js som ger dig full kontroll över ditt API, din databas och din deploy. Till skillnad från hostade CMS-plattformar där du hyr tillgång till någon annans infrastruktur kör Strapi på dina servrar, genererar REST- och GraphQL-endpoints från dina innehållsscheman och låter dig anpassa varje lager i backenden med vanlig JavaScript eller TypeScript.
Den här guiden täcker Strapi 5 specifikt -- från ditt första npx create-strapi till en produktionsdeploy på Railway eller Strapi Cloud. Varje kodexempel är redo att kopiera och klistra in och testat mot Strapi 5.x.
| Fält | Värde |
|---|---|
| Typ | Öppen källkod headless CMS |
| Språk | JavaScript / TypeScript (Node.js) |
| Aktuell version | Strapi 5 |
| Licens | MIT (Community) / Proprietär (Enterprise) |
| Databasstöd | PostgreSQL, MySQL, MariaDB, SQLite |
| API-typer | REST + GraphQL (båda inbyggda) |
| Hosting | Egenhostad eller Strapi Cloud |
| Molnprissättning | Gratisnivå, sedan $18/månad+ |
| GitHub-stjärnor | 65 000+ |
| Bäst för | Team som vill ha full kodägarskap + API-anpassning |
Vad är Strapi och hur fungerar det?
Strapi är ett egenhositat, API-first innehållshanteringssystem som separerar innehållsbackenden från din frontend. Du definierar innehållsscheman via en visuell byggare eller kod, och Strapi genererar automatiskt CRUD API-endpoints -- både REST och GraphQL -- som vilket frontendramverk som helst kan använda. Adminpanelen är ett React-baserat gränssnitt där innehållsredaktörer skapar och hanterar poster utan att behöva skriva kod, enligt den officiella Strapi-dokumentationen.
Headless CMS vs traditionellt CMS
Ett traditionellt CMS som WordPress kopplar ihop ditt innehåll med ditt presentationslager. Dina blogginlägg, sidor och media finns alla i samma system som renderar HTML till besökarna. Det fungerar bra -- tills du behöver samma innehåll i en mobilapp, en marknadsförings-microsite och en dokumentationsportal samtidigt.
Ett headless CMS tar bort frontenden helt. Strapi lagrar ditt innehåll och skickar det som JSON via API-endpoints. Din Next.js-sajt, din React Native-app och din IoT-dashboard hämtar alla från samma Strapi-backend. Du får en enda sanningskälla med flera konsumenter.
Om du utvärderar alternativ utöver Strapi finns vår jämförelse av headless CMS som ger en detaljerad genomgång av de ledande plattformarna.
Strapias arkitektur
Strapias stack är rakt på sak: en Node.js-server sitter mellan din databas (PostgreSQL, MySQL eller SQLite) och dina frontendapplikationer. Adminpanelen -- en React single-page-app -- ansluter till samma API som dina frontends använder, fast med högre behörigheter.
Så här flödar data: din databas håller innehållet. Strapias ORM-lager (byggt på Knex.js) frågar mot det. API-lagret exponerar REST- och GraphQL-endpoints. Dina frontends -- oavsett om det är Next.js, Nuxt, Astro, Gatsby eller en mobilapp -- hämtar JSON från dessa endpoints. Strapi renderar aldrig HTML till slutanvändare.
Strapias GitHub-repository har 65 000+ stjärnor, vilket gör det till ett av de populäraste öppen källkod-CMS-projekten på plattformen.
Vad är nytt i Strapi 5?
Strapi 5 är en stor omskrivning som ersätter Entity Service API med ett nytt Document Service API, byter från Webpack till Vite för adminpanelens byggen och introducerar TypeScript som standardspråk för nya projekt. Det är inte inkrementella uppdateringar -- den interna arkitekturen förändrades betydligt, vilket beskrivs på Strapi 5-översiktssidan.
Här är de ändringar som spelar störst roll för utvecklare, enligt Strapi 5:s utvecklarändringslogg:
- Document Service API ersätter Entity Service API -- renare metodsignaturer, bättre TypeScript-typer, enhetligt gränssnitt för CRUD-operationer
- Omarbetat Draft & Publish -- ett tvåfliksystem i adminpanelen som separerar utkast och publicerat innehåll
- Innehållshistorik -- visa och återställ tidigare versioner av alla poster direkt från admingränssnittet
- Förhandsgranskningsfunktion -- förhandsgranska innehåll i din faktiska frontend innan publicering, konfigureras per innehållstyp
- Vite ersätter Webpack -- adminpanelens byggen märkbart snabbare (vi såg ~60% förbättring i byggtider)
- TypeScript-first approach -- nya projekt scaffoldar med TypeScript som standard
- AI Content-Type Builder -- generera innehållsscheman från beskrivningar på naturligt språk eller Figma-designer. Det här är nytt 2026 och inget annat headless CMS erbjuder det ännu
- Förenklade API-svar -- plattare JSON-struktur för både REST och GraphQL
- Nytt Plugin SDK -- strömlinjeformat API för att bygga och distribuera Strapi-plugins
| Funktion | Strapi 4 | Strapi 5 |
|---|---|---|
| Service API | Entity Service | Document Service |
| Bundler | Webpack | Vite |
| Standardspråk | JavaScript | TypeScript |
| Utkastsystem | Enskild växling | Tvåflik (utkast/publicerat) |
| Innehållshistorik | Plugin krävs | Inbyggt |
| Frontendförhandsvisning | Ej tillgänglig | Nativt förhandsvisnings-API |
| API-svarsformat | Djupt nästlat | Platt struktur |
| Schemagenerering | Manuell | AI + manuell |
Hur man installerar och konfigurerar Strapi 5
Att sätta upp ett Strapi 5-projekt tar ungefär två minuter. Du behöver Node.js 18 eller senare, och antingen npm, yarn eller pnpm. Strapi scaffoldar ett komplett projekt med adminpanel, databasanslutning och API-lager från ett enda kommando, som dokumenteras i Strapi Quick Start-guiden.
Förutsättningar
- Node.js 18+ (20 LTS rekommenderas)
- npm 6+, yarn eller pnpm
- En databas: SQLite fungerar direkt för utveckling; PostgreSQL för produktion
Skapa ditt första projekt
npx create-strapi@latest my-project
# Interaktiva frågor:
# ? Choose your preferred language: TypeScript
# ? Choose your default database client: sqlite
# ? Start with an example structure?: Yes (recommended for first-timers)
cd my-project
npm run developStrapi startar på http://localhost:1337. Ditt första besök ber dig skapa ett administratörskonto. Sedan är du i adminpanelen -- redo att bygga innehållstyper.
Projektstruktur i översikt
my-project/
├── config/
│ ├── database.ts # Databasanslutning
│ ├── server.ts # Host, port, appnycklar
│ ├── admin.ts # Adminpanelkonfiguration
│ └── plugins.ts # Plugin-konfiguration
├── src/
│ ├── api/ # Dina innehållstyper finns här
│ │ └── article/
│ │ ├── content-types/
│ │ │ └── article/schema.json
│ │ ├── controllers/article.ts
│ │ ├── routes/article.ts
│ │ └── services/article.ts
│ ├── plugins/ # Egna plugins
│ └── index.ts # App-bootstrap/livscykel
├── public/ # Statiska filer
├── .env # Miljövariabler
└── package.jsonVarje innehållstyp får sin egen mapp under src/api/ med ett schema, en kontroller, en rutt och en servicefil. Strapi genererar dessa automatiskt när du skapar en innehållstyp via adminpanelen, men du kan också skapa dem för hand.
Bygga innehållstyper och hantera innehåll
Innehållstyper är hjärtat i Strapi -- de definierar ditt dataschema och genererar automatiskt API-endpoints, adminpanelformulär och databastabeller. Strapi stödjer två huvudtyper: Collection Types (som blogginlägg eller produkter, där du har många poster) och Single Types (som en hemsida eller webbplatsinställningar, där bara en post finns).
Genomgång av Content-Type Builder
Content-Type Builder i Strapias adminpanel låter dig visuellt definiera scheman. Du väljer fälttyper -- Text, Rich Text, Media, Nummer, Boolean, Relation, Komponent, Dynamic Zone, JSON och mer -- och Strapi skriver schemafilen åt dig.
Så här ser ett Article-innehållsschema ut under huven:
{
"kind": "collectionType",
"collectionName": "articles",
"info": {
"singularName": "article",
"pluralName": "articles",
"displayName": "Article"
},
"attributes": {
"title": {
"type": "string",
"required": true
},
"slug": {
"type": "uid",
"targetField": "title"
},
"content": {
"type": "richtext"
},
"coverImage": {
"type": "media",
"allowedTypes": ["images"]
},
"category": {
"type": "relation",
"relation": "manyToOne",
"target": "api::category.category"
},
"publishedAt": {
"type": "datetime"
}
}
}Du kan också använda den nya AI Content-Type Builder för att generera scheman från en beskrivning på vanligt svenska, som "Jag behöver en blogg med artiklar som har titlar, slugs, rich text-innehåll, omslagsbilder och kategorier." Strapi genererar schema-JSON och skapar databastabellen. Det är genuint användbart vid prototyputveckling.
Komponenter och Dynamic Zones
Komponenter är återanvändbara fältgrupper. Tänk på dem som React-komponenter fast för innehållsstruktur. En "SEO"-komponent med fälten metaTitle, metaDescription och canonicalUrl kan kopplas till vilken innehållstyp som helst.
Dynamic Zones tar det längre -- de låter innehållsredaktörer välja bland en lista komponenter för att bygga flexibla sidlayouter. En landningssida kan ha en Hero-komponent, sedan ett Features Grid, sedan en Testimonials Slider -- allt valt och ordnat av redaktören. Det här mönstret är populärt för marknadsföringswebbplatser där varje sida har en annorlunda struktur.
Hantera innehåll med Draft & Publish
Strapi 5 omarbetade Draft & Publish-systemet. I stället för en enskild växel får du nu två separata flikar i Content Manager -- en för utkastversionen och en för publicerat. Redaktörer kan fritt ändra i utkastet utan att påverka live-innehållet. När de är redo publicerar de, och utkastet blir den nya publicerade versionen. Innehållshistoriken låter dig rulla tillbaka till vilket tidigare tillstånd som helst om något går fel.
Arbeta med Strapi API:et (REST och GraphQL)
Strapi genererar automatiskt både REST- och GraphQL-endpoints för varje innehållstyp du skapar. REST API:et är tillgängligt direkt -- ingen konfiguration krävs. GraphQL kräver att du aktiverar det inbyggda pluginet men tar ungefär 30 sekunder att sätta upp. Båda API:erna stödjer filtrering, sortering, paginering, fältval och relationspopulering, enligt Strapias REST API-dokumentation.
REST API-frågor
Varje collection type får endpoints på /api/{pluralName}. Så här hämtar du artiklar med filter och populerar relationer:
// Hämta publicerade artiklar, sorterade efter datum, med kategori populerad
const response = await fetch(
'http://localhost:1337/api/articles?' + new URLSearchParams({
'filters[publishedAt][$notNull]': 'true',
'sort': 'publishedAt:desc',
'populate': 'category,coverImage',
'pagination[page]': '1',
'pagination[pageSize]': '10',
'fields[0]': 'title',
'fields[1]': 'slug',
'fields[2]': 'publishedAt'
}),
{
headers: {
'Authorization': `Bearer ${API_TOKEN}`
}
}
);
const { data, meta } = await response.json();
// data: array av artiklar
// meta.pagination: { page, pageSize, pageCount, total }Strapi 5 plattar ut svarsformatet. I v4 grävde du dig fram via data.attributes.title. I v5 är det bara data.title. Liten ändring, stor förbättring i vardagen.
GraphQL-installation och frågor
Aktivera GraphQL genom att installera pluginet:
npm run strapi install graphqlFråga sedan på /graphql:
query GetArticles {
articles(
filters: { publishedAt: { notNull: true } }
sort: "publishedAt:desc"
pagination: { page: 1, pageSize: 10 }
) {
title
slug
publishedAt
category {
name
}
coverImage {
url
alternativeText
}
}
}GraphQL är särskilt användbart när din frontend behöver djupt nästlade relationer. I stället för flera REST-anrop med olika populate-parametrar hämtar en enda GraphQL-fråga precis det du behöver.
Hämta Strapi-innehåll i Next.js
Här är ett praktiskt exempel på att hämta Strapi-innehåll i en Next.js App Router-sida -- det här är ett av de vanligaste Strapi + frontendramverk-paren:
// app/blog/page.tsx
async function getArticles() {
const res = await fetch(
`${process.env.STRAPI_URL}/api/articles?populate=category,coverImage&sort=publishedAt:desc`,
{
headers: {
Authorization: `Bearer ${process.env.STRAPI_TOKEN}`,
},
next: { revalidate: 60 }, // ISR: revalidera var 60:e sekund
}
);
if (!res.ok) throw new Error('Failed to fetch articles');
const { data } = await res.json();
return data;
}
export default async function BlogPage() {
const articles = await getArticles();
return (
<main>
{articles.map((article) => (
<article key={article.documentId}>
<h2>{article.title}</h2>
<span>{article.category?.name}</span>
</article>
))}
</main>
);
}Lägg märke till documentId i v5 -- det ersätter det numeriska id från v4. Det är en av de migreringsdetaljer som biter dig om du missar den.
Egna kontroller, tjänster och rutter i Strapi
Egna kontroller är där Strapi verkligen skiljer sig från SaaS-baserade headless CMS-plattformar som Contentful eller Sanity. Eftersom Strapi körs på din server som en Node.js-applikation kan du överskugga vilket autogenererat endpoint som helst med din egen affärslogik -- indatavalidering, datatransformering, externa API-anrop, aviseringsutlösare, allt du skulle göra i en Express.js-app. Det är den funktion som, enligt min erfarenhet, får team att välja Strapi framför hostade alternativ.
Strapias kontrollerdokumentation täcker hela API:et. Här är de mönster jag använder mest, baserade på de officiella tjänst- och kontrollerexemplen.
Utöka kärnkontrollers
Strapi tillhandahåller en createCoreController-fabrik. Du utökar den genom att överskugga specifika åtgärder (find, findOne, create, update, delete) och behåller resten av det autogenererade beteendet:
// src/api/article/controllers/article.ts
import { factories } from '@strapi/strapi';
export default factories.createCoreController(
'api::article.article',
({ strapi }) => ({
// Överskugga standardsökningen för att lägga till anpassad filtrering
async find(ctx) {
// Validera och sanera inkommande fråga
const sanitizedQuery = await this.sanitizeQuery(ctx);
// Lägg till din anpassade logik -- t.ex. returnera bara artiklar
// som tillhör den autentiserade användarens organisation
const user = ctx.state.user;
if (user?.organization) {
sanitizedQuery.filters = {
...sanitizedQuery.filters,
organization: user.organization.id,
};
}
const { results, pagination } = await strapi
.service('api::article.article')
.find(sanitizedQuery);
const sanitizedResults = await this.sanitizeOutput(results, ctx);
return this.transformResponse(sanitizedResults, { pagination });
},
})
);Skriva egna tjänster
Tjänster håller återanvändbar affärslogik som kontroller (och andra tjänster) kan anropa. Håll dina kontroller tunna och dina tjänster feta:
// src/api/article/services/article.ts
import { factories } from '@strapi/strapi';
export default factories.createCoreService(
'api::article.article',
({ strapi }) => ({
// Anpassad metod: publicera artikel och avisera prenumeranter
async publishAndNotify(documentId: string) {
const article = await strapi.documents('api::article.article').update({
documentId,
data: { publishedAt: new Date() },
status: 'published',
});
// Anropa en extern aviseringstjänst
const subscribers = await strapi
.service('api::subscriber.subscriber')
.find({ filters: { active: true } });
await Promise.allSettled(
subscribers.results.map((sub) =>
fetch(process.env.NOTIFICATION_WEBHOOK, {
method: 'POST',
body: JSON.stringify({
email: sub.email,
article: article.title,
}),
})
)
);
return article;
},
})
);Lägga till egna rutter
Registrera egna rutter bredvid de autogenererade CRUD-rutterna:
// src/api/article/routes/custom-article.ts
export default {
routes: [
{
method: 'POST',
path: '/articles/:id/publish-notify',
handler: 'article.publishAndNotify',
config: {
policies: ['admin::isAuthenticatedAdmin'],
},
},
],
};Lägg sedan till hanteraren i din kontroller:
async publishAndNotify(ctx) {
const { id } = ctx.params;
const article = await strapi
.service('api::article.article')
.publishAndNotify(id);
return this.transformResponse(article);
}Den här typen av backendanpassning är helt enkelt omöjlig med Contentful eller Sanity -- du skulle behöva en separat serverlös funktion eller ett mellanlager. Med Strapi finns allt i en och samma kodbas.
Plugin-ekosystemet och att bygga egna plugins
Strapias plugin-marknadsplats har 500+ plugins som täcker allt från SEO-metadata till Stripe-betalningar. Vissa är officiella (underhållna av Strapi-teamet), andra är communitybyggda. Kvaliteten varierar -- precis som med npm-paket -- så kolla GitHub-stjärnor, senaste commits och Strapi 5-kompatibilitet innan du installerar.
Viktiga plugins
Dessa levereras med Strapi eller kräver ett enda installationskommando:
- GraphQL -- lägger till
/graphql-endpoint och GraphQL Playground - i18n -- internationaliseringsstöd med locale-baserade innehållsvarianter
- Users & Permissions -- autentisering, roller, publik/autentiserad API-åtkomst
- Upload -- mediabibliotek med lokal lagring, AWS S3 eller Cloudinary-leverantörer
- Email -- transaktionell e-post via SendGrid, Mailgun, Amazon SES eller SMTP
Community-plugins värda att kolla: @strapi/plugin-seo (metataggar och sociala kort), strapi-plugin-sitemap (autogenererade XML-sitemaps) och strapi-plugin-content-versioning (granulär versionskontroll utöver den inbyggda innehållshistoriken).
Bygga ett eget plugin (Strapi 5 SDK)
Strapi 5 introducerade ett nytt Plugin SDK som förenklar plugin-utveckling. Den officiella plugin-guiden beskriver hela processen, men kärnan är:
- Kör
npx @strapi/sdk-plugin init my-pluginför att scaffolda - Definiera pluginets innehållstyper, kontroller och adminpanel-UI
- Bygg med
npm run buildoch publicera till npm
Valet mellan att bygga ett plugin kontra att skriva en egen kontroller handlar om återanvändbarhet. Om logiken är projektspecifik, använd en kontroller. Om du vill dela det mellan projekt eller med communityn, paketera det som ett plugin.
Databaskonfiguration: PostgreSQL, MySQL eller SQLite?
Strapi stödjer PostgreSQL, MySQL, MariaDB och SQLite direkt. SQLite levereras som standard för nya projekt eftersom det kräver noll konfiguration -- utmärkt för utveckling och prototyper. För produktion är PostgreSQL det rekommenderade valet och det databasen Strapi-teamet testar mest mot.
Här är en produktionsklar PostgreSQL-konfiguration:
// config/database.ts
export default ({ env }) => ({
connection: {
client: 'postgres',
connection: {
host: env('DATABASE_HOST', 'localhost'),
port: env.int('DATABASE_PORT', 5432),
database: env('DATABASE_NAME', 'strapi'),
user: env('DATABASE_USERNAME', 'strapi'),
password: env('DATABASE_PASSWORD', ''),
ssl: env.bool('DATABASE_SSL', false) && {
rejectUnauthorized: env.bool('DATABASE_SSL_REJECT', true),
},
},
pool: {
min: env.int('DATABASE_POOL_MIN', 2),
max: env.int('DATABASE_POOL_MAX', 10),
},
},
});Om du väger dina databasalternativ täcker vår jämförelse av PostgreSQL vs MySQL skillnaderna på djupet.
| Databas | Bäst för | Strapi-stöd | Produktionsklar? |
|---|---|---|---|
| PostgreSQL | Produktionsarbetsbelastningar, komplexa frågor, JSON-fält | Primär (mest testad) | Ja |
| MySQL 8+ | Team som redan använder MySQL | Fullt stöd | Ja |
| MariaDB | MySQL-kompatibelt alternativ | Fullt stöd | Ja |
| SQLite | Lokal utveckling, prototyper, CI/CD | Fullt stöd | Nej (enkel skribent, ingen samtidig åtkomst) |
För innehållstunga applikationer med 10 000+ poster hanterar PostgreSQL med anslutningspoolning (PgBouncer) belastningen bra. SQLite börjar visa problem med skrivkonflikter vid ett par hundra samtidiga requests -- okej för en blogadmin, problematiskt för ett högtrafik-API.
Driftsätta Strapi i produktion
Produktionsdeploy är där de flesta Strapi-guider slutar -- och där de flesta utvecklare fastnar. Strapi behöver en persistent Node.js-server (det är inte en statisk sajt), en databas, medielagring och rätt miljökonfiguration. Du har två vägar: Strapi Cloud (hanterad) eller egenhostad på plattformar som Railway, Render eller DigitalOcean, som beskrivs i Strapias Deploy-dokumentation.
Strapi Cloud (hanterad)
Strapi Cloud är det officiella hostade alternativet. Det hanterar serveretablering, databashantering, CDN och säkerhetskopior. Här är nivåerna:
| Nivå | Pris | Projekt | API-anrop | Platser | Lagring |
|---|---|---|---|---|---|
| Gratis | $0/mån | 1 | 10 000/mån | 1 | 500 MB |
| Essential | $18/mån | 1 | 500 000/mån | 3 | 25 GB |
| Pro | $90/mån | Obegränsat | 2M/mån | 10 | 100 GB |
| Scale | $450/mån | Obegränsat | 10M/mån | 25 | 500 GB |
Strapi Cloud är den snabbaste vägen till produktion. Men det mognar fortfarande jämfört med Contentfuls och Sanitys hosting -- färre regioner, mindre granulär åtkomstkontroll och gratisnivån är ganska begränsad. För sidoprojekt eller MVP:er fungerar gratisnivån. För produktionsappar med riktig trafik behöver du förmodligen Essential eller Pro.
Egenhostad på Railway eller Render
I vår erfarenhet är Railway den snabbaste vägen till en egenhostad Strapi-instans i produktion. Du ansluter ditt GitHub-repo, sätter miljövariabler och Railway sköter resten. För en detaljerad plattformsjämförelse, se vår Railway vs Render-jämförelse.
Här är produktionsmiljökonfigurationen:
# .env.production
NODE_ENV=production
HOST=0.0.0.0
PORT=1337
# Appnycklar (generera unika värden!)
APP_KEYS=key1,key2,key3,key4
API_TOKEN_SALT=your-api-token-salt
ADMIN_JWT_SECRET=your-admin-jwt-secret
JWT_SECRET=your-jwt-secret
TRANSFER_TOKEN_SALT=your-transfer-token-salt
# Databas (Railway tillhandahåller DATABASE_URL automatiskt)
DATABASE_CLIENT=postgres
DATABASE_HOST=${PGHOST}
DATABASE_PORT=${PGPORT}
DATABASE_NAME=${PGDATABASE}
DATABASE_USERNAME=${PGUSER}
DATABASE_PASSWORD=${PGPASSWORD}
DATABASE_SSL=true
# Medielagring (S3-kompatibel)
AWS_ACCESS_KEY_ID=your-key
AWS_SECRET_ACCESS_KEY=your-secret
AWS_REGION=us-east-1
AWS_BUCKET=your-strapi-uploadsOm du föredrar containers kan du Dockerisera Strapi och deploya var som helst -- se vår guide om containeriseringsalternativ. Railway stödjer också Nixpacks för automatiska byggen utan en Dockerfile.
Checklista inför produktion
Kontrollera dessa innan du går live:
- Bygg adminpanelen: Kör
npm run build-- det kompilerar React-admingränssnittet för produktion - Processhanterare: Använd PM2 för att hålla Strapi igång och automatiskt starta om vid krascher
- Hälsokontroll: Strapi exponerar
/_health(returnerar HTTP 204) -- peka din lastbalanserare mot det - Medielagring: Byt från lokal uppladdning till S3 eller Cloudinary -- lokal lagring finns inte kvar på de flesta PaaS-plattformar
- Omvänd proxy: Sätt Nginx eller Caddy framför Strapi för SSL-terminering och cachning av statiska filer
- Miljövariabler: Committa aldrig hemligheter. Använd plattformens inbyggda hantering av miljövariabler
Strapi vs Sanity vs Contentful: Vilket ska du välja?
Valet mellan Strapi, Sanity och Contentful beror på tre saker: om du behöver egenhosting, hur ditt team samarbetar om innehåll och dina budgetkrav. Alla tre är headless CMS-plattformar i produktionsklass, men de gör fundamentalt olika avvägningar. För djupare täckning, kolla vår Sanity CMS-guide och Contentful-guide.
| Kriterium | Strapi | Sanity | Contentful |
|---|---|---|---|
| Öppen källkod | Ja (MIT) | Nej (proprietär) | Nej (proprietär) |
| Egenhosting | Ja (obligatorisk eller Cloud) | Nej (endast hostad) | Nej (endast hostad) |
| Realtidssamarbete | Nej | Ja (Google Docs-stil) | Begränsat |
| Frågespråk | REST + GraphQL | GROQ + GraphQL | REST + GraphQL |
| Gratisnivå | Community Edition (obegränsad) | 500 000 API-anrop/mån | 5 användare, 25 000 poster |
| Anpassad backendlogik | Full Node.js-åtkomst | Serverlösa funktioner | Webhooks endast |
| Enterprise-styrning | Växande | Stark | Starkast |
| Inlärningskurva | Medel (Node.js-kunskaper hjälper) | Medel (GROQ är unikt) | Låg-medel |
Beslutsramverk -- välj utifrån ditt faktiska behov:
| Om du behöver... | Välj | Därför |
|---|---|---|
| Full kodägarskap + egenhosting | Strapi | Enda öppen källkod-alternativet med full backendåtkomst |
| Realtids redaktionellt samarbete | Sanity | Multiplayer-redigering i Google Docs-stil |
| Enterprise-efterlevnad (SOC2, HIPAA) | Contentful | Mognaste styrnings- och granskningsverktygen |
| Strammast budget (litet team) | Strapi Community | Gratis för alltid, egenhostad |
| Innehållshantering utan kod | WordPress | Fortfarande enklast för icke-utvecklare |
| Anpassad API-logik utan externa tjänster | Strapi | Kontroller, tjänster och rutter i en kodbas |
På Techsy bygger vi headless CMS-arkitekturer med Strapi, Sanity och Contentful. Om du behöver hjälp att välja rätt CMS för ditt projekt eller vill ha en produktionsklar Strapi-installation, boka en gratis konsultation.
Ärliga för- och nackdelar, och när du INTE bör använda Strapi
Efter att ha testat Strapi 5 i tre kundprojekt är det här den ärliga genomgången. Strapi är utmärkt för team som vill ha full backendkontroll, men det är inte rätt verktyg för alla.
Fördelar:
- Full kodägarskap -- din data, din server, dina regler
- MIT-licens utan leverantörsberoende
- TypeScript-first i v5 med stark typinferens
- Autogenererade REST- och GraphQL-endpoints från innehållsscheman
- Aktivt community: 65 000+ GitHub-stjärnor, Discord med 20 000+ medlemmar
- 500+ plugins på marknadsplatsen
- Egna kontroller ger dig Express.js-nivå av backendflexibilitet
- Strapi Cloud erbjuder ett hanterat alternativ om du inte vill egenhostad
Nackdelar:
- Egenhosting kräver driftsarbete -- räkna med 10-20 timmar/månad för uppdateringar, övervakning och säkerhetskopior
- Inget realtidssamarbete (två redaktörer kan skriva över varandras ändringar)
- Migration från Strapi 4 till 5 har friktion: Entity Service till Document Service, nya svarsformat, luckor i plugin-kompatibilitet
- Strapi Cloud mognar fortfarande jämfört med Contentfuls eller Sanitys hostade plattformar
- Mindre enterprise-adoption än Contentful -- färre efterlevnadscertifieringar
- Anpassning av adminpanelen, även om det är möjligt, kräver djup kännedom om Strapias interna API:er
När du INTE bör använda Strapi:
- Behöver realtidssamarbete -- arbetar ditt redaktionella team samtidigt på innehåll? Använd Sanity. Strapi har ingen multiplayer-redigering.
- Behöver enterprise-styrning och SOC2 -- efterlevnadstung organisation? Contentful har ett decenniums försprång på styrningsverktyg.
- Icke-tekniskt team utan utvecklarstöd -- Strapi kräver en utvecklare för installation, deploy och underhåll. Om ditt team bara består av marknadsförare, överväg ett SaaS-CMS eller WordPress.
- Serverlös-first arkitektur -- Strapi behöver en persistent server. Om du bygger helt på edge-funktioner och serverlöst passar Sanity eller Contentful bättre.
Vanliga frågor
Vad är Strapi och hur fungerar det?
Strapi är ett öppen källkod-baserat headless CMS byggt på Node.js. Du definierar innehållstyper via en visuell byggare eller kod, och Strapi genererar automatiskt REST- och GraphQL API-endpoints. Frontendapplikationer hämtar innehåll som JSON från dessa endpoints. Adminpanelen ger ett React-baserat gränssnitt för innehållsredaktörer att hantera poster utan att skriva kod.
Är Strapi gratis att använda?
Ja. Strapi Community Edition är gratis och öppen källkod under MIT-licensen. Du kan egenhostad den på din server utan användningsgränser, platsrestriktioner eller API-anropsbegränsningar. Strapi Cloud (det hanterade hostingalternativet) har en gratisnivå med 10 000 API-anrop per månad, med betalplaner från $18/månad för högre gränser.
Vad är skillnaden mellan Strapi och Contentful?
Strapi är öppen källkod och egenhositat, vilket ger dig full kodåtkomst och dataägarskap. Contentful är en proprietär SaaS-plattform med starkare enterprise-styrning, efterlevnadscertifieringar och en mer utbyggd redaktörsverktygslåda. Välj Strapi för kodkontroll och budgetflexibilitet. Välj Contentful för enterprise-efterlevnadsbehov och större redaktionella team som behöver hanterad infrastruktur.
Är Strapi bra för nybörjare?
Strapi är nybörjarvänligt om du har grundläggande Node.js- och JavaScript-kunskaper. Adminpanelen och Content-Type Builder är visuella och intuitiva -- ingen kod krävs för innehållsmodellering. Deploy och anpassad backendlogik kräver utvecklarerfarenhet. För absoluta nybörjare utan kodningsbakgrund skulle WordPress eller ett fullt hanterat SaaS-CMS vara enklare startpunkter.
Vilken databas använder Strapi?
Strapi stödjer PostgreSQL, MySQL, MariaDB och SQLite. Nya projekt använder SQLite som standard för noll-setup-utveckling. PostgreSQL rekommenderas för produktionsarbetsbelastningar -- det är den mest testade databasen med Strapi och hanterar samtidig åtkomst, komplexa frågor och JSON-fälttyper bra. Du konfigurerar databasanslutningen i config/database.ts.
Hur deployas Strapi till produktion?
Du kan deploya Strapi till Strapi Cloud (hanterad hosting från $18/månad), eller egenhostad på plattformar som Railway, Render, DigitalOcean eller AWS. Egenhosting kräver konfiguration av en Node.js-server, PostgreSQL-databas, miljövariabler, medielagring (S3 eller Cloudinary) och en processhanterare som PM2. Kör npm run build innan deploy för att kompilera adminpanelen.
Är Strapi bättre än WordPress?
Strapi och WordPress löser olika problem. Strapi är ett headless CMS som skickar JSON-API:er till vilken frontend som helst -- idealiskt för utvecklare som bygger anpassade appar, innehållsleverans på flera plattformar eller JavaScript-tunga sajter. WordPress är ett traditionellt CMS som renderar HTML-sidor -- bättre för icke-tekniska användare som vill ha teman, drag-and-drop-byggare och ett massivt plugin-ekosystem utan att skriva kod.
Vilka är nackdelarna med Strapi?
De viktigaste nackdelarna är driftomkostnader från egenhosting (uppdateringar, övervakning, säkerhetskopior), avsaknad av realtidssamarbete för redaktionella team, migreringsfriktion mellan stora versioner (v4 till v5 krävde kodändringar) och ett mindre moget enterprise-erbjudande jämfört med Contentful. Strapi Cloud hanterar hostingbördan men hinner fortfarande ikapp på funktioner och global tillgänglighet.
Kan Strapi hantera storskaliga applikationer?
Ja. Strapi kan hantera storskaliga applikationer med rätt infrastruktur: PostgreSQL med anslutningspoolning, horisontell skalning bakom en lastbalanserare, CDN för mediefiler och Redis för cachning. Företag som IBM, NASA och Toyota använder Strapi i produktion. Flaskhalsen är vanligtvis databasprestanda och hostingkonfiguration, inte Strapi i sig.
Vad är Strapi Cloud och hur mycket kostar det?
Strapi Cloud är den officiella hanterade hostingplattformen för Strapi-projekt. Den hanterar serveretablering, databashantering, CDN och automatiska säkerhetskopior. Priserna börjar med en gratisnivå (1 projekt, 10 000 API-anrop/månad), sedan Essential på $18/månad, Pro på $90/månad och Scale på $450/månad. Varje nivå ökar gränserna för API-anrop, teamplatser och lagringskapacitet.