Tomas DvorakandDevin e57f0470eb feat(canvas): fullscreen Railway-style workspace canvas
Rebuild the project canvas as a full-viewport graph instead of a boxed
66vh panel. Slim workspace top bar now holds the view tabs, project meta
and actions; the canvas fills all remaining space.

- Floating glass controls: env filter + group pill (top-left), zoom out /
  live zoom % / zoom in / fit / tidy pill (bottom-left), dark MiniMap
  (bottom-right), hint chip, demo badge.
- Inspector panel: selecting a node opens a right-side glass panel with
  status, image, address, inferred connections incl. variable reasons,
  and deploy/restart/stop/delete actions. Esc or pane click closes.
- Auto-layout: dependency-depth layered layout (consumers left,
  datastores right) for first-visit placement and the Tidy action.
  Unpositioned services park right of existing bounds, not at (0,0).
- Nodes: fixed 240px width (was 210 vs 220-280 CSS mismatch), per-type
  icons/colors incl. cron, spinner icon while deploying, hover lift.
- Edges: lime bezier strokes, animated dashes while either endpoint is
  deploying, hover glow updated from stale purple to accent.
- Groups: off-brand crimson replaced with accent tokens, double-click
  title to rename inline.
- Keyboard: F fit, 0 reset zoom, +/- zoom, Esc deselect. Marquee select
  on Shift-drag. Double-click zoom disabled, dead connection drags off.
- Mobile: icon-only tabs, minimap/hint hidden under md.
- Retake docs/screenshots/canvas.png + site copy (1600x900 demo).

Authored By: TDvorak <[email protected]>

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-09-23 17:00:50 +02:00
2026-04-10 12:02:36 +02:00
2026-04-10 12:02:36 +02:00
2026-04-10 12:02:36 +02:00
2026-04-10 12:02:36 +02:00
2026-04-10 12:02:36 +02:00

Containr

Containr

Self-hosted platform for deploying and managing containerized services. Railway-style project canvases on your own hardware.

Quick Start • Screenshots • Features • Guides • Contributing

CI License: MIT

Containr is an open-source control plane for Docker. Create a project, drop services onto a visual canvas, wire them together with environment variables, and deploy — no Kubernetes, no cloud bill. Services appear as nodes with auto-inferred connections; logs, metrics, builds, and rollbacks are one click away.

The platform doubles as a public showcase: visitors browse approved projects and the template catalog without an account, while owners manage everything behind sign-in and a platform admin approves, curates, and moderates from a dedicated console.

Screenshots

Projects dashboard Project canvas
Projects dashboard with host telemetry Visual service canvas with two services
Service detail Managed databases
Service view with metrics, logs and config tabs Managed database list showing a running PostgreSQL

Features

  • Project canvas — visual service topology, groups, drag/drop, auto-inferred connections, right-click lifecycle actions
  • Public project catalog — approved projects are browsable anonymously; new projects stay private until an admin approves them
  • Admin console (/admin) — platform stats, project approval/edit/delete, user admin management
  • Private networking — every project gets an isolated Docker network; services reach each other by name (web:3000) and share variables via ${{service.KEY}} references
  • Deployments & builds — Docker deploys with history, image rollback, live build status
  • Runtime — replicas, published ports, domains, health checks, restart policies; start/stop/restart/redeploy from canvas or service page
  • Git integration — GitHub, GitLab, Bitbucket, Gitea; webhooks, GitHub App
  • Managed databases — create PostgreSQL, MySQL, MariaDB, MongoDB, Redis, Dragonfly, or ClickHouse directly from /databases, with backup/restore
  • Template catalog — 30 official templates (NocoDB, Plausible, MinIO, n8n, …) plus user-defined templates with JSON upload and owner-scoped edit/delete
  • Metrics — per-service Docker stats plus host CPU/memory/disk telemetry
  • HA & scaling — failover policies, node agents, autoscaling rules
  • Auth & security — Better Auth sessions (email/password self-hosted), audit logs, vulnerability scans
  • Integrated docs — searchable documentation rendered in-app on the landing page and /docs; syncs from GitHub, falls back to a bundled snapshot offline
  • Networking — Traefik reverse proxy, optional Cloudflare Tunnel

Access model

Audience Can do
Anonymous Browse approved projects, services, templates, databases, HA status, docs
Signed-in user Create/manage own projects, services, databases, templates; view own logs, variables, builds, deployments
Admin Everything above plus project approval/moderation, user admin flags, HA manager controls, agent tokens, platform settings

Logs, variables, exec consoles, and database connection URLs are never public — they require owner, member, or admin access regardless of a project's public visibility.

Quick Start

Requires Docker with the Compose plugin, openssl, and curl:

curl -fsSL https://raw.githubusercontent.com/Dvorinka/Containr/main/install.sh | bash

Installs into ./containr, generates secrets, pulls the published :latest images, and starts the stack — UI at http://localhost:3000, API at http://localhost:8082. Non-interactive; re-runs never overwrite .env.

The platform admin is provisioned at startup from environment variables:

ADMIN_EMAIL=[email protected]
ADMIN_PASSWORD=<generated>   # keep in a local untracked file
ADMIN_NAME=Your Name         # optional

Both the local account and the Better Auth session account are created, so either sign-in path works. Without ADMIN_*, the first registered account becomes owner; registration then closes automatically. The owner can reopen it and configure a Cloudflare Tunnel token under Settings → Platform — in-app values override env vars.

Override install defaults with env vars:

curl -fsSL https://raw.githubusercontent.com/Dvorinka/Containr/main/install.sh | \
  HTTP_PORT=8080 CONTAINR_DIR=/opt/containr bash

CONTAINR_VERSION pins a release tag, CONTAINR_REF selects the git ref for downloaded files, CONTAINR_BUILD=1 builds from source. From a git checkout, ./install.sh installs in place; plain docker compose up -d pulls the same images (--build to compile locally).

Local development and self-hosted deployment (Traefik + Cloudflare Tunnel): see docs/guides/ and infra/docker-compose.yml.

Architecture

app/frontend/   React 19 + Vite + TypeScript + Tailwind + React Flow
app/backend/    Go API (Gin) · PostgreSQL · Dragonfly · Docker SDK · Better Auth sidecar
infra/          Self-hosted compose: Traefik + Cloudflare Tunnel
docs/           Guides, OpenAPI spec, design documents

All configuration is via environment variables — see .env.example. Never commit .env or .env.prod; keep generated admin credentials in a local untracked file (e.g. admin-credentials.local). If a secret was ever committed, rotate it.

Documentation

  • In-app: the landing page and /docs render searchable docs — synced from this repository, with a bundled snapshot so they are never blank offline
  • docs/guides/ — setup, deployment, Cloudflare, autoscaling
  • docs/api/openapi.yaml — API contract
  • docs/developers/onboarding.md — contributor onboarding
  • make help — common tasks

Contributing · Security · MIT License © 2026 Tomas Dvorak

S
Description
No description provided
Readme MIT
44 MiB
0 Stars 1 Watchers 0 Forks
Languages
Go 46.4%
TypeScript 44.2%
PLpgSQL 4.2%
CSS 1.9%
Shell 1.7%
Other 1.4%