{"_id":"@atlascrew/synapse-fleet","name":"@atlascrew/synapse-fleet","dist-tags":{"latest":"0.1.0"},"versions":{"0.1.0":{"name":"@atlascrew/synapse-fleet","version":"0.1.0","description":"Synapse Fleet — standalone UI and API runtime for customer-managed deployments","author":{"name":"Nicholas Crew Ferguson","email":"nick@atlascrew.dev","url":"https://atlascrew.dev"},"keywords":["synapse-fleet","synapse","security","soc","fleet","hunting","dashboard"],"repository":{"type":"git","url":"git+https://github.com/atlas-crew/horizon-security-platform.git","directory":"apps/signal-horizon"},"homepage":"https://horizon.atlascrew.dev/signal-horizon","bugs":{"url":"https://github.com/atlas-crew/horizon-security-platform/issues"},"license":"AGPL-3.0-only","type":"module","main":"dist/index.js","types":"dist/index.d.ts","bin":{"synapse-fleet":"bin/start.sh","synapse-fleet-migrate":"bin/migrate.sh"},"engines":{"node":">=18.18.0"},"publishConfig":{"access":"public"},"dependencies":{"@atlascrew/apparatus-lib":"^0.9.2","@clickhouse/client":"^1.15.0","@prisma/client":"^6.9.0","bullmq":"^5.34.3","cookie-parser":"^1.4.7","cors":"^2.8.5","dotenv":"^16.5.0","express":"^4.21.2","express-rate-limit":"^7.5.0","helmet":"^8.1.0","ioredis":"^5.8.2","pino":"^9.6.0","pino-http":"^10.4.0","prom-client":"^15.1.3","ws":"^8.18.1","zod":"^3.24.4","prisma":"^6.9.0"},"scripts":{"postinstall":"prisma generate","start":"node dist/index.js","db:generate":"prisma generate","db:migrate:prod":"prisma migrate deploy","db:studio":"prisma studio"},"_id":"@atlascrew/synapse-fleet@0.1.0","_integrity":"sha512-ZN2yHa/PI0umdfc8mSBiFBOWCyKaIUNYukcCwnH6WmmZi0RVWDGDTUKPCGKVz2AYBfx7Cs8tsvALnhN519XXLQ==","_resolved":"/tmp/d0143ce90da944c3bf63124e14335d5a/atlascrew-synapse-fleet-0.1.0.tgz","_from":"file:atlascrew-synapse-fleet-0.1.0.tgz","_nodeVersion":"22.22.2","_npmVersion":"10.9.7","dist":{"integrity":"sha512-ZN2yHa/PI0umdfc8mSBiFBOWCyKaIUNYukcCwnH6WmmZi0RVWDGDTUKPCGKVz2AYBfx7Cs8tsvALnhN519XXLQ==","shasum":"1ef24abb6056f085a32e05a6dd88cec8ed1aacfc","tarball":"https://registry.npmjs.org/@atlascrew/synapse-fleet/-/synapse-fleet-0.1.0.tgz","fileCount":100,"unpackedSize":9071276,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIBWa+36MYuWKrJhnxby5KsQCon6zpofIMXoHJ2Yvo2twAiAFIvhrgqJQPPYWOgeoH4pdmlE/CLvaJz7LXv6QmdHf9Q=="}]},"_npmUser":{"name":"nickcrew","email":"nickf4@icloud.com"},"directories":{},"maintainers":[{"name":"nickcrew","email":"nickf4@icloud.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/synapse-fleet_0.1.0_1776645063984_0.4866744300248711"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-20T00:31:03.870Z","0.1.0":"2026-04-20T00:31:04.247Z","modified":"2026-04-20T00:31:04.580Z"},"maintainers":[{"name":"nickcrew","email":"nickf4@icloud.com"}],"description":"Synapse Fleet — standalone UI and API runtime for customer-managed deployments","homepage":"https://horizon.atlascrew.dev/signal-horizon","keywords":["synapse-fleet","synapse","security","soc","fleet","hunting","dashboard"],"repository":{"type":"git","url":"git+https://github.com/atlas-crew/horizon-security-platform.git","directory":"apps/signal-horizon"},"author":{"name":"Nicholas Crew Ferguson","email":"nick@atlascrew.dev","url":"https://atlascrew.dev"},"bugs":{"url":"https://github.com/atlas-crew/horizon-security-platform/issues"},"license":"AGPL-3.0-only","readme":"# Self-Hosted Standalone Bundle\n\nSignal Horizon can ship as one Node-delivered bundle that serves both the UI and API from the same process. This is the primary non-Docker install path for customer-managed environments.\n\n## What You Get\n\n- One Node runtime that serves the dashboard, REST API, and WebSocket endpoints from the same origin\n- Required PostgreSQL support\n- Optional Redis and ClickHouse wiring through environment variables\n- Local migration and startup helpers inside the release artifact\n- Reverse-proxy examples for Nginx and Caddy\n\n## Build The Release Artifact\n\nFrom the monorepo root:\n\n```bash\npnpm signal-horizon:release\n```\n\nThat command creates:\n\n- `apps/signal-horizon/out/signal-horizon-standalone/`\n- `apps/signal-horizon/out/signal-horizon-standalone.tar.gz`\n\nThe release intentionally includes the Prisma CLI so the artifact can run `migrate deploy` on its own. That makes it larger than a runtime-only bundle, but it avoids a separate source checkout just to initialize PostgreSQL.\n\n## Host Prerequisites\n\n- Node.js 22 LTS recommended\n- PostgreSQL 15+\n- Redis 7+ if you want queue-backed rollouts and distributed state\n- ClickHouse 23.8+ only if you need historical hunting and archive-scale analytics\n- A reverse proxy that supports WebSocket upgrades\n\n## Install On A Host\n\n1. Copy `signal-horizon-standalone.tar.gz` to the target host.\n2. Extract it into a final install path such as `/opt/signal-horizon`.\n3. Copy `.env.example` to `.env` and set the required values.\n4. Run migrations.\n5. Start the service directly or under `systemd`.\n\nExample:\n\n```bash\nmkdir -p /opt\ntar -xzf signal-horizon-standalone.tar.gz -C /opt\nmv /opt/signal-horizon-standalone /opt/signal-horizon\ncd /opt/signal-horizon\ncp .env.example .env\n$EDITOR .env\n./bin/migrate.sh\n./bin/start.sh\n```\n\n## Required And Optional Environment\n\nRequired:\n\n- `NODE_ENV=production`\n- `DATABASE_URL=postgresql://...`\n- `JWT_SECRET=...`\n- `TELEMETRY_JWT_SECRET=...`\n\nRecommended:\n\n- `REDIS_URL=redis://...`\n- `ENABLE_JOB_QUEUE=true`\n\nOptional:\n\n- `CLICKHOUSE_ENABLED=true`\n- `CLICKHOUSE_HOST=...`\n- `CLICKHOUSE_HTTP_PORT=8123`\n- `CLICKHOUSE_DB=signal_horizon`\n- `CLICKHOUSE_USER=...`\n- `CLICKHOUSE_PASSWORD=...`\n\nSame-origin defaults:\n\n- Keep the app behind one hostname such as `https://signal-horizon.example.com`\n- Leave the Node process on an internal port such as `127.0.0.1:3100`\n- Terminate TLS at Nginx or Caddy\n\n## First Login / Evaluation Data\n\nThe standalone artifact can run migrations by itself. It does not yet include a dedicated production-safe first-admin or demo-data bootstrap flow.\n\nIf you need seeded demo data, use the source-tree seed workflow against the target PostgreSQL database from a checkout of the same revision:\n\n```bash\ncd apps/signal-horizon/api\npnpm run db:seed -- --profile=small --seed=42 --wipe=false\n```\n\nThat path is suitable for evaluation only, not for customer production data.\n\n## Running Under systemd\n\nThe bundle ships with `config/systemd/signal-horizon.service`.\n\nTypical install:\n\n```bash\nsudo useradd --system --no-create-home --shell /usr/sbin/nologin signal-horizon\nsudo chown -R signal-horizon:signal-horizon /opt/signal-horizon\nsudo cp config/systemd/signal-horizon.service /etc/systemd/system/signal-horizon.service\nsudo systemctl daemon-reload\nsudo systemctl enable --now signal-horizon\nsudo systemctl status signal-horizon\n```\n\nUpdate `WorkingDirectory`, `EnvironmentFile`, `User`, and `Group` in the unit file to match your host.\n\n## Reverse Proxy\n\nThe bundle includes:\n\n- `config/nginx/signal-horizon.conf`\n- `config/caddy/Caddyfile`\n\nBoth examples forward `/`, `/api/v1`, and `/ws` to the same Node process so BrowserRouter routes and WebSocket upgrades work without cross-origin configuration.\n\n## Operational Notes\n\n- PostgreSQL is required. The app will not start without `DATABASE_URL`.\n- Redis is optional for boot, but production behavior degrades without it because queue-backed jobs and distributed state fall back to in-memory behavior.\n- ClickHouse is optional and should stay disabled unless you need historical hunt and telemetry retention features.\n- The release artifact is generated from the current monorepo workspace, so rebuild it after any API or UI change.\n","readmeFilename":"README.md","_rev":"1-578eb5396cb97b89950b097d286f3c69"}