Metadata-Version: 2.4
Name: firm-ui
Version: 0.1.0
Summary: Optional web dashboard for firm — watch queues, cache, channels, and the audit log. Standard-library server; Jinja2 for templates.
Keywords: dashboard,ui,queue,cache,channel,audit
Author: firm contributors
License-Expression: MIT
License-File: LICENSE
License-File: NOTICE
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Topic :: Database
Classifier: Typing :: Typed
Requires-Dist: firm-core~=0.1.0
Requires-Dist: firm-queue~=0.1.0
Requires-Dist: firm-cache~=0.1.0
Requires-Dist: firm-channel~=0.1.0
Requires-Dist: firm-audit~=0.1.0
Requires-Dist: jinja2>=3.1.6
Requires-Dist: jinjax>=0.65
Requires-Python: >=3.11
Project-URL: Homepage, https://github.com/h11t-labs/firm
Project-URL: Repository, https://github.com/h11t-labs/firm
Project-URL: Issues, https://github.com/h11t-labs/firm/issues
Description-Content-Type: text/markdown

# firm-ui

Optional web dashboard for [firm](https://github.com/h11t-labs/firm) — watch and operate the
**queue**, **cache**, **channel** (pub/sub), and **audit** log in one place. A standard-library
HTTP server with Jinja2 templates; nothing else in firm imports it.

```bash
pip install firm-ui
```

## Run it

```bash
firm-ui --database-url sqlite:///app.db            # or set FIRM_DATABASE_URL
firm-ui --database-url postgresql://localhost/app --host 127.0.0.1 --port 8787
```

A tab appears for each firm part whose tables exist in the database you point it at. Parts in
separate databases? Pass `--queue-url`, `--cache-url`, `--channel-url`, `--audit-url`
individually.

## Highlights

- **Queue** — job counts per state, per-queue size/latency with pause/resume, live workers,
  recurring schedules, job detail with traceback and retry/discard
- **Cache** — entry count, estimated size, recent entries, clear-all
- **Channels** — buffered messages, busiest channels, trim
- **Audit** — searchable event feed
- **Auth built in** — HTTP Basic (plain or hashed password), reverse-proxy header auth, or a
  custom authenticator; refuses non-loopback binds without auth

## Docs

- [Dashboard guide](https://github.com/h11t-labs/firm/blob/main/docs/ui.md)
- [All firm documentation](https://github.com/h11t-labs/firm#readme)

MIT licensed; see [NOTICE](https://github.com/h11t-labs/firm/blob/main/NOTICE) for third-party
notices.
