Lightweight self-hosted application monitoring for small servers. Spring Boot, Quarkus, SQLite history, simple charts. No Prometheus/Grafana stack required.
See the codeStatLite 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 · 简体中文
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.
Host resources from the StatLite self-monitoring target.
Learn how to set up lightweight Spring Boot monitoring without Prometheus and Grafana.
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 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.
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.
When a target has no health signal, the dashboard reports whether StatLite is successfully receiving its metrics without treating reachability as application health.
/prometheus. Management health is optional; database health
requires visible JDBC aggregate status.
See the certified setup.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.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.
MIT
Lightweight self-hosted application monitoring for small servers. Spring Boot, Quarkus, SQLite history, simple charts. No Prometheus/Grafana stack required.
See the codeStatLite 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 · 简体中文
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.
Host resources from the StatLite self-monitoring target.
Learn how to set up lightweight Spring Boot monitoring without Prometheus and Grafana.
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 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.
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.
When a target has no health signal, the dashboard reports whether StatLite is successfully receiving its metrics without treating reachability as application health.
/prometheus. Management health is optional; database health
requires visible JDBC aggregate status.
See the certified setup.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.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.
MIT