Skip to content
CAI
Software that uses CAICheck a score

AngelMunoz/Navs

69.7

Adequate · 3 October 2026

3k

lines of production code

F#

primary language

2

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This system is a modular routing library for .NET applications, providing core URL matching, navigation state management, and route guard capabilities. It offers specialized adapters for integrating with various UI frameworks, including Avalonia, FuncUI, and Terminal.Gui. The codebase also includes a dedicated URL template library for parsing and generating typed URLs, supported by comprehensive test suites and multiple sample applications demonstrating reactive state management and cross-language interoperability.

How it got here

6 changes.

The project released Navs 1.0.0, introducing breaking API changes, new Terminal.Gui and interop DSLs, and modernized infrastructure targeting .NET 10. This period involved removing the legacy Routerish implementation and migrating its core UrlTemplates library with improved query handling and performance optimizations.

2024–2026 — Router library and sample expansion

10 changes.

This period focused on expanding the Navs routing ecosystem by introducing specialized libraries for Avalonia, FuncUI, and Terminal.Gui, alongside comprehensive unit tests for core routing and URL parsing. The work was accompanied by the creation of multiple sample applications that demonstrated these new integrations, showcasing features like state management, reactive UIs, and deep-linking across different platforms.

Features

Add C\# Avalonia sample with router and state management

A new C\# sample application (CSharpToo) has been added to demonstrate an Avalonia UI integrated with the Navs router and Adaptive Data state management. The sample includes a solution file and a Program.cs that defines routes for home, about, and dynamic navigation pages, showcasing features like URL parameter handling, stateful components, and programmatic navigation via buttons.

samples/CSharpToo · high confidence

Add FuncUI sample with routing and shared state management

The FuncUI sample application now demonstrates client-side routing and shared state handling. Users can navigate between views (Books, Guid, Counter, Readable counter) using a navbar, with route definitions supporting path parameters and caching. The sample also illustrates how to manage shared state across components using \cval\ and \aVal\ patterns, allowing multiple views to react to the same underlying data changes.

samples/FuncUI · high confidence

Add NxuiDeclarative sample application with navigation and reactive UI pages

A new sample application has been added to demonstrate NxuiDeclarative capabilities, featuring a main window with navigation buttons for three distinct pages: a Counter page that allows incrementing, decrementing, and resetting a value; a Books page that simulates an asynchronous search with a loading state; and a Guid page that displays a provided or generated GUID. The sample utilizes Avalonia for the UI framework, FSharp.Data.Adaptive for reactive state management, and Navs.Avalonia for routing, providing a concrete example of how to wire up declarative views, handle query parameters, and manage asynchronous data fetching within the NXUI ecosystem.

samples/NxuiDeclarative · high confidence

Add Routerish sample with state-managed counter route

The Routerish sample application now includes a counter route that demonstrates state management using AVal.useState. Users can navigate to the counter page via buttons, where they can increment, decrement, or reset a count value, with the current count displayed in a TextBlock. The sample also includes routes for displaying a GUID and a static books page, utilizing the AvaloniaRouter for navigation and NXUI for UI components.

samples/Routerish · high confidence

Add TGUI sample application with navigation and login

A new sample application in the samples/TGUI directory demonstrates a terminal-based GUI built with Terminal.Gui. It includes extension methods for View, TextField, and Button to simplify UI composition and reactive binding. The app features a router supporting named routes (home, about, login) and deep-linking via tgui:// URIs. The login page validates credentials (admin/password) and displays success or error messages, while home and about pages provide navigation buttons to switch between views.

samples/TGUI · high confidence

Introduce Avalonia navigation library with adaptive state and routing

Adds the Navs.Avalonia library, providing an Avalonia-specific router (AvaloniaRouter) that renders UI controls and supports optional splash screens and logging. It includes a Route component and Routes container for defining and managing navigation paths, along with AVal utilities to bridge F\# adaptive data (aval/cval) with Avalonia bindings and .NET interop.

src/Navs.Avalonia · high confidence

Introduce Avalonia.FuncUI router integration and components

Adds the \Navs.FuncUI\ library, providing a \FuncUIRouter\ that adapts the core \Navs.Router\ for Avalonia.FuncUI applications. This includes a \RouterOutlet\ component for rendering matched views, extension methods (\useRouter\, \useAVal\, \useCval\) to integrate router state and adaptive values into FuncUI components, and helper functions to define routes supporting synchronous, async, and task-based handlers.

src/Navs.FuncUI · high confidence

Introduce Navs.Terminal.Gui library for Terminal.Gui routing

Added the new Navs.Terminal.Gui library, which provides a router implementation specialized for Terminal.Gui applications. This includes the TerminalGuiRouter type for managing navigation state and the RouterOutlet component for rendering views. The library exposes helper modules for managing adaptive state (AVal) and defines route handlers that support synchronous, asynchronous, and task-based return types, along with optional logging and splash screen support.

src/Navs.Terminal.Gui · high confidence

Introduce UrlTemplates library for URL matching and generation

The UrlTemplates library is now available, providing capabilities to define URL templates with typed path segments and query parameters, match incoming URLs against these templates to extract parameters, and generate URLs from templates. This includes support for parsing URL components (segments, query strings, hashes), handling typed parameters (String, Int, Float, Bool, Guid, Long, Decimal), and managing required/optional query keys.

UrlTemplates · high confidence

Introduce idiomatic F\# and interop DSLs for route definitions

The Navs module now provides dedicated DSLs for defining routes, offering an idiomatic F\# API (DSL.fs) with support for synchronous, async, and Task-based view handlers and guards, alongside a .NET-interoperable API (DSL.Interop.fs) using standard Func delegates for use from C\# and VB.NET. These DSLs allow developers to define routes with names, URL patterns, and view content, while attaching activation and deactivation guards and configuring cache strategies via extension methods or functional combinators.

src/Navs · high confidence

Introduce new router type signatures and navigation interfaces

The Navs module now exposes the core type definitions and interfaces for its routing system, including the \Router\ builder, \IRouter\ and \INavigable\ interfaces, and context types like \RouteContext\ and \ActiveRouteParams\. This change adds support for logging via \ILogger\, configurable cyclic redirect protection through \maxCyclicRedirects\, and cancellation-aware navigation using \CancellableValueTask\. It also defines the \GuardResponse\ and \RouteGuard\ types to enable route guards and the \CacheStrategy\ enum to control view caching behavior.

Navs · high confidence

Removals

Removal of Routerish sample application and core routing implementation

The Routerish sample application and its underlying routing engine have been removed from the codebase. This change deletes the main entry point (Program.fs), which previously defined navigation routes (Home, About, Guid) and the Avalonia UI shell, as well as the core routing logic files (Router.fs, RouteMatcher.fs) that handled URL matching, parameter parsing, and navigation history. Users will no longer have access to this specific demo application or the library code contained within this directory.

src/Routerish · high confidence

Behavioural changes

The Navs router library has reached version 1.0.0 with several breaking changes and new capabilities. The \RouteGuard\ delegate signature has changed to accept two arguments (previous and target context) and now returns a \CancellableValueTask\, requiring updates to existing guard implementations. Nested routes and \RouteDefinition.children\ have been removed, requiring all routes to be defined at the top level. The \Navs.Avalonia\ adapter now uses \Control\ instead of \\#Control\ for view types. New features include a \Navs.Terminal.Gui\ adapter library, optional \ILogger\ support across the router and adapters, query-parameter helpers in \RouteContext\, and a \maxCyclicRedirects\ parameter to prevent infinite redirect loops. The solution has been modernized with central package management, .slnx format, and upgrades to .NET 10.0 and Avalonia 12.0.5.

(repo-wide) · high confidence

UrlTemplates library migrated from Routerish with improved query handling and .NET extension support

The UrlTemplates library has been reorganized and renamed from the previous Routerish namespace, introducing a new RouteMatcher component that provides typed parameter extraction from URLs. This change enhances the library by supporting .NET extension methods (visible in VB.NET) for easier access to path and query parameters, switching internal query storage from immutable Maps to mutable Dictionaries for performance, and adding robust validation to prevent null dictionary errors and handle edge cases like duplicate route segments.

src/UrlTemplates · high confidence

Test coverage

Added unit tests for navigation routing and URL template parsing

Added comprehensive test suites for the Navs and UrlTemplates libraries. The Navs tests verify route DSL creation (sync, async, and task-based content getters), router state transitions (Idle, Navigating), and navigation context handling including cancellation. The UrlTemplates tests validate URL parameter parsing (including type constraints like integers), query parameter handling (optional vs. required), and error reporting for invalid template syntax.

Navs.Tests, src/Navs.Tests, src/UrlTemplates.Tests · high confidence

Dependencies

Migrate to .NET 10 and centralize dependency management

The project now targets .NET 10 (alongside .NET 8) and adopts central package management via Directory.Packages.props to standardize versions across all libraries and samples. Key dependencies have been updated, including Avalonia to 12.0.5, NXUI to 12.0.0, FSharp.Data.Adaptive to 1.2.26, and IcedTasks to 0.11.9. The legacy Routerish sample project has been removed, and new sample projects (CSharpToo, FuncUI, NxuiDeclarative, TGUI) have been added to demonstrate the navigation library with these updated frameworks.

(dependencies) · high confidence

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

How this codebase got here

Score

  • CAI 70 → 70 (-0.6)
  • Rubric changed (rubric-2026.09.15 → rubric-2026.10.1) — scores are not directly comparable.

Lenses

  • Code Health 95 → 95 (+0.0)
  • Architecture 93 → 97 (+3.2)
  • Maturity 64 → 64 (+0.0)
  • Readiness 64 → 64 (-0.4)
  • Security 82 → 78 (-4.0)

Resolved (3)

  • Duplicated block (7–9 lines × 2) (src/Navs/Types.fs)
  • redundant comment (samples/CSharpToo/Program.cs)
  • redundant comment (samples/CSharpToo/Program.cs)

New (9)

  • Duplicated block (7–9 lines × 2) (src/Navs/Types.fs)
  • High CVE: Tmds.DBus.Protocol 0.16.0
  • Outdated: Avalonia.Desktop
  • Outdated: Avalonia.Themes.Fluent
  • Outdated: CSharp.Data.Adaptive
  • Outdated: FSharp.Data.Adaptive
  • Outdated: Ionide.KeepAChangelog.Tasks
  • redundant comment (samples/CSharpToo/Program.cs)
  • redundant comment (samples/CSharpToo/Program.cs)

Architecture

  • Unchanged — 0 containers · 3 contexts · 2 edges

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

AngelMunoz/Navs was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 3 October 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit 5183a392e119556d6abd5b1831298c195ddf13a6 — the exact code this score is about.
  • Scored under rubric-2026.10.1 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-4f4226d619ea.