GARAGE · CASE STUDY 06 / 06 ◄ Back to the garage All work

C# · .NET 10 Native AOT · Win32

Yakamoz

A native, very light overlay for Windows 11: an island hub, edge panels, a command bar and everyday tools in one reversible app.

Built solo · 571 commits · 3,200+ automated tests · private repo · yakamoz.swiip.app

Why
On Windows, everyday helpers usually mean several small utilities running side by side.
My role
Built it alone: a native C# app on .NET 10 Native AOT, drawn with Win32, Direct2D and DirectComposition, with its own NTFS file index.
Result
One light, reversible layer that covers about six separate utility modules, live at yakamoz.swiip.app. 571 commits, 3,200+ automated tests.
  • C#
  • .NET 10 Native AOT
  • Win32
  • Direct2D
  • DirectComposition
  • xUnit
Yakamoz on the turntable in the garage on the home page

What I built, in one look

  1. 01Idle wakeups that were mostly Windows’
  2. 02A disarmed timer that still fired
  3. 03Memory handed back after the surfaces hide
  4. 04Every change can be undone
  5. 05File search from the master file table
  6. 06A licence checked before it is parsed
Read how each one works ►

How it fits together

  1. Edges and hotkeysLow-level hooks, shell hooks and WinEvents decide what opens, and where
  2. Shell (Native AOT)One Win32 process draws Ada, the strip, the edge panels and the command bar
  3. CompositionDirect2D into DirectComposition surfaces, released once a surface has been hidden 60 s
  4. Helper processesFile index service, media, Quick Look, tools and a watchdog
  5. LedgerEvery change to Windows is written with its old value before it is made

What it does

Yakamoz is one light layer for Windows 11, published by Swiip. It does the work of several small tools that usually run side by side, and stays out of sight until you reach for an edge or a hotkey. At the top centre of the screen sits Ada, a pill that opens into a hub with seven tabs: Home, Media, Shelf, Clipboard, Day, Time and Mirror. It also shows short notices for volume, battery and meetings. The other edges hold the strip with a magnifying dock, the panels and an overview of open windows.

Alt+Space opens a command bar that searches apps, actions and every file on your NTFS drives through its own index, browses folders in columns and works as a calculator. Space on a file opens Quick Look. A set of everyday tools covers what usually takes about six separate utility modules: colour picker, screen ruler, mouse highlight and Find mouse, text expander, a finder for the process that holds a file open, bulk rename, image resize, and Markdown, SVG and code preview. Every change Yakamoz makes to Windows can be undone, and uninstalling undoes all of them.

Key features

  • Ada, the island hub. Seven tabs (Home, Media, Shelf, Clipboard, Day, Time, Mirror), notices for volume and battery, and meeting activity, opened by pushing up at the top edge.
  • Strip and dock. A strip on each monitor with a power button, a tray button, dock magnification, per-app volume, and external monitors whose brightness follows the built-in panel over DDC/CI.
  • Command bar with its own file index. Apps, actions and files on every NTFS drive as you type, column browsing from a drive letter and a calculator, with no web results.
  • Quick Look. Space on a file previews it without opening it.
  • Windows. Keep-on-top, zones and per-monitor auto-tiling (off by default), hot corners, and a focus guard.
  • Tools. Colour picker, screen ruler, mouse highlight, Find mouse, text expander, lock finder, bulk rename, image resize, and Markdown, SVG and code preview.
  • Day. Notes, agenda and reminders on the island.
  • Licence and trial. A 14-day trial, a licence key checked offline, and a trial-ended screen with three choices (Enter licence, Buy, Uninstall) that gives the taskbar back.
  • Turkish and English. The whole UI in both languages, or chosen automatically.

How it’s built

Ada · strip · edge panelsCommand bar · Quick LookWin32 shell, Native AOTDirect2D → DirectCompositionShell hooks & WinEventsLow-level hooksCore Audio sessionsNTFS index serviceLedger & watchdog product machinery

Yakamoz is a family of small C# programs on .NET 10, each published with Native AOT, so there is no runtime to install and no JIT at start-up. The shell is a single Win32 process. It hears the desktop through shell hooks and WinEvents, takes the edges and hotkeys through low-level hooks, and draws every surface (Ada, the strip, the panels, the command bar, menus) with Direct2D into DirectComposition visuals. Windows APIs are called through CsWin32’s source-generated P/Invoke, and a banned-API analyzer sends every process start through one guarded helper.

Around the shell sit helper processes that only exist while they are needed. The file index is an optional local service: it enumerates the NTFS master file table once and then follows the USN change journal, so the command bar asks a snapshot in memory instead of walking the disk. Media, Quick Look and the tools have their own processes. A watchdog brings the Windows taskbar back if the shell stops, and a separate restore program can undo everything even when the main program is broken.

Reversibility is a rule in the code, not a promise in the copy. Every change to Windows (a registry value, the taskbar, a setting) is written to a ledger with its old value before it is made, and changes are undone in a fixed order. Uninstalling replays the ledger and removes the program and its data; the trial start date is the one record left behind.

Most of the logic lives in a Core library with no window or device code in it, which is where the bulk of the 3,200+ tests run. A topology matrix runs every per-monitor model over one to five monitors, mixed orientations, scales from 100 to 200% and monitors at negative coordinates; a native integration suite covers the parts that need a real desktop. Performance has budgets that are checked with the project’s own tools: on the 1.0 build, the shell and watchdog together use 19.5 MB of private memory idle after start, and file index queries answer in 6.9 ms at the 95th percentile on a synthetic snapshot of 3.8 million entries.

Tech stack

App
  • C# on .NET 10
  • Native AOT (eight executables, size-optimised)
  • Win32 through CsWin32 source-generated P/Invoke
  • Direct2D and Direct3D 11 (Vortice)
  • DirectComposition
  • DirectWrite
Windows APIs
  • Shell hooks and WinEvents
  • Low-level keyboard and mouse hooks
  • Restart Manager (which process holds a file)
  • Core Audio sessions
  • Windows media sessions
  • DDC/CI monitor brightness
  • NTFS master file table and USN change journal
Trust
  • Change ledger with a restore order
  • Watchdog process that brings the taskbar back
  • Uninstaller that works without the main program
  • ECDSA P-256 licence keys checked offline
  • Signed update manifest
  • Crash reports sent only by the user's own e-mail
Quality
  • xUnit: core, file index and native integration suites
  • Banned-API analyzer (guarded process starts)
  • Warnings as errors
  • Own wake tracer and idle budget gates in PowerShell
Product
  • Turkish and English UI
  • 14-day trial and licence flow
  • Brand pipeline in Python + Pillow
  • Product site in Next.js (TR/EN)

Engineering highlights

  • Idle wakeups that were mostly Windows’. An opt-in wake tracer records every return from the message loop and every WinEvent callback, and splits the shell’s own wakes from the ones the desktop delivers. With a short sound playing every 3 seconds, wakes on the UI thread went from 168 a minute to 0 and CPU time from 91 to 49 ms a minute. Core/Diagnostics/WakeTraceSummary.cs, Core/Status/AudioStepPolicy.cs
  • A disarmed timer that still fired. Every audio session event woke a pool thread exactly 2 seconds later, because a cancelled .NET timer’s native timer still fires at its old due time. New sessions are now classified without a watched step, and “playing” is reported only after it has lasted 2 seconds. Core/Status/SustainedEdge.cs
  • Memory handed back after the surfaces hide. Direct2D caches and deferred frees outlived the hidden surfaces. Two seconds after the last surface releases its visuals, the renderer clears the Direct2D device’s resources and trims the DXGI device. After using every surface once, shell and watchdog memory went from 30.9 to 25.9 MB, without EmptyWorkingSet. Native/Composition/SurfaceRenderer.cs, Core/Status/TrimRequest.cs
  • Every change can be undone. The ledger records the old value before any change is made, a change that is not in the ledger is not made, and restore runs in a fixed order. The watchdog gives the taskbar back if the shell stops. Core/Journal/ChangeJournal.cs, Native/Shell/TaskbarGuard.cs
  • File search from the master file table. The index reads the NTFS master file table once and then follows the change journal. Every length and offset in a journal record is checked against the buffer before it is read, and query p95 is 3.5 to 3.7 ms at 1.5 million entries. Core/Index/UsnRecordReader.cs
  • A licence checked before it is parsed. Keys are ECDSA P-256 signatures over the exact JSON bytes, verified offline against an embedded public key before any JSON is read. The key holds no name and no e-mail. Core/Commerce/LicenseVerifier.cs