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.

11,704 stars1,826 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, but its practical value depends on how many of those feeds require 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 119 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 September 15, 2026, and from our analysis. They are not legal advice.

DEEP OPEN-SOURCE 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, which is a deliberate design choice, not a bug. 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, though the README does not detail the correlation algorithm. It is a black box from the user's perspective.

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, but the README does not list which keys are required for which sources. That is a gap. You will need to inspect the .env.example yourself to see which of the 27 feeds demand credentials and which work keyless, like Yahoo Finance for market data.

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 README also mentions a nuclear watch and space watch as separate panels. What the README does not specify is how many of these sources actually work without a paid key. It says the dashboard will appear empty until the first sweep completes, but it does not say what happens when a feed returns an error. A failed source might just be skipped, or it might break the whole sweep. That is a risk you have to test yourself.

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 README does not give performance benchmarks, so you cannot know if LITE mode is enough for a Raspberry Pi or a cheap VPS. The trade-off is clear: you trade visual polish for smoother interaction, but the data collection cost stays the same. That is honest, but it also means the 15-minute sweep is the real performance bottleneck, not the rendering.

Limitations and failure modes

The most obvious limitation is the API key dependency. The README says to add your API keys, but it never lists which sources require them. That means a fresh install might show several empty panels until you figure out which keys go where. 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. The project is also a single Node process, so a crash in one feed could potentially take down the whole server. The README does not describe any error handling or retry logic for individual sources. 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 recent releases listed, and the last push date is unknown, so you cannot assume active maintenance.

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. You do not configure anything beyond API keys. Another alternative is a paid OSINT platform like Maltego, which is a graph-based tool for link analysis, not a live dashboard. Maltego requires a commercial license and a manual workflow. Crucix is automated and free, but it is also a single-purpose app. If you need to add a new data source that is not in the 27, you have to modify the code. With Grafana, you can add any source that has a plugin. That flexibility is the real difference: Crucix trades extensibility for convenience.

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 README does not mention a contribution guide or a roadmap, so the upgrade path is unclear. The project has not published any releases, and the last push date is unknown, so you cannot rely on regular updates. The dependency footprint is small, just Express according to the README, 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 archived? No, it is not archived, but the last push is unknown, so check the repository's commit history before building a long-term workflow around it.

Official sources

  1. Official documentation
  2. Official README
  3. Project repository
Community notes

Community notes