Releases: Vadims06/topolograph
Release list
v2.66.16
Topolograph Release Notes v2.66.16
Fixes
OSPF Watcher events via Fluent Bit: correct up/down classification
Adjacency and network up/down events received from a watcher running the
Fluent Bit exporter were misclassified as cost changes, so they never appeared
in the up/down event history. They are now stored and shown correctly.
Fluent Bit event payload parsing
Nested link, network and TE-metric fields in Fluent Bit event payloads are now
normalised on ingestion, so all event types (adjacency, network, TE metric)
are accepted regardless of exporter payload shape.
Internal
- Test infrastructure improvements.
Compatibility
| Feature | Minimum version |
|---|---|
| Fluent Bit event export | OSPF Watcher >= v3.2.0 |
Topolograph remains compatible with existing Logstash and Vector exporters;
no watcher upgrade is required for them.
v2.66 (13.07.2026)
Features
Redesigned public landing page
Overload-bit aware shortest-path calculation
Path computation now honours the overload / stub-router flag on nodes.
- IS-IS: overloaded nodes are hard-excluded from transit. If the only path transits an overloaded node the destination is reported as unreachable, and the reachable prefix up to the blocking node is highlighted on the graph.
- OSPF stub-router (max-metric): overloaded nodes remain reachable as last resort. The path is returned but flagged so the user knows it forwards through a node advertising max-metric.
The UI displays a warning banner (⚠ Destination unreachable … or ⚠ Forwarded via overloaded router) below the path description when the flag fires. No change for graphs without any overloaded node.
API: POST /path/ and POST /path/network/ responses include a new optional overload object when at least one node carries the flag:
{
"overload": {
"verdict": "unreachable | reachable",
"last_resort": false,
"blocked_by": "pe-r2",
"partial_path_nodes_name_as_ll": ["192.168.100.100", "pe-r2"]
}
}Cisco OSPF TE opaque-area (Type 10) support
TE metric, admin group, max/reservable bandwidth, and unreserved bandwidth are now parsed from Cisco show ip ospf database opaque-area output in addition to FRR. Parsed TE attributes are attached to graph edges for path-cost display.
OAuth 2.0 authorization-code provider for AI agent integration
Demo graph now ships with sample monitoring events
New users can now see what the OSPF/IS-IS monitoring timeline looks like without connecting a real watcher first.
Register page now available in all six languages
Updated How-To guide screenshots
YAML diagram edit toolbar
The /yaml-diagram page now has a toolbar for editing a loaded/shown/saved graph directly, without hand-editing YAML: add or edit a node, delete a node, and add/edit/delete an edge (parallel duplicate edges are shown individually so the right one can be picked). Every change is applied immediately through the graph's REST API and reflected back into the YAML text area and the diagram.
YAML diagram source code editor
The /yaml-diagram source pane is now a code editor: syntax highlighting for keys/values/comments, line numbers, a structure overview with per-block item counts, and a minimap. Tab/Shift-Tab indent, auto-indent on Enter, and native undo/redo are preserved.
Design Mode: save a write-shared diagram in place
A diagram shared with write access can now be saved back to the same shared graph instead of forking a new copy.
TE edge attributes
The edge help now documents optional traffic-engineering attributes: admin_group, temetric, max_link_bw, max_rsrv_link_bw, and unreserved_bw_0 .. unreserved_bw_7.
AI agent landing form
ECMP: spread parallel links
Expanding an ECMP edge now draws each member link as its own straight, evenly spread parallel line anchored at its own point on the node border, instead of a shared curved fan. Endpoint nodes grow to fit the fan and shrink back once the ECMP edges are collapsed.
Fixes
Google login no longer fails with Internal Error
Fixed a bug that caused every Google sign-in to fail after the user granted consent.
"The topology is absolutely the same." no longer repeats on every page open
Upload page cosmetic fix
Fixed an internal cosmetic issue on the upload page that caused browser console errors. No functional impact.
Some API/UI actions returned a 500 error instead of "not found" for missing records
Monitoring dashboard now shows the correct graph creation time
Watcher status dock no longer overlaps content on scroll
The monitoring page's watcher status panel now scrolls with the page instead of staying fixed in place.
Path lookup could crash on a monitored graph with certain watcher events
Applying watcher events to the graph now reuses the same event-resolution logic as the OSPF/IS-IS monitoring page, so a down/up flap resolves correctly and a TE event is no longer mistaken for a cost change.
UI's shortest-path diagram could disagree with the /api/path endpoint
On a watcher-monitored graph, /api/path reflects watcher-detected cost changes and link flaps since the graph was captured, while the "show shortest path" and "remove edge to see backup path" diagrams still showed the graph exactly as originally captured. The two could report a different number of equal-cost paths, or a different cost, for the same graph and routers. Both diagrams now apply the same watcher event resolution /api/path uses, so they never disagree about a monitored graph's current state.
Edge details API: return 404 for an out-of-range edge_id in get_edge_details.
ECMP link expand/collapse no longer moves endpoint nodes
Expanding and collapsing ECMP links now keeps the graph layout stable instead of causing visible node movement.
Compatibility
| Feature | IS-IS Watcher | OSPF Watcher | Topolograph |
|---|---|---|---|
| Agent OAuth 2.0 provider | any | any | ≥ v2.66.1 |
| SRLG visualization and tracking | ≥ v3.2.0 | — | ≥ v2.66 |
| Node-flag display (overload / attached / ABR / ASBR) | ≥ v3.1.6 | — | ≥ v2.66 |
| Overload-bit aware path calculation | ≥ v3.1.6 | — | ≥ v2.66 |
| Heartbeat / live-watcher indicator | ≥ v3.1.1 | — | ≥ v2.63 |
v2.65 (07.06.2026)
Topolograph Release Notes v2.65
Features
API: new GET /api/events/{graph_time}/adjacency/timeline endpoint
Returns adjacency up/down events already grouped into chronological time waves, so a client can narrate a network incident without post-processing hundreds of raw events. Grouping is computed server-side.
- Waves are split by inter-event gaps: a new wave starts when the gap to the next event exceeds
TIMELINE_GAP_MULTIPLIER * median_gap_sec(median is robust to bursts).median_gap_secand the multiplier are echoed in the response. - Each wave is characterised with
start_ts,end_ts,duration_sec,event_count,density,distinct_devices,trigger_device,patternandconverged. start_ts/end_tsare ISO 8601 withZ(e.g.2025-05-10T17:08:17.707000Z), the same format as thestart_time/end_timequery params, so a client can re-query the existing/adjacencyendpoint for a wave's individual events.
pattern classifies the wave by device state, mirroring the graph-level status from /graph/{graph_time}/status:
pattern |
Meaning | Example | Related graph status |
|---|---|---|---|
outage |
At least one device is left down at the end of the wave (fell and did not come back). | R1 down (no later up); R1 down, R2 down→up (R1 still down) |
critical (single host down) |
flap |
Everything that went down came back up within the wave. Independent of device count. | R1 down→up; R1..R100 each down→up |
warning (host down then up) |
up |
Only up events, nothing went down in the wave (recovery or brand-new adjacency). | R1 up, R2 up |
ok (up-only events) |
converged is true when every device left down in the wave recovers later on the timeline (this or any later wave).
API: GET /api/graph/{graph_time}/status now includes top_unstable_devices
A top-N list of {device, event_count} sorted descending, answering "which device is worst" without a separate endpoint.
Fixes
Event time-range query is now inclusive at both ends
Re-querying a wave's [start_ts, end_ts] time window now returns exactly that wave's events (no boundary events lost). Previously, events at the exact end timestamp were excluded.
all_host_up_down_events is now returned in chronological order
GET /api/events/{graph_time}/adjacency sorts host up/down events by @timestamp in the DB query (previously returned in insertion order).
Configuration
TIMELINE_GAP_MULTIPLIER(default5): the multiplier used to detect wave boundaries. Override via the environment variable of the same name.
v2.64 (01.06.2026)
Topolograph Release Notes v2.64
Features
New endpoint: GET /api/graph/{graph_time}/edges
Returns a paginated list of edges for a graph with support for graph-level pre-filters (protocol, watcher, area) and per-edge attribute filters. Exact match (?weight=10) and range operators (__gt, __lt, __gte, __lte) are supported for any edge attribute including TE fields (temetric, max_link_bw, max_rsrv_link_bw, unreserved_bw_0..7), IS-IS fields (isis_level), and arbitrary user-defined attributes.
GET /api/graph/{graph_time}/nodes — new filters
Added protocol (ospf / ospfv3 / isis / yaml), watcher (true/false), and area query parameters. These check graph-level document flags before touching igraph, returning 404 with a clear message when the graph does not match the filter.
GET /api/diagram/{graph_time}/nodes and /edges — pagination
Both endpoints now return { items: [...], pagination: { page, per_page, total, total_pages } } instead of a bare list. Added page and per_page query parameters. Fixed style: deepObject swagger declaration — parameters are now style: form (flat key=value), matching how the handlers have always read request.args.
MCP server updated
get_nodes and get_edges MCP tools now call /graph/{graph_time}/nodes and /graph/{graph_time}/edges respectively, exposing protocol, watcher, area, page, and per_page parameters. get_edges accepts edge_query_params as a flat dict for per-edge attribute filtering.
GET /api/graph/ — monitoring filters, search, and pagination
The graph-list endpoint now returns { items: [...], pagination: { page, per_page, total, total_pages } } and adds:
is_monitored(true/false) — filter by provenance: graphs received from a watcher vs manually uploaded. Each returned graph also reportsis_monitored.is_live— per-graph field: whether the source watcher is currently sending heartbeats (last_seen within 3× its heartbeat interval). Manual graphs and graphs with no recent heartbeat arefalse.name— case-insensitive substring overgraph_timeorwatcher_name(e.g.?name=before_maintenance).latest_onlynow returns the single newest graph among those matching the filters (previously one per watcher).page/per_pagepagination. Thewatcher_namequery parameter is removed — usenameinstead.
The Topolograph SDK (graphs.list / graphs.get) and MCP get_all_graphs tool expose the same parameters and surface is_monitored / is_live.
Area filtering on /nodes, /networks, and /edges
Narrow query results to a specific OSPF or IS-IS area in one parameter:
?area=0, ?area=0.0.0.1, or ?area=49.0001.
/nodes?area=X— returns only routers that participate in areaX. Area Border Routers (ABRs) appear in every area they belong to./networks?area=X— returns only networks advertised in areaX. The displayedareafield on each network and termination point reflects the actual advertising area./edges?area=X— returns edges with at least one endpoint in areaX. Useful for plotting an area's adjacencies including its boundary links to neighboring areas.
Standard OSPF area formats (0, 1, 0.0.0.1) are accepted interchangeably. IS-IS areas (49.0001, etc.) are matched as written.
Fixes
API: GET /api/diagram/{graph_time}/edges?src_node=<ip> returned 404 "Node was not found"
Connexion did not reliably bind src_node/dst_node query parameters to function arguments when values contained dots (e.g. IP addresses). The parameters are now read directly from request.args. Additionally, filtering edges by only src_node (without dst_node) no longer triggers a false 404 for the empty destination.
API: getPath with unknown IS-IS node ID raised an unhandled exception
Searching for a non-existent node by IS-IS-style attribute (e.g. AAAA.BBBB.CCCC) on an OSPF graph raised a KeyError because the attribute does not exist on OSPF graphs. The error is now caught and returned as a proper {"error": "..."} response.
API: GET /api/events/{graph_time}/adjacency and /networks returned 500 for OSPF graphs
Two bugs caused the event endpoints to fail on OSPF graphs:
swagger.ymlmarkedlevel_number(an IS-IS-only field) as required in all four event response schemas — Connexion response validation rejected OSPF events that omit it. The field is now optional inNetworkUpDownEvent,HostUpDownEvent,LinkMetricChangeEvent, andNetworkMetricChangeEvent.TELinkMetricChangeEventhad nooutput_apiproperty, causing anAttributeErrorwhen TE link metric events were serialised for the API response. Addedoutput_apireturning the same shape asLinkMetricChangeEvent.output_api.
Performance
Faster /nodes and /edges responses on large graphs
Per-router area membership is now computed once when a graph is uploaded rather than recomputed on every API request. Graphs uploaded with earlier versions benefit automatically on first read after the upgrade.
v2.63 (25.05.2026)
New Features
Watcher heartbeat and status card
OSPF Watcher and IS-IS Watcher now send periodic heartbeats to Topolograph. A new Watchers Status card on the monitoring page shows each connected watcher with its area/ASN and the time of last contact, auto-refreshed every 30 seconds.

Improvements
Monitoring page UI: Fixed layout.
Runtime upgrade
Python 3.11 → 3.12. Existing user passwords are transparently re-hashed on first login - no manual action required.
Fixes
- Fixed logout redirect error introduced in v2.62.
v2.62 (30.04.2026)
New Features
Multi-LSDB upload workflow
LSDB upload now supports both single-file and multi-file workflows in one screen, making bulk ingestion easier during onboarding and migration tasks.

Monitoring: broader event visibility
Monitoring now includes node-related events in addition to edge transitions, improving visibility during incident triage and change tracking.
Monitoring timeline and controls
Filter is added for the events in the Timeline. Fix max size of the Timeline to fit the screen size, better color-coded event markers.
Fixes
Monitoring panel behavior: Edge event panel layout and interactions were stabilized, and edge tooltip state now stays synchronized with timeline filtering.
Other Improved API stability and UI interfaces.
v2.61 (30.04.2026)
New Features
Multi-language support
The interface is available in English, Russian, Chinese, Portuguese, Spanish, and French, with French included alongside the earlier set.
Translations are maintained in topolograph-lang and shipped with the application as a submodule so language packs can move on their own cadence.
Fixes
Shortest-path lookup: Choosing a destination router in the shortest-path tool no longer shows invalid or empty choices when some router identifiers are missing from the current graph data.
v2.59 (28.03.2026)
v2.58 (08.03.2026)
Topolograph Release Notes v2.58
New Features
Traffic Engineering (TE) link attributes: Topolograph can now use TE data from your OSPF or IS-IS LSDB to show link-level traffic-engineering information on the diagram. You get visibility into link TE metric, administrative group (affinity), maximum and reservable bandwidth, and unreserved bandwidth per priority—useful for capacity planning, path analysis, and finding links that meet your TE constraints. When TE data is present, you can filter diagram links by TE metric or bandwidth from the UI and via the diagram edges API or the Topolograph SDK.

UI improvements:
- Graph background updated for better visibility
- Popup forms and compare form layout refined
- Edge tooltips: two-column layout and scroll for long attribute lists; bandwidth values formatted for readability
- Network Statistics text placement adjusted
- Network loading performance improved for large topologies
v2.57.2 (19.02.2025)
Improvements
- Build-in Napalm removed
- 'vector', 'fluentbit' exporters support is added
- Add network statistics and scoring system
- Watcher, new buttons: Pause, Enable Popups, Show Errors (show malformed BGP-LS messages)
Watch demo



