En ligne open source

MagicWindows

Les dispositions du Magic Keyboard d’Apple sur Windows. Natives, gratuites.

La touche Commande du Magic Keyboard devient une touche Windows

En clair

Double canal de distribution : app desktop Tauri/Rust native (NSIS/MSI x64) ET site web Svelte 5 sur Cloudflare Workers avec 12 ZIPs téléchargeables (6 layouts × 2 archs).

Cross-compile x64 + ARM64, i18n EN/FR, monorepo workspaces, 78 tests, 0 erreur TS, 0 warning clippy.

Points forts

L’écran d’accueil de MagicWindows sous Windows : « Welcome to MagicWindows », détection automatique du clavier ou choix manuel parmi six dispositionsL’écran final de MagicWindows : « Layout installed successfully ! », avec le rappel Win+Espace pour passer à la nouvelle disposition
Captures réelles de MagicWindows
  1. Détection automatique

    Identification du clavier Apple par flux de scancodes : 3 à 5 touches suffisent

  2. Aperçu visuel partagé

    Composant @magicwindows/keyboard-visual (920 LOC) consommé par 4 pages desktop + 1 page web : single source of truth

  3. Installation en un clic

    KLC → DLL compilé, copie System32, registre HKLM, force-activate sans reboot

  4. Modifier toggles + F12 remap

    Cmd↔Ctrl, Opt↔Cmd, F12 → Calc/Search/Mail via composition Scancode Map : toggles + remaps coexistent (V0.3)

  5. Health Check post-install

    Probe ToUnicodeEx via PowerShell + modal live keyboard : vérifie que le layout est bien actif (V0.3)

  6. Bluetooth Pairing Assistant

    Auto-détection HID Apple (VID 0x05AC) + polling 2s/5min, redirige vers Detect au pairing (V0.3)

  7. Site web SPA + R2 downloads

    magicwindows.mindvisionstudio.com (Cloudflare Workers) avec preview interactif + 12 ZIPs versionnés sur dl.mindvisionstudio.com (R2 public)

  8. Cross-compile x64 + ARM64

    build.rs pilote MSVC Hostx64/{x64,arm64} et produit 12 DLLs déterministes : release reproductible byte-identique entre runs

En chiffres

  • ~12.7K Lignes
  • 78 Tests
  • 6 Layouts
  • 12 DLLs (x64+ARM64)
  • 3 Domaines actifs

Le récit

Pourquoi j’ai construit ça

Le clavier low-profile du MacBook, je n’ai jamais retrouvé ce plaisir de frappe sur un setup Windows classique. La solution évidente : acheter un Magic Keyboard Apple et le brancher en USB. Sauf que le layout ne correspond pas, les modifiers sont inversés, et les solutions du marché (Magic Utilities & co) tournent à 20-30 € par an en abonnement, pour un problème qu’on résout avec quelques écritures dans le registre Windows.

Donc je l’ai fait : en Tauri/Rust natif, open source, installable en un clic, gratuit. La V0.4 a ouvert un second canal : un site web public (Cloudflare Workers) qui sert un preview interactif et héberge 12 ZIPs téléchargeables sur R2, pour ceux qui veulent juste une DLL sans installer le wrapper desktop.

Décisions techniques structurantes

Tauri v2 + Rust côté backend

Binaire natif Windows capable de faire du Win32 / registry / élévation proprement : impossible à atteindre avec Electron sans embarquer Node et Chromium dans le bundle.

KBD DLL C compilée au build, cross-compile x64 + ARM64

Windows refuse une layout purement logique : il veut une DLL dans System32. klc-codegen (968 LOC Rust) génère le C source, build.rs (438 LOC) détecte les deux toolchains MSVC Hostx64/{x64,arm64} et produit 12 DLLs (6 layouts × 2 archs). ARM64 est optionnel : warning si toolchain manquante, build x64 continue.

Composition Scancode Map (V0.3)

Modifier toggles + F12 remap + futurs remaps coexistent dans un seul Scancode Map sans clobber. Tests d’identité byte-à-byte sur la composition. Permet d’ajouter de nouveaux remaps sans casser les précédents.

Monorepo workspaces + double canal desktop/web (V0.4)

Le composant KeyboardVisual (920 LOC) extrait dans @magicwindows/keyboard-visual est consommé par 4 pages desktop + 1 page web : single source of truth. Site web SPA Svelte 5 servi par Cloudflare Workers static-assets, downloads de 12 ZIPs sur R2 derrière dl.mindvisionstudio.com avec custom domain. Pipeline release déterministe (EPOCH mtimes + statConcurrency:1) → ZIPs byte-identiques entre runs si les sources n’ont pas changé.

Le challenge non-trivial

Coordonner l’install à cheval entre élévation et non-élévation

Installer un layout clavier Windows, c’est : une DLL dans C:\Windows\System32 + une clé HKLM\...\Keyboard Layouts\<id> (admin) + une activation HKCU par utilisateur (non-admin).

Un PowerShell élevé ne peut pas écrire fiablement dans le LOCALAPPDATA de l’utilisateur d’origine, et le parent non-élevé ne voit pas le résultat du script admin. La solution dans install.rs : le script PS élevé écrit des markers dans HKLM (seul canal partagé fiable), le parent non-élevé les relit puis effectue l’activation HKCU.

Leçon retenue

Sur Windows, la vraie complexité n’est pas "écrire un fichier clavier" : c’est respecter la frontière élévation / non-élévation. Dès qu’on touche à System32 + HKLM + HKCU dans un même flow, il faut un canal de communication entre les deux mondes (ici HKLM comme boîte aux lettres).

Et une fois le desktop stable, ouvrir un canal web parallèle (downloads R2 + preview interactif) coûte peu mais double la surface de découverte du produit.

Fiche technique

Où ça tourne Tauri 2.10 · Rust 1.77+ · Cloudflare Workers · R2 (public)

Les technologies de MagicWindows, par domaine
Frontend Svelte 5.55 (runes mode) · TypeScript 6 strict · Vite 8 · Tauri API
Backend Rust 1.77+ · Tauri 2.10 · winreg · serde_json · KLC Engine
Cross-compile MSVC Hostx64/x64+arm64 · klc-codegen · build.rs déterministe
Web SPA Hash routing · i18n EN/FR réactif · Responsive 3 breakpoints
Edge / Infra Cloudflare Workers · R2 (public) · 2 custom domains · Wrangler 3
Tests / CI Vitest 2.1 (41 cases) · cargo test (37 cases) · GitHub Actions · cargo clippy clean

Les dispositions du Magic Keyboard d’Apple sur Windows. Natives, gratuites.