Générer un QR code sans JavaScript, sans serveur, sans aucune dépendance externe. Juste avec une police de caractères. C’est exactement ce que propose qr-font, le projet open source de Jim Paris qui fait le tour des communautés de développeurs depuis fin juin 2026.
QR code et police TrueType : une combinaison inattendue
Le format TrueType est conçu pour afficher du texte. Jim Paris l’a détourné pour y encoder une logique applicative complète. Le résultat : une police capable de transformer du texte entre crochets en QR code valide, directement au rendu, sans aucun traitement côté serveur ou côté navigateur.
Le principe est simple à utiliser. Tu installes la fonte, tu écris abc[hello]ghi dans ton éditeur ou ton application, et la portion entre crochets s’affiche sous forme de QR code. Le texte autour reste lisible normalement, dans le même style typographique.
C’est ce qu’on appelle un proof-of-concept élégant : ça ne résout pas un problème que personne n’avait, mais ça démontre quelque chose de fondamental sur les capacités du format OpenType.
Comment ça fonctionne techniquement
La magie repose sur le moteur de substitution de glyphes d’OpenType, connu sous le nom de GSUB (Glyph Substitution). Le projet encode dans la fonte elle-même toute la chaîne de traitement d’un QR code :
- Analyse du délimiteur (les crochets
[et]) - Expansion des octets en mode Byte
- Calcul de parité Reed-Solomon
- Placement des modules QR
- Application du masque fixe
Le build script génère des milliers de règles contextuelles GSUB, puis compile le tout en fichiers .ttf. Les glyphes ASCII normaux sont copiés depuis Liberation Sans Regular et mis à l’échelle dans le carré em de la fonte QR. C’est pour ça que le texte hors QR reste parfaitement lisible.
Trois versions sont disponibles selon la capacité souhaitée : qrfont-1L.ttf (grille 21×21, jusqu’à 17 caractères), qrfont-2L.ttf (grille 25×25, jusqu’à 32 caractères) et qrfont-3L.ttf (grille 29×29, jusqu’à 53 caractères).
Une contrainte importante à garder en tête
Le projet fonctionne uniquement dans les environnements qui appliquent le shaping OpenType, c’est-à-dire les moteurs de rendu qui traitent les features GSUB. Ce n’est pas le cas de tous les logiciels. Avant d’intégrer cette fonte dans un workflow de production, il faut vérifier la compatibilité du renderer cible.
Les entrées sont également limitées à l’ASCII imprimable. Pas d’URL en UTF-8 complexe, pas de caractères accentués dans le bloc QR.
Build et licence : du propre et de l’ouvert
Le projet utilise uv pour la gestion des dépendances Python. Un simple make suffit pour compiler les fontes. Le build complet avec le circuit Reed-Solomon prend nettement plus de temps qu’un build rapide sans parité, mais c’est lui qui produit des QR codes valides et scannables.
Côté licence, la fonte générée est distribuée sous SIL Open Font License 1.1, ce qui autorise la redistribution et la modification sous conditions. Liberation Sans, la source des glyphes ASCII, impose l’usage d’un nom de famille différent pour les versions dérivées, d’où les noms QR Font 1-L, QR Font 2-L et QR Font 3-L.
Le dépôt a été publié en version 1.0.0 le 28 juin 2026 et comptait 248 étoiles au moment de cette analyse. C’est modeste, mais cohérent avec un projet de niche très technique.
Pourquoi ce projet mérite l’attention des développeurs
Ce n’est pas un outil que tu vas déployer en production demain. Mais il illustre parfaitement une approche que j’apprécie : exploiter à fond les capacités d’un format existant plutôt que d’ajouter une couche logicielle.
Quelques cas d’usage concrets méritent réflexion :
- Génération de QR codes dans des documents PDF sans dépendance JS
- Intégration dans des systèmes d’impression qui supportent les fontes OpenType
- Génération hors ligne dans des environnements air-gapped
- Prototypage rapide sans serveur backend
Dans un contexte DevOps ou sécurité, l’absence de dépendance réseau et de surface d’attaque côté serveur est un argument sérieux pour certains cas d’usage très spécifiques.
Ce qu’il faut retenir
- qr-font encode la logique complète de génération QR dans une police OpenType, sans JavaScript ni serveur.
- Trois versions de fonte couvrent de 17 à 53 caractères par QR code, en ASCII imprimable uniquement.
- Le projet nécessite un renderer compatible GSUB : vérifie la compatibilité avant tout usage en production.
- La licence SIL OFL 1.1 autorise la redistribution et la modification sous conditions.
- C’est un proof-of-concept brillant, pas encore un outil de production clé en main.
Si tu travailles sur des pipelines de génération de documents ou des environnements contraints, le projet vaut le détour. Tu peux tester directement sur qr.jim.sh sans rien installer.
Si ce genre de hack technique t’intéresse, suis le blog : je couvre régulièrement des projets open source qui repoussent les limites des formats et des outils courants. Tu peux aussi me contacter si tu veux en discuter autour d’un cas concret.
Sources
- Dépôt officiel du projet : github.com/jimparis/qr-font
- Site de démonstration interactif : qr.jim.sh
- Korben.info, article du 28 juin 2026 : korben.info/en/qr-font-typeface-turns-text-into-qr-code.html
