| Crates.io | neuronic |
| lib.rs | neuronic |
| version | 0.1.0 |
| created_at | 2025-12-25 17:01:25.87752+00 |
| updated_at | 2025-12-25 17:01:25.87752+00 |
| description | Real-time graphical visualization of Caryatid message bus flow |
| homepage | |
| repository | https://github.com/lowhung/neuronic |
| max_upload_size | |
| id | 2004747 |
| size | 272,196 |
Real-time graph visualization for message bus systems.

Neuronic was developed for Acropolis, a modular Rust implementation of a Cardano node. Acropolis uses the Caryatid framework, which provides an event-driven architecture where modules communicate over a message bus (RabbitMQ or an in-memory bus for single-process deployments).
Caryatid includes a monitoring layer that wraps the message bus and tracks per-module, per-topic metrics: message counts, backlog depths, and pending durations. These snapshots are published periodically to a configurable topic (default: caryatid.monitor.snapshot).
buswatch provides a TUI for this data. Neuronic provides a GUI with force-directed graph layout, making it easier to understand topology and spot bottlenecks visually.
Both tools depend on buswatch-types for snapshot deserialization. The architecture is not Cardano-specific - any system publishing compatible monitoring snapshots can use these tools.
Neuronic subscribes to a monitoring topic and renders module connectivity as an interactive graph:

Visual indicators:
cargo install --path .
neuronic
With options:
neuronic --config neuronic.toml --debug
Neuronic loads configuration from multiple sources (in order of priority):
config.default.toml - Default settings (shipped with the project)neuronic.toml - User overrides (or custom path via --config)NEURONIC_ prefixCopy config.default.toml to neuronic.toml and customize as needed:
# RabbitMQ connection (Option 1: simple format)
[rabbitmq]
url = "amqp://127.0.0.1:5672/%2f"
exchange = "caryatid"
# RabbitMQ connection (Option 2: Caryatid-style format)
# [message-bus.external]
# class = "rabbit-mq"
# url = "amqp://127.0.0.1:5672/%2f"
# exchange = "caryatid"
# Topic filtering - hide noisy topics
[filter]
ignored_topics = ["cardano.query."]
# Health thresholds
[graph]
backlog_warning = 100 # Messages before warning state
backlog_critical = 1000 # Messages before critical state
pending_warning_ms = 500 # Milliseconds before warning
pending_critical_ms = 2000 # Milliseconds before critical
Environment variables are also supported with the NEURONIC_ prefix (e.g., NEURONIC_GRAPH_BACKLOG_WARNING=50).
Neuronic can also be used as a library to embed visualization in your own application:
use neuronic::{MessageFlowGraph, HealthConfig, NeuronicConfig};
// Create a graph with custom thresholds
let graph = MessageFlowGraph::new_with_config(
HealthConfig::default(),
vec!["noisy.topic.".to_string()],
);
// Update from buswatch snapshots
graph.update_from_snapshot(&snapshot);
See the API documentation for full details.
src/
├── lib.rs # Library entry point
├── main.rs # CLI entry point
├── config.rs # Configuration loading
├── subscriber.rs # RabbitMQ subscriber
├── graph.rs # Graph model (petgraph)
└── ui/
├── mod.rs # UI module exports
├── app.rs # eframe application
├── theme.rs # Color schemes
├── drawing.rs # Bezier edge rendering
├── input.rs # Mouse/keyboard handling
├── layout.rs # Force-directed simulation
├── animations.rs # Particle and pulse effects
├── panels.rs # Side panels
├── search.rs # Fuzzy search
├── export.rs # SVG export
└── types.rs # Shared types
Apache-2.0