Adding a new service template to Coolify ​
Services in Coolify are templates made from normal docker-compose files with some added Coolify magic.
The service’s Git repository must have at least 1,000 stars to be added to Coolify as a one click service.
See Coolify's docker-compose specs to learn more about Coolify's magic and how to benefit from generated variables and storage handling. Please use this magic when submitting your PR to make the merging process smoother.
Add metadata
At the top of your
docker-composefile, add the following metadata:yaml# documentation: https://docs.example.com/ # slogan: A brief description of your service # category: One word, broad app type # tags: tag1,tag2,tag3 # logo: svgs/your-service.svg # port: 1234documentation: Link to the service's official documentationslogan: A short description of the servicecategory: A one word broad app typetags: Comma-separated list for better searchabilitylogo: Path to the service's logo (see step 3)port: The main entrypoint port of the service
Always specify a port, as Caddy Proxy cannot automatically determine the service's port.
Create the docker-compose file
Below the metadata, add your docker-compose configuration. Use Coolify's environment variable magic here.
Example:
yamlservices: app: image: your-service-image:tag environment: - DATABASE_URL=${COOLIFY_DATABASE_URL} volumes: - ${COOLIFY_VOLUME_APP}:/dataUsing Required Environment Variables: When creating service templates, mark critical configuration as required to improve user experience:
yamlservices: app: image: your-service:latest environment: # Required - critical configuration that must be set by the user - DATABASE_URL=${DATABASE_URL:?} - API_KEY=${API_KEY:?} # Required with sensible defaults - improves usability - PORT=${PORT:?8080} - LOG_LEVEL=${LOG_LEVEL:?info} # Optional - features that can be left empty - DEBUG=${DEBUG:-false} - CACHE_TTL=${CACHE_TTL:-3600}This helps users understand which configuration is essential and prevents deployment failures.
Add a logo
- Create or obtain an SVG logo for your service (strongly preferred format)
- If SVG is unavailable, use a high-quality.webp or JPG as a last resort
- Add the logo file to the
svgsfolder in the Coolify repository - The logo filename should match the docker-compose service name exactly
- For example, if your service name is
wordpress, your logo should bewordpress.svgand the final path then issvgs/wordpress.svguse this path in thelogometadata.
- For example, if your service name is
Test your template
Use the
Docker Compose Emptydeployment option in Coolify to test your template. This process mimics the one-click service deployment.Submit a Pull Request
Once your template works correctly:
- Open a PR
- Add your new
<service>.yamlcompose file under/templates/compose - Include the logo file in the
svgsfolder
infoCoolify uses a parsed version of the templates for deployment.
Adding a new service template to the Coolify Documentation ​
Once your service template is merged into Coolify, it will be important to also add documentation for it in the Coolify docs. In the Coolify Docs Contribute section we explain how to contribute and run the documentation on your own PC.
The services overview page and the All Services directory are generated automatically from the frontmatter of each markdown file in docs/services/. You do not need to edit List.vue or all.md manually anymore. The generators run as part of bun run dev, bun run build, and bun run preview.
scripts/generate-service-list.mjs→ writesdocs/.vitepress/theme/data/services.json(consumed by the services overview component)scripts/generate-services-page.mjs→ writesdocs/services/all.md- Both scripts share
scripts/services-data.mjs, which parses each service's frontmatter and resolves its logo fromdocs/public/images/services/
As soon as you have your local setup ready, follow these steps to add your new service:
Add the service logo under
/docs/public/images/services/- Use the same base name as your service slug, e.g.
my-service.svgormy-service-logo.svg. The icon resolver tries<slug>-logo,<slug>_logo,<slug>logo, then bare<slug>, then the same variants based on the title. - Prefer SVG; otherwise WebP, then PNG. Avoid JPEG for logos.
- Use the same base name as your service slug, e.g.
Create the documentation file
Create
/docs/services/<service-slug>.md. The slug must be lowercase and kebab-case, and must match the filename. Use this frontmatter:yaml--- title: "Service Name" description: "Short description that appears on the service card and search results." og: description: "SEO/social-card description (optional, longer than `description`)." category: "Analytics" icon: "/docs/images/services/service-name-logo.svg" ---Field Required Notes titleyes Display name shown on the card descriptionyes Used as the card description and in all.mdcategoryyes Determines the heading the service appears under in all.mdand the filter in the overviewiconoptional Only set if auto-resolution can't find your logo og.descriptionoptional Longer description used for social/SEO meta tags disabledoptional Set to trueto hide the service from the listing while keeping the page reachable by direct URLWrite the documentation
Start writing your documentation under the frontmatter. Use the following template as a starting point:
markdown# Service Name  ## What is Service Name? Brief description and use cases. ## Links - [Official website](https://example.com?utm_source=coolify.io) - [GitHub](https://github.com/example/repo?utm_source=coolify.io)Use
<ZoomableImage>only for screenshots that benefit from a zoomable view, not for the logo.Regenerate the listings (optional — happens automatically on
dev/build)bashbun run generate:servicesThis refreshes
docs/.vitepress/theme/data/services.jsonanddocs/services/all.md. Commit both regenerated files alongside your new service page.Submit a Pull Request
- Target the
nextbranch - Verify the service renders correctly with
bun run dev, including the listing card, the filter category, and the entry in/services/all
- Target the
Request a new service ​
If there's a service template you'd like to see in Coolify:
- Search GitHub discussions for existing requests.
- If the service has been requested, upvote it. If not, create a new request.
