Skip to content

Releases: deziss/conman

v1.2.2 — real type checking, 132 errors fixed

Choose a tag to compare

@anshu8858 anshu8858 released this 21 Sep 05:44

The frontend type check now actually runs — and this release fixes everything it had been silently ignoring.

Conman dashboard

The type check was a no-op

CI's "Type check" step and the build script ran npx tsc --noEmit. --noEmit does not follow project references, and the root tsconfig.json is solution-style ("files": [] plus references) — so it type-checked nothing and always exited 0. Both now run tsc -b.

Running the real check reported 132 errors. All 132 are fixed. Several were genuine defects, not lint noise:

Where What was wrong
ContainerDetails TabType had drifted from the rendered tab list — missing processes and activity, while still declaring a metrics tab no panel renders. It is now derived from CONTAINER_TABS, so the tab bar and the panels cannot diverge again.
Containers The container inspect dialog rendered with no heading — every other page passes title to InspectModal, this call site did not.
StackDetails The Publishers type omitted TargetPort and Protocol, both of which the server sends and the table already tried to render.
ErrorBoundary Accepted no name prop although ContainerLogsPage passed one. Now declared, and included in the console output so you can tell which boundary tripped.
StatsChart The tooltip formatter assumed Recharts always hands it a number; it now narrows the documented number | string | (number | string)[].

Dead code removed

components/ContainerList.tsx and components/Login.tsx (311 lines) are gone. Nothing imported either, and both referenced containerService / authService exports that services/api.ts has not had for some time — so neither could compile. The live login page is pages/Login.tsx.

Also cleared 76 unused imports and locals. Write-only React state (setter still called, value never read) kept its setter and dropped only the unused binding, so render behaviour is unchanged.

vitest 1.6.1 → 5.0.1

vitest 1.x bundled its own nested vite 5, which collided with the project's vite 7 and made vite.config.ts untypeable (Plugin<any>[] is not assignable to PluginOption). The nested copy is gone. src/test/setup.ts now imports @testing-library/jest-dom/vitest, which is what registers the matchers on vitest's expect.

Verified

go vet + go test (backend and agent), npm ci, tsc -b, vitest 10/10, npm run build, and the Dashboard and Containers pages re-rendered against a seeded demo fleet to confirm the state removals changed nothing on screen.

Known issues

ESLint reports 177 problems, mostly @typescript-eslint/no-explicit-any. ESLint is not part of CI and this release does not address it.

Install

git clone --branch v1.2.2 https://github.com/deziss/conman.git
cd conman

export SECRET_KEY=$(openssl rand -hex 32)
export MASTER_API_KEY=$(openssl rand -hex 32)

docker compose -f docker-compose.simple.yml up -d --build

Dashboard on http://localhost:5173, sign in with admin@example.com / admin, and change the password before exposing it to a network.

Full changelog: https://github.com/deziss/conman/blob/v1.2.2/CHANGELOG.md

v1.2.1 — frontend lockfile, CI green

Choose a tag to compare

@anshu8858 anshu8858 released this 21 Sep 05:10

Patch release on top of v1.2.0. Use this tag rather than v1.2.0 — see below.

Conman dashboard

Fixed: the frontend CI job had never actually run

The root .gitignore carried a bare package-lock.json rule, so frontend/package-lock.json was never tracked. The CI frontend job died at actions/setup-node before installing anything:

##[error]Some specified paths were not resolved, unable to cache dependencies.

and npm ci --legacy-peer-deps had no lockfile to install from either. Every run since the workflow was added was green on the backend and agent jobs only, with the frontend job failing in under 10 seconds.

The lockfile is now tracked (yarn.lock and pnpm-lock.yaml stay ignored — this repo uses npm), and CI passes end to end for the first time.

That fix landed one commit after the v1.2.0 tag, so a checkout of v1.2.0 still has no lockfile and cannot npm ci. This release exists to give you a tag that does.

Also in this release

  • VERSION, frontend/package.json, and the APP_CONFIG constants (which the sidebar and About tab read) bumped to 1.2.1
  • README package filenames point at 1.2.1
  • CLAUDE.md documents that tsc -b is required — see below

Still open: the CI type check is a no-op

Unchanged from v1.2.0. The root tsconfig.json is solution-style ("files": [] plus references), and tsc --noEmit does not follow project references, so it type-checks nothing and always exits 0. Both the CI "Type check" step and npm run build (tsc && vite build) pass unconditionally.

Use npx tsc -b locally. It currently reports 132 errors (77 unused-local warnings under noUnusedLocals, plus roughly 13 genuine type errors). Switching CI over is deferred until those are cleared.

Install

git clone --branch v1.2.1 https://github.com/deziss/conman.git
cd conman

export SECRET_KEY=$(openssl rand -hex 32)
export MASTER_API_KEY=$(openssl rand -hex 32)

docker compose -f docker-compose.simple.yml up -d --build

Dashboard on http://localhost:5173, sign in with admin@example.com / admin, and change the password before exposing it to a network.

Full changelog: https://github.com/deziss/conman/blob/v1.2.1/CHANGELOG.md

v1.2.0 — AGPL relicense, dev-server fix, new README

Choose a tag to compare

@anshu8858 anshu8858 released this 21 Sep 04:59

Conman is a self-hosted dashboard for managing containers across many hosts — Docker, Podman, and containerd, from one web UI.

Conman dashboard

Highlights

Relicensed under AGPL-3.0-or-later

Conman was previously declared MIT in the README, with no LICENSE file backing it. This release ships the full GNU Affero General Public License v3.0 text and updates the license field in both .deb/.rpm package definitions.

The network clause applies: if you run a modified Conman and let others use it over a network, you must offer them the source of your modified version.

Fixed: the frontend did not boot in dev mode

verbatimModuleSyntax is enabled, so a type-only specifier written as a value import (import { ReactNode } from 'react') is emitted as a real runtime import. Vite could not resolve those, and npm run dev rendered a blank page:

SyntaxError: The requested module '/src/types/license.ts'
does not provide an export named 'LicenseInfo'

All 20 affected imports now use the type modifier.

Rewritten README

The README now leads with what Conman is for and who it is not for, and includes a feature table, dashboard/containers/hosts screenshots, an edition comparison, and collapsible production install paths.

Known issue: the CI type check is a no-op

The root tsconfig.json is solution-style ("files": [] plus references). tsc --noEmit does not follow project references, so both the CI "Type check" step and npm run build (tsc && vite build) pass unconditionally — which is how the type-import breakage above reached main.

Use npx tsc -b locally. It currently reports 132 remaining errors (77 unused-local warnings under noUnusedLocals, plus roughly 13 genuine type errors). Switching CI over is deferred until those are cleared.

Install

git clone https://github.com/deziss/conman.git
cd conman

export SECRET_KEY=$(openssl rand -hex 32)
export MASTER_API_KEY=$(openssl rand -hex 32)

docker compose -f docker-compose.simple.yml up -d --build

Dashboard on http://localhost:5173, sign in with admin@example.com / admin, and change the password before exposing it to a network.

Building .deb and .rpm packages from source is documented in the README.

Full changelog: https://github.com/deziss/conman/blob/v1.2.0/CHANGELOG.md