Open-source, self-hosted threat intelligence platform for analyst workflows.
Pulse Intelligence helps analysts and junior CTI teams track threat actors, campaigns, indicators, vulnerabilities, ATT&CK techniques, automated feeds, enrichment results, hunts, exports, and scheduled intelligence reports from one practical workspace.
Phases 1-7 of 8 are implemented. Phase 8 is hardening: large-table partitioning and deeper security review.
See HISTORY.md for the development timeline and public-release cleanup notes.
See ROADMAP.md for planned hardening and community work.
See CHANGELOG.md for release notes.
| Area | Technology |
|---|---|
| App | Next.js 16.3 App Router, React 19.2, Turbopack |
| Data | PostgreSQL 17, Prisma 7, @prisma/adapter-pg |
| Jobs | BullMQ, Redis-compatible server |
| Auth | Argon2id passwords, DB-backed session cookies, hashed API keys |
| UI | Tailwind CSS v4, lucide-react |
| Tests | Vitest, TypeScript, ESLint |
npm install
cp .env.example .env
# Fill DATABASE_URL, REDIS_URL, SESSION_SECRET, and any provider API keys.
# npm install runs prisma generate automatically; use npm run db:generate if needed.
npm run db:migrate
npm run db:seed
npm run db:seed:demo
npm run attack:sync -- --all
npm run feeds:install
npm run dev
Open http://localhost:3000.
Seed users:
| Role | |
|---|---|
admin@pulse.local |
ADMIN |
analyst@pulse.local |
ANALYST |
viewer@pulse.local |
READONLY |
Default password: PulseAdmin!2026
Set SEED_PASSWORD before npm run db:seed for anything beyond local development.
For Windows without Docker, native PostgreSQL plus Memurai works well. Docker Compose includes Postgres and Redis services, but the app itself is currently intended to run as a Node process.
Use .env.example as the template. Important values:
| Variable | Purpose |
|---|---|
DATABASE_URL |
PostgreSQL connection string |
REDIS_URL |
Redis-compatible connection string |
SESSION_SECRET |
Random 32+ byte session secret |
VIRUSTOTAL_API_KEY |
Optional enrichment provider |
ABUSEIPDB_API_KEY / ABUSEIPDB_API_KEYS |
Optional enrichment provider |
OTX_API_KEY |
Optional enrichment provider and OTX pulse feed |
NVD_API_KEY |
Recommended for reliable CVE sync |
PUBLIC_API_RATE_LIMIT_PER_WINDOW |
Optional public API limit, default 120 |
PUBLIC_API_RATE_LIMIT_WINDOW_SECONDS |
Optional public API window, default 60 |
SEED_PASSWORD |
Overrides local seed password |
PULSE_DEMO_MODE=1 |
Public read-only demo mode using viewer@pulse.local |
Never commit .env, real provider keys, database dumps, or private investigation data.
Run the worker beside the web app:
npm run worker
The worker owns feed refresh, enrichment queue draining, scheduled hunts, and scheduled reports.
Use npm run worker -- --run-now to run every enabled feed immediately on startup.
npm run lint
npm run typecheck
npm run test
npm audit --audit-level=moderate
npm run build
Database-backed verification scripts:
npm run verify:enrichment -- --live
npm run verify:hunting
npm run verify:api
npm run verify:reports
Create scoped API keys from /settings. See docs/API.md for authentication,
rate limits, parameters, and examples.
Example integrations live in examples/.
Available read endpoints:
GET /api/healthGET /api/health?deep=1GET /api/v1/indicatorsGET /api/v1/indicators/:idGET /api/v1/indicators?format=csv|stix|misp|snortGET /api/v1/actorsGET /api/v1/actors/:idWhitelisted indicators are never returned by public API or export routes.
Public API responses include X-RateLimit-* headers, and exhausted keys receive 429
with Retry-After.
See docs/HUNTING.md for templates, ATT&CK-aware fields, SIEM query drafts,
alert semantics, and match exports.
Production needs two long-running processes:
npm run build
npm run start
npm run worker
Use a process manager such as systemd, pm2, or a platform supervisor. See
DEPLOYMENT.md for host setup, Cloudflare tunnel notes, environment variables,
and migration guidance.
For database operations, see docs/BACKUP_RESTORE.md.
Contributions are welcome. Start with CONTRIBUTING.md, open focused pull
requests, and include verification notes. Good first areas are feed parsers, API examples,
documentation, UI polish, and Phase 8 hardening.
Maintainer expectations are documented in MAINTAINERS.md. Program-review
context is available in docs/MAINTAINER_APPLICATION.md.
Security issues should follow SECURITY.md.