{ "slug": "arcane", "kind": "compose", "metadata": { "name": "Arcane", "description": "Modern self-hosted Docker management UI for containers, images, volumes, networks, Docker Compose projects, and remote environments.", "tags": [ "docker", "management", "traefik" ], "icon": { "provider": "selfhst", "id": "arcane", "color": "violet" }, "draft": false, "version": { "name": "v2.1.0", "source_dep_name": "ghcr.io/getarcaneapp/manager", "source_dep_version": "v2.1.0" } }, "variables": [ { "title": "General", "name": "general", "items": [ { "name": "service_name", "type": "str", "title": "Service Name", "required": false, "config": { "placeholder": "arcane" } }, { "name": "container_name", "type": "str", "title": "Container Name", "required": false, "config": { "placeholder": "arcane" } }, { "name": "app_url", "type": "str", "title": "Application URL", "required": true, "default": "http://localhost:3552", "config": { "placeholder": "https://arcane.example.com" } }, { "name": "container_timezone", "type": "str", "title": "Container Timezone", "required": false, "config": { "placeholder": "Europe/Berlin" } }, { "name": "restart_policy", "type": "enum", "title": "Restart Policy", "required": true, "default": "unless-stopped", "config": { "options": [ "unless-stopped", "always", "on-failure", "no" ] } }, { "name": "puid", "type": "int", "title": "PUID", "required": false, "config": { "placeholder": "1000" } }, { "name": "pgid", "type": "int", "title": "PGID", "required": false, "config": { "placeholder": "1000" } }, { "name": "docker_socket_path", "type": "str", "title": "Docker Socket Path", "required": true, "default": "/var/run/docker.sock", "config": { "placeholder": "/var/run/docker.sock" } }, { "name": "analytics_enabled", "type": "bool", "title": "Enable Analytics", "required": false } ] }, { "title": "Advanced", "name": "advanced", "items": [ { "name": "project_mount_path", "type": "str", "title": "Project Mount Path", "required": false, "description": "Optional host path mounted to /app/data/projects for Arcane project/Compose stack storage. Leave empty to skip this mount.", "config": { "placeholder": "/path/to/projects" } }, { "name": "builds_mount_path", "type": "str", "title": "Builds Mount Path", "required": false, "description": "Optional host path mounted to /builds for Arcane build workspace files. Leave empty to skip this mount.", "config": { "placeholder": "/path/to/builds" } }, { "name": "backups_mount_path", "type": "str", "title": "Backups Mount Path", "required": false, "description": "Optional host path mounted to /backups for Arcane volume backups. Leave empty to skip this mount.", "config": { "placeholder": "/path/to/backups" } } ] }, { "title": "Secrets", "name": "secrets", "items": [ { "name": "encryption_key", "type": "secret", "title": "Encryption Key", "required": true, "description": "Arcane ENCRYPTION_KEY. It must be 32 bytes; a 64-character hex value from `openssl rand -hex 32` is recommended.", "config": { "autogenerated": { "length": 64 } } }, { "name": "jwt_secret", "type": "secret", "title": "JWT Secret", "required": true, "config": { "autogenerated": { "length": 64 } } } ] }, { "title": "Storage", "name": "storage", "items": [ { "name": "volume_mode", "type": "enum", "title": "Volume Mode", "required": false, "default": "local", "config": { "options": [ "local", "mount", "nfs" ] } }, { "name": "volume_mount_path", "type": "str", "title": "Data Mount Path", "required": false, "default": "", "needs": [ "volume_mode=mount" ], "config": { "placeholder": "/opt/arcane/data" } }, { "name": "volume_nfs_server", "type": "str", "title": "NFS Server", "required": false, "default": "", "needs": [ "volume_mode=nfs" ], "config": { "placeholder": "nas.home.arpa" } }, { "name": "volume_nfs_path", "type": "str", "title": "NFS Path", "required": false, "default": "", "needs": [ "volume_mode=nfs" ], "config": { "placeholder": "/export/app" } }, { "name": "volume_nfs_options", "type": "str", "title": "NFS Options", "required": false, "default": "rw", "needs": [ "volume_mode=nfs" ], "config": { "placeholder": "rw" } } ] }, { "title": "Traefik", "name": "traefik", "toggle": "traefik_enabled", "items": [ { "name": "traefik_enabled", "type": "bool", "title": "Traefik", "required": false, "default": false }, { "name": "traefik_host", "type": "str", "title": "Host", "required": true, "config": { "placeholder": "arcane" } }, { "name": "traefik_domain", "type": "str", "title": "Domain", "required": true, "config": { "placeholder": "home.arpa" } }, { "name": "traefik_entrypoint", "type": "str", "title": "Entrypoint", "required": true, "default": "web", "config": { "placeholder": "web" } }, { "name": "traefik_network", "type": "str", "title": "Network", "required": true, "default": "traefik", "config": { "placeholder": "traefik" } }, { "name": "traefik_tls_enabled", "type": "bool", "title": "TLS", "required": false, "default": false }, { "name": "traefik_tls_entrypoint", "type": "str", "title": "TLS Entrypoint", "required": true, "default": "websecure", "needs": [ "traefik_tls_enabled=true" ], "config": { "placeholder": "websecure" } }, { "name": "traefik_tls_certresolver", "type": "str", "title": "Cert Resolver", "required": true, "default": "cloudflare", "needs": [ "traefik_tls_enabled=true" ], "config": { "placeholder": "cloudflare" } } ] }, { "title": "Ports", "name": "ports", "items": [ { "name": "ports_http", "type": "int", "title": "HTTP Port", "required": false, "default": 3552, "needs": [ "traefik_enabled=false" ], "config": { "placeholder": "3552" } } ] }, { "title": "OIDC Single Sign-On", "name": "oidc", "toggle": "oidc_enabled", "items": [ { "name": "oidc_enabled", "type": "bool", "title": "OIDC", "required": false, "default": false }, { "name": "oidc_client_id", "type": "str", "title": "Client ID", "required": true, "needs": [ "oidc_enabled=true" ] }, { "name": "oidc_client_secret", "type": "secret", "title": "Client Secret", "required": true, "needs": [ "oidc_enabled=true" ] }, { "name": "oidc_issuer_url", "type": "str", "title": "Issuer URL", "required": true, "description": "Issuer URL of your OIDC provider. Arcane's docs recommend no trailing slash.", "needs": [ "oidc_enabled=true" ], "config": { "placeholder": "https://auth.example.com/application/o/arcane" } }, { "name": "oidc_provider_name", "type": "str", "title": "Provider Name", "required": false, "needs": [ "oidc_enabled=true" ], "config": { "placeholder": "My Identity Provider" } }, { "name": "oidc_scopes", "type": "str", "title": "Scopes", "required": false, "description": "Optional OIDC scopes to request. Arcane defaults to openid email profile if unset; include your groups scope when using group mappings.", "needs": [ "oidc_enabled=true" ], "config": { "placeholder": "openid email profile groups" } }, { "name": "oidc_groups_claim", "type": "str", "title": "Groups Claim", "required": false, "needs": [ "oidc_enabled=true" ], "config": { "placeholder": "groups" } }, { "name": "oidc_role_mappings", "type": "str", "title": "Role Mappings", "required": false, "description": "Optional JSON array for OIDC group-to-role mappings, for example [{\"claimValue\":\"docker-admins\",\"roleId\":\"role_admin\"}].", "needs": [ "oidc_enabled=true" ] } ] } ] }