FixPortal.FixAtdl 1.4.0

dotnet add package FixPortal.FixAtdl --version 1.4.0
                    
NuGet\Install-Package FixPortal.FixAtdl -Version 1.4.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="FixPortal.FixAtdl" Version="1.4.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="FixPortal.FixAtdl" Version="1.4.0" />
                    
Directory.Packages.props
<PackageReference Include="FixPortal.FixAtdl" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add FixPortal.FixAtdl --version 1.4.0
                    
#r "nuget: FixPortal.FixAtdl, 1.4.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package FixPortal.FixAtdl@1.4.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=FixPortal.FixAtdl&version=1.4.0
                    
Install as a Cake Addin
#tool nuget:?package=FixPortal.FixAtdl&version=1.4.0
                    
Install as a Cake Tool

FixAtdl: parse XML definitions, validate selections and emit FIX tags, with React and WPF adapters for the UI

FixPortal.FixAtdl

Release CI License

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.

Core and its two adapters: broker XML parsed by the headless core, which emits direct parameter tag values and the authoritative 957–960 group; WPF reads back through the core emitter, React emits 957–960 tag tuples from the JSON DTO that FixPortal.FixAtdl.Contracts maps, and the host validates and assembles the final FIX wire

Read these first

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.0 only (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.json
  • mutation-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 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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

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.

Version Downloads Last Updated
1.4.0 0 10/7/2026
1.3.1 0 10/7/2026
1.3.0 37 10/6/2026
1.2.0 92 10/3/2026
1.1.6 457 9/20/2026
1.1.5 91 9/20/2026
1.1.4 238 9/17/2026
1.1.3 101 9/17/2026
1.1.2 189 9/12/2026