0.16

v0.16

Released 13 April 2026.

Highlights

Sites graph stabilisation

The Sites graph view no longer solves layout in the browser. Coordinates are computed on the server and persisted per-site, so the graph opens instantly with stable positions across sessions β€” no more β€œsettling graph layout” phase, no more fan noise, and positions stay where you left them on reload.

  • Stable positions β€” layout is computed once after each crawl and stored. The graph opens at the same spatial structure every time.
  • Importance-based labels β€” node importance (driven by inbound links, depth, and status) determines which labels show at each zoom level. Watched, error, and blocked nodes always stay visible and labelled.
  • Atmospheric edges β€” edges are very faint at overview zoom and strengthen as you zoom in. Only connected edges brighten on hover or selection, so the graph reads as structure rather than noise.
  • Table and graph are independent β€” table mode no longer loads graph data. Active crawl polling refreshes status separately and only reloads the full graph on completion.

Site crawl notifications

Sites now send notifications when crawls complete. The summary includes pages crawled, new pages discovered, and a list of up to 10 newly discovered URLs. Notifications route through both workspace-level and per-site notification URLs.

Parallel site crawling

The site crawler now fetches pages in parallel. A new per-site Crawl concurrency setting (1–5, default 3) controls how many pages are fetched at once. Requests are staggered across the crawl rate window so the target site never sees a burst. For a large site at default settings, full crawl time drops by roughly 3Γ—.

Associated domains β€” bulk creation

The associated domains panel now lets you select multiple domains and create new sites from them in one action.

Dashboard polish

  • Recheck feedback β€” bulk recheck from the dashboard shows a confirmation toast.
  • Site list actions β€” inline re-crawl and delete directly from the sites list.
  • Live crawl status β€” the site detail header shows a spinning indicator with page count during active crawls.

Reliability

  • Per-workspace rate limits β€” crawl dispatch (max 2 per minute), import jobs (max 2 concurrent), and bulk recheck (1 per minute) are now workspace-rate-limited.
  • XPath complexity rejection β€” pathological XPath expressions are rejected at watch creation and check execution.
  • Consistent error responses β€” all API routes now produce uniform error shapes.

Bug fixes

  • Fixed version update notifications not sending when the downstream notification channel (Telegram, Slack, etc.) returned an error β€” the version was marked as announced before the notification was actually sent. The next restart now retries.
  • Fixed edge crawl limit not being enforced, allowing unbounded edge growth on dense sites.
  • Fixed the graph view loading spinner not appearing during initial universe fetch.