roboz0r/XParsec
64.7
Adequate · 3 October 2026
5.7k
lines of production code
F#
primary language
2
measurements over time
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.