← Retour aux projets

MagicWindows

Open Source · v0.4.0

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. 140 commits.

FR EN
~12.7K Lignes
140 Commits
78 Tests
6 Layouts
12 DLLs (x64+ARM64)
2 Domaines actifs

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 V4 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

01
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.

02
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.

03
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.

04
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 solide, ouvrir un canal web parallèle (downloads R2 + preview interactif) coûte peu mais double la surface de découverte du produit.

Fonctionnalités

🔍
Détection automatique

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

⌨️
Aperçu visuel partagé

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

Installation en un clic

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

🎛️
Modifier toggles + F12 remap

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

🩺
Health Check post-install

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

📡
Bluetooth Pairing Assistant

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

🌐
Site web SPA + R2 downloads

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

🏗️
Cross-compile x64 + ARM64

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

Stack technique

Frontend
Svelte 5.55 (runes mode)TypeScript 6 strictVite 8Tauri API
Backend
Rust 1.77+Tauri 2.10winregserde_jsonKLC Engine
Cross-compile
MSVC Hostx64/x64+arm64klc-codegenbuild.rs déterministe
Web SPA
Hash routingi18n EN/FR réactifResponsive 3 breakpoints
Edge / Infra
Cloudflare WorkersR2 (public)2 custom domainsWrangler 3
Tests / CI
Vitest 2.1 (41 cases)cargo test (37 cases)GitHub Actionscargo clippy clean