FixPortal.FixAtdl
1.4.0
dotnet add package FixPortal.FixAtdl --version 1.4.0
NuGet\Install-Package FixPortal.FixAtdl -Version 1.4.0
<PackageReference Include="FixPortal.FixAtdl" Version="1.4.0" />
<PackageVersion Include="FixPortal.FixAtdl" Version="1.4.0" />
<PackageReference Include="FixPortal.FixAtdl" />
paket add FixPortal.FixAtdl --version 1.4.0
#r "nuget: FixPortal.FixAtdl, 1.4.0"
#:package FixPortal.FixAtdl@1.4.0
#addin nuget:?package=FixPortal.FixAtdl&version=1.4.0
#tool nuget:?package=FixPortal.FixAtdl&version=1.4.0

FixPortal.FixAtdl
Modernised .NET 10 fork of atdl4net, the open-source .NET reference implementation of FIXatdl v1.1. All credit must go to the original author of atdl4net, Steve Wilkinson (and contributors), for the work that went into the original. This is simply a modernisation and facelift built atop their efforts. This version, and its associated adapters, is maintained by FixPortal and you can see it in action in their FIXatdl Inspector.
What this is
A headless library for parsing, validating, and emitting FIX-tag values from
FIXatdl v1.1 strategy XML documents. It targets .NET 10 and is consumed as a
NuGet package (FixPortal.FixAtdl).
Want an editable form, not a parser?
This package is the headless core. If what you need is a rendered, editable strategy form, take one of the adapters built on it — they are complete implementations, not samples.
| Package | For | Install |
|---|---|---|
FixPortal.FixAtdl.Wpf · repo |
.NET 10 desktop. All 15 FIXatdl control types, nested panel layouts, editable dropdowns, state rules, parameter and strategy validation. Templates load automatically. | dotnet add package FixPortal.FixAtdl.Wpf |
@fix-portal/fixatdl-react · repo |
React 19 in the browser. Recursive panels, native controls, form state, validation, state-rule evaluation and explanation, StrategyParametersGrp preview. | npm install @fix-portal/fixatdl-react |
FixPortal.FixAtdl.Contracts |
.NET 10. The JSON contract @fix-portal/fixatdl-react renders, mapped from a parsed Strategies_t. |
dotnet add package FixPortal.FixAtdl.Contracts |
The WPF adapter consumes this package directly. The React adapter takes the JSON
that FixPortal.FixAtdl.Contracts maps from a parsed document.
What it is not
- Not a FIX engine. It produces FIX tag values; sending them over the wire is the host application's responsibility. Pair with QuickFIX/n or similar.
- Not a UI library. The upstream Atdl4net's WPF rendering layer has been removed from this package. Rendering lives in the adapters above, or in your own UI on top of the parsed model — Blazor, Avalonia, anything.

Read these first
- Usage guide — loading, setting values, validation, FIX output, exceptions.
- API reference — the types a host actually calls.
- Architecture overview — the pipeline, layers, and load-bearing components.
- Conformance record — the assessed FIXatdl 1.1 surface and its limits.
- Changelog — what changed in each release.
Install
FixPortal.FixAtdl on NuGet.org:
dotnet add package FixPortal.FixAtdl
Quick start
using FixPortal.FixAtdl.Xml;
var reader = new StrategiesReader();
using var stream = File.OpenRead("twap.xml");
var strategies = reader.Load(stream);
var twap = strategies.Strategies[0];
twap.Parameters["StartTime"].WireValue = "20260101-09:30:00";
twap.Parameters["EndTime"].WireValue = "20260101-16:00:00";
foreach (var tag in twap.Parameters.GetOutputValues())
Console.WriteLine($"{(int)tag.Key}={tag.Value}");
Differences from upstream Atdl4net
- Target framework:
net10.0only (upstream:net3.5,net4.0). - Namespace:
FixPortal.FixAtdl.*(upstream:Atdl4net.*). - WPF UI controls removed; library is now UI-agnostic.
Common.Logging→Microsoft.Extensions.Logging.Abstractions.- Nullable reference types enabled throughout.
- New xUnit v3 test suite (AwesomeAssertions + NSubstitute).
Development
Open FixPortal.FixAtdl.slnx in Visual Studio, then build the solution and run
the tests from Test Explorer. The command-line checks below are the ones CI
runs, in CI's order — run them all before pushing.
dotnet tool restore
dotnet csharpier check .
dotnet restore FixPortal.FixAtdl.slnx
dotnet build FixPortal.FixAtdl.slnx --configuration Release --no-restore
dotnet test --solution FixPortal.FixAtdl.slnx --configuration Release --no-build
dotnet dotnet-coverage collect -f cobertura -o coverage.cobertura.xml "dotnet test --solution FixPortal.FixAtdl.slnx --configuration Release --no-build"
./scripts/assert-coverage-floor.ps1 -ReportPath coverage.cobertura.xml -Package FixPortal.FixAtdl -MinimumLineRate 70
./scripts/assert-coverage-floor.ps1 -ReportPath coverage.cobertura.xml -Package FixPortal.FixAtdl.Contracts -MinimumLineRate 82
dotnet-coverage is a pinned local tool, restored by dotnet tool restore.
CI collects one Cobertura report and enforces a 70% line floor on
FixPortal.FixAtdl and an 82% line floor on FixPortal.FixAtdl.Contracts.
The floor values live in .github/workflows/ci.yml. Run the floor script with
PowerShell 7 (pwsh); it requires version 7.0 or newer.
CSharpier is a pinned local tool. CI runs the read-only check; fix formatting
locally with dotnet csharpier format . and commit the result — never as the
gate itself, which would turn a failing check into a silent pass.
To produce a package locally:
dotnet pack FixPortal.FixAtdl.slnx --configuration Release --no-build --output ./_pkgout
Files modified from upstream carry a // FP Enhancement: <date> — <reason> banner.
Benchmarks
The repository-owned BenchmarkDotNet workloads cover representative FIXatdl XML parsing and FIX message parse/emit paths. Run them manually in Release mode; CI compiles the project but does not use workstation timings as a performance gate.
dotnet run --project benchmarks/FixPortal.FixAtdl.Benchmarks/FixPortal.FixAtdl.Benchmarks.csproj --configuration Release -- --filter '*'
Mutation testing
This repo uses Stryker.NET for mutation testing. stryker-config.json sets
mutate: ["**/*.cs"], so the whole library is in scope.
Run it locally from the test project directory — the working directory is
load-bearing, because stryker-config.json names no test project:
dotnet tool restore
cd tests/FixPortal.FixAtdl.Tests
dotnet stryker --config-file ../../stryker-config.json
Output lands under tests/FixPortal.FixAtdl.Tests/StrykerOutput/<timestamp>/reports/.
CI summarizes the run with scripts/summarize-stryker.ps1 and uploads both the
full Stryker output and compact summaries:
mutation-summary.jsonmutation-summary.md
Licence
MIT, inherited from upstream. See LICENSE. Attribution preserved in NOTICE.
Status
The latest NuGet.org release is 1.4.0; source on main carries the same
version. Adapter versions that consume this package:
| Package | Latest published | Notes |
|---|---|---|
FixPortal.FixAtdl |
1.4.0 | In-tree version matches the release |
FixPortal.FixAtdl.Contracts |
1.4.0 | Released with core, same version |
FixPortal.FixAtdl.Wpf / .Wpf.Core |
1.0.7 | Pins core 1.2.0 |
@fix-portal/fixatdl-react |
0.4.0 | Takes the JSON FixPortal.FixAtdl.Contracts produces |
The public surface is governed by
semantic versioning and recorded in the
changelog;
there is no analyzer enforcing it at build time (PublicApiAnalyzers was
removed before 1.0.5).
Issues and PRs are welcome.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- Microsoft.Extensions.Logging.Abstractions (>= 10.0.12)
- NodaTime (>= 3.3.5)
NuGet packages (3)
Showing the top 3 NuGet packages that depend on FixPortal.FixAtdl:
| Package | Downloads |
|---|---|
|
FixPortal.FixAtdl.Wpf
WPF controls and dynamic forms for FIXatdl strategy editing, validation and FIX value read-back. |
|
|
FixPortal.FixAtdl.Wpf.Core
Platform-independent view models, state rules and validation for the FixPortal FIXatdl WPF adapter. |
|
|
FixPortal.FixAtdl.Contracts
JSON contract for @fix-portal/fixatdl-react: DTO records, a mapper from the parsed FixPortal.FixAtdl model, and the FIXatdl state-rule AST builder and evaluator. Headless. Maintained by FixPortal. |
GitHub repositories
This package is not used by any popular GitHub repositories.