Show HN: A WYSIWYG word processor in Python (codeberg.org)

91 points by chrisecker ↗ HN
Hi all,

Finding a good data structure for a word processor is a difficult problem. My notebook diaries on the problem go back 25 years when I was frustrated with using Word for my diploma thesis - it was slow and unstable at that time. I ended up getting pretty hooked on the problem.

Right now I’m taking a professional break and decided to finally use the time to push these ideas further, and build MiniWord — a WYSIWYG word processor in Python.

My goal is to have a native, non-HTML-based editor that stays simple, fast, and is hackable. So far I am focusing on getting the fundamentals right. What is working yet is:

- Real WYSIWYG editing (no HTML layer, no embedded browser) with styles, images and tables.

- Clean, simple file format (human-readable, diff-friendly, git-friendly, AI-friendly)

- Markdown support

- Support for Python-plugins

Things that I found:

- B-tree structures are perfect for holding rich text data

- A simple text-based file format is incredibly useful — you can diff documents, version them, and even process them with AI tools quite naturally

What I’d love feedback on:

- Where do you see real use cases for something like this?

- What would be missing for you to take it seriously as a tool or platform?

- What kinds of plugins or extensions would actually be worth building?

Happy about any thoughts — positive or critical. Greetings

16 comments

[ 2.8 ms ] story [ 41.3 ms ] thread
On MacOS, I'm seeing `ModuleNotFoundError: No module named 'miniword.core.utils'` whether I run `python3 -m miniword` from src/miniword/ or from src/miniword/miniword/.
Looks like a nice project.

Looks like you missed a file, though.

ModuleNotFoundError: No module named 'miniword.core.utils'

I don't see it in my local clone of your repo, nor the repo iteslf.

I adore anything that avoids using a browser. <3
One feature missing from almost every mainstream word processor: REVEAL CODES! (https://kb.corel.com/en/127364)

This is a famous "killer" feature from WordPerfect: the ability to view and edit the low-level formatting for a document. It's invaluable for fixing weird bugs.

However, it works only because WP uses the "text-stream" paradigm, where a document comprises a linear stream of text with formatting codes (Bold, Font, Hard Return, etc.) embedded directly at the point at which they're applied.

In contrast, Word uses the "nested containers" model (characters inside words, words inside paragraphs, paragraphs inside sections, etc.), where this feature can't be replicated.

I didn't look closely at your code, but just thought to mention this feature.

This took me down the nostalgic memory lane of the planet-source-code days. There were hundreds of such projects in Visual Basic, Delphi, C/C++/MFC etc., and text editors and paint clones were the most popular projects.
at this point, a WYSIWYG just seems like a huge step backwards from just using markdown. I love having access to my files in a standard text format this is super easy to parse, and not being locked into whatever weird format that WYSIWYG decides to store it in.

I still don't understand why people still use ~~Microsoft Word~~Copilot document writer , I think they have gotten into some weird mindset that their documents require all this weird unnecessary formatting to look "official"

This is great!

Curious about the choice of toolkit: what led you to wxPython?

I love seeing new word processor projects!
> - Real WYSIWYG editing (no HTML layer, no embedded browser) with styles, images and tables. > - Clean, simple file format (human-readable, diff-friendly, git-friendly, AI-friendly)

Very nice! Unfortunately, the UI menus seem to be broken when using a dark-mode GTK theme (e.g. Adwaita Dark).

Check out Typst. It’s a markup language focused on print with HTML layout as a secondary target.
Tables and images are the part where every "just use a rope" answer falls apart, so going B-tree feels right. I tried building a minimal rich text editor last year and got stuck exactly at the point where tables stopped being attachable as metadata and needed to live in the structure itself, ended up shelving it. Good to see someone actually push through it.
You had me at "non-HTML-based" ;)

I've been looking for a simple word processor that will let me easily/quickly do basic things and which will let me export to markdown and HTML that isn't terrible like the type word processors create.

I recently found wordgrinder (https://github.com/davidgiven/wordgrinder), which is a terminal-based word processor that's very close to what I've been looking for. A wx-based thing like this might be a bit nicer. So I'll start with one suggestion: support for wordgrinder's .wg format would be real nice :)