Releases: kOlapsis/shm
Migrate to kOlapsis Github namespace
SHM v1.2.3
Delete instance
Is instance lost her identity.json file
SHM v1.2.1
Fix release
Bug on db application creation
π SHM v1.2.0 - Applications Management & GitHub Integration
Highlights
Applications as First-Class Entities
- New applications table to group instances by product
- Automatic URL-safe slug generation (My App β my-app)
- Transparent migration of existing data
GitHub Integration
- Automatic GitHub stars capture (hourly refresh)
- GITHUB_TOKEN support to avoid rate limiting (60 β 5000 req/h)
- Manual refresh via admin API
Public SVG Badges
- /badge/{app}/instances - Active instances count
- /badge/{app}/version - Most used version
- /badge/{app}/metric/{name} - Aggregated metrics
- /badge/{app}/combined - Combined stats
- Shields.io flat-square style, customizable via query params
Dashboard Performance
- Lazy loading for long instance lists
- Server-side pagination with full-text search
- Modular Alpine.js architecture (separate stores/components)
New Features
| Feature | Description |
|---|---|
| applications table | Relational structure for app metadata |
| GitHub Stars | Auto-fetch with 1h cache and background scheduler |
| Custom logo | Configurable logo URL per application |
| Public SVG badges | 4 badge types embeddable in your READMEs |
| Node.js SDK | @btouchard/shm-sdk - Zero dependencies, Node 22+ |
| Lazy loading | Progressive instance loading (25/page) |
| Instance search | Filter by app, version, environment |
API Changes
New Endpoints
GET /api/v1/admin/applications
GET /api/v1/admin/applications/{slug}
PUT /api/v1/admin/applications/{slug}
POST /api/v1/admin/applications/{slug}/refresh-stars
GET /badge/{app}/instances
GET /badge/{app}/version
GET /badge/{app}/metric/{metric}
GET /badge/{app}/combined
Modifications
- GET /api/v1/admin/instances now supports ?app=, ?q=, ?offset=, ?limit=
- Instances now include app_slug in the response
Breaking Changes
None. Migration 002_applications.sql is additive and preserves all existing data.
Configuration
New optional environment variable:
GITHUB_TOKEN=ghp_xxx # For 5000 req/h instead of 60
Migration
Download the new migration
curl -sL https://raw.githubusercontent.com/btouchard/shm/main/migrations/002_applications.sql
-o migrations/002_applications.sql
Apply (migration is idempotent)
psql $DATABASE_URL -f migrations/002_applications.sql
Full Changelog: v1.1.0...v1.2.0
π SHM v1.1.0 - Dashboard, Graph & Rate Limit
β¨ Highlights
- Added rate limiting to protect endpoints.
- Configurable report interval.
- Dashboard improvements (usability and readability).
π Internal Changes
- Migrated to a clearer, testable hexagonal architecture.
- Refactored handlers and updated documentation.
First version
SHM / Self-Hosted Metrics
Privacy-first, Agnostic Telemetry for Self-Hosted Software.
Collect usage stats, verify active instances, and understand your user base without spying on them.
When you distribute self-hosted software (on-premise), you fly blind. You don't know how many instances are running, which versions are active, or if your features are actually used.
SHM solves this with a lightweight, secure approach:
- Privacy First: Collects aggregate counters, never user content.
- Agnostic: Send any JSON payload. The dashboard adapts automatically.
- Secure: Every request is signed with an Ed25519 keypair generated on the client.
- Zero-Config Dashboard: Single Go binary with embedded UI. No frontend build required.
β¨ Features
- π Cryptographic Identity: Instances generate a unique ID and keypair. No spoofing possible.
- π¦ Multi-App Support: Track multiple software products on a single SHM server.
- π¨ Dynamic Dashboard: Send
{"pizzas_eaten": 10}and SHM automatically creates the KPI cards and table columns. - βοΈ Ops vs Business Separation: Automatically distinguishes between business metrics (KPIs) and system metrics (CPU, RAM, OS).
- π³ Docker Native: Runs anywhere with a simple
docker-compose.
β‘ Quick Start (Server)
Docker:
docker pull ghcr.io/btouchard/shm:latest
Get the server running in 30 seconds.
1. Create a compose.yml
services:
shm:
image: ghcr.io/btouchard/shm:latest # (Or build locally)
ports:
- "8080:8080"
environment:
- DATABASE_URL=postgres://user:pass@db:5432/shm?sslmode=disable
depends_on:
- db
db:
image: postgres:15-alpine
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: pass
POSTGRES_DB: shm
volumes:
- shm_data:/var/lib/postgresql/data
volumes:
shm_data:2. Run it
docker compose up -d