Back to docs
Architecture Overview
Understanding how the Sentari agent, server, and dashboard work together.
Overview
Sentari uses a lightweight agent-server architecture. A single-binary Go agent runs on each device, discovers software across every ecosystem, and reports to a central FastAPI server over mTLS. A React dashboard provides fleet-wide visibility.
Agent
- Language: Go 1.23, compiled as a static binary (CGO_ENABLED=0)
- Size: ~15 MB, zero runtime dependencies
- Scanning: Reads package metadata files directly — never invokes pip, conda, or poetry
- Offline queue: SQLite cache stores scans when the server is unreachable
- Communication: Outbound HTTPS only, mTLS with certificates from the internal CA
Server
- Framework: Python 3.12, FastAPI, SQLAlchemy 2.0
- Database: TimescaleDB (PostgreSQL 16) for time-series scan data
- Background tasks: Celery + Redis for CVE correlation, SBOM generation
- Auth: JWT + session cookies, RBAC, LDAP/OIDC, TOTP/2FA
- Internal CA: Issues mTLS certificates to agents during enrollment
Dashboard
- Framework: React 18, TypeScript, Vite
- Served by: FastAPI as static files — no separate deployment needed
- Real-time: TanStack Query for automatic data refresh
Security Model
Key security properties:
- Zero telemetry: No data ever leaves your infrastructure
- mTLS everywhere: Mutual TLS on all agent-server communication
- Outbound-only: Agents initiate connections; server never connects to agents
- Immutable audit logs: Append-only with SHA-256 hash chain
- No binary invocation: Agent reads metadata files, never executes package managers