Self-Hosted Open Source

Audit logging that
stays on your infrastructure

Collect, store, and query audit events from any application. Real-time anomaly detection — no cloud, no external ML, no vendor lock-in.

Get Started → Try Demo

Architecture

SDK / App Writer :8081 Redis Worker PostgreSQL Reader :8082

Everything you need for audit logging

Without the cloud bill.

📥

Event Ingestion

Send events via HTTP from any language using our SDK or a plain POST request. Events are validated, sanitized, and queued instantly.

🛡️

Anomaly Detection

Statistical engine detects volume spikes, error rate surges, brute-force attempts, mass deletions, and silent services — no ML models needed.

🔔

Notifications

Browser Push (VAPID) and Webhooks to any URL — Discord, Slack, PagerDuty, n8n. HMAC-SHA256 signatures with automatic retry.

🏢

Multi-Project

Owner / Admin / Viewer roles per project. API keys scoped to projects. Projects auto-created on first event — zero configuration.

📊

Export & Query

Filter by service, method, status, identifier, date range. Export up to 100 000 events as CSV or JSON with a single click.

🗄️

Data Tiering

Raw events → hourly summaries → daily summaries. Infinite history without infinite storage. Configurable retention windows.

Try the live demo

Pre-loaded with realistic audit data. Read-only access — no sign-up required.

Login: demo@bataudit.dev / demo
Open Demo Dashboard →

Demo data resets daily.

One command to start

Docker Compose is the only prerequisite.

1. Clone the repository

git clone https://github.com/joaovrmoraes/bataudit.git
cd bataudit

2. Start with demo data

docker compose -f docker-compose.demo.yml up

Dashboard: http://localhost:8082/app  ·  Login: demo@bataudit.dev / demo

3. Send your first event

curl -X POST http://localhost:8081/v1/audit \
  -H "X-API-Key: <your-api-key>" \
  -H "Content-Type: application/json" \
  -d '{
    "path": "/api/users",
    "method": "GET",
    "status_code": 200,
    "identifier": "user-123",
    "service_name": "my-api",
    "environment": "production"
  }'

Or use the Node.js SDK

npm install @bataudit/node

import { BatAudit } from '@bataudit/node'

const bat = new BatAudit('bat_your_api_key')
await bat.log({ path: '/api/users', method: 'GET',
                statusCode: 200, identifier: 'user-123',
                serviceName: 'my-api' })