CLI tool
calesthio/Crucix avatar
calesthio/Crucix

Crucix: A self-hosted OSINT dashboard that aggregates 27 feeds into one terminal

Your personal intelligence agent. Watches the world from multiple data sources and pings you when something changes.

12,223 stars1,860 forksJavaScriptAGPL-3.0

At a glance

What is it?
Crucix is a Node.js application that pulls data from 27 open-source intelligence feeds every 15 minutes and renders it on a WebGL dashboard. It is self-contained, runs without a cloud backend, and can be extended with an LLM for two-way alerts, though several sources take optional API keys.
Who is it for?
Adopt Crucix if you want a single, self-hosted dashboard that correlates publicly available data from many sources without paying for a cloud service. Skip it if you expect all 27 feeds to work out of the box: the README says you must copy .env.example and add your API keys, so some feeds will remain silent until you supply credentials.
Can I use it commercially?
Yes, with strict conditions. AGPL-3.0 is a network copyleft licence: if people use a modified version over a network, for example as a hosted service, you must offer them its source code under the same licence.
Is it still maintained?
Yes. The repository last received commits 178 days ago.
What is it written in?
Mainly JavaScript, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on November 13, 2026, and from our analysis. They are not legal advice.

From daily snapshots

Star history

  • calesthio/Crucix12,223 ★ · +1,347
Star history
Repository2026-07-282026-11-13
calesthio/Crucix10.9k12.2k

1,347 Stars in the last 108 days, measured from the daily GitHub snapshot. Compare with other projects

Editorial analysis

What Crucix actually solves

Crucix addresses a specific pain: public intelligence data exists across dozens of government APIs, research sites, and open feeds, but no one has time to check each one individually. The README frames it as a tool for researchers, journalists, traders, OSINT analysts, and curious individuals. Instead of visiting 27 websites, you run one Node process and get a dashboard that refreshes every 15 minutes. The project is not a data broker or a paid service. It is a local aggregation layer. That distinction matters because the value is not in the data itself, which is public, but in the parallel collection and the cross-source correlation that happens on your own machine. For a trader, the appeal is the risk gauges and market prices. For an OSINT analyst, it is the conflict data and Telegram channels. The README claims no telemetry and no subscriptions, which makes it a privacy-friendly alternative to hosted monitoring platforms.

How the sweep cycle works

The core mechanism is a server-side sweep that runs every 15 minutes, though the interval is configurable. Each cycle queries all 27 sources in parallel. The README describes the sequence: it queries, then pushes the first data update, and the dashboard auto-refreshes via Server-Sent Events (SSE). No manual page refresh is needed. The first sweep takes 30 to 60 seconds because it hits every source at once. During that window the dashboard appears empty until the sweep completes. After the initial sweep, the delta panel shows what changed since the last cycle, including new signals, escalations, and de-escalations with severity. That delta feature is what separates Crucix from a simple RSS reader. It does not just display data; it highlights changes. The cross-source signals panel correlates events across satellite, economic, conflict, and social domains. That correlation is where the intelligence part comes in.

Getting it running: commands and config keys

Setup is straightforward for anyone comfortable with Node.js. The README gives four steps: clone the repo, run npm install, copy .env.example to .env and add API keys, then start with npm run dev. The dashboard opens at http://localhost:3117. There is also a Docker path: docker compose up -d after copying the env template. Data persists in a ./runs/ directory via a volume mount, and there is a health check endpoint. A notable troubleshooting note: if npm run dev fails silently, the README recommends running node --trace-warnings server.mjs directly, or node diag.mjs to diagnose the issue. That diagnostic script checks your Node version, tests each module import individually, and verifies port availability. The requirement is Node.js 22 or higher because the code uses native fetch, top-level await, and ESM. The .env file is where you add API keys. The .env.example marks keys as optional, says sources without keys degrade gracefully, and lists credentials for FRED, NASA FIRMS, EIA, AISSTREAM, ACLED and Cloudflare Radar. Yahoo Finance market data needs no key.

What the dashboard includes and what it hides

The front end is a single-page WebGL globe built with Globe.gl, plus a flat map toggle. It renders nine marker types: fire detections, air traffic, radiation sites, maritime chokepoints, SDR receivers, OSINT events, health alerts, geolocated news, and conflict events. There are animated flight corridor arcs, region filters, and a live market panel with indexes, crypto, energy, and commodities from Yahoo Finance, which needs no API key. Risk gauges cover VIX, high-yield spread, and a supply chain pressure index. The OSINT feed pulls from 17 Telegram intelligence channels, and the news ticker merges RSS, GDELT headlines, and Telegram posts. The nuclear watch shows radiation readings from Safecast and EPA RadNet. The space watch uses CelesTrak for satellite tracking, including Starlink and OneWeb counts. The dashboard will appear empty until the first sweep completes, and .env.example says sources without keys degrade gracefully.

Performance modes and their real trade-offs

The VISUALS FULL and VISUALS LITE toggle is a rendering-only switch. The README is explicit: it does not remove data sources or reduce sweep coverage. In LITE mode, decorative background effects like radial grids and scanlines are disabled, blur and backdrop-filter effects are removed, non-essential animations stop, globe auto-rotation turns off, and animated flight-arc dashes are disabled. The news ticker and OSINT stream become static scrollable lists instead of marquees. On mobile, LITE mode forces the flat map. The preference is saved in local storage. This is a sensible design for low-powered devices, but it reveals a deeper constraint: the full mode is heavy. A 3D globe with animated arcs and live updates is not something you want on an old laptop. The trade-off is clear: you trade visual polish for smoother interaction, but the data collection cost stays the same.

Limitations and failure modes

The most obvious limitation is the API key dependency. .env.example lists the keys (FRED, FIRMS, EIA, AISSTREAM, ACLED, Cloudflare) but marks them optional, so a fresh install without keys may have degraded sources until you add them. The second limitation is the initial sweep delay: 30 to 60 seconds of an empty dashboard is acceptable for a demo, but it is a poor experience if you are trying to monitor a fast-moving event. The third is the silent failure of npm run dev on some systems, which the README acknowledges and works around. Another failure mode is the token warning: the README explicitly warns that no official token or asset exists, which suggests the project has attracted scam attempts. That is not a technical flaw, but it is a red flag for anyone who might be tempted to buy a related token. Finally, the project has no GitHub releases, and the last push was on 2026-05-20, more than five months before this check, so confirm it is still maintained before depending on it.

Alternatives and how they differ

The closest alternative to Crucix is a self-hosted RSS aggregator like Miniflux or a monitoring stack like Grafana with Prometheus. Miniflux focuses on text feeds and does not do 3D visualization or cross-source correlation. Grafana can ingest many data sources and build dashboards, but it requires you to set up each data source yourself, write queries, and manage a time-series database. Crucix is different because it bakes in the 27 sources and the correlation logic. Another alternative is a paid OSINT platform like Maltego, which is a graph-based tool for link analysis, not a live dashboard. Crucix is free to run locally and is built around its own 27 sources.

Maintenance, licensing, and upgrade cost

Crucix is licensed under AGPL-3.0. That means if you modify the code and run it as a network service, you must make your modified source available to users of that service. For a personal dashboard, that is irrelevant. For a commercial offering, it is a significant obligation. The repository includes a CONTRIBUTING.md and a SECURITY.md. The project has no GitHub releases, and the last push was on 2026-05-20, so do not assume regular updates. The dependency footprint is small, just Express, with discord.js as an optional dependency, plus the front-end libraries like Globe.gl. That small footprint keeps the install cost low, but it also means security patches depend on the maintainer. The Docker setup includes a health check and a volume for persistent data, which is good for long-running deployments. However, if a feed provider changes its API, you will have to wait for a code update or fix it yourself. The AGPL license allows that, but it also forces you to share your fixes if you expose the service publicly.

Editorial conclusion

Adopt Crucix if you want a single, self-hosted dashboard that correlates publicly available data from many sources without paying for a cloud service. Skip it if you expect all 27 feeds to work out of the box: the README says you must copy .env.example and add your API keys, so some feeds will remain silent until you supply credentials. Before relying on it for operational decisions, verify which of the 27 sources you actually have keys for, test the initial sweep with node --trace-warnings server.mjs if npm run dev fails, and confirm that the AGPL-3.0 license fits your distribution plans. The project is not archived, and the last push was on 2026-05-20, so check the repository's commit history before building a long-term workflow around it.

Frequently asked questions

crucix alternative

The repository names no competing tool. What it describes is 27 open-source intelligence feeds aggregated locally with no cloud layer and no subscriptions, and it points readers at the public demo at crucix.live before anyone clones the repo.

Does Crucix need API keys before it will start?

No. The env template states that keys are optional and that sources without keys degrade gracefully, so the dashboard runs from an empty .env. The six named credentials are FRED, FIRMS, EIA, AISSTREAM, the ACLED email and password pair, and a Cloudflare token scoped to Account Analytics Read.

What does Crucix need to run locally?

Node.js 22 or newer, because it uses native fetch, top-level await, and ESM, with npm 10 or newer, and package.json pins those in engines. The Docker path uses a node:22-alpine image, and compose mounts ./runs into the container so sweep data persists between runs.

What license is Crucix released under?

package.json carries AGPL-3.0-only in its license field, and a LICENSE file sits at the top level. Because AGPL reaches modified copies you serve over a network, read that file before you fork Crucix into something other people will run.

Official sources

  1. Official documentation
  2. Official README
  3. Project repository
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/calesthio-crucix.svg)](https://hysenlabs.com/projects/calesthio-crucix)

Star history chart for your README

markdown
[![Star history](https://hysenlabs.com/chart/calesthio-crucix.svg)](https://hysenlabs.com/projects/calesthio-crucix)

Was this useful?