https://www.numerique.gouv.fr/sinformer/blog/la-fabrique-du-libre-2-quand-le-secteur-public-europeen-et-lecosysteme-open-source-collaborent-le-cas-lasuite-docs/ (La Fabrique du Libre #2 : Quand le secteur public européen et l'écosystème open source collaborent - le cas LaSuite Docs )

Le choix de la simplicité radicale

L'outil LaSuite Docs est né d'une frustration bien connue des utilisateurs d'outils de traitement de texte traditionnels. Face à la complexité excessive et aux fonctionnalités parfois superflues de Word ou Google Docs, l'équipe de LaSuite a fait le choix de la simplicité radicale.

LaSuite Docs se distingue ainsi par sa philosophie minimaliste :

- Pas de choix de la police de caractères ;
- Pas de choix de la taille de l'interligne ou des titres ;
- Pas de pagination, d'en-tête ou de pied de page.

Virgile Deville explique ce choix radical : « Cette approche, adoptée intentionnellement, contraint les utilisateurs de LaSuite Docs à se concentrer sur l'essentiel : le contenu.

Nous construisons LaSuite Docs selon le principe du 'content over form'.

Le résultat ? Des documents plus simples à produire, et surtout, à maintenir. »

Au-delà de la simplicité de son design, LaSuite Docs offre des fonctionnalités essentielles pour le travail collaboratif des agents de l'État français :

- La collaboration en temps réel ;
- Accessible via un navigateur, aucune installation requise ;
- Des documents imbriqués, pour créer organiser ses documents en base de connaissance ;

- La publication par lien, pour transformer ses notes en plateforme de documentation externe ou interne ;

- Un historique de versions et la possibilité de les restaurer en cas de souci.

Les librairies open source comme socle de l'outil

Comme le souligne Virgile « Avec LaSuite Docs, nous avons fait le choix de ne pas faire de choses trop difficiles.

Nous construisons une application Django, sur laquelle est branchée l'authentification OIDC, nous gérons les permissions sur les documents, nous traitons les sous-documents et l'interface utilisateur. »

La vraie magie opère grâce à quelques librairies open source qui gèrent toute la complexité technique.

Au cœur du système, on retrouve les CRDTs (Conflict-free Replicated Data Types) - des structures de données qui permettent à plusieurs personnes de travailler simultanément sur différentes versions d'un même document et de résoudre automatiquement les conflits en temps réel.

LaSuite Docs repose sur trois librairies ouvertes :

- BlockNote, un éditeur de texte riche pour assurer l'interface utilisateur ;

- Yjs, une librairie CRDT pour gérer la synchronisation en temps réel ;

- ProseMirror, un framework sous-jacent pour l'édition de documents structurés.

« C'est assez fou que nous ayons cela en open source de nos jours », souligne Virgile.

« Il y a dix ans, il n'en aurait pas été question.

Et aujourd'hui, nous pouvons réaliser ce projet relativement simplement. »

Un témoignage qui fait écho à celui de Christian Quest (https://www.numerique.gouv.fr/sinformer/blog/la-fabrique-du-libre-panoramax-de-lutopie-a-linfrastructure-publique/) , à l'origine de la base de photos citoyennes libre d’accès et souveraine Panoramax : certains projets ne peuvent démarrer qu’au moment où le contexte technologique et économique le permet.

Pour LaSuite Docs, les planètes sont alignées !

#Allemagne #BlockNote #Django #Editeur #Europe #France #GoogleDocs #Javascript #LaSuite #LogicielLibre #OpenSource #OpenSource #PaysBas #ProseMirror #Python #SecteurPublic #Word #Yjs

numerique.gouv.fr

🌗 關於協同編輯的迷思(二):為什麼我們棄用 Yjs
➤ 擺脫過度設計:以極簡架構實現高效協同編輯
https://www.moment.dev/blog/lies-i-was-told-pt-2
本文探討協同編輯領域中廣泛存在的迷思。作者指出,Yjs 等熱門 CRDT(無衝突複製資料型態)函式庫在處理離線衝突時會導致文件損毀,且在即時協同編輯中存在效能設計瑕疵。作者實測發現,Yjs 為了維持運作,竟會在每次按鍵時銷毀並重建整個文件,導致效能低落、節點狀態不穩定及外掛程式衝突。相比之下,利用 `prosemirror-collab` 這類基於單一權威節點的機制,僅需極簡程式碼即可實現離線同步與樂觀更新,不僅架構更輕量,且能更有效地達成 60 fps 的流暢效能目標。
+ 這篇文章真是當頭棒喝。大家盲目崇拜 CRDT,卻忽略了它帶來的效能成本和不可預測性。確實,很多應用場景根本不需要無主(masterless)架構。
+ 看到 Yjs 為了兼容性選擇「每次按鍵重繪」的設計細節令人震驚。難怪在複雜文檔編輯時,外
#軟體工程 #協同編輯 #技術架構 #Yjs #ProseMirror
Lies I was Told About Collaborative Editing, Part 2: Why we don't use Yjs / Moment devlog

Lies I was Told About Collaborative Editing, Part 2: Why we don't use Yjs / Moment devlog

Dear Diary...

Another quick #development #diary update on my research notebook software project Orsn.

This episode: ProseMirror text editor

https://orsn.io/v2/

#research #notebook #orsn #prosemirror

Moving. Forwards. Slowly. | Orson

Progress with ProseMirror.

Finally getting a handle on https://prosemirror.net/.

Managed to make my own toolbars and a prototype dialogue for inserting @mention type links.

It will be very powerful, in combination with codemirror, but has proven a bit tricky to get started with, in the context of the Vue framework, which tends to create proxy objects for reactivity.
Prosemirror spits those out in disgust.

#prosemirror #javascript #vue #texteditor

ProseMirror

In-browser structured text editing component

Show HN: Leaflet.pub – a web app for creating and sharing rich documents | Hacker News

Link📌 Summary: Leaflet.pub 是一款新推出的網頁應用程式,用於創建和分享豐富的文件。該專案由開發團隊花了 8 個月時間打造,旨在平衡 Notion 和 Google Docs 的優點——快速、輕量且易於分享,同時支援多樣化區塊和多頁面功能。Leaflet 提供無需帳號即可建立文件、分享閱讀與編輯連結、電子郵件登入同步文件,以及添加畫布、子頁面、RSVP 和投票等功能區塊。開發團隊也重視文件的美觀呈現,模糊了文件與網站的界限,讓使用者能夠自豪地在線上發布內容。

🎯 Key Points:
- Leaflet.pub 允許使用者無需帳號即可快速建立文件,支援閱讀和編輯連結分享
- 技術方面使用 Replicache 進行同步,資料以類似 Datomic 的實體事實集合方式建模,每個文字區塊使用獨立的 ProseMirror 實例
- 特色功能包括:精美的列表處理、自訂主題、iOS Safari 上的鍵盤處理、側滑多頁面介面以及 PWA 支援
- 未來計劃包括:改進首頁和文件組織功能、與 ATProto 和 Bluesky 整合、增加更多區塊類型(如表格和程式碼區塊)
- 開發團隊仍需改進的方向包括:大型文檔的效能優化、拖放和選擇功能、跨多頁的鍵盤導航,以及使用 CRDT 加速多人協作

🔖 Keywords: #協作文件平臺 #網頁應用程式 #ProseMirror #文件分享 #無帳號快速建立

Show HN: Leaflet.pub – a web app for creating and sharing rich documents | Hacker News

MarkupEditor (https://github.com/stevengharris/MarkupEditor) is a #WYSIWYG editor for #SwiftUI and #UIKit apps. It lets you create and edit clean HTML documents within an extension of WKWebView. The latest Beta uses #ProseMirror for the WYSIWYG heavy lifting on the backend. In addition to clearing up quite a few longstanding issues, the new version reduced my own JavaScript code from ~11,000 lines to ~3,000 while maintaining compatibility on the Swift side. Thanks to @marijn for such a great open source project.
GitHub - stevengharris/MarkupEditor: WYSIWYG editing for SwiftUI and UIKit apps

WYSIWYG editing for SwiftUI and UIKit apps. Contribute to stevengharris/MarkupEditor development by creating an account on GitHub.

GitHub

So I am getting over my problems with actually building things... I used #Svelte and #ProseMirror (technically TipTap as the wrapper) to build a very basic prototype of an Outliner editor. Just the "blocks of text that become editable when you click on them". It's a pure Alpha "does this even work" but well... it does.

First of many components of a modern tool for thought, demonstrated. (because it's ProseMirror, the blocks can contain defacto arbitrary HTML to express rich text...)

Massimiliano Farinella wrote #pundok, a visual #editor for #pandoc. The editor is based on pandoc's internal format, so no information is lost when transferring the documents to pandoc for further processing.
The editor is written using #ProseMirror and #Tiptap; it can be included in web pages or be run standalone (via Electron).
https://github.com/massifrg/pundok-editor
GitHub - massifrg/pundok-editor: A visual editor for Pandoc AST documents.

A visual editor for Pandoc AST documents. Contribute to massifrg/pundok-editor development by creating an account on GitHub.

GitHub

Okay so, getting some confidence with the #lexical text editor framework for the idea I want to implement took a bit of doing (since this is also my first web tech project where I am actively programming stuff, and so I am learning a whole bunch of JavaScript/Typescript on the wayside) but I am gaining confidence that it'll let me do what I want to do. (Building rich text connections with graph data.)

Maybe #ProseMirror would also work, but the docs on how ProseMirror posts updates are muddy.

#Development #Takeaways
A local-first case study · “It’s very possible to build a useful local-first app today.” https://ilo.im/160cj4

_____
#LocalFirst #WebApp #Maps #Svelte #Shoelace #ProseMirror #CRDT #WebDev #Frontend #JavaScript

A Local-First Case Study | jakelazaroff.com

How I built a local-first app for planning trips, and what I learned about the current state of the local-first ecosystem along the way.