Cross-platform DAQiFi application built on Avalonia UI, targeting Windows, Linux, macOS, Android, and iOS from one codebase.
DAQiFi is a front end for DAQiFi Nyquist wireless data-acquisition hardware: discover a device on your network, configure its channels, watch signals live, and record them to CSV.
This app requires DAQiFi Nyquist hardware. It is a companion for a physical device, not a standalone measurement tool, and does nothing useful without a Nyquist on the network.
Beta. The current release is v3.3.0-beta.1.
Maturity differs sharply by platform, so it is worth being specific:
- Windows / Android — the most exercised. Discovery, connection, channel configuration, live plotting, and CSV recording have been run against real Nyquist hardware.
- macOS — builds, launches, and renders; some Windows-only code paths in the port are still marked unverified in the runbook.
- iOS — builds and deploys, but discovery has not been validated against real hardware on a real device. The simulator cannot test it, because the network behaviour is the whole risk. Treat iOS as unproven.
This is a port in progress, not a finished rewrite. Expect rough edges: some code paths
still throw NotImplementedException, and // @port: markers throughout the source
mark work that has not been reconciled with the app it ports. Treat it accordingly.
Those // @port: markers reference an internal correspondence map (.portomatic/)
that tracks this port against upstream file by file. It is working state for the
porting tool rather than part of the application, so it is not published here — the
markers are still useful as "this symbol came from upstream and may have diverged",
but the map they index is not in this repository.
| Project | Target framework | Notes |
|---|---|---|
Daqifi.Avalonia |
net10.0 |
Shared library — views, view models, device logic |
Daqifi.Avalonia.Desktop |
net10.0 |
Windows, Linux, macOS |
Daqifi.Avalonia.Android |
net10.0-android36.0 |
minSdk 29 |
Daqifi.Avalonia.iOS |
net10.0-ios |
- daqifi-desktop — the original WPF,
Windows-only application. This repository is a port of it, and deliberately keeps the
upstream
Daqifi.Desktop.*namespaces so the two stay diffable. - daqifi-core — device discovery,
transport, protobuf, and firmware-update logic all come from this NuGet package.
The pinned version lives in one place,
Daqifi.Avalonia/Daqifi.Avalonia.csproj; it is deliberately not repeated here, because a version restated in prose is a version that goes stale on the next bump. That logic is referenced, not ported; bugs in device communication usually belong there rather than here.
Requires the .NET 10 SDK, pinned in global.json to 10.0.302 with
rollForward: disable — the exact version matters, because the mobile heads are
sensitive to workload versions.
dotnet build Daqifi.Avalonia.Desktop/Daqifi.Avalonia.Desktop.csproj
dotnet run --project Daqifi.Avalonia.DesktopAndroid and iOS need their respective workloads (dotnet workload install android ios),
and iOS needs macOS with Xcode. See docs/RUNBOOK-macos-ios.md
for the macOS and iOS specifics, including what device deployment requires.
Building the Android head additionally needs an Android SDK, which the workload does not
supply. docs/RUNBOOK-android.md covers that, plus installing
the app on a phone and driving it over adb. When the hardware rather than the app is
the suspect, docs/nyquist-bench-notes.md is the faster
place to start.
Every project commits a packages.lock.json, and CI restores in locked mode — a
lock file that has drifted from its project's dependencies fails the build rather than
being silently regenerated. If you change a PackageReference, refresh the lock file in
the same commit.
Daqifi.Avalonia/— the shared application: views (.axaml), view models, and the device layer that wraps Daqifi.CoreDaqifi.Avalonia.Desktop/,.Android/,.iOS/— the platform headsthird_party/oxyplot-avalonia/— a vendored build of OxyPlot's Avalonia bindings (MIT; seethird_party/oxyplot-avalonia/LICENSEandVENDORED.mdfor why it is vendored rather than referenced)docs/— runbooks and design notestools/— build and release tooling, including the parity-audit harness used to compare this app's UI against the upstream WPF app.github/— CI workflows and the guard scripts they run. The policy directories (dependency-updates/,upstream-sync/,merge-queue/) each carry a README explaining what they enforce and why
The app talks only to your Nyquist over your local network. There are no accounts, no
ads, and no advertising or analytics tracking. It sends anonymous crash diagnostics
(via Sentry) so defects can be found and fixed; no personal information is attached.
Crash reporting can be compiled out with -p:SentryDsn=.
Issues and pull requests are welcome — see CONTRIBUTING.md. CI builds every head on every pull request, so expect the build to tell you quickly if a change breaks a platform you did not test.
MIT — the same license as daqifi-desktop and daqifi-core.
Questions about the hardware or the app: daqifi.com/contact