Lightweight (4.1 MB!) single container status monitoring page.
2.3K
Finally got a cursor subscription so wanted to build something cool. NanoStatus is a lightweight, single-container monitoring dashboard built with Go and React. Monitor your services' uptime, response times, and health in real-time with a beautiful, modern interface. I personally made this for my PiZero, UptimeKuma was a little too heavy so wanted to make something a little lighter.

Build the Docker image:
docker build -t nanostatus .
Run the container:
docker run -p 8080:8080 -v "$(pwd)/data:/data" nanostatus
The application will be available at http://localhost:8080
Note: The -v "$(pwd)/data:/data" flag persists the database across container restarts.
Access the dashboard:
Open http://localhost:8080 in your browser
Build the frontend:
cd src
bun install
bun run build.ts --outdir=../dist
cd ..
Run the Go server:
go run main.go
Or build and run:
go build -o nanostatus main.go
./nanostatus
Access the application: Open http://localhost:8080โ in your browser
make build # Build both frontend and backend
make run # Build and run the application
make dev-frontend # Run frontend dev server (with hot reload)
make dev-backend # Run Go server (requires built frontend)
make clean # Clean build artifacts
/data volume when using DockerGET /api/monitors - List all monitorsPOST /api/monitors/create - Create a new monitorGET /api/stats - Get overall statistics (only unpaused services)GET /api/response-time?id=<id>&range=<range> - Get response time history
range options: 1h, 12h, 24h, 1w, 1y (default: 24h)GET /api/monitor?id=<id> - Get specific monitor detailsPUT /api/monitor?id=<id> - Update a monitor or toggle pause stateDELETE /api/monitor?id=<id> - Delete a monitorGET /api/events - Real-time event stream
monitor_update, monitor_added, monitor_deleted, stats_updatePORT - Server port (default: 8080)DB_PATH - Database file path
./nanostatus.db (local) or /data/nanostatus.db (Docker)When creating a monitor, you can configure:
https://example.com).
โโโ main.go # Main server entry point and routing
โโโ models.go # Data models and structures
โโโ database.go # Database initialization and seeding
โโโ checker.go # Service health checking logic
โโโ stats.go # Statistics calculation
โโโ sse.go # Server-Sent Events broadcasting
โโโ handlers.go # HTTP API endpoint handlers
โโโ cleanup.go # Background cleanup jobs
โโโ go.mod # Go dependencies
โโโ go.sum # Go dependency checksums
โโโ Dockerfile # Standard multi-stage Docker build (distroless)
โโโ Dockerfile.minimal # Minimal Docker build with UPX compression (scratch)
โโโ Makefile # Build automation
โโโ dist/ # Frontend build output (generated)
โโโ nanostatus.db # SQLite database (generated)
โโโ src/ # Frontend source code
โ โโโ src/
โ โ โโโ App.tsx # Main React component
โ โ โโโ components/ # React components
โ โ โ โโโ Header.tsx
โ โ โ โโโ StatsGrid.tsx
โ โ โ โโโ ServicesGrid.tsx
โ โ โ โโโ ServiceCard.tsx
โ โ โ โโโ MonitorDetails.tsx
โ โ โ โโโ AddServiceDialog.tsx
โ โ โ โโโ EditServiceDialog.tsx
โ โ โ โโโ ui/ # shadcn/ui components
โ โ โโโ types/ # TypeScript type definitions
โ โ โโโ ...
โ โโโ package.json
โโโ README.md
# Build frontend
cd src
bun install
bun run build.ts --outdir=../dist
# Build backend
go build -o nanostatus main.go
The Dockerfile uses a multi-stage build:
Result: Ultra-small, secure container (~16MB)
See LICENSE file for details.
Built with:
Content type
Image
Digest
sha256:cfb0ee69eโฆ
Size
4.4 MB
Last updated
2 months ago
docker pull gjames8/nanostatus