--- title: Payload created: 2026-06-08 updated: 2026-06-08 type: app tags: [catalogue, content-management, app-marathon-batch-rattrapage-2] confidence: high contested: false sources: [https://selfh.st/apps/?tag=Content+Management&app=payload] --- # 📰 Payload > **CMS headless TypeScript open source** : TypeScript natif, type-safe, auto-hĂ©bergeable, parfait pour les stacks Next.js. ## 📋 Informations GĂ©nĂ©rales | Champ | Valeur | | :--- | :--- | | **Site web** | [payloadcms.com](https://payloadcms.com/) | | **GitHub** | [payloadcms/payload](https://github.com/payloadcms/payload) | | **License** | MIT | | **Langage** | TypeScript | | **Étoiles GitHub** | 36k ⭐ | | **CatĂ©gorie** | [[cat-content-management|Content Management]] | ## 📝 Description **Payload** est un **CMS headless moderne 100% TypeScript**, conçu pour s'intĂ©grer nativement dans une application **Next.js** (mais utilisable aussi en standalone). Sa force : tout est dĂ©fini en **TypeScript code-first** (Collections, Fields, Hooks, Access), pas de GUI Ă  configurer Ă  la souris — ce qui rend le code testable, versionnable, type-safe. Inclut un **admin UI auto-gĂ©nĂ©rĂ©**, une auth, des uploads, un **access control** granulaire par collection, et un **plugin ecosystem** (multi-tenants, i18n, form-builder, lexical editor, etc.). DiffĂ©rence vs **Strapi / Directus** : Strapi et Directus sont des monorepos Node.js avec leur propre serveur ; Payload s'installe **dans** votre app Next.js (ou Express), ce qui simplifie le dĂ©ploiement et Ă©limine un service Ă  maintenir. Pour qui : Ă©quipes TypeScript / Next.js qui veulent un CMS headless, type-safe, auto-hĂ©bergeable, sans la complexitĂ© d'un Strapi ou la GUI vieillissante d'un Directus. ## 🚀 Installation ### Standalone (Next.js + Payload) ```bash npx create-payload-app -n my-payload-app cd my-payload-app DATABASE_URI=postgres://user:pass@db:5432/payload PAYLOAD_SECRET=xxx npm run dev ``` ### Docker Compose (production) ```yaml version: '3.8' services: payload: build: . container_name: payload restart: unless-stopped ports: - "3000:3000" environment: DATABASE_URI: postgres://payload:change-me@db:5432/payload PAYLOAD_SECRET: change-me-32-bytes PAYLOAD_PUBLIC_SERVER_URL: https://payload.example.com NEXT_PUBLIC_SERVER_URL: https://payload.example.com depends_on: - db labels: - "traefik.enable=true" - "traefik.http.routers.payload.rule=Host(`payload.example.com`)" - "traefik.http.routers.payload.entrypoints=websecure" - "traefik.http.routers.payload.tls.certresolver=letsencrypt" - "traefik.http.services.payload.loadbalancer.server.port=3000" db: image: postgres:16-alpine container_name: payload-db restart: unless-stopped environment: POSTGRES_DB: payload POSTGRES_USER: payload POSTGRES_PASSWORD: change-me volumes: - payload_db:/var/lib/postgresql/data volumes: payload_db: ``` ## 🔄 Alternatives ### Open Source - [[app-strapi]] — CMS headless Node.js leader, GUI-first, REST/GraphQL. - **Directus** — Headless Node.js avec admin UI data-first. - [[app-grav]] — Flat-file PHP, plus simple, pas headless. ### PropriĂ©taires - **Contentful** — Headless SaaS leader, enterprise. - **Sanity** — Headless SaaS avec studio personnalisable. - **Strapi Cloud** — Version cloud de Strapi. ## 🔐 SĂ©curitĂ© - **Authentification** : intĂ©grĂ©e (email/password, API keys, JWT, sessions). SSO via plugins tiers. - **Access Control** : fonctions TypeScript par collection/field, granulaires. - **Type-safety** : moins de risque d'injection, le typage TS force Ă  valider les inputs. ## 📚 Ressources - [Documentation](https://payloadcms.com/docs) - [GitHub](https://github.com/payloadcms/payload) - [Templates](https://github.com/payloadcms/payload/tree/main/templates) ## Pages LiĂ©es - [[cat-content-management]] — CatĂ©gorie Content Management - [[app-strapi]] — Concurrent open source - [[app-grav]] — CMS flat-file open source - [[recettes-docker-compose]] — Templates Docker