Un éditeur de blocs dont vous gardez les données.

Le confort d'édition de Notion, en TypeScript vanilla, avec un schéma intermédiaire entre l'éditeur et le rendu — et un stockage qui reste lisible le jour où vous arrêtez d'utiliser l'outil.

Un schéma intermédiaire

Le document est une donnée, pas du HTML. Le DOM n'est qu'une projection jetable — jamais la source de vérité.

Lisible sans l'outil

Markdown, CSV, SQLite. Supprimez l'éditeur, vos fichiers restent ouvrables et modifiables ailleurs — et une commande de vérification échoue si ça cesse d'être vrai.

Sept opérations

Tout changement passe par sept opérations inversibles. L'annulation, la persistance et la synchronisation en découlent.

TypeScript vanilla

Le cœur ne connaît ni le DOM ni React. Les liaisons React, Vue et Svelte ont exactement deux dépendances, vérifiées en intégration continue.

Ce qu'il sait faire

L'écart visé est étroit et, autant qu'une étude de 2026 ait pu le dire, inoccupé : personne ne propose une édition de la classe de Notion dont le stockage est un dossier de fichiers Markdown. Obsidian a les fichiers, Notion a l'édition.

Ce qui suit en montre une partie ; le catalogue complet les liste toutes.

Écrire

  • Le menu « / » pour poser un bloc, l'autoformat Markdown pour ceux qui préfèrent la syntaxe
  • Le keymap standard du système à l'intérieur du contenteditable : ^A, ^E, ^K, ⌥⌫, ⌘⌫
  • ⌥↑/⌥↓ déplacent un bloc, ⇧⌥↑/⇧⌥↓ le dupliquent
  • Sélection multi-blocs, poignée de glisser-déposer, colonnes (expérimental)
  • Gras, italique, souligné, barré, code, exposant, indice, ==surlignage== — tous conservés en Markdown
  • Presse-papiers à trois formats, saisie IME sûre, mentions « @ »
Essayer →

Des blocs, y compris les vôtres

  • Titres, listes, cases à cocher, citations, toggles, séparateurs, images, sous-pages
  • Déposez n'importe quel fichier : il devient un bloc, et un PDF se prévisualise
  • Tableaux avec cellules fusionnées et sélection de cellules
  • Blocs de code : la coloration est peinte via la CSS Custom Highlight API, jamais injectée dans le texte éditable
  • Callouts, sommaire dont les ancres survivent à l'export
  • Un bloc = un paquet : son schéma, sa vue, ses projections Markdown et HTML
Écrire un bloc →

Des bases de données

  • Vues table, tableau, liste et galerie sur la même collection
  • Groupement, filtres multiples, tris
  • Un langage de formules pur, des relations, des rollups
  • Projeté sur le disque : un CSV, un fichier .md par ligne, un fichier .base par vue

Un espace de travail

  • Arborescence de pages, rétroliens, recherche classée sur un index SQLite
  • Un vault Markdown qui fait l'aller-retour : exportez-le, éditez-le dans Obsidian, réimportez-le avec les identifiants intacts
  • Import Notion
  • Le JSON canonique fait foi, le Markdown est régénéré — deux copies, une seule vérité
Le dossier →

À plusieurs

  • CRDT Loro : fusion du texte caractère par caractère, hors ligne compris
  • Curseurs en direct, commentaires ancrés au texte et non à un décalage
  • Historique du document, avec restauration
  • Pair-à-pair WebRTC : le relais négocie puis sort du chemin, et sert de repli — un port, aucun serveur TURN
  • nbe serve : un pair permanent sur un NAS, sans base de données
Ouvrir deux fenêtres →

À intégrer

  • React, Vue et Svelte : cycle de vie, projection d'état, portails — rien d'autre
  • Rendu statique en HTML sans navigateur ni instance d'éditeur
  • Chaque fonctionnalité s'attache ou non : ce que vous retirez n'est pas dans votre bundle
  • Lecture seule, libellés traduisibles, thème par canaux CSS
Voir les trois →

Le même éditeur, sous cinq formes

Le cœur ne connaît ni le DOM, ni React, ni un serveur — c'est ce qui rend ces cinq formes possibles sans qu'aucune soit le portage d'une autre.

Ce qui le tient debout

Des chiffres mesurés plutôt que des adjectifs. Chromium, WebKit — le moteur de Safari et donc d'iOS —, le tactile aux tailles de téléphone et une topologie d'édition alternative bloquent tous la CI ; le port Swift a sa propre suite, et un test échoue si les deux implémentations divergent sur une seule règle d'autoformat.

  • 1012tests unitaires
  • 4suites navigateur qui bloquent la CI
  • 8,3 mspar frappe à 500 blocs
  • 3clients sur un même document, sans serveur