Tech Stack¶
What MonsterOps is built with.
| Layer | Technology |
|---|---|
| Backend | FastAPI (async), Python 3.11+ |
| ORM | SQLAlchemy 2 (async) + asyncpg |
| Migrations | Alembic |
| Database | PostgreSQL 15+ |
| Auth | PyJWT, Argon2id (argon2-cffi), bcrypt fallback |
| Config | pydantic-settings |
| Frontend | Vanilla JS — ES Modules + Web Components (no build step) |
| Design system | "Console" — Inter + IBM Plex Mono, Cloudflare-inspired neutral canvas + orange accent |
| Charts | Chart.js (ESM) |
| Geolocation | geoip2 + MaxMind GeoLite2-City (local mmdb) |
| NAS SSH/Telnet | Netmiko (synchronous, run in a thread-pool executor) |
| Firewall | nftables (nft), shell-free subprocess, table inet monsterops only |
| Credential encryption | cryptography — AES-256-GCM |
| Scheduling | APScheduler |
| Packaging | pyproject.toml (hatchling) |
Security posture¶
- Passwords — Argon2id (with a bcrypt fallback).
- Sessions — JWT in HttpOnly cookies with refresh rotation; CSRF tokens on browser mutations.
- Headers — CSP, HSTS, X-Frame-Options.
- Access control — role-based (
superadmin/admin/readonly), enforced server-side, with a full audit log. - Credentials at rest — NAS Manager secrets and directory bind passwords are AES-256-GCM
encrypted under a key derived from
MONSTEROPS_SECRET_KEY.
This website¶
This documentation site is itself vanilla HTML/CSS/JS with no framework — it reuses the app's design tokens so the two read as one product. The docs are generated from Markdown at build time; the served site has no runtime dependencies.
Related¶
- Architecture — how the pieces fit
- Roles — the access-control model
MonsterOps