Order Flow on macOS and Linux: Porting a Windows Footprint Platform in 158 Lines
Almost every serious order-flow platform is Windows-only — ATAS, Sierra Chart, NinjaTrader, Quantower. This morning Senzoukria shipped native macOS and Linux builds in beta. The port touched 12 files, added 158 lines, and changed zero lines of the engine. This is the field note: what actually took work, what the builds weigh, and what we still do not know.
Since the first release, the most common request in our inbox has not been an indicator. It has been an operating system. Traders on a MacBook, traders on Ubuntu, all asking the same thing: when can I run this without a Windows VM?
This morning the answer went live: native macOS and Linux builds, in beta. This post is the build log — with the numbers, because the numbers surprised us.
The whole port: 12 files, +158 lines, −8. Zero lines of the Rust engine changed. Zero lines of the chart renderer changed. The work was never in the code that computes the footprint — it was in a titlebar, a CI matrix, and Apple's gatekeeping.
Why the engine cost nothing
This is the part worth stealing if you build desktop software. The platform was Windows-only for a year, but three early decisions meant it was never Windows-bound:
- TLS is rustls, everywhere. The Rithmic connection is a WebSocket speaking Protocol Buffers over rustls — no OpenSSL on Linux, no SChannel on Windows, no Security.framework glue on macOS. One TLS stack, compiled into the binary, identical on all three.
- Credentials go through the OS keychain abstraction. The same crate targets Windows Credential Manager, macOS Keychain and the Linux Secret Service. We wrote that code once, a year ago, for Windows — the macOS and Linux paths were already inside it, waiting.
- No shell calls, no hardcoded paths. Not a single
C:\, not one spawned.exe. Every data path is resolved by the framework (AppDataon Windows,~/Library/Application Supporton macOS, XDG on Linux).
The proof it worked: our CI had been compiling and testing the full backend on Linux for months — as a type check, not because we planned this. When we finally pointed the release pipeline at a Mac and an Ubuntu runner, all three builds went green on the first run.
Where the 158 lines went
The titlebar. On Windows we draw our own window chrome — minimize, maximize, close, top-right, like every Windows app. Put that on macOS and you have committed a small crime: Mac windows have native traffic lights, top-left. So on macOS the window keeps its native controls overlaid on our bar, our Windows buttons compile away entirely, and the toolbar shifts 78 pixels right to leave them room. Platform detection is resolved at build time — the dead branches do not even ship in the binary.
The honesty gate. The NinjaTrader and Quantower bridges are Windows-only forever — not a porting decision, a physical one: they read charts inside applications that only exist on Windows. On macOS and Linux those options are gone from the data-source selector instead of sitting there as buttons that could never work. What remains is what actually works: Rithmic direct and crypto mode.
The updater plumbing. A Mac asking for updates identifies as darwin-aarch64 or darwin-x86_64 depending on the chip — both now resolve to the same universal archive, because we ship one binary that contains both architectures. Which brings us to the weights.
What the builds weigh, and why
- Windows .msi — 8.9 MB
- macOS .dmg, universal — 19.4 MB
- Linux .deb — 10.8 MB
- Linux AppImage — 83.8 MB
Same application, four numbers. The Mac build doubles Windows because universal means two complete binaries in one file — Apple Silicon and Intel. The AppImage is nine times the .msi because of a decision Microsoft made for us: Windows ships a system webview (WebView2), so our installer does not carry a rendering engine. Linux has no such guarantee, so the AppImage carries all of WebKitGTK inside it. The .deb stays small by depending on the system package instead. Nothing in those 84 MB is our code being bigger — it is the platform tax, itemized.
What beta means here, precisely
The macOS build was validated on physical hardware before shipping — installed from the actual artifact, Gatekeeper bypass confirmed, license login, live data, native titlebar. The Linux build is different, and we would rather say it plainly: it has passed CI, and no human has run it on bare metal yet. That is exactly what the beta badge on the download page means — not "expect crashes", but "you might be first".
Two things we are watching. First, rendering: Windows draws through WebView2, macOS through WKWebView, Linux through WebKitGTK — three engines, and a footprint chart at market speed is exactly the workload where they diverge. The chart has an FPS and render-time counter built into its status bar, bottom right; if you run the Linux build, that number is the single most useful thing you can send us. Second, credentials: on Linux they live in the Secret Service, which means gnome-keyring or KWallet must be running. GNOME and KDE users will never notice. i3 and Hyprland users will — the login works, but nothing persists across a restart until a keyring daemon is up.
Running the Linux beta: chmod +x Senzoukria*.AppImage && ./Senzoukria*.AppImage — on Ubuntu 22.04+, sudo apt install libfuse2 first. Feedback lands in the Discord #beta channel, FPS screenshots especially.
The part we did not pay for
The macOS build is not notarized. Notarization requires the Apple Developer Program — $99 every year — and this platform is built on a $0 marketing budget by one person. So the first launch hits Gatekeeper, and the fix is one trip to System Settings → Privacy & Security → Open Anyway. We documented it on the download page instead of pretending it will not happen — the same posture as our unsigned Windows installer and its SmartScreen note. When the platform pays for its own certificates, both go away. Until then, honesty is cheaper than a certificate, and it compounds better.
If you have been waiting on a Mac or a Linux box: the builds are live. You get the same footprint, the same delta, the same broker-side data as the Windows version — computed by the exact same 0-lines-changed engine.
Frequently asked questions
- Is there a native order-flow / footprint platform for macOS?
- Very few. ATAS, Sierra Chart, NinjaTrader and Quantower are Windows applications — Mac traders run them in Parallels or a VM. Bookmap runs on macOS via Java. Senzoukria now ships a native macOS build (one universal .dmg for Apple Silicon and Intel), currently in beta.
- Why does macOS say the app is damaged or blocked?
- The build is not notarized with Apple yet — notarization requires a $99/year developer account we have not bought. One-time fix: System Settings → Privacy & Security → Open Anyway. The binary is built by the same public CI pipeline as the Windows release; nothing about the code differs.
- Does the NinjaTrader bridge work on Mac or Linux?
- No, and it never will: NinjaTrader 8 and Quantower are Windows applications, so a bridge that reads their charts can only exist where they run. On macOS and Linux you connect with Rithmic direct (your R|Protocol login, in-app) or crypto mode (Binance, Bybit, Deribit — no account needed).
- What does the Linux build need?
- The AppImage needs chmod +x and, on Ubuntu 22.04+, the libfuse2 package. Storing broker credentials requires a Secret Service daemon — gnome-keyring or KWallet — which GNOME and KDE run by default. The .deb installs cleanly on Debian/Ubuntu but does not auto-update; the AppImage does.
Order Flow on a Prop-Firm Account: What Actually Works on Apex, Topstep and 4PropTrader
The rules, the feeds and the drawdown maths nobody writes about because they trade their own money.
Why Your Footprint Shows a Different Volume Than Your Broker (and Which Number to Trust)
Four platforms, four volumes, same contract, same second — none of them wrong. Which one your order flow should trust.