
Coolify
- 267 installs
- 14 repo stars
- Updated March 2, 2026
- oakoss/agent-skills
Automate infrastructure deployments and manage applications, databases, and services through the Coolify REST API.
About
Coolify's API enables programmatic control over deployments, applications, databases, and services through REST endpoints secured with Bearer token authentication. Solo builders use this API to automate infrastructure management, integrate Coolify into CI/CD pipelines, and manage deployments without manual dashboard interactions. It matters because it transforms Coolify from a manual tool into an extensible platform that fits seamlessly into automated workflows.
- Bearer token authentication with permission scopes
- Deploy, manage, and query applications and databases via REST
- Permission levels from read-only to full admin with sensitive data control
Coolify by the numbers
- 267 all-time installs (skills.sh)
- +8 installs in the week ending Aug 4, 2026 (Skillselion tracking)
- Ranked #1,438 of 4,347 Backend & APIs skills by installs in the Skillselion catalog
- Security screen: HIGH risk (skills.sh audit)
- Data as of Aug 4, 2026 (Skillselion catalog sync)
npx skills add https://github.com/oakoss/agent-skills --skill coolifyAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 267 |
|---|---|
| repo stars | ★ 14 |
| Security audit | 2 / 3 scanners passed |
| Last updated | March 2, 2026 |
| Repository | oakoss/agent-skills ↗ |
What it does
Automate infrastructure deployments and manage applications, databases, and services through the Coolify REST API.
Files
Coolify
Overview
Coolify is a self-hosted PaaS (Vercel/Netlify alternative) that deploys applications, databases, and services on your own infrastructure. It provides a REST API for programmatic control, supports multiple build packs, and uses Traefik for reverse proxy and SSL.
When to use: Deploying applications to self-hosted infrastructure, managing databases and services through API, automating deployments via CI/CD, self-hosting without vendor lock-in.
When NOT to use: Initial Coolify server installation (use the official install script via browser), managing Coolify's own infrastructure (Postgres, Redis — managed internally), or when a managed platform (Vercel, Railway) meets your needs without self-hosting requirements.
Quick Reference
| Pattern | Approach | Key Points |
|---|---|---|
| API auth | Authorization: Bearer <token> header | Token created in dashboard, scoped permissions |
| List applications | GET /api/v1/applications | Returns all apps with status and config |
| Trigger deploy | GET /api/v1/deploy?uuid=<app>&force=true | Or use per-app webhook URL |
| Create application | POST /api/v1/applications/public | Requires project_uuid, server_uuid, env_name |
| Update application | PATCH /api/v1/applications/<uuid> | Accepts build, health check, domain, limit fields |
| Auto-deploy | Enable in Advanced > General | Deploys on every push to configured branch |
| Webhook deploy | curl GET <webhook_url> -H "Authorization: Bearer ..." | Controlled deploys from CI pipelines |
| GitHub Actions deploy | Build image, push to registry, trigger webhook | Full control over build + test before deploy |
| Nixpacks build | Auto-detected from source code | Zero-config for supported languages |
| Dockerfile build | Set build pack to dockerfile | Full control over build process |
| Compose build | docker-compose.yaml as source of truth | Multi-service stacks with Coolify labels |
| Environment variables | API or dashboard per-environment | Interpolated in Compose via ${VAR} syntax |
| Domain routing | fqdn field or Traefik labels in Compose | Automatic SSL via Let's Encrypt |
| Health checks | Configurable path, interval, retries via API | Required for running:healthy status |
Common Mistakes
| Mistake | Correct Pattern |
|---|---|
| API returns "Unauthenticated" | Add Accept: application/json header alongside Bearer token |
| Can't read sensitive fields (auto-deploy, etc.) | Token needs view:sensitive or * permission scope |
| Auto-deploy not triggering | Verify GitHub App is connected and auto-deploy enabled in Advanced |
| Using API token without deploy permission | Token needs explicit deploy permission to trigger deployments |
| Health check fails on Compose services | Add exclude_from_hc: true label for non-HTTP services |
| Webhook deploy without auth header | Always include Authorization: Bearer <token> with webhook calls |
| Environment variables not available in build | Use build arguments in Advanced menu, not runtime env vars |
| Compose services can't communicate | Use service names as hostnames within the same stack network |
Delegation
- API exploration: Use
Exploreagent to discover existing Coolify resources - Dockerfile optimization: Use
Taskagent to review Dockerfiles for Coolify deployment - CI/CD pipeline design: Use
Planagent for deployment workflow strategy
If the docker skill is available, delegate Dockerfile authoring, multi-stage builds, and image optimization to it.If the github-actions skill is available, delegate workflow syntax and CI pipeline patterns to it.If the ci-cd-architecture skill is available, delegate deployment strategy and environment promotion to it.References
- API: authentication, endpoints, common operations, and permission scopes
- Deployment: auto-deploy, webhooks, GitHub Actions, and CI/CD pipelines
- Build packs: Nixpacks, Dockerfile, Compose conventions, and configuration
API Patterns
Authentication
All API requests require a Bearer token created in the Coolify dashboard under Settings > API Tokens.
curl -s \
-H "Authorization: Bearer $COOLIFY_TOKEN" \
-H "Accept: application/json" \
https://coolify.example.com/api/v1/versionThe Accept: application/json header is required — without it, some endpoints return "Unauthenticated" even with a valid token.
Permission Scopes
| Scope | Read | Write | Deploy | Sensitive Data |
|---|---|---|---|---|
read-only | Yes | No | No | Redacted |
read:sensitive | Yes | No | No | Visible |
view:sensitive | Yes | Yes | Yes | Visible |
deploy | No | No | Yes | No |
* | Yes | Yes | Yes | Visible |
Fields like is_auto_deploy_enabled, API keys, and passwords are redacted unless the token has view:sensitive or * scope.
Environment Variables
Set the Coolify instance URL and token as environment variables:
export COOLIFY_URL="https://coolify.example.com"
export COOLIFY_TOKEN="1|your-token-here"Common Endpoints
Applications
# List all applications
curl -s -H "Authorization: Bearer $COOLIFY_TOKEN" \
-H "Accept: application/json" \
"$COOLIFY_URL/api/v1/applications" | jq .
# Get application details
curl -s -H "Authorization: Bearer $COOLIFY_TOKEN" \
-H "Accept: application/json" \
"$COOLIFY_URL/api/v1/applications/<uuid>"
# Create a public Git application
curl -s -X POST \
-H "Authorization: Bearer $COOLIFY_TOKEN" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"project_uuid": "<project-uuid>",
"server_uuid": "<server-uuid>",
"environment_name": "production",
"git_repository": "https://github.com/org/repo",
"git_branch": "main",
"build_pack": "nixpacks",
"ports_exposes": "3000"
}' \
"$COOLIFY_URL/api/v1/applications/public"
# Update application settings
curl -s -X PATCH \
-H "Authorization: Bearer $COOLIFY_TOKEN" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"is_auto_deploy_enabled": true,
"health_check_path": "/health",
"health_check_interval": 30
}' \
"$COOLIFY_URL/api/v1/applications/<uuid>"
# Delete application
curl -s -X DELETE \
-H "Authorization: Bearer $COOLIFY_TOKEN" \
-H "Accept: application/json" \
"$COOLIFY_URL/api/v1/applications/<uuid>"Deployments
# Trigger deployment (by UUID)
curl -s -H "Authorization: Bearer $COOLIFY_TOKEN" \
-H "Accept: application/json" \
"$COOLIFY_URL/api/v1/deploy?uuid=<app-uuid>&force=true"
# Trigger deployment (by webhook URL)
curl -s -H "Authorization: Bearer $COOLIFY_TOKEN" \
"$COOLIFY_URL/api/v1/applications/<uuid>/deploy"
# List deployments
curl -s -H "Authorization: Bearer $COOLIFY_TOKEN" \
-H "Accept: application/json" \
"$COOLIFY_URL/api/v1/deployments"
# Get deployment details
curl -s -H "Authorization: Bearer $COOLIFY_TOKEN" \
-H "Accept: application/json" \
"$COOLIFY_URL/api/v1/deployments/<deployment-uuid>"Databases
# List all databases
curl -s -H "Authorization: Bearer $COOLIFY_TOKEN" \
-H "Accept: application/json" \
"$COOLIFY_URL/api/v1/databases"
# Create a PostgreSQL database
curl -s -X POST \
-H "Authorization: Bearer $COOLIFY_TOKEN" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"project_uuid": "<project-uuid>",
"server_uuid": "<server-uuid>",
"environment_name": "production",
"type": "postgresql",
"name": "my-database"
}' \
"$COOLIFY_URL/api/v1/databases"Services
# List all services (280+ one-click services)
curl -s -H "Authorization: Bearer $COOLIFY_TOKEN" \
-H "Accept: application/json" \
"$COOLIFY_URL/api/v1/services"
# Get service details
curl -s -H "Authorization: Bearer $COOLIFY_TOKEN" \
-H "Accept: application/json" \
"$COOLIFY_URL/api/v1/services/<uuid>"Projects and Environments
# List projects
curl -s -H "Authorization: Bearer $COOLIFY_TOKEN" \
-H "Accept: application/json" \
"$COOLIFY_URL/api/v1/projects"
# Get project with environments
curl -s -H "Authorization: Bearer $COOLIFY_TOKEN" \
-H "Accept: application/json" \
"$COOLIFY_URL/api/v1/projects/<uuid>"Servers
# List servers (requires elevated permissions)
curl -s -H "Authorization: Bearer $COOLIFY_TOKEN" \
-H "Accept: application/json" \
"$COOLIFY_URL/api/v1/servers"
# Get server details
curl -s -H "Authorization: Bearer $COOLIFY_TOKEN" \
-H "Accept: application/json" \
"$COOLIFY_URL/api/v1/servers/<uuid>"Updatable Application Fields
The PATCH endpoint accepts these fields:
| Category | Fields |
|---|---|
| Identity | name, description, domains |
| Source | git_repository, git_branch, git_commit_sha |
| Build | build_pack, build_command, install_command, start_command |
| Deploy | is_auto_deploy_enabled, instant_deploy, is_force_https_enabled |
| Paths | base_directory, publish_directory, dockerfile_location |
| Health | health_check_path, health_check_port, health_check_interval |
| Resources | limits_memory, limits_cpus, limits_cpu_shares |
| Hooks | pre_deployment_command, post_deployment_command |
| Docker | dockerfile, docker_compose_location, custom_docker_run_options |
| Webhooks | manual_webhook_secret_github, manual_webhook_secret_gitlab |
| Static | is_static, is_spa, redirect |
Error Handling
| HTTP Status | Meaning | Common Cause |
|---|---|---|
| 401 | Unauthenticated | Missing/invalid token or no Accept header |
| 403 | Forbidden | Token lacks required permission scope |
| 404 | Not Found | Invalid UUID or resource deleted |
| 422 | Validation Error | Missing required fields in request body |
| 500 | Server Error | Check Coolify logs on the server |
Build Packs
Build Pack Comparison
| Build Pack | Config Required | Control Level | Best For |
|---|---|---|---|
| Nixpacks | None | Low | Quick deploys, standard stacks |
| Dockerfile | Dockerfile | High | Custom builds, specific dependencies |
| Docker Compose | compose.yaml | Highest | Multi-service stacks, databases |
Set the build pack via API:
curl -s -X PATCH \
-H "Authorization: Bearer $COOLIFY_TOKEN" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{"build_pack": "nixpacks"}' \
"$COOLIFY_URL/api/v1/applications/<uuid>"Valid values: nixpacks, dockerfile, dockercompose
Nixpacks
Nixpacks auto-detects the language and framework from source code, generates a Dockerfile, builds, and deploys — zero configuration needed.
Supported Languages
Node.js, Python, Go, Rust, Ruby, PHP, Java, .NET, Elixir, Haskell, Clojure, Scala, Swift, Dart, Crystal, Zig, and more.
Customization with nixpacks.toml
Place nixpacks.toml in the repository root to override auto-detection:
# Custom build phases
[phases.setup]
nixPkgs = ["nodejs_20", "pnpm"]
[phases.install]
cmds = ["pnpm install --frozen-lockfile"]
[phases.build]
cmds = ["pnpm build"]
# Environment variables baked into the image
[variables]
NODE_ENV = "production"
# Start command
[start]
cmd = "pnpm start"Common Nixpacks Overrides
# Pin Node.js version
[phases.setup]
nixPkgs = ["nodejs_24"]
# Add system dependencies (e.g., for sharp/canvas)
[phases.setup]
nixPkgs = ["nodejs_24", "vips", "pkg-config"]
aptPkgs = ["libvips-dev"]
# Custom install + build
[phases.install]
cmds = ["npm ci"]
[phases.build]
cmds = ["npm run build"]
# Cache directories between builds
[phases.install]
cacheDirectories = ["/root/.npm"]Nixpacks Environment Variables
Override behavior without nixpacks.toml by setting environment variables in Coolify:
| Variable | Effect |
|---|---|
NIXPACKS_NODE_VERSION | Pin Node.js version |
NIXPACKS_BUILD_CMD | Override build command |
NIXPACKS_START_CMD | Override start command |
NIXPACKS_INSTALL_CMD | Override install command |
NIXPACKS_PKGS | Additional Nix packages |
NIXPACKS_APT_PKGS | Additional apt packages |
Dockerfile
Full control over the build. Set build_pack to dockerfile and Coolify reads the Dockerfile from the repository.
API Configuration
curl -s -X PATCH \
-H "Authorization: Bearer $COOLIFY_TOKEN" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"build_pack": "dockerfile",
"dockerfile_location": "/Dockerfile",
"build_command": null,
"start_command": null
}' \
"$COOLIFY_URL/api/v1/applications/<uuid>"Build Arguments
Coolify can inject build arguments during the build process. Configure them in the application's Advanced menu. The SOURCE_COMMIT variable (Git commit hash) is available but disabled by default to preserve Docker cache.
Docker Compose
The docker-compose.yaml file is the single source of truth. Coolify reads it and manages the stack.
Coolify-Specific Labels
Coolify auto-applies these labels to managed containers:
labels:
coolify.managed: 'true'
coolify.applicationId: '<app-id>'
coolify.type: 'application'Traefik Integration
Make services internet-accessible with Traefik labels:
services:
app:
build: .
labels:
- 'traefik.enable=true'
- 'traefik.http.routers.app.rule=Host(`app.example.com`)'
- 'traefik.http.routers.app.entrypoints=https'
- 'traefik.http.routers.app.tls=true'
- 'traefik.http.routers.app.tls.certresolver=letsencrypt'
- 'traefik.http.services.app.loadbalancer.server.port=3000'
worker:
build: .
command: node worker.js
labels:
- 'coolify.managed=true'
# No traefik labels = not exposed to internetHealth Check Exclusion
Exclude non-HTTP services from Coolify's health monitoring:
services:
migrations:
build: .
command: pnpm db:migrate
labels:
- 'exclude_from_hc=true'
worker:
build: .
command: node worker.js
labels:
- 'exclude_from_hc=true'Networking
Each Compose stack deploys to an isolated network named after the resource UUID. Services within the same stack communicate by service name:
services:
app:
environment:
DATABASE_URL: postgres://user:pass@db:5432/myapp
REDIS_URL: redis://redis:6379
db:
image: postgres:16-alpine
redis:
image: redis:7-alpineCross-Stack Communication
Enable the "Connect to Predefined Network" option to allow services in different stacks to communicate. Reference services using their full name: <service>-<uuid>.
Storage with Compose
Coolify extends Docker Compose with custom storage fields:
services:
app:
volumes:
- data:/app/data
volumes:
data:
# Coolify extension: create empty directory
# is_directory: true
# Coolify extension: create file with content
# content: |
# key=value
# another_key=${ENV_VAR}Domain and SSL Configuration
Via API
# Set domain (Traefik handles SSL automatically)
curl -s -X PATCH \
-H "Authorization: Bearer $COOLIFY_TOKEN" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{"domains": "https://app.example.com"}' \
"$COOLIFY_URL/api/v1/applications/<uuid>"
# Force HTTPS redirect
curl -s -X PATCH \
-H "Authorization: Bearer $COOLIFY_TOKEN" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{"is_force_https_enabled": true}' \
"$COOLIFY_URL/api/v1/applications/<uuid>"Wildcard Domains
Configure a wildcard domain on the server level for automatic subdomain routing. Set in Coolify dashboard under Server > Settings > Wildcard Domain.
Troubleshooting
| Problem | Cause | Fix |
|---|---|---|
| Build fails with Nixpacks | Missing system dependency | Add to nixpacks.toml or switch to Dockerfile |
| "No Available Server" error | Container health check failing | Fix health check or add exclude_from_hc label |
| Compose services can't connect | Wrong hostname | Use service name, not localhost |
| SSL not working | Domain DNS not pointing to server | Update DNS A record to server IP |
| Old version deployed | Docker cache or wrong commit SHA | Set SOURCE_COMMIT or use force=true on deploy |
| Build arguments not available | Not configured in Advanced menu | Add build args in application Advanced settings |
Deployment Strategies
Strategy Comparison
| Strategy | Trigger | Control Level | Best For |
|---|---|---|---|
| Auto-deploy | Git push | Low | Simple projects, fast iteration |
| Webhook | API call | Medium | Triggered after external checks |
| GitHub Actions | Workflow completion | High | Build + test + deploy pipeline |
| Manual API | Developer action | Full | Production releases, rollbacks |
Auto-Deploy
The simplest approach. Coolify redeploys automatically on every push to the configured branch.
Setup
1. Connect repository via GitHub App integration in Coolify dashboard 2. Navigate to application > Advanced > General 3. Enable "Auto Deploy"
Via API
# Enable auto-deploy
curl -s -X PATCH \
-H "Authorization: Bearer $COOLIFY_TOKEN" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{"is_auto_deploy_enabled": true}' \
"$COOLIFY_URL/api/v1/applications/<uuid>"When to Use
- Development and staging environments
- Projects without a test suite or CI pipeline
- Solo developer workflows
- Rapid prototyping
When NOT to Use
- Production with required test gates
- Multi-environment promotion (dev > staging > prod)
- Teams requiring code review before deploy
Webhook Deploy
Trigger deploys programmatically via HTTP. Gives you control over when deployments happen.
Get the Webhook URL
Each application has a unique deploy webhook URL. Find it in the application's Webhook section in the dashboard, or construct it:
# Deploy via UUID endpoint
curl -s \
-H "Authorization: Bearer $COOLIFY_TOKEN" \
"$COOLIFY_URL/api/v1/deploy?uuid=<app-uuid>&force=true"Webhook Secret (Manual Git Providers)
For non-GitHub App integrations, configure a webhook secret:
1. Generate a random secret string 2. Set it in Coolify's application Webhook settings 3. Configure your Git provider to send push webhooks to Coolify's payload URL with the secret
Coolify only processes webhooks with matching secrets.
GitHub Actions Pipeline
The most controlled approach. Build, test, and scan in CI before triggering Coolify deployment.
Basic: Build and Deploy
name: Deploy to Coolify
on:
push:
branches: [main]
env:
REGISTRY: ghcr.io
IMAGE_NAME: ${{ github.repository }}
jobs:
deploy:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- uses: actions/checkout@v6
- name: Login to GHCR
uses: docker/login-action@v3
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Build and push image
uses: docker/build-push-action@v6
with:
push: true
tags: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest
- name: Deploy to Coolify
run: |
curl --fail --request GET \
'${{ secrets.COOLIFY_WEBHOOK }}' \
--header 'Authorization: Bearer ${{ secrets.COOLIFY_TOKEN }}'Required GitHub Secrets
| Secret | Value | Where to Find |
|---|---|---|
COOLIFY_TOKEN | API token with deploy scope | Coolify > Settings > API Tokens |
COOLIFY_WEBHOOK | Per-app deploy webhook URL | Coolify > App > Webhooks |
Advanced: Test, Build, Deploy
name: CI/CD Pipeline
on:
push:
branches: [main]
env:
REGISTRY: ghcr.io
IMAGE_NAME: ${{ github.repository }}
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: actions/setup-node@v6
with:
node-version: 24
cache: pnpm
- run: pnpm install --frozen-lockfile
- run: pnpm test
- run: pnpm lint
build-and-deploy:
needs: test
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- uses: actions/checkout@v6
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to GHCR
uses: docker/login-action@v3
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Build and push
uses: docker/build-push-action@v6
with:
push: true
tags: |
${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest
${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.sha }}
cache-from: type=gha
cache-to: type=gha,mode=max
- name: Deploy to Coolify
run: |
curl --fail --request GET \
'${{ secrets.COOLIFY_WEBHOOK }}' \
--header 'Authorization: Bearer ${{ secrets.COOLIFY_TOKEN }}'Advanced: Update Commit SHA Before Deploy
For pre-built images, update the commit SHA so Coolify pulls the correct version:
- name: Update commit and deploy
run: |
# Update the application to use the new commit
curl --fail -X PATCH \
-H "Authorization: Bearer ${{ secrets.COOLIFY_TOKEN }}" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{"git_commit_sha": "${{ github.sha }}"}' \
"${{ secrets.COOLIFY_URL }}/api/v1/applications/${{ secrets.COOLIFY_APP_UUID }}"
# Trigger deployment
curl --fail \
-H "Authorization: Bearer ${{ secrets.COOLIFY_TOKEN }}" \
"${{ secrets.COOLIFY_URL }}/api/v1/deploy?uuid=${{ secrets.COOLIFY_APP_UUID }}&force=true"Manual API Deploy
For production releases where you want full control:
# Deploy specific commit
curl -s -X PATCH \
-H "Authorization: Bearer $COOLIFY_TOKEN" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{"git_commit_sha": "abc1234"}' \
"$COOLIFY_URL/api/v1/applications/<uuid>"
curl -s -H "Authorization: Bearer $COOLIFY_TOKEN" \
"$COOLIFY_URL/api/v1/deploy?uuid=<uuid>&force=true"
# Rollback to previous commit
curl -s -X PATCH \
-H "Authorization: Bearer $COOLIFY_TOKEN" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{"git_commit_sha": "prev-sha"}' \
"$COOLIFY_URL/api/v1/applications/<uuid>"
curl -s -H "Authorization: Bearer $COOLIFY_TOKEN" \
"$COOLIFY_URL/api/v1/deploy?uuid=<uuid>&force=true"Pre/Post Deployment Commands
Run commands before or after deployment:
curl -s -X PATCH \
-H "Authorization: Bearer $COOLIFY_TOKEN" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"pre_deployment_command": "pnpm db:migrate",
"post_deployment_command": "pnpm db:seed"
}' \
"$COOLIFY_URL/api/v1/applications/<uuid>"Coolify Setup Checklist
1. Enable API access: Settings > Configuration > Advanced > API Access 2. Create API token: Settings > API Tokens (select deploy + needed scopes) 3. Note webhook URL: Application > Webhooks section 4. Add GitHub secrets: COOLIFY_TOKEN and COOLIFY_WEBHOOK 5. Test connection: curl -H "Authorization: Bearer $TOKEN" $URL/api/v1/version
Related skills
FAQ
Is Coolify safe to install?
skills.sh reports 2 of 3 security scanners passed. Review the Security Audits panel on this page before installing in production.