Documentation Index
Fetch the complete documentation index at: https://kaneo.app/docs/llms.txt
Use this file to discover all available pages before exploring further.
The initial compose file
The first step is to create a Docker Compose file. We will call itcompose.yml.
The services and volumes
Kaneo uses the following services:postgres: The PostgreSQL database.kaneo: The combined API and web container.
postgres_data: The PostgreSQL data.
Required URL configuration
For the combined image, onlyKANEO_CLIENT_URL is required — KANEO_API_URL is derived automatically as KANEO_CLIENT_URL/api:
KANEO_API_URL explicitly only if you need to override the default (e.g. a reverse proxy changes the path).
This keeps the browser on one origin while the container proxies /api requests to the internal API process.
Notes on object storage
Kaneo uses S3-compatible object storage for private uploads in task descriptions and comments.- Object storage is optional. Kaneo runs without it, but uploads in task descriptions and comments will be unavailable.
- For local/self-hosted setups, MinIO is the recommended option when you want uploads.
- The Kaneo API creates presigned upload URLs and the browser uploads files directly to the configured storage backend.
- Kaneo serves uploaded assets back through its own API, so the bucket does not need to be public.
- If you do not configure object storage, leave the
S3_*variables unset. - For a complete MinIO example and backend-specific setup notes, see the storage backends guide.
Optional MinIO service
Add this service and volume to yourcompose.yml only if you want uploads:
S3_* environment variables in your .env file. See the environment variables page.
Example .env values for MinIO
http://localhost:9001.
Using fs instead of MinIO
If you want to use fs, you can point the same S3_* variables at its endpoint instead of MinIO. Kaneo only needs an S3-compatible API endpoint, credentials, and a bucket.
When using fs, keep these differences in mind:
- Set
S3_FORCE_PATH_STYLE=true. - Create buckets through the S3 API or CLI, not through a web console.
- Browser uploads may require reverse-proxy CORS handling, because
fsdoes not currently implement S3 CORS APIs.