Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
90 commits
Select commit Hold shift + click to select a range
9dd5824
feat(plugins): Implement plugin repository management and verificatio…
Its4Nik Dec 24, 2025
410633b
refactor(plugins): Standardize plugin hooks API response and verifica…
Its4Nik Dec 24, 2025
9d87757
chore(ci): Lint [skip ci]
Its4Nik Dec 24, 2025
91cca53
Fix type inference, Docker build, and add manual plugin addition to v…
Copilot Dec 25, 2025
a73e755
feat(sqlite-wrapper): Introduce automatic JSON/Boolean type detection…
Its4Nik Dec 29, 2025
d875021
feat(sqlite-wrapper): Implement v1.3 features and architectural impro…
Its4Nik Dec 29, 2025
58ce137
chore(deps): Bump @dockstat/sqlite-wrapper to 1.3.0
Its4Nik Dec 29, 2025
8efbcb0
feat(docker): Introduce host reachability API and UI
Its4Nik Dec 29, 2025
3fd6c13
refactor(core): streamline plugin management, improve worker communic…
Its4Nik Dec 29, 2025
284e0ad
feat(sync): Add --force option to bypass mtime comparison
Its4Nik Dec 29, 2025
625cb85
chore(cleanup): Remove weird copy artifact :shrug:
Its4Nik Dec 29, 2025
5d35ac1
feat(dockstat): Add server startup ASCII art banner
Its4Nik Dec 29, 2025
f7fd98b
refactor(docker-client): Consolidate monitoring options and enhance w…
Its4Nik Dec 29, 2025
6a23a0c
feat(docker-client): Enhance logging for errors and verbosity control
Its4Nik Dec 29, 2025
b29af9a
feat(plugins): Implement type-safe builder and remove bundled defaults
Its4Nik Dec 30, 2025
09db3cf
feat(dockstore, dockmon): Simplify and update plugin building; Defaul…
Its4Nik Dec 30, 2025
8135a0c
feat(dockstore): Implement automated README generation and content en…
Its4Nik Dec 30, 2025
ec2c095
feat(plugins): Introduce extensions browser and enhance plugin overview
Its4Nik Dec 30, 2025
767b916
Rebuild DockStat frontend as Vite SPA with typed API client (#33)
Its4Nik Dec 30, 2025
0f753c1
feat(ui, api): Introduce dynamic sidebar navigation and accurate API …
Its4Nik Dec 31, 2025
d1a2039
perf(api): Remove artificial delay from status endpoint
Its4Nik Dec 31, 2025
41c39f3
feat(dockstat): Display backend and service status badges; add main c…
Its4Nik Dec 31, 2025
65d7abe
feat(system): Implement live backend RSS memory display and configura…
Its4Nik Jan 1, 2026
da2515f
fix(dockstat): Ensure proper WebSocket subscription cleanup for RSS feed
Its4Nik Jan 1, 2026
fb287e7
refactor(imports): Standardize import order
Its4Nik Jan 1, 2026
07c0554
feat(api, logger, ui, dockstat): Implement real-time logs and enhance…
Its4Nik Jan 1, 2026
48937a6
refactor(imports): Reorder and sort imports
Its4Nik Jan 1, 2026
d8b586f
feat(docs): Introduce frontend patterns and refactor plugin-handler d…
Its4Nik Jan 1, 2026
6d77809
feat(outline-sync): Enhance configuration loading and sync logic
Its4Nik Jan 1, 2026
7604535
feat(outline-sync): Add force push and verify commands
Its4Nik Jan 1, 2026
2b4c6d1
feat(outline-sync): Record explicit local mtime and frontmatter times…
Its4Nik Jan 1, 2026
a05950f
docs(readme): Overhaul documentation for v1.3.0 release
Its4Nik Jan 1, 2026
b3f0f4b
chore(fix): Fix build to dist folder
Its4Nik Jan 1, 2026
23f7cb2
Merge branch 'main' into dev
Its4Nik Jan 1, 2026
91006b0
feat(outline-sync): Add init command; streamline config parsing
Its4Nik Jan 1, 2026
a5e541c
chore(ci): Stage linter changes before commit
Its4Nik Jan 1, 2026
ec707b1
chore(ci): Lint [skip ci]
Its4Nik Jan 1, 2026
0eef3d7
refactor(sync): Use Number.isNaN and template literals
Its4Nik Jan 1, 2026
ff78c6f
refactor(docs): Enhance project overview and structure in README
Its4Nik Jan 1, 2026
955e359
docs(README): Update logo and enhance navigation with shield badges
Its4Nik Jan 1, 2026
f038e9c
docs(readme): Improve badge presentation and layout
Its4Nik Jan 1, 2026
33200ce
chore(bun.lock): Remove @dockstat/create-rr-elysia package and regene…
Its4Nik Jan 1, 2026
025d95d
docs(readme): Standardize internal anchor links
Its4Nik Jan 1, 2026
c79cb22
docs(update): Update a coupple of documentation files
Its4Nik Jan 2, 2026
4d76cc5
feat(logging, db, sqlite-wrapper): Enhance logging system with unifie…
Its4Nik Jan 2, 2026
6b292f9
refactor(table): Migrate styling to CSS variables
Its4Nik Jan 2, 2026
2d7e6e4
feat(client-management): Introduce Clients & Workers management page
Its4Nik Jan 2, 2026
0d2b66f
feat(client): Introduce and display host reachability status
Its4Nik Jan 2, 2026
c779e4c
refactor(imports): Standardize import order
Its4Nik Jan 3, 2026
af51010
40 uiux implement page pins (#41)
Its4Nik Jan 4, 2026
822558c
feat(core, ui): Enhance logging, refine theming, and improve UI struc…
Its4Nik Jan 4, 2026
6425e30
feat(plugins): Implement dynamic frontend pages
Its4Nik Jan 4, 2026
baeae33
refactor(dockstat): Update imports to use path aliases
Its4Nik Jan 4, 2026
37b047d
chore(ci): Lint [skip ci]
Its4Nik Jan 4, 2026
5a47c1f
feat(api, ui, logger): Implement repository CRUD and centralized logging
Its4Nik Jan 5, 2026
34c34a1
Merge branch 'dev' of github.com:Its4Nik/DockStat into dev
Its4Nik Jan 5, 2026
fd9cd1f
refactor(core): Refactor plugin page logic and SQLite logger integration
Its4Nik Jan 5, 2026
6d99721
feat(plugins): Implement extensions page with plugin browsing and ins…
Its4Nik Jan 5, 2026
71d0b69
chore(ci): Lint [skip ci]
Its4Nik Jan 5, 2026
10c6775
feat(extensions): Implement plugin deletion and auto-bundle fetching
Its4Nik Jan 5, 2026
658ef34
build(plugin-bundler): Standardize plugin output to index.js
Its4Nik Jan 5, 2026
e2e372d
style(formatting): reorder import/export statements and remove duplic…
Its4Nik Jan 5, 2026
522453a
chore(ci): Lint [skip ci]
Its4Nik Jan 5, 2026
5a5ca5f
feat(dockstore): Enable DockMon plugin via manifest and fix module im…
Its4Nik Jan 5, 2026
c3983c7
Merge branch 'dev' of github.com:Its4Nik/DockStat into dev
Its4Nik Jan 5, 2026
1cb9fcb
fix(bundler): Remove import.meta from dynamic plugin import
Its4Nik Jan 5, 2026
606982d
style(schema): Reformat plugin-meta JSON schema
Its4Nik Jan 5, 2026
aa8faf3
chore(ci): Lint [skip ci]
Its4Nik Jan 5, 2026
6545df6
feat(plugin-page): Redesign loading, error, and empty states
Its4Nik Jan 5, 2026
02302c9
Merge branch 'dev' of github.com:Its4Nik/DockStat into dev
Its4Nik Jan 5, 2026
0a9271d
chore(ci): Lint [skip ci]
Its4Nik Jan 5, 2026
4a9b802
feat(plugins, ui): Add frontend plugin route navigation and `Slides` …
Its4Nik Jan 5, 2026
e137676
Merge branch 'dev' of github.com:Its4Nik/DockStat into dev
Its4Nik Jan 5, 2026
5ad7ace
chore(ci): Lint [skip ci]
Its4Nik Jan 5, 2026
d60f106
feat(plugins): Implement plugin unloading and revamp frontend routing UX
Its4Nik Jan 6, 2026
2262712
refactor(extensions): Isolate plugin browser into dedicated route and…
Its4Nik Jan 6, 2026
e2807f7
chore(ci): Lint [skip ci]
Its4Nik Jan 6, 2026
ea7d2d5
fix(extensions): Correct 'Managa' typo in comment
Its4Nik Jan 6, 2026
bd966bf
Merge branch 'dev' of github.com:Its4Nik/DockStat into dev
Its4Nik Jan 6, 2026
4db6239
refactor(plugins): use Blob URLs for plugin loading and eager initial…
Its4Nik Jan 6, 2026
35bd886
feat(plugin-verification): Implement plugin verification system
Its4Nik Jan 6, 2026
06b1610
refactor(monorepo): Standardize verification app package name
Its4Nik Jan 6, 2026
5bc85fe
feat(dockstat): Add custom toast notifications and global error alert…
Its4Nik Jan 7, 2026
0028858
feat(plugins): Add UI feedback for plugin operations and refactor han…
Its4Nik Jan 7, 2026
4a21224
feat(plugin-management): Streamline plugin lifecycle with auto-load/u…
Its4Nik Jan 7, 2026
cc3e69b
Fix sidebar plugin links (#54)
Its4Nik Jan 8, 2026
03bef8d
feat(client-management): Implement Docker client and host configuration
Its4Nik Jan 8, 2026
ac5928d
chore(ci): Lint [skip ci]
Its4Nik Jan 8, 2026
36e0790
UI slider animation update (#56)
Its4Nik Jan 8, 2026
6e89df8
refactor(page-heading): Use useEffect for setting page titles (#58)
Its4Nik Jan 8, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
206 changes: 123 additions & 83 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,51 @@
</p>

<p align="center">
<a href="https://outline.itsnik.de/s/9d88c471-373e-4ef2-a955-b1058eb7dc99">Wiki</a> Β· <a href="#-getting-started">Getting Started</a> Β· <a href="#-features">Features</a> Β· <a href="#-architecture-and-apps">Architecture & Apps</a> Β· <a href="#-development-workflow">Development</a>
<a href="https://dockstat.itsnik.de" title="Wiki">
<img
alt="Wiki"
src="https://img.shields.io/badge/-Wiki-0B7285?style=for-the-badge&logo=readthedocs&logoColor=white"
/>
</a>
<a href="#key-features" title="Features">
<img
alt="Features"
src="https://img.shields.io/badge/-Features-1864AB?style=for-the-badge&logo=sparkfun&logoColor=white"
/>
</a>
<a href="#getting-started-developer--local" title="Getting started (developer)">
<img
alt="Getting started (developer)"
src="https://img.shields.io/badge/-Dev%20Setup-2F9E44?style=for-the-badge&logo=visualstudiocode&logoColor=white"
/>
</a>
<a href="#plugins-themes--stacks---dockstore" title="DockStore">
<img
alt="DockStore"
src="https://img.shields.io/badge/-DockStore-F08C00?style=for-the-badge&logo=docker&logoColor=white"
/>
</a>
<a href="#development-workflow--guidelines" title="Development guide">
<img
alt="Development guide"
src="https://img.shields.io/badge/-Development%20Guide-7048E8?style=for-the-badge&logo=gitbook&logoColor=white"
/>
</a>
</p>

---

# DockStat

| ![TailwindCSS](https://img.shields.io/badge/tailwindcss-%2338B2AC.svg?style=for-the-badge&logo=tailwind-css&logoColor=white) | ![Docker](https://img.shields.io/badge/docker-%230db7ed.svg?style=for-the-badge&logo=docker&logoColor=white) | ![Biome](https://img.shields.io/badge/biome-%2360A5FA.svg?style=for-the-badge&logo=biome&logoColor=white) | ![SQLite](https://img.shields.io/badge/sqlite-%2307405e.svg?style=for-the-badge&logo=sqlite&logoColor=white) |
| ---------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- |
| ![TypeScript](https://img.shields.io/badge/typescript-%23007ACC.svg?style=for-the-badge&logo=typescript&logoColor=white) | ![React Router](https://img.shields.io/badge/React_Router-CA4245?style=for-the-badge&logo=react-router&logoColor=white) | ![Prometheus](https://img.shields.io/badge/Prometheus-E6522C?style=for-the-badge&logo=Prometheus&logoColor=white) | ![Turborepo](https://img.shields.io/badge/Turborepo-%230F0813.svg?style=for-the-badge&logo=Turborepo&logoColor=white) |
<p align="center">
<img alt="TailwindCSS" src="https://img.shields.io/badge/TailwindCSS-38B2AC?style=for-the-badge&logo=tailwind-css&logoColor=white" />
<img alt="Docker" src="https://img.shields.io/badge/Docker-0DB7ED?style=for-the-badge&logo=docker&logoColor=white" />
<img alt="Biome" src="https://img.shields.io/badge/Biome-60A5FA?style=for-the-badge&logo=biome&logoColor=white" />
<img alt="SQLite" src="https://img.shields.io/badge/SQLite-07405E?style=for-the-badge&logo=sqlite&logoColor=white" />
<br />
<img alt="TypeScript" src="https://img.shields.io/badge/TypeScript-007ACC?style=for-the-badge&logo=typescript&logoColor=white" />
<img alt="React Router" src="https://img.shields.io/badge/React%20Router-CA4245?style=for-the-badge&logo=react-router&logoColor=white" />
<img alt="Prometheus" src="https://img.shields.io/badge/Prometheus-E6522C?style=for-the-badge&logo=prometheus&logoColor=white" />
<img alt="Turborepo" src="https://img.shields.io/badge/Turborepo-0F0813?style=for-the-badge&logo=turborepo&logoColor=white" />
</p>

DockStat is an extensible container administration and monitoring platform that aims to combine the best ideas from tools like Portainer, Grafana and Dockge into a single, modular solution. It focuses on real-world manageability, deep observability and a runtime plugin-first architecture so the platform can evolve with your stack.

Expand All @@ -21,7 +56,7 @@ DockStat is an extensible container administration and monitoring platform that

---

## πŸ“– Project overview
## Project overview

DockStat's goal is to be the unified UI and runtime for managing containerized infrastructures (Docker for now, with intentions to expand). It provides:

Expand All @@ -33,19 +68,19 @@ DockStat's goal is to be the unified UI and runtime for managing containerized i

---

## ✨ Key features
## Key features

- Runtime-compatible plugin system:
- Frontend UI components (widgets, pages)
- Backend services (collectors, adapters)
- Backend services (notification providers, integrations with other software)
- Full-stack plugins (both frontend and backend)
- Theming:
- CSS variable driven theming for deep customization
- Stacks & Templates:
- Prebuilt Docker Compose templates (DockStore)
- Stack-level plugin hooks (Traefik/Caddy examples)
- Automatic node provisioning (e.g. Hetzner Cloud plugin)
- Future: Kubernetes support roadmap
- Automatic DockNode provisioning (e.g. Hetzner Cloud plugin)
- Future: Kubernetes support (?)
- Monitoring & Visualization:
- Table-based and graph-based metrics
- Network visualization with sigma.js / reagraph
Expand All @@ -60,36 +95,42 @@ DockStat's goal is to be the unified UI and runtime for managing containerized i

---

## πŸ›  Tech stack
## Tech stack

- Core: React, React Router v7, Bun
- Frontend: TypeScript, TailwindCSS, GSAP, lucide-react
- Backend / Integrations: ElysiaJS, Dockerode, bun:sqlite, @dockstat/\* packages (internal libs)
- Frontend: TypeScript, TailwindCSS, Framer-Motion, lucide-react, Simple-Icons-React
- Backend: ElysiaJS, Dockerode, bun:sqlite, @dockstat/\*
- Monorepo layout: apps/, packages/ (typings, db, sql-wrapper, plugins, ...)

---

## πŸ“ Repo structure (high level)
## Repo structure (high level)

- apps/
- dockstat β€” main frontend / UI app (React Router SPA)
- dockstore β€” community hub for templates, themes & plugins
- docs β€” documentation and Outline wiki sync helpers
- packages/ (internal packages / libraries used by apps)
- .github/ (assets such as logos and CI configs)

See apps/README.md for per-app details.
- `api` [Container]: The backend which leverages ElysiaJS's speed and various `@dockstat/*` packages
- `dockstat` [Container]: Main frontend / UI app (React)
- `dockstore-validator` [Container]: An ElysiaJS + HTMX based application for manual approving of Plugins; stores version hashes of the Plugins to be compared pre-installation by DockStatAPI (has to be enabled for a repository).
- `dockstore`: β€” community hub for templates, themes & plugins (Markdown only for now)
- `docs`: β€” documentation (mirrored from [Outline](https://dockstat.itsnik.de))
- packages/
- `db`: DockStatAPI DB Setup
- `docker-client`: A Docker Client Manager package, that splits up each client into a seperate Bun Worker
- `logger` [PUBLIC]: An extensible Logger which also proxies logs to a Websocket (`/api/v2/ws/logs`)
- `outline-sync` [PUBLIC]: A synchronisation library to mirror an external Outline Wiki to a local filesystem
- `plugin-builder` [PUBLIC]: A package to make building Plugins for DockStat easier
- `sqlite-wrapper` [PUBLIC]: Self-built ORM with full typesafety, parsing and validation for `bun:sqlite` for optimal performance
- `template-renderer`: Helper library to allow usage of Frontend Plugins in DockStat
- `typings` [PUBLIC]: Shared typings
- `ui`: DockStat's UI library
- `utils` [PUBLIC]: Various utils used across DockStat

---

## πŸš€ Getting started (developer / local)
## Getting started (developer / local)

Requirements

- Bun (used for development and scripts)
- Node ecosystem tools (if you prefer npm/pnpm for some tasks)
- Docker (for testing container interactions)
- Optional: access to cloud provider API keys (for provisioning plugins)
- Bun
- Docker

Quick start (from Repo root)

Expand All @@ -99,63 +140,87 @@ Quick start (from Repo root)
bun install
```

2. Start dockstat in development:
2. Start `dockstat` and `@dockstat/api` in development:

```bash
cd ./apps/dockstat
bun run dev
bun run dev:dockstat
# bun run docker-up && bun run dev --filter=@dockstat/frontend --filter=@dockstat/api
```

---

## 🧩 Plugin system (overview)
## Plugin system (overview)

DockStat is designed to grow through plugins. Plugins can register UI components, provide backend services (collectors, adapters, provisioning modules), or both.
DockStat is designed to grow through plugins. Plugins can register new pages, provide backend services (collectors, adapters, provisioning modules), or both.

Plugin types

- Frontend plugin: Registers routes, pages or widgets in the UI. Usually provides a manifest and runtime hooks.
- Frontend plugin: Registers routes, pages or widgets in the UI. Usually provides data loaders, pages and actions.
- Backend plugin: Runs a process/service that collects metrics, talks to external APIs or adds adapters for new node types.
- Full-stack plugin: Includes both frontend and backend parts and ships as a single distributable.

Concepts

- Manifest: A plugin manifest describes name, version, provided capabilities, and entry points.
- Lifecycle: Plugins are discovered at runtime and may be started/stopped without recompiling the host (subject to host safety).
- Lifecycle: Plugins are discovered at runtime and may be started/stopped without recompiling the host (validation of plugins can be done through `dockstore-validator`, if enabled).

Developer notes

- Keep plugin APIs minimal; prefer well-documented typed contracts.

---

## πŸ”Œ Stacks & DockStore
## Plugins, Themes & Stacks - DockStore

DockStore serves as the ecosystem hub for reusable assets:

DockStore is the ecosystem hub for templates, themes and plugins:
- Docker‑Compose templates – ready‑made stacks for common services (AdGuard, Grafana, Home Assistant, Arr‑suite, etc.).
- Themes & UI tweaks – community‑crafted visual customisations.
- Plugin marketplace – a registry where developers can publish and discover plugins.

- Pre-built Docker Compose templates for common apps (AdGuard, Grafana, Home Assistant, etc.)
- Themes and UI tweaks
- Plugin marketplace / registry for community contributions
> Add your own templates, plugins or themes under `apps/dockstore/src/content/<plugins,themes,stacks>` (or via git sub‑modules) to make them discoverable by the platform.

---

## βš™οΈ Multi-node & adapters
## Multi-node

DockStat separates data collection from visualisation, enabling scalable monitoring across many Docker hosts.

DockStat separates collection and aggregation from visualization via adapters:
### Agregation

- Docker client adapters (can manage multiple hosts)
- Cloud provisioning adapters (Hetzner, others planned)
- Custom adapters can be written as backend plugins to bring new node types under management
Agregation is done by querying workers, which can respond as soon as the data is gathered, without halting the entire backend.

Adapters expose:
#### Example Docker-Client-Manager request Lifecycle

- Node discovery & registration
- Metrics collection configuration
- Connection and credential management
```mermaid
flowchart TB
A{{"[GET] /api/v2/docker/containers/all"}}
subgraph DCM
B["Get all workers from internal map"]
C["Get client's options from client ID saved in Worker Map"]
D("Promise.all[...]")
E["Send 'getAllContainers' request to worker(s)"]
end

subgraph Worker
F["Get All Hosts from Host-Handler-${clientId} table"]
G["Get Docker Instance for ${hostId}"]
H("dockerInstance.listContainers()")
I["Agregate Containers to single Array"]
J{{"Publish Response to DCM"}}
end

K["Build per-host array for clearer data structure"]
L{{"[GET] Answer request"}}

A-->B-->C-->D-->E-->F-->G-->H-->I-->J-->K-->L
```

---

## βœ… Development workflow & guidelines
## Development workflow & guidelines

> [!TIP]
> Please follow the Patterns mentioned in the Wiki: [Patterns](https://outline.itsnik.de/s/dockstat/doc/patterns-bHRdz02Jsy)

- Each app/package should have its own README and local dev scripts.
- Use TypeScript and JSDoc for public APIs.
Expand All @@ -166,7 +231,7 @@ Common scripts

- bun run dev β€” start development servers
- bun run build β€” build production bundles
- biome β€” linting and type checks (project specific)
- bun run lint β€” linting and type checks

Adding an app

Expand All @@ -177,56 +242,31 @@ Adding an app

---

## πŸ§ͺ Known limitations & stability
## Known limitations & stability

- Pre-Alpha: expect breaking API and UX changes.
- Limited production hardening; use only for testing.
- Some features (Kubernetes support, advanced alerting, long-term metrics storage) are planned but not yet implemented.

---

## πŸ“¦ Roadmap (high level)

Short term

- Stabilize plugin runtime API
- Improve adapter management and credentials handling
- Expand DockStore templates and build a simple web marketplace

Medium term

- Advanced dashboards and widget editor
- Built-in alerting and notification center
- Optional integration with time-series DB for long-term metrics

Long term

- Kubernetes management support
- Multi-tenant and RBAC features
- Rich plugin ecosystem and marketplace

---

## 🀝 Contributing
## Contributing

Contributions, ideas and bug reports are welcome.

- Check the Wiki for developer docs and architecture notes
- Open issues for bugs or feature requests
- Submit PRs with small, focused changes and good descriptions
- If you're adding a plugin or template, prefer adding it to apps/dockstore for discoverability
- If you're writing a plugin or template, prefer adding it to apps/dockstore for discoverability; Can be done through git-submodules

---

## πŸ“š Documentation & Support

Start with the repository Wiki and the Outline docs:
## Documentation & Support

- Wiki: https://outline.itsnik.de/s/9d88c471-373e-4ef2-a955-b1058eb7dc99
- apps/README.md and apps/dockstat/README.md for per-app instructions
Start with the [Outline docs](https://dockstat.itsnik.de), if there are still questions about DockStat feel free to start a new discussion :)

---

## πŸ“ License
## License

> [Mozilla Public License Version 2.0](https://www.mozilla.org/en-US/MPL/2.0/)
Loading