···114114115115Airglow is designed to be easy to self-host. Configuration is done via environment variables (see `.env.example`):
116116117117-| Variable | Purpose |
118118-| --- | --- |
119119-| `PUBLIC_URL` | Public-facing base URL of the instance |
120120-| `DATABASE_PATH` | Path to the SQLite database file |
121121-| `JETSTREAM_URL` | Jetstream WebSocket endpoint |
122122-| `COOKIE_SECRET` | Secret for session cookies (min 32 chars) |
123123-| `NSID_ALLOWLIST` | Comma-separated NSIDs to allow (empty = allow all) |
117117+| Variable | Purpose |
118118+| ---------------- | --------------------------------------------------- |
119119+| `PUBLIC_URL` | Public-facing base URL of the instance |
120120+| `DATABASE_PATH` | Path to the SQLite database file |
121121+| `JETSTREAM_URL` | Jetstream WebSocket endpoint |
122122+| `COOKIE_SECRET` | Secret for session cookies (min 32 chars) |
123123+| `NSID_ALLOWLIST` | Comma-separated NSIDs to allow (empty = allow all) |
124124| `NSID_BLOCKLIST` | Comma-separated NSIDs to block (empty = block none) |
125125126126Instance operators can configure `NSID_ALLOWLIST` and `NSID_BLOCKLIST` to control which lexicons their instance handles. For example, a typical instance may want to block `app.bsky.*` or `app.bsky.feed.*` since those collections are very active and could overwhelm a small instance.