Installation
Install the console binary:Quick Start
Start the console while your iii engine is running:Dashboard
The Dashboard is the landing page. It provides an at-a-glance view of your running iii engine, including live metrics, system health, and quick navigation to every major feature. When you open the console athttp://localhost:3113/, the Dashboard shows:
- System counters — total registered Functions, Triggers, Workers, and Streams
- Mini-charts — real-time metric visualizations for recent activity
- Application flow — a high-level diagram showing how Triggers, Functions, and data flow through your system
- Last update timestamp — indicates when metrics were last refreshed
These counters update automatically via WebSocket and reflect the current state of the engine. Each counter links directly to its dedicated section.
The Dashboard also includes an application flow diagram that shows how triggers, functions, and data flow through your system.
Functions
The Functions page lists every function registered with the iii engine and lets you invoke any of them directly with custom JSON input. All registered functions are displayed with their metadata:
Use the search bar at the top to filter functions by name.
Invoking Functions
You can invoke any function directly from the console:- Click on a function to open its detail panel
- Enter a JSON payload in the input editor
- Click Invoke
- View the result or error in real time
- Testing a function during development without wiring up a trigger
- Debugging by sending specific payloads to reproduce an issue
- Ad-hoc operations like running a migration function manually
users.getProfile:
POST /_console/invoke and displays the JSON response or error inline.
Only functions that are currently registered and connected via an active worker will appear in the list. If a function is missing, check that its worker process is running.
Triggers
The Triggers page shows every trigger registered with the engine and provides interactive tools to test each trigger type. Triggers are grouped by kind (HTTP, CRON, QUEUE) with a total count badge and per-type filter tabs.Testing HTTP Triggers
For HTTP-type triggers, the console provides a built-in request builder:- Select the HTTP method (GET, POST, PUT, DELETE, PATCH)
- The path is pre-filled from the trigger configuration
- Add query parameters as key-value pairs
- Enter a request body (for POST/PUT/PATCH) as JSON
- Click Send to execute the request
POST /api/users:
Testing Cron Triggers
Cron triggers display their schedule expression (e.g.0 */5 * * * *). You can view the configured schedule and click Trigger Now to manually fire the cron job immediately. This is useful for testing scheduled tasks without waiting for the next scheduled run.
Testing Event Triggers
For event-type triggers, the console provides an event emitter: the event name is pre-filled, you enter a JSON payload, and click Emit to publish the event.The available trigger types depend on which modules are loaded in your engine configuration. See Trigger Types and Modules for the full list.
States
The States page provides a browser for the engine’s key-value state store. You can view, create, edit, and delete state entries organized by scope. The layout is divided into three panels: a group list on the left, an items table in the center, and a detail sidebar on the right. The state browser displays a two-level hierarchy:- Groups (Scopes) — top-level namespaces that organize state
- Items — individual key-value pairs within each group
Managing State
- Add — Click Add Item, enter the scope, key, and JSON value, then save. Persisted via
state::set. - Edit — Click an existing item, modify the JSON value, and save. Fires
state:updatedtriggers if registered. - Delete — Click the delete icon and confirm. Fires
state:deletedtriggers if registered.
State persistence depends on your engine’s State module configuration. With
in_memory storage, state is lost on engine restart. With file_based or RedisAdapter, state persists across restarts. See State Module for configuration details.Streams
The Streams page is a live WebSocket monitor that captures messages flowing through the engine’s stream connections. It shows message counters (total, inbound, outbound, and buffer size), subscription management, and direction filter tabs.
Use the filter toggle to show or hide system streams. Streams update in real time via WebSocket.
Streams are provided by the Stream module. Make sure
modules::stream::StreamModule is included in your engine configuration. See Stream Module for details.Traces
The Traces page provides full OpenTelemetry trace visualization with multiple view modes, advanced filtering, and detailed span inspection.Trace collection requires the Observability module with
exporter set to memory or both. See Observability Module for configuration.Trace List
View Modes
Click on a trace to open the detail view with four visualization modes:- Waterfall Chart — Timeline view showing every span laid out horizontally by start time and duration. This is the default view and is best for understanding the sequential and parallel flow of operations.
- Flame Graph — Stack-based visualization where each span is stacked on its parent. Wider bars indicate longer duration. Useful for identifying which operations consume the most time.
- Service Breakdown — Groups spans by service name with aggregate statistics: total spans, average duration, and error rate. Useful for identifying which service is the bottleneck.
- Trace Map — Topology graph showing how services communicate. Nodes represent services and edges represent span parent-child relationships across service boundaries. Useful for understanding distributed call patterns.
Span Details
Click on any span to open the detail panel:Trace Filtering
Multiple filters are combined with AND logic. Pagination controls at the bottom allow browsing large result sets.
Logs
The Logs page provides a viewer for structured OpenTelemetry logs collected by the engine. Logs are displayed in reverse chronological order. Each entry shows a timestamp, severity level, service name, trace/span context, and message. A severity filter toggle, full-text search, and time-range controls let you zero in on specific log entries. The source breakdown at the bottom shows which services are contributing the most log volume.Log collection requires the Observability module with
logs_enabled: true. See Observability Module for configuration.Log Viewer
Click on a log entry to expand and see the full JSON payload, including attributes, trace/span IDs, and resource metadata.
Log Filtering
Log Entry Details
Each expanded log entry includes:If a log entry has a
trace_id, you can click it to jump directly to the corresponding trace in the Traces section above.Flow
The Flow page renders an interactive graph of your system’s architecture, showing how triggers, functions, state stores, and queues connect.
Edges show the data flow direction between components — from triggers to the functions they invoke, and from functions to the state or queues they interact with.
- Pan and zoom — scroll to zoom, drag to pan
- Click a node — view its details (function ID, trigger config, etc.)
- Auto-layout — the graph arranges itself automatically using a directed-graph layout