Skip to content
CAI
Software that uses CAICheck a score

roboz0r/XParsec

64.7

Adequate · 3 October 2026

5.7k

lines of production code

F#

primary language

2

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

XParsec is a .NET and Fable-compatible parsing library that provides core combinators, binary data handling, and specialized parsers for JSON and command-line arguments. It includes utilities for error formatting and operator precedence, supporting both big-endian and little-endian byte orders. The system also features an interactive web-based client for testing parser errors and benchmarks comparing its JSON performance against FParsec.

Features

Add JSON parsing benchmark comparing XParsec and FParsec

A new benchmark suite has been added to the \bench\ directory to evaluate the performance of the XParsec JSON parser against the FParsec library. The benchmark, implemented in F\# using BenchmarkDotNet, fetches a large Azure Pipelines schema file and measures the parsing speed of both libraries. This addition provides a concrete performance baseline for the XParsec JSON implementation relative to a well-established alternative.

bench · high confidence

Initial release of the XParsec parsing library

This change introduces the XParsec library, providing a comprehensive set of parsing combinators and utilities for .NET and Fable. It includes core parser modules (Parsers, Combinators) with a parser computation expression, specialized parsers for characters and strings (CharParsers), and binary data parsing (ByteParsers) supporting various integer and floating-point formats in both big-endian and little-endian byte orders. The library also features a robust operator precedence parser (OperatorParsing) for building expression grammars, error formatting utilities with line/column tracking (ErrorFormatting), and compatibility shims for Fable (FableTypes). Additionally, it provides optimized data structures like SmallArrayBuilder and ImmutableArray builders to minimize allocations.

src/XParsec · high confidence

Introduce JSON parsing capability

Adds a new JSON parser to the library, enabling users to parse JSON strings into a structured \JsonValue\ type (supporting strings, numbers, objects, arrays, booleans, and null). The parser is locale-independent for number parsing, using \CultureInfo.InvariantCulture\ to ensure consistent float conversion, and includes support for escape sequences and unicode escapes.

src/XParsec.Json · high confidence

Introduce command-line argument parsing library

Adds a new \XParsec.CLArgs\ package that provides a parser for command-line arguments, supporting flags, settings, boolean settings, and parsed settings with optional aliases and equals-assignment syntax. The implementation defines core types like \CLOption\ and parsing logic in \Types.fs\, relying on the \xparsec\ library and targeting .NET Standard 2.0 and .NET 8.0.

src/XParsec.CLArgs · high confidence

Introduce interactive XParsec client and server for testing parser errors

A new interactive client-server application has been added to allow users to test the XParsec JSON parser directly in a browser. The client, built with SolidJS and Tailwind CSS, provides a UI where users can input partial JSON strings and immediately view parsing results or error messages. The server, an ASP.NET Core backend, exposes a /parse endpoint that processes these requests, utilizing the shared XParsec types and serialization logic to return structured success or failure responses.

interactive · high confidence

Behavioural changes

XParsec 1.0.0 release with breaking API changes and performance improvements

This release introduces significant breaking changes to the core API, including the removal of the \InputSlice\ generic parameter from \Reader\ and \Parser\ types (now self-slicing), the removal of \Reader.Current\ and \OperatorParsing.brackets\, and a new \ErrorType.Empty\ model that filters empty errors in aggregating combinators. Behavior changes include \pseq\ and related functions now succeeding on empty needles, and \manyChars\/\many1Chars\ raising \InfiniteLoopException\ instead of returning soft errors. Performance is improved via stack-allocated \SmallArrayBuilder\, inlined primitives, and reduced allocations in operator parsing. The library also adds \ReadableArrayBuilder\, expands the Readable view API, and raises the Fable tool requirement to 5.0.0.

(repo-wide) · high confidence

Test coverage

Added interactive test harness for XParsec.CLArgs; Added test suites for core parsers, error formatting, and MessagePack integration; Added tests for JSON and command-line argument parsing.

Dependencies

Initial dependency configuration and project structure

This change introduces the foundational build configuration for the XParsec library and its ecosystem. It establishes centralized package version management via Directory.Packages.props, defining core dependencies such as Fable.Core (4.5.0), FSharp.Core (8.0.300), and System.Collections.Immutable (8.0.0). The diff adds project files for the main library (targeting net8.0 and netstandard2.0), a JSON parser module, and a command-line arguments module. It also sets up an interactive client/server application using .NET 10.0 with Fable for JavaScript compilation, incorporating frontend dependencies like SolidJS, TailwindCSS, and Vite, alongside server-side packages like Oxpecker and Thoth.Json. Additionally, it configures multiple test and benchmark projects using Expecto, FsCheck, and BenchmarkDotNet, all targeting .NET 10.0.

(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 63 → 65 (+1.8)
  • Rubric changed (rubric-2026.09.13 → rubric-2026.10.1) — scores are not directly comparable.

Lenses

  • Code Health 78 → 78 (-0.0)
  • Architecture 91 → 97 (+6.2)
  • Maturity 58 → 58 (-0.0)
  • Readiness 59 → 60 (+1.5)
  • Security 70 → 75 (+5.0)
  • Performance 90 (new)

Resolved (4)

  • Documentation: no architecture or design documentation (docs/byte-parsers.md)
  • Documentation: no architecture or design documentation (docs/char-parsers.md)
  • Documentation: no installation or build instructions (README.md)
  • Documentation: no usage examples (README.md)

New (1)

  • Outdated (npm): source-map-js

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

Survey your own repository

roboz0r/XParsec 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 16ff7146bdaf8cab2c9186b8c6d3d9750a5181ed — 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-351388015767.