← Toutes les réalisations
Outils & applications

MdView

Visionneuse & éditeur Markdown natif pour macOS

macOS ne propose aucun moyen natif de lire confortablement un fichier Markdown : ni aperçu enrichi dans le Finder, ni rendu des formules mathématiques, ni coloration syntaxique. Tech Fox a conçu et livré MdView, une application macOS native (Swift / SwiftUI) qui combine éditeur double-volet à prévisualisation temps réel, rendu GitHub Flavored Markdown, équations LaTeX (KaTeX), coloration du code, export PDF et une extension QuickLook pour l'aperçu instantané depuis le Finder. Binaire universel, entièrement hors-ligne, distribué en open source.

Année2025
StatutOpen source · macOS
Point fortOpen source
Swift 5.9SwiftUIWKWebViewmarked.jsKaTeXhighlight.jsQuickLook (app-extension)xcodegen
2 ciblesapp + extension QuickLook partagées
0dépendance réseau à l'exécution
Universalbinaire Intel + Apple Silicon
PDFexport pleine hauteur en un geste

Contexte & problème résolu

Icône de l'application MdView
Icône officielle de MdView.

Le Markdown est le format de documentation par défaut de tout l'écosystème technique (README, notes, specs, articles). Or sur macOS l'expérience de lecture est pauvre : appuyer sur Espace sur un.md n'affiche que du texte brut, les documents scientifiques truffés de formules sont illisibles, et les blocs de code apparaissent en texte plat.

Tech Fox a répondu par une application native, légère et autonome qui traite le Markdown comme un citoyen de première classe du système : ouverture double-clic, aperçu Espace dans le Finder, association par défaut aux.md, respect automatique du thème clair/sombre, et export PDF en un geste. Double objectif de conception : fidélité de rendu (identique à GitHub, formules comprises) et autonomie totale (aucune connexion requise, tout embarqué).

Architecture : app + extension QuickLook

Architecture de MdView
Architecture : application principale et extension QuickLook partageant le même moteur de rendu embarqué.

MdView est structuré en deux cibles partageant le même moteur de rendu. L'application principale offre une interface double-volet ; éditeur texte monospace à gauche, aperçu rendu à droite ; adossée au système documentaire natif (ouvrir / enregistrer / nouveau). L'extension QuickLook, embarquée dans l'app, génère l'aperçu enrichi affiché par le Finder sur Espace, en réutilisant exactement les mêmes ressources de rendu ; garantissant un aperçu identique à l'éditeur.

La chaîne de rendu convertit le Markdown en HTML (marked.js en mode GFM), applique KaTeX aux formules et highlight.js au code, puis affiche le résultat dans un WKWebView avec bascule automatique clair/sombre. Le même pipeline alimente l'export PDF.

Réalisation détaillée

Pipeline de rendu de MdView
Pipeline : Markdown → marked.js → KaTeX / highlight.js → WKWebView → aperçu temps réel et export PDF.

Le parti pris d'autonomie hors-ligne a structuré l'implémentation. Plutôt que de charger les moteurs depuis un CDN, tout est inliné dans la page générée : les scripts et feuilles de style sont lus depuis le bundle, et les 13 fontes mathématiques KaTeX sont converties en data-URI base64 et déclarées en @font-face. Ce choix élimine toute référence externe et neutralise proprement les restrictions du bac à sable macOS sur l'accès aux fichiers.

  • Mise à jour temps réel sans scintillement : à chaque frappe, seul le contenu Markdown est ré-injecté via un pont JavaScript (texte transmis en JSON échappé), sans recharger la page.
  • Tokenisation des formules : les blocs et formules inline sont extraits et remplacés par des marqueurs avant le parsing Markdown, puis restitués et rendus par KaTeX ; évitant que Markdown et LaTeX ne se corrompent mutuellement.
  • Coloration adaptative : deux thèmes (GitHub clair/sombre) chargés sous media queries, bascule automatique avec le mode système, sans code de thème côté Swift.
  • Export PDF pleine hauteur : mesure du scrollHeight réel, configuration PDF couvrant toute la hauteur, attente active de la fin de rendu pour éviter un PDF vide.
  • Chaîne de build reproductible : projet Xcode généré depuis project.yml par xcodegen, compilation Release en binaire universel, packaging.dmg signé localement.

Résultats & compétences

Livrable fonctionnel : application.dmg universelle testée sur macOS 13+, rendu validé sur un fichier couvrant tous les cas (titres, tableaux, code multi-langages, formules, listes de tâches, citations, images), autonomie confirmée sans réseau, distribution open source publique. Le projet démontre le développement macOS natif, l'intégration WebKit avancée (pont Swift ↔ JavaScript), la conception d'extensions système QuickLook, la maîtrise du modèle de sécurité macOS et l'industrialisation (build reproductible, binaire universel, packaging signé).

UN PROJET DU MÊME TYPE ?

Construisons-le.

Présentez le problème, même s'il est encore flou. On transforme le besoin en système clair.

Démarrer un projet