Indigo-Stats

Indigo-Stats

Docker app from sunharvester's Repository

Overview

Private PurpleAir dashboard with minute-level local collection, historical charts, optional weather and air-quality comparisons, and an installable PWA. State is stored in SQLite on persistent appdata. No login is included: use a trusted LAN or private tailnet and do not expose the app directly to the internet.

Indigo Stats for Unraid

Indigo Stats icon

Validate Unraid metadata

Indigo Stats is a private air-quality and weather dashboard for a PurpleAir sensor on your local network. It collects readings every minute, keeps long-term history on your Unraid server, and presents current conditions and trends in a responsive web app that can be installed as a PWA.

This repository provides the Unraid Community Applications package. The Indigo Stats application repository contains the source code and detailed technical documentation.

Beta: Indigo Stats is under active development. Keep a backup before updating and report problems through the support links below.

Features

  • Collects temperature, humidity, both PM2.5 channels, quality flags, and corrected PM2.5 directly from a PurpleAir sensor on the LAN.
  • Calculates US AQI estimates with EPA 2024 breakpoints and displays PM2.5 NowCast after enough complete hourly history is available.
  • Makes historical exploration easy with date ranges, time navigation, previous-period overlays, threshold inspection, daily patterns, and CSV export.
  • Optionally compares local readings with hourly regional weather and PM2.5 forecasts from Open-Meteo.
  • Shows collector, forecast, database, backup, and storage health.
  • Stores state in SQLite under persistent Unraid appdata and creates consistent daily snapshots.
  • Provides an installable React/TypeScript PWA from the same container.

Requirements

  • An AMD64 Unraid server.
  • A PurpleAir sensor reachable from the container over the same private network.
  • A dedicated local appdata directory for the SQLite database and backups.
  • Optional outbound HTTPS access and coordinates if regional forecasts are enabled.

Indigo Stats has no application login. Keep it on a trusted LAN or private tailnet and do not expose it directly to the internet. PWA installation on mobile devices normally requires HTTPS through a private reverse proxy or Tailscale Serve configured separately.

Installation

  1. Open the Apps tab in Unraid and search for Indigo Stats.
  2. Select Install.
  3. Enter the PurpleAir sensor's private IPv4 address and your IANA timezone.
  4. Review the PM2.5 and temperature/humidity display methods.
  5. To enable forecasts, turn them on and provide both latitude and longitude. Otherwise, leave forecasts disabled and both coordinates empty.
  6. Apply the template, wait for the container to become healthy, and open WebUI.

The template maps container port 8000 to host port 8765 by default. You may choose another available host port. The container template tracks the latest published AMD64 image at ghcr.io/dbulnes/indigo-stats:latest.

Configuration

Setting Default Purpose
Web UI port 8765 Trusted-network HTTP access to the dashboard
Appdata /mnt/user/appdata/indigo-stats Persistent database, settings, and local snapshots mounted at /data
PurpleAir sensor IP Required Private IPv4 address of the local sensor
Timezone Etc/UTC IANA timezone used in charts
PM2.5 method cf1 Raw channel average or EPA 2021 outdoor correction
Temperature and humidity purpleair PurpleAir estimated, raw operating, or simple adjusted display
Regional forecasts Disabled Optional Open-Meteo weather and PM2.5 forecasts
Forecast coordinates Empty Required as a pair when forecasts are enabled
PUID / PGID 99 / 100 Unraid user and group used by the application

No street address or API credential is required. Forecast coordinates are sent to Open-Meteo only when forecasts are enabled and are not returned by dashboard APIs.

History, persistence, and backups

All mutable state is stored under /data. Unraid container updates preserve readings and settings as long as the same appdata path remains mapped to /data. Removing the container does not remove appdata unless you explicitly delete that directory.

Minute-level readings are retained indefinitely by default. Raw sensor payloads expire after 30 days. The application creates daily SQLite snapshots and retains the latest 14 on the same appdata volume. These snapshots help with some application or operator mistakes, but they do not protect against loss of the Unraid server or its storage.

Use local SSD-backed appdata for the live SQLite database. Do not place it on SMB or NFS, and do not run two Indigo Stats containers against the same data directory.

Updates and data safety

Apply normal image updates from Unraid's Docker or Apps interface. An update replaces the container image while retaining the /data mapping; it must not delete or replace the existing appdata directory.

Before an update, keep a consistent backup and the previous image until you confirm that the new container shows the existing history and collects a new sample. See the operations guide for backup, upgrade, restore, HTTPS, and troubleshooting details.

Support and source

The Unraid package metadata is MIT licensed. The Indigo Stats application uses the Unlicense.

Install Indigo-Stats on Unraid in a few clicks.

Find Indigo-Stats in Community Apps on your Unraid server, review the template, and click Install. Unraid handles the Docker app or plugin setup from the published template.

Open the Apps tab on your Unraid server Search Community Apps for Indigo-Stats Review the template variables and paths Click Install

Requirements

A reachable PurpleAir sensor on the same private network. Optional outbound HTTPS access for forecasts.

Related apps

Details

Repository
ghcr.io/dbulnes/indigo-stats:latest
Last Updated2026-09-21
First Seen2026-09-21

Runtime arguments

Web UI
http://[IP]:[PORT:8000]/
Network
bridge
Shell
sh
Privileged
false
Extra Params
--init --read-only --tmpfs /tmp --cap-drop=ALL --cap-add=CHOWN --cap-add=DAC_OVERRIDE --cap-add=SETUID --cap-add=SETGID --security-opt=no-new-privileges:true --stop-timeout=35 --log-opt=max-size=5m --log-opt=max-file=3

Template configuration

Web UI portPorttcp

HTTP port on the trusted LAN. Use a private HTTPS proxy for mobile PWA installation. The application has no login.

Target
8000
Default
8765
Value
8765
AppdataPathrw

Persistent SQLite database and local snapshots. Keep this directory when updating or replacing the container. Use local SSD-backed appdata, not SMB/NFS.

Target
/data
Default
/mnt/user/appdata/indigo-stats
Value
/mnt/user/appdata/indigo-stats
PurpleAir sensor IPVariable

Private LAN IPv4 address of the PurpleAir device. Reserve its DHCP address. The app does not scan the subnet.

Target
SENSOR_HOST
TimezoneVariable

IANA timezone for charts, such as America/Los_Angeles or Europe/London.

Target
TZ
Default
Etc/UTC
Value
Etc/UTC
PM2.5 methodVariable

cf1 preserves the raw channel-average PM2.5. epa2021 applies the US outdoor correction using raw humidity.

Target
PM_METHOD
Default
cf1|epa2021
Value
cf1
Temperature and humidityVariable

purpleair matches PurpleAir estimated ambient layers. raw shows operating sensor readings. simple applies -8 F and +4 humidity points. Raw values are always retained.

Target
ENVIRONMENT_MODE
Default
purpleair|raw|simple
Value
purpleair
Enable regional forecastsVariable

Enable only after supplying both coordinates. Coordinates are sent to Open-Meteo for regional weather and PM2.5 forecasts.

Target
FORECAST_ENABLED
Default
false|true
Value
false
Forecast latitudeVariable

Optional private latitude from -90 to 90. Enter both coordinates or leave both blank.

Target
FORECAST_LATITUDE
Forecast longitudeVariable

Optional private longitude from -180 to 180. Coordinates are not returned by browser APIs.

Target
FORECAST_LONGITUDE
PUIDVariable

UID used by the application after startup. Unraid nobody is normally 99.

Default
99
Value
99
PGIDVariable

GID used by the application after startup. Unraid users is normally 100.

Default
100
Value
100