Caisy
High-performance headless CMS with visual editor.
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
- 1Developing headless websites and web applications with complex content requirements
- 2Building multi-platform mobile apps that need centralized content management
- 3Creating marketing websites with frequent content updates from non-technical teams
- 4Prototyping client projects that require visual content modeling capabilities
- 5Developing e-commerce product catalogs with rich media and variant management
- 6Building documentation sites with collaborative editing workflows
- 7Creating 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
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=changemeUsage Notes
- 1Docs: https://caisy.io/docs
- 2Access at http://localhost:3000
- 3GraphQL API for content delivery
- 4Visual editor for content modeling
- 5Global CDN for asset delivery
- 6Caisy 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 -fOne-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 | bashTroubleshooting
- 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
Ad Space
Shortcuts: C CopyF FavoriteD Download