Caisy
High-performance headless CMS with visual editor.
[i]Overview
Caisy is a modern headless content management system built for performance and developer experience, featuring a visual editor that empowers content creators while delivering content through a high-performance GraphQL API. Founded as a German-based SaaS platform, Caisy distinguishes itself from traditional CMSs by combining intuitive visual content modeling with robust API-first architecture, making it particularly valuable for teams building modern web applications, mobile apps, and multi-channel digital experiences. This Docker configuration creates a local development environment by pairing Caisy with PostgreSQL 16, enabling developers to work with Caisy's content modeling and GraphQL capabilities locally before deploying to production. The stack combines Caisy's visual editor and content delivery engine with PostgreSQL's proven reliability for content storage, creating an environment where content teams can model complex content structures visually while developers consume that content through Caisy's optimized GraphQL endpoints. This setup is ideal for development teams working on headless projects who need local access to Caisy's features, agencies prototyping client projects, or organizations evaluating Caisy's capabilities before committing to the hosted service.
[*]Key Features
- [+]Visual content modeling interface for creating custom content types without code
- [+]High-performance GraphQL API with automatic query optimization and caching
- [+]Built-in asset management with automatic image optimization and WebP conversion
- [+]Multi-language content support with translation workflows
- [+]Real-time collaborative editing with conflict resolution
- [+]Component-based content architecture for reusable content blocks
- [+]Advanced content relationships and reference management
- [+]Webhook support for triggering builds and integrations on content changes
[#]Common Use Cases
- [1]Developing headless websites and web applications with complex content requirements
- [2]Building multi-platform mobile apps that need centralized content management
- [3]Creating marketing websites with frequent content updates from non-technical teams
- [4]Prototyping client projects that require visual content modeling capabilities
- [5]Developing e-commerce product catalogs with rich media and variant management
- [6]Building documentation sites with collaborative editing workflows
- [7]Creating multi-brand digital experiences with shared content libraries
[!]Prerequisites
- [!]Docker and Docker Compose installed on your development machine
- [!]At least 4GB RAM available for PostgreSQL and Caisy containers
- [!]Port 3000 available for Caisy web interface access
- [!]Basic understanding of GraphQL for content consumption
- [!]Environment file with DB_PASSWORD variable configured
- [!]Familiarity with headless CMS concepts and API-driven development
[!]
WARNING: For development & testing. Review security settings, change default credentials, and test thoroughly before production use. See Terms
[$]docker-compose.yml
[docker-compose.yml]
1services: 2 caisy: 3 image: caisy/caisy:latest4 container_name: caisy5 restart: unless-stopped6 environment: 7 DATABASE_URL: postgres://caisy:${DB_PASSWORD}@postgres:5432/caisy8 ports: 9 - "3000:3000"10 depends_on: 11 - postgres12 networks: 13 - caisy-network1415 postgres: 16 image: postgres:16-alpine17 container_name: caisy-postgres18 environment: 19 POSTGRES_USER: caisy20 POSTGRES_PASSWORD: ${DB_PASSWORD}21 POSTGRES_DB: caisy22 volumes: 23 - postgres_data:/var/lib/postgresql/data24 networks: 25 - caisy-network2627volumes: 28 postgres_data: 2930networks: 31 caisy-network: 32 driver: bridge[$].env Template
[.env]
1DB_PASSWORD=changeme[i]Usage Notes
- [1]Docs: https://caisy.io/docs
- [2]Access at http://localhost:3000
- [3]GraphQL API for content delivery
- [4]Visual editor for content modeling
- [5]Global CDN for asset delivery
- [6]Caisy is primarily a SaaS; self-hosted option limited
Individual Services(2 services)
Copy individual services to mix and match with your existing compose files.
caisy
caisy:
image: caisy/caisy:latest
container_name: caisy
restart: unless-stopped
environment:
DATABASE_URL: postgres://caisy:${DB_PASSWORD}@postgres:5432/caisy
ports:
- "3000:3000"
depends_on:
- postgres
networks:
- caisy-network
postgres
postgres:
image: postgres:16-alpine
container_name: caisy-postgres
environment:
POSTGRES_USER: caisy
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_DB: caisy
volumes:
- postgres_data:/var/lib/postgresql/data
networks:
- caisy-network
[>]Quick Start
[terminal]
1# 1. Create the compose file2cat > docker-compose.yml << 'EOF'3services:4 caisy:5 image: caisy/caisy:latest6 container_name: caisy7 restart: unless-stopped8 environment:9 DATABASE_URL: postgres://caisy:${DB_PASSWORD}@postgres:5432/caisy10 ports:11 - "3000:3000"12 depends_on:13 - postgres14 networks:15 - caisy-network1617 postgres:18 image: postgres:16-alpine19 container_name: caisy-postgres20 environment:21 POSTGRES_USER: caisy22 POSTGRES_PASSWORD: ${DB_PASSWORD}23 POSTGRES_DB: caisy24 volumes:25 - postgres_data:/var/lib/postgresql/data26 networks:27 - caisy-network2829volumes:30 postgres_data:3132networks:33 caisy-network:34 driver: bridge35EOF3637# 2. Create the .env file38cat > .env << 'EOF'39DB_PASSWORD=changeme40EOF4142# 3. Start the services43docker compose up -d4445# 4. View logs46docker compose logs -f[>]One-Liner
Run this command to download and set up the recipe in one step:
[terminal]
1curl -fsSL https://docker.recipes/api/recipes/contentful-like-caisy/run | bash[?]Troubleshooting
- [!]Caisy container fails to start with database connection error: Ensure PostgreSQL container is fully initialized before Caisy starts, add healthcheck or increase depends_on timing
- [!]GraphQL queries returning empty results: Verify content has been published in Caisy admin interface, check API endpoint configuration
- [!]Asset uploads failing or not displaying: Check volume mounts for asset storage and verify Caisy has write permissions to mounted directories
- [!]Visual editor not loading properly: Clear browser cache and ensure all Caisy static assets are served correctly from port 3000
- [!]PostgreSQL connection pool exhausted: Increase PostgreSQL max_connections setting or optimize Caisy connection pooling configuration
- [!]Content changes not reflecting in API: Check if content is published and not in draft state, verify webhook triggers are configured properly
Community Notes
Loading...
Loading notes...
## Download Recipe Kit
Get all files in a ready-to-deploy package
Includes docker-compose.yml, .env template, README, and license
Shortcuts: C CopyF FavoriteD Download