All posts
Part 07 of 10
WindowsmacOS$_LinuxOne Codebase
Part 07 of 10

Three Platforms, One Codebase

From Windows-only to Windows + Linux + Mac.

For everyone·10 min read

For everyone.

The crash was fixed. The architecture was clean. The scheduler worked. The ViewModels were separated from the screen code. And for the first time in twenty years, someone could ask: what if EVEMon didn't have to be Windows-only?

This is where the rebuild went from "fix the crash" to "build something new."

01

The Decision

The original Windows Forms UI was 251 files, 99,073 lines of code. Over 35,000 of those lines were auto-generated designer code. Fifty-two forms. Fifty-four custom controls. Zero theming system — every color hardcoded on every control. Windows-only, forever.

I could have hacked dark mode onto it. Change colors one control at a time, override the scrollbar painting, fight with the Windows title bar. Weeks of work for a dark coat of paint on a Windows-only application.

Or I could use the clean architecture we'd built and replace the entire screen-drawing framework with Avalonia — a modern cross-platform UI framework that has dark mode built in, runs on Windows, Linux, and macOS from a single codebase, and compresses 35,000 lines of designer code into about 6,000 lines of AXAML.

The ViewModels — all thirteen of them, plus the plan editor, plus the browser ViewModels — would carry over unchanged. Zero modifications. That's the payoff of the architecture work from the previous three parts.

I chose Avalonia. The new UI was written from zero.

02

What Got Built

25,639 lines of Avalonia code. Not a port — a complete rewrite of the screen layer.

ComponentCount
View files54
Code-behind + service files80
Character monitoring views21
Dialog windows12
Plan editor views9
Theme palettes6

What You See

The Character Overview. A card grid showing all your characters at a glance. Portrait, name, ISK balance, skill points, Alpha/Omega badge, training countdown that ticks every second. ESI status dots — green for healthy, yellow for fetching, red for errors. The cards that crashed the app at sixty characters now load a hundred without a stutter.

Sixteen data tabs per character. Skills with five-block level indicators. Skill queue with progress bars. Employment history with a timeline. Assets with hierarchical browsing. Market orders, contracts, industry jobs, wallet, mail, notifications, kill log, planetary, standings, contacts, medals, loyalty points.

The Plan Editor. Five browsing tabs — skills, ships, items, blueprints. Import fittings from clipboard. Export to file. Attribute optimization that tells you exactly which remap saves the most time.

The Skill Constellation. 834 lines of GPU-accelerated code renders your entire skill tree as a star map. Four hundred background stars with animated twinkle. Nebula clouds behind each skill group. Hover a skill and its prerequisite chain lights up. Search with fuzzy matching. Pan and zoom.

Six faction dark themes:

  • Dark Space — Navy and gold. The default.
  • Caldari Blue — Steel blue and cyan.
  • Amarr Gold — Warm brown and amber.
  • Gallente Green — Deep emerald and silver.
  • Minmatar Rust — Copper and orange.
  • Midnight — Pure black and bright gold.

One setting to switch between them. Every pixel changes.

What You Don't See

ESI Scope Editor. You choose exactly which permissions to grant. Three presets — Full, Standard, Skill Planner Only — or custom per-scope selection. The original forced all-or-nothing.

Privacy Mode. Hide your character name, corporation, ISK balance, skill points, training queue, or remaps independently. Six categories, each controlled separately. For streamers and screenshots.

Per-Character Endpoint Control. A gear icon on each character lets you enable or disable individual data feeds. Don't want EveLens fetching your mail? Turn it off.

Activity Log. A notification bell with unread badge. Skill completions, market order updates, contract changes — logged with timestamps and character names.

Native OS Notifications. Windows toast notifications, Linux desktop notifications, macOS notification center. Your skill trained to V? Your OS tells you.

03

Three Platforms

Behind the scenes, seven platform service adapters handle the differences between Windows, Linux, and macOS. The notification service alone is three different implementations: Windows uses COM interop for toast notifications, Linux uses notify-send, macOS uses osascript.

Cross-platform doesn't mean "it compiles on three platforms." It means "it works on three platforms." And making it work — really work, with settings persistence, clipboard operations, file dialogs, screen positioning, and native notifications — turned out to be its own multi-week saga.

Previous: Part 6 — 101,000 Lines and Zero ViewModels

Next: Part 8 — The Linux Settings Saga