PVRLabs/statlite

Lightweight self-hosted application monitoring for small servers. Spring Boot, Quarkus, SQLite history, simple charts. No Prometheus/Grafana stack required.

Go

155

310 commits

updated Oct 6, 2026

See the code

README

StatLite

GitHub release Go powered Frameworks: Spring Boot · Quarkus · Micronaut CI License

StatLite provides lightweight, self-hosted application monitoring for apps running on VPSs and small servers. One Go binary polls multiple applications, stores metrics locally in SQLite, and provides built-in historical charts, without requiring Prometheus or Grafana.

🌐 Website · 👀 Interactive demo · 简体中文

StatLite dashboard monitoring a Spring Boot payments API
Main application dashboard for the Spring target.

StatLite supports Spring Boot, Quarkus, and Micronaut integrations, and other applications through a small, fixed JSON metrics endpoint. It collects traffic, latency, CPU, memory, optional application health, and optional host metrics. Metrics and history stay on your server, without continuously sending application metrics to a third-party monitoring SaaS.

StatLite is built for resource-constrained servers. Low memory, CPU, disk, and operational overhead are treated as product constraints.

StatLite host memory, CPU, and disk charts
Host resources from the StatLite self-monitoring target.

Learn how to set up lightweight Spring Boot monitoring without Prometheus and Grafana.

Try it

docker run --rm \
  -p 127.0.0.1:9090:9090 \
  ghcr.io/pvrlabs/statlite:latest

Open http://127.0.0.1:9090. StatLite monitors itself by default, so the dashboard starts with live data. To monitor your own application from Docker, mount a config as described in Monitor an application. In that container, 127.0.0.1 is StatLite.

See the Docker guide for persistent storage, container networking, local builds, and access guidance.

StatLite provides predefined application and host metrics with built-in charts. It does not provide PromQL, unrestricted custom metrics, custom dashboard building, distributed tracing, centralized logs, or built-in alert delivery. The one-shot API checks can run from cron or a systemd timer when you want a notification; you choose the threshold and where the message goes. See monitoring options for small applications and VPS deployments for the practical tradeoffs.

Install

Install the latest release on macOS or Linux:

curl -fsSL https://raw.githubusercontent.com/PVRLabs/statlite/main/install.sh | sh

Or install with Homebrew:

brew install pvrlabs/tap/statlite

See Installation for supported platforms, custom install locations, source builds, and server-wide Linux setup.

Configure an application

Spring Boot, Quarkus, and Micronaut need no application code changes. With the application already running, write a config and start StatLite:

statlite inspect 'http://localhost:8080' --create-config ./statlite.yaml
statlite

Open http://127.0.0.1:9090. --create-config writes ./statlite.yaml only when that path does not already exist. To append one target to an existing file, use --add-to-config as described in Configuration.

For Quarkus or Micronaut, select the type:

statlite inspect --type quarkus 'http://localhost:9000' --create-config ./statlite.yaml
statlite inspect --type micronaut 'http://localhost:8080' --create-config ./statlite.yaml

Run one of those commands. Each writes ./statlite.yaml only when that path is absent.

Express, Django, FastAPI, Go net/http, and Gin need a small endpoint in the application first. Follow the integration guides, then run inspect --create-config against that application's /statlite/metrics URL.

Inspection is bounded and read-only unless you pass --create-config or --add-to-config. Micronaut requires --type micronaut; inspection validates its supported contract without proving framework identity. For untyped discovery, start with a base HTTP or HTTPS URL without a query string or fragment.

A Spring Boot file written by hand has this shape. server.listen, storage.sqlite_path, and polling.interval are required:

server:
  listen: "127.0.0.1:9090"

storage:
  sqlite_path: "./statlite.sqlite"

polling:
  interval: "30s"

targets:
  - name: "app"
    type: "spring"
    url: "http://localhost:8080/actuator"

If you already have a configuration, copy only the target entry into its targets list. Then run statlite from the directory that contains statlite.yaml.

See Configuration for exact endpoint forms, discovery limits, authentication limitations, all settings, and manual target configuration. See examples/ for complete configurations.

[!IMPORTANT] StatLite has no built-in dashboard or API authentication. Review the server and access guidance before exposing it remotely.

Supported metric sources

When a target has no health signal, the dashboard reports whether StatLite is successfully receiving its metrics without treating reachability as application health.

  • Spring Boot: Collects authoritative health when Actuator health is available and automatically selects a compatible Micrometer Prometheus endpoint or Actuator JSON for request, JVM, process, and optional host metrics. Independently usable metrics remain reportable if health retrieval fails.
  • Quarkus Micrometer: Collects bounded request, latency, CPU, heap, process, and restart concepts from an exact Prometheus/OpenMetrics endpoint. SmallRye Health is an optional capability when the application publishes it.
  • Micronaut Micrometer: Collects the existing request, duration, CPU, heap, process, and restart concepts from an exact configured Prometheus endpoint, conventionally /prometheus. Management health is optional; database health requires visible JDBC aggregate status. See the certified setup.
  • StatLite Metrics v1: A small, fixed JSON endpoint that applications in any language or framework can implement. See the direct integration guides for FastAPI, Express, Django, Go net/http, and Gin. Those guides provide complete, copyable application-owned helpers with no StatLite SDK/package or additional third-party monitoring runtime dependency. Your own StatLite instance polls the endpoint; the supplied helpers make no outbound requests and send no telemetry to PVR Labs. They expose aggregate operational metrics, so restrict endpoint access as described in each guide.
  • StatLite self-monitoring: StatLite can report its own health, traffic, process, and host metrics.

Use a statlite-self target for host metrics where StatLite runs. Spring targets can optionally collect host CPU and disk metrics for a remote application's environment.

Documentation

License

MIT

actuator
dashboard
go
metrics
monitoring
observability
self-hosted
server-monitoring
spring-actuator
spring-boot
spring-boot-actuator
sqlite
vps

PVRLabs/statlite

Lightweight self-hosted application monitoring for small servers. Spring Boot, Quarkus, SQLite history, simple charts. No Prometheus/Grafana stack required.

Go

155

310 commits

updated Oct 6, 2026

See the code

README

StatLite

GitHub release Go powered Frameworks: Spring Boot · Quarkus · Micronaut CI License

StatLite provides lightweight, self-hosted application monitoring for apps running on VPSs and small servers. One Go binary polls multiple applications, stores metrics locally in SQLite, and provides built-in historical charts, without requiring Prometheus or Grafana.

🌐 Website · 👀 Interactive demo · 简体中文

StatLite dashboard monitoring a Spring Boot payments API
Main application dashboard for the Spring target.

StatLite supports Spring Boot, Quarkus, and Micronaut integrations, and other applications through a small, fixed JSON metrics endpoint. It collects traffic, latency, CPU, memory, optional application health, and optional host metrics. Metrics and history stay on your server, without continuously sending application metrics to a third-party monitoring SaaS.

StatLite is built for resource-constrained servers. Low memory, CPU, disk, and operational overhead are treated as product constraints.

StatLite host memory, CPU, and disk charts
Host resources from the StatLite self-monitoring target.

Learn how to set up lightweight Spring Boot monitoring without Prometheus and Grafana.

Try it

docker run --rm \
  -p 127.0.0.1:9090:9090 \
  ghcr.io/pvrlabs/statlite:latest

Open http://127.0.0.1:9090. StatLite monitors itself by default, so the dashboard starts with live data. To monitor your own application from Docker, mount a config as described in Monitor an application. In that container, 127.0.0.1 is StatLite.

See the Docker guide for persistent storage, container networking, local builds, and access guidance.

StatLite provides predefined application and host metrics with built-in charts. It does not provide PromQL, unrestricted custom metrics, custom dashboard building, distributed tracing, centralized logs, or built-in alert delivery. The one-shot API checks can run from cron or a systemd timer when you want a notification; you choose the threshold and where the message goes. See monitoring options for small applications and VPS deployments for the practical tradeoffs.

Install

Install the latest release on macOS or Linux:

curl -fsSL https://raw.githubusercontent.com/PVRLabs/statlite/main/install.sh | sh

Or install with Homebrew:

brew install pvrlabs/tap/statlite

See Installation for supported platforms, custom install locations, source builds, and server-wide Linux setup.

Configure an application

Spring Boot, Quarkus, and Micronaut need no application code changes. With the application already running, write a config and start StatLite:

statlite inspect 'http://localhost:8080' --create-config ./statlite.yaml
statlite

Open http://127.0.0.1:9090. --create-config writes ./statlite.yaml only when that path does not already exist. To append one target to an existing file, use --add-to-config as described in Configuration.

For Quarkus or Micronaut, select the type:

statlite inspect --type quarkus 'http://localhost:9000' --create-config ./statlite.yaml
statlite inspect --type micronaut 'http://localhost:8080' --create-config ./statlite.yaml

Run one of those commands. Each writes ./statlite.yaml only when that path is absent.

Express, Django, FastAPI, Go net/http, and Gin need a small endpoint in the application first. Follow the integration guides, then run inspect --create-config against that application's /statlite/metrics URL.

Inspection is bounded and read-only unless you pass --create-config or --add-to-config. Micronaut requires --type micronaut; inspection validates its supported contract without proving framework identity. For untyped discovery, start with a base HTTP or HTTPS URL without a query string or fragment.

A Spring Boot file written by hand has this shape. server.listen, storage.sqlite_path, and polling.interval are required:

server:
  listen: "127.0.0.1:9090"

storage:
  sqlite_path: "./statlite.sqlite"

polling:
  interval: "30s"

targets:
  - name: "app"
    type: "spring"
    url: "http://localhost:8080/actuator"

If you already have a configuration, copy only the target entry into its targets list. Then run statlite from the directory that contains statlite.yaml.

See Configuration for exact endpoint forms, discovery limits, authentication limitations, all settings, and manual target configuration. See examples/ for complete configurations.

[!IMPORTANT] StatLite has no built-in dashboard or API authentication. Review the server and access guidance before exposing it remotely.

Supported metric sources

When a target has no health signal, the dashboard reports whether StatLite is successfully receiving its metrics without treating reachability as application health.

  • Spring Boot: Collects authoritative health when Actuator health is available and automatically selects a compatible Micrometer Prometheus endpoint or Actuator JSON for request, JVM, process, and optional host metrics. Independently usable metrics remain reportable if health retrieval fails.
  • Quarkus Micrometer: Collects bounded request, latency, CPU, heap, process, and restart concepts from an exact Prometheus/OpenMetrics endpoint. SmallRye Health is an optional capability when the application publishes it.
  • Micronaut Micrometer: Collects the existing request, duration, CPU, heap, process, and restart concepts from an exact configured Prometheus endpoint, conventionally /prometheus. Management health is optional; database health requires visible JDBC aggregate status. See the certified setup.
  • StatLite Metrics v1: A small, fixed JSON endpoint that applications in any language or framework can implement. See the direct integration guides for FastAPI, Express, Django, Go net/http, and Gin. Those guides provide complete, copyable application-owned helpers with no StatLite SDK/package or additional third-party monitoring runtime dependency. Your own StatLite instance polls the endpoint; the supplied helpers make no outbound requests and send no telemetry to PVR Labs. They expose aggregate operational metrics, so restrict endpoint access as described in each guide.
  • StatLite self-monitoring: StatLite can report its own health, traffic, process, and host metrics.

Use a statlite-self target for host metrics where StatLite runs. Spring targets can optionally collect host CPU and disk metrics for a remote application's environment.

Documentation

License

MIT

actuator
dashboard
go
metrics
monitoring
observability
self-hosted
server-monitoring
spring-actuator
spring-boot
spring-boot-actuator
sqlite
vps