---
title: "Coswarm — your servers, one panel, and Cosmo"
description: "Coswarm turns your Linux servers into a Docker Swarm platform: deploys, domains with automatic HTTPS, databases and logs in one panel, free to self-host. Cosmo, its assistant, reads the cluster and proposes changes you approve."
canonical_url: "https://coswarm.dev/"
meta:
  "og:description": "Coswarm turns your Linux servers into a Docker Swarm platform: deploys, domains with automatic HTTPS, databases and logs in one panel, free to self-host. Cosmo, its assistant, reads the cluster and proposes changes you approve."
  "og:image": "https://coswarm.dev/og.png"
  "og:image:alt": "Coswarm: your servers, run like a platform"
  "og:image:height": "630"
  "og:image:width": "1200"
  "og:title": "Coswarm — your servers, one panel, and Cosmo"
  "twitter:description": "A platform on your own servers, with an assistant that knows them."
  "twitter:image": "https://coswarm.dev/og.png"
  "twitter:title": "Coswarm — your servers, one panel, and Cosmo"
---

> Index of every page on this site: [llms.txt](https://coswarm.dev/llms.txt)

[Meet Cosmo, the assistant that knows your cluster](https://coswarm.dev/cosmo)

# Your servers,<br>run like a platform.

Coswarm turns your Linux machines into a Docker Swarm platform: deploys, domains with HTTPS, databases and logs, in one panel. When something breaks, Cosmo finds out why and proposes the fix. You approve it.

$`curl -fsSL https://coswarm.dev/install.sh | bash`

Free to self-host · any Linux server with Docker · run it as root

panel.acme.dev/dashboard

**Overview**

**Cosmo found a problem · Hide**

**checkout is down**

17 min ago

**What was seen**

· 0 of 2 replicas running

· deployed checkout:2.3.0 by Bora, a minute before

Error: DATABASE\_URL is not set

**Why, says Cosmo**

2.3.0 reads its database address from DATABASE\_URL; the service never had it. 2.2.4 built it from DB\_HOST and friends.

**Fix****Set an environment variable on checkout**

DATABASE\_URL — → postgres://checkout:•••@postgres:5432/shop

**Approve**Open the conversation

Services

**11/12**

1 in trouble

CPU · this node

**31%**

load 2.48 · 8 cores

Memory · this node

**58%**

9.3 GB of 16 GB

Requests/min

**642**

48.2k in 24 h

Error rate

**4.1%**

412 5xx since 14:05

Dropped

**1,204**

by the firewall

**Traffic · 24 h**

2xx/3xx4xx5xx

15:0021:0003:0009:0014:20

**Nodes**

3 of 3 ready

**manager-1**

9 tasksLeader

CPU usage31%

Memory usage58%

Limits: 12.5 GB · 6 CPU

**worker-1**

7 tasksworker

Limits: 9.0 GB · 4 CPU

**worker-2**

6 tasksworker

Limits: 22.0 GB · 6 CPU · 1.4× the RAM

|  | **App** | **Image** | **Replicas** | |
| --- | --- | --- | --- | --- |
|  | **checkout** | checkout:2.3.0 | **0/2** | Explain |
|  | **shop** | shop:1.4.2 | **2/2** | |
|  | **api** | api:5.0.1 | **3/3** | |
|  | **postgres** | postgres:17 | **1/1** | |
|  | **plausible** | plausible:2 | **1/1** | |

A picture of the Coswarm dashboard: Cosmo has found that the checkout service is down since a deploy, explains that the new image needs a DATABASE\_URL variable, and proposes setting it, waiting for approval.

**1**

line to install

**65**

apps in the marketplace

**51**

tools Cosmo can use

**14**

WAF rule groups per domain

**$0**

to self-host, for good

Cosmo

## An assistant that knows your cluster.

Cosmo lives in the panel. Ask why something broke and it reads the tasks, the logs and the last change before it answers. Ask for a change and it writes the plan, shows you what moves, and waits.

- **It reads first**

  31 read tools: apps, tasks, logs, versions, domains, traffic, disk. Reading never needs a yes.
- **It proposes, you decide**

  A change is a plan with a diff and a risk level. Nothing runs until you approve that exact plan.
- **Your model, your key**

  OpenAI, Anthropic, OpenRouter, Ollama or any OpenAI-compatible server. Off until you turn it on.

[How Cosmo works](https://coswarm.dev/cosmo)

panel.acme.dev/cosmo

checkout went down after the deploy. Why?

4 reads · 3 s

- Read checkout: 0 of 2 replicas runningget\_app
- Read its tasks: 6 failed, “non-zero exit (1)”get\_app\_tasks
- Read the last 100 log linesget\_app\_logs
- Compared 2.2.4 with 2.3.0diff\_app\_versions

The new image reads its database address from `DATABASE_URL`, and checkout never had it: 2.2.4 built it from `DB_HOST`, `DB_USER` and `DB_PASSWORD`. Every replica exits at start with DATABASE\_URL is not set.

I can put the same address together from the values it already has:

**Set an environment variable on checkout**

set\_app\_env

**Medium risk**

| env DATABASE\_URL | postgres://checkout:•••@postgres:5432/shop |
| --- | --- |

checkout restarts with a rolling update; 2 replicas, one at a time.

Expires in 4:52Reject**Approve**

Approve or reject the proposed change, or write something else.

A conversation: asked why checkout went down, Cosmo reads the app, its tasks, its logs and compares two versions, explains the missing DATABASE\_URL and proposes setting it, waiting for approval.

The panel

## Everything a platform does. On servers you own.

Deploys, the edge, data, logs and a marketplace, built on Docker Swarm, so there is nothing new to run underneath.

[Deployments<h3>**Ship an image. Swarm rolls it out.**</h3>Deploy from any registry, a Compose file or the marketplace. Replicas move to the new version one at a time, and every change is kept with who made it.**shop**shop:1.5.0Updating · 1 of 2shop.1shop:1.5.0running42 sshop.2shop:1.5.0starting3 sshop.2shop:1.4.2stops next6 d**History**deployshop:1.4.2 → 1.5.0nowenvSTRIPE\_MODE changed2 dscale1 → 2 replicas6 d](https://coswarm.dev/features/deployments)

[Domains & edge<h3>**Domains with HTTPS, guarded at the edge.**</h3>Coswarm’s own proxy routes every host to its service, gets certificates from Let’s Encrypt and filters traffic with Coraza and the OWASP Core Rule Set. shop.acme.dev → shop · Let’s Encrypt · 74 dWAFHTTPS redirect api.acme.dev → api · Let’s Encrypt · 61 dWAFgRPC admin.acme.dev → backoffice · Uploaded · 12 dIP allowlistBasic auth grafana.acme.dev → grafana · Let’s Encrypt · 88 dIP allowlist](https://coswarm.dev/features/networking)

[Databases<h3>**Your databases, in the browser.**</h3>Connect to PostgreSQL, MySQL and Redis running beside your apps in one click, then query them, edit them and keep an eye on their keys.select id, email, status, total  
from orders order by id desc limit 50;

| **id** | **email** | **status** | **total** |
| --- | --- | --- | --- |
| 1042 | ada@acme.dev | paid | € 129.00 |
| 1041 | bora@acme.dev | paid | € 54.90 |
| 1040 | cem@acme.dev | refunded | € 18.00 |
| 1039 | deniz@acme.dev | paid | € 240.00 | 4 of 18,240 rows · 12 ms](https://coswarm.dev/features/databases)

[Observability<h3>**Know what broke before anyone asks.**</h3>Live logs, incidents, traffic and findings the server spots on its own, with an Explain button wherever something went wrong. checkout error, warn1 hlive14:05:12infoGET /api/cart 200 18ms14:05:13infoGET /api/products?page=2 200 31ms14:05:15warnstripe: webhook retry 2/5 for evt\_3Pq…14:05:16errorPOST /api/checkout 502 upstream connect error Explain14:05:16infoGET /healthz 200 1ms14:05:18errorcheckout: dial tcp 10.0.1.14:8080: connection refused](https://coswarm.dev/features/observability)

[Marketplace<h3>**65 self-hosted apps, one click each.**</h3>Databases, analytics, developer tools, chat, media and more, as templates that set up the service, its volumes and its secrets on your own servers.**PostgreSQL**Database**Grafana**Monitoring**n8n**Automation**Gitea**DevOps**Nextcloud**Files**Ghost**CMS**Redis**Database**Plausible**Analytics**Uptime Kuma**Monitoring](https://coswarm.dev/features/marketplace)

[Automation<h3>**Deploys that run themselves.**</h3>A deploy token per app for your CI, a GitHub Action that uses it, updates rolled out in bulk, and Cosmo checking for newer images on any registry..github/workflows/deploy.yml```
- name: Coswarm Deploy
  uses: kintsdev/coswarm-deploy@v1.0.8
  with:
    base-url: https://panel.acme.dev
    token: ${{ secrets.COSWARM_TOKEN }}
    image: ghcr.io/acme/shop:${{ github.ref_name }}
    github-token: ${{ github.token }}
```shop rolled out· 2 of 2 replicas · 41 s](https://coswarm.dev/features/ci-cd)

Approvals

## Nothing changes without a yes.

The same rules hold for people and for Cosmo: permissions checked when a change is planned and again when it runs, and the areas you care about held for a second person.

01

**A plan, not a guess**

Every change is first written as a plan with no side effects: what moves, from what to what, and how risky it is.

02

**A yes for that plan**

An approval is single-use, yours alone, valid for minutes, and bound to the plan. If anything changed meanwhile, nothing runs.

03

**A second pair of eyes**

Switch on four-eyes approval for roles, users, apps, domains, secrets or settings, and changes there wait for someone else.

04

**A record of it all**

Who asked, who approved, what ran: in the activity log, filterable and grouped by day.

panel.acme.dev/approvals/184

**Waiting for approval**

**Update domain admin.acme.dev**

B Bora asked 4 minutes ago · area: domains

FieldChange

ip\_allowlist~~10.0.0.0/8~~ → 10.0.0.0/8, 85.105.12.4

basic\_auth~~on~~ → off

waf.rules~~sqli, xss, rce~~ → sqli, xss, rce, scanner

Turning basic auth off opens the page to anyone on the allowlist.

Expires in 6 days · nobody approves their ownReject**Approve**

Install

## From a bare server to a platform in minutes.

Coswarm runs on the servers you already have. More of them join as Swarm nodes with the token the panel shows you.

1. 1

   **Run one line**

   On a Linux server with Docker, as root. It sets up Swarm, an encrypted overlay network, the panel, the proxy and its database.

   curl -fsSL https://coswarm.dev/install.sh | bash
2. 2

   **Answer four questions**

   Your domain, the panel’s subdomain, how Let’s Encrypt should check it, and the admin’s email. Point the DNS at the server.

   panel.acme.dev → 203.0.113.10
3. 3

   **Sign in and ship**

   Open the panel over HTTPS, change the first password, and deploy your first image or a marketplace app.

   https://panel.acme.dev

$`curl -fsSL https://coswarm.dev/install.sh | bash`

Needs Docker, root and a public IPv4 address. [Read the script](https://coswarm.dev/install.sh) before you run it.

Compare

## The platform part, without the Kubernetes part.

Swarm is simpler to run than Kubernetes and does less. Coswarm adds what Swarm leaves to you, and says plainly where Kubernetes still goes further.

| Topic | Coswarm | Kubernetes | Docker Swarm alone |
| --- | --- | --- | --- |
| Getting started | One line, a few questions | A cluster, an ingress, cert-manager, a dashboard… | docker swarm init, then the CLI |
| What you learn | Apps, domains, projects | Pods, deployments, services, ingress, CRDs | Stacks and the Docker CLI |
| Web panel | Built in | Add-ons | None |
| HTTPS | Automatic, Let’s Encrypt | cert-manager | Up to you |
| Web application firewall | Per domain, OWASP CRS | Add-on | Up to you |
| Databases in the browser | PostgreSQL, MySQL, Redis | Separate tools | Separate tools |
| Approvals and audit | Four-eyes areas, activity log | GitOps, admission policies | None |
| AI assistant | Cosmo, every change approved | — | — |

[The full comparison](https://coswarm.dev/compare)

FAQ

## Questions, answered.

[All questions](https://coswarm.dev/faq)

<details>

<summary>**What is Coswarm? **

</summary>

A self-hosted platform on Docker Swarm. It gives your own servers what a hosted platform gives you: deploys with rollouts, domains with automatic HTTPS and a firewall, a database tool, logs and a marketplace of apps, in one web panel. Cosmo, its assistant, can explain what went wrong and propose fixes you approve.

</details>

<details>

<summary>**What do I need to run it? **

</summary>

A Linux server with Docker installed, root access, a public IPv4 address and a domain you can point at it. The install script sets up Swarm and everything else. More servers join as Swarm nodes with the token the panel shows you.

</details>

<details>

<summary>**Is it really free? **

</summary>

Yes. Self-hosting Coswarm costs nothing, with every feature and no limits on apps, nodes or users. If your organisation wants help with setup, architecture or support, write to us.

</details>

<details>

<summary>**Do I have to use Cosmo? **

</summary>

No. Cosmo is off until an administrator turns it on and sets up a model provider, and the panel works fully without it. You can also let it read only, so it explains but never changes anything.

</details>

<details>

<summary>**Which models does Cosmo work with? **

</summary>

OpenAI, Anthropic and OpenRouter with your own key, Ollama on your own hardware, or any OpenAI-compatible server such as vLLM, LM Studio or LiteLLM. A model has to pass a check that it can call tools before it is used. Keys are stored encrypted and never sent back to the browser.

</details>

<details>

<summary>**What does Cosmo send to the model provider? **

</summary>

Your messages and what Cosmo reads to answer them. Passwords, tokens and keys are masked before anything leaves the server, and values you paste become placeholders the server fills in, so the model never sees them. With Ollama, nothing leaves your network.

</details>

## Your servers are waiting.

One command, a minute or so, and the panel is on your domain. Free, and yours to keep.

$`curl -fsSL https://coswarm.dev/install.sh | bash`

[See the panel](https://coswarm.dev/features) [ Meet Cosmo](https://coswarm.dev/cosmo)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://coswarm.dev/#organization","name":"Kints","url":"https://coswarm.dev","logo":"https://coswarm.dev/android-chrome-512x512.png","contactPoint":{"@type":"ContactPoint","email":"contact@coswarm.dev","contactType":"sales"}},{"@type":"WebSite","@id":"https://coswarm.dev/#website","url":"https://coswarm.dev","name":"Coswarm","description":"Coswarm turns your Linux servers into a Docker Swarm platform: deploys, domains with automatic HTTPS, databases and logs in one panel, free to self-host. Cosmo, its assistant, reads the cluster and proposes changes you approve.","publisher":{"@id":"https://coswarm.dev/#organization"},"inLanguage":"en"},{"@type":"SoftwareApplication","@id":"https://coswarm.dev/#software","name":"Coswarm","description":"Coswarm turns your Linux servers into a Docker Swarm platform: deploys, domains with automatic HTTPS, databases and logs in one panel, free to self-host. Cosmo, its assistant, reads the cluster and proposes changes you approve.","applicationCategory":"DeveloperApplication","operatingSystem":"Linux","url":"https://coswarm.dev","image":"https://coswarm.dev/og.png","softwareRequirements":"Linux, Docker Engine","offers":{"@type":"Offer","price":"0","priceCurrency":"USD"},"author":{"@id":"https://coswarm.dev/#organization"}},{"@type":"FAQPage","mainEntity":[{"@type":"Question","name":"What is Coswarm?","acceptedAnswer":{"@type":"Answer","text":"A self-hosted platform on Docker Swarm. It gives your own servers what a hosted platform gives you: deploys with rollouts, domains with automatic HTTPS and a firewall, a database tool, logs and a marketplace of apps, in one web panel. Cosmo, its assistant, can explain what went wrong and propose fixes you approve."}},{"@type":"Question","name":"What do I need to run it?","acceptedAnswer":{"@type":"Answer","text":"A Linux server with Docker installed, root access, a public IPv4 address and a domain you can point at it. The install script sets up Swarm and everything else. More servers join as Swarm nodes with the token the panel shows you."}},{"@type":"Question","name":"Is it really free?","acceptedAnswer":{"@type":"Answer","text":"Yes. Self-hosting Coswarm costs nothing, with every feature and no limits on apps, nodes or users. If your organisation wants help with setup, architecture or support, write to us."}},{"@type":"Question","name":"Do I have to use Cosmo?","acceptedAnswer":{"@type":"Answer","text":"No. Cosmo is off until an administrator turns it on and sets up a model provider, and the panel works fully without it. You can also let it read only, so it explains but never changes anything."}},{"@type":"Question","name":"Which models does Cosmo work with?","acceptedAnswer":{"@type":"Answer","text":"OpenAI, Anthropic and OpenRouter with your own key, Ollama on your own hardware, or any OpenAI-compatible server such as vLLM, LM Studio or LiteLLM. A model has to pass a check that it can call tools before it is used. Keys are stored encrypted and never sent back to the browser."}},{"@type":"Question","name":"What does Cosmo send to the model provider?","acceptedAnswer":{"@type":"Answer","text":"Your messages and what Cosmo reads to answer them. Passwords, tokens and keys are masked before anything leaves the server, and values you paste become placeholders the server fills in, so the model never sees them. With Ollama, nothing leaves your network."}}]}]}
```

```json
{"@context":"https://schema.org","@graph":[{"@id":"https://coswarm.dev/#website","@type":"WebSite","description":"Coswarm turns your Linux servers into a Docker Swarm platform: deploys, domains with automatic HTTPS, databases and logs in one panel, free to self-host. Cosmo, its assistant, reads the cluster and proposes changes you approve.","name":"Coswarm","url":"https://coswarm.dev/"},{"@id":"https://coswarm.dev/#webpage","@type":"WebPage","description":"Coswarm turns your Linux servers into a Docker Swarm platform: deploys, domains with automatic HTTPS, databases and logs in one panel, free to self-host. Cosmo, its assistant, reads the cluster and proposes changes you approve.","name":"Coswarm — your servers, one panel, and Cosmo","url":"https://coswarm.dev/","isPartOf":{"@id":"https://coswarm.dev/#website"},"potentialAction":[{"@type":"ReadAction","target":["https://coswarm.dev/"]}]}]}
```

## Sitemap

See the full [sitemap](https://coswarm.dev/sitemap.md) for all pages.
