DEV Community

Cover image for I shipped an 800-star Markdown editor without knowing Rust
Ola Prøis
Ola Prøis

Posted on

I shipped an 800-star Markdown editor without knowing Rust

Sometime late last year I opened Notepad on Windows 11 and watched it use 100MB of RAM.

Notepad. The app that used to be 200KB.

Microsoft had added Copilot integration, some half-baked markdown preview, and turned a text editor into another bloated thing. I was using some random free website just to read .md files at that point.

I'd been building stuff with AI for about two years. I'd even shipped Rust projects before using this approach. But I don't actually know Rust. I don't know any programming languages. I can't read code line by line and tell you what it does.

So I built another one.

Ferrite now has 800+ GitHub stars. Every line of its 15,000+ lines of Rust code was generated by AI. Here's the real story of how that went.

The Setup

I use Claude through Cursor for the actual coding. For task management and keeping context between sessions, Task Master handles PRD parsing and task generation. When the AI needs current documentation for libraries like egui, it pulls it through Context7.

The short version of the workflow:

  1. I research what to build using Perplexity and other models for tech decisions
  2. A high-end model generates the PRD based on my direction, then other models evaluate it
  3. Task Master breaks the PRD into structured tasks
  4. Claude implements each task in a fresh chat session
  5. I test the results, describe what breaks
  6. Iterate until it works

Each task gets a handover document that gives the AI exactly the context it needs. Fresh chat, paste the handover, work until done, update the handover for the next task. The full workflow documentation is public if you want the details.

What Actually Works Well

The boring stuff. Setting up a Rust project, file I/O, config handling, window management. AI is great at "do the standard thing."

Bug fixes. Describing a bug and getting a fix is often faster than traditional debugging. "The scroll position resets when I switch tabs" turns into working code in one prompt.

Feature implementation. I describe what I want and it generates code that integrates with the existing architecture. Most of the time.

What Breaks

Edge cases. The Mermaid diagram rendering is a good example. We support flowcharts, sequence diagrams, class diagrams, state diagrams, and several others. Flowcharts are the most complete right now. The 0.2.5 release made the basics much more reliable, but there's still a lot of work to do before all those diagram types actually work well. That's on the roadmap for 0.2.6 and 0.3.0.

AI generates the happy path. The weird inputs, unusual syntax, nested edge cases? Those break.

Performance. I had to guide optimization heavily. We went from 250MB idle to around 72MB, but I had to identify what to optimize. The AI can't look at the memory profiler.

Architecture. "Should this be a separate module?" AI gives answers. They're not always good ones. I had to learn enough about the codebase to evaluate whether what it suggested made sense.

The Transparency Thing

I didn't put "built with AI" in the README from day one. Honestly, I didn't think about it.

When the project started getting attention somewhere around version 0.2.0, someone pointed it out. Fair point. I added it right away.

If you're using the app, you should know how it was made. If you're contributing, you should know what you're working with. The code has inconsistent patterns in places, probably bugs I haven't found yet. A senior Rust developer would find things to cringe at. But it works.

The Actual Product

Here's what Ferrite does now:

Native Mermaid rendering. This is the main thing. Diagrams render directly in the preview without JavaScript or external services. Flowcharts are solid. Other diagram types are getting there.

Performance that makes sense. About 72MB of RAM idle. Fast startup. The kind of performance you'd expect from a native app instead of a web browser pretending to be one.

Split view editing. Raw markdown on the left, rendered preview on the right. Both sides are editable.

The rest. Syntax highlighting for 40+ languages, Git integration, session persistence, keyboard shortcut customization, multi-encoding support. Chinese translation is 100% complete thanks to contributors.

I never actually tried Obsidian or Typora before building this. But from what I can tell looking at benchmarks and user reports, Ferrite holds up well against them on performance. And it's free and open source.

Would I Do This Again?

Yes.

I don't know programming languages. That hasn't changed. But the app exists. People use it. It does what I needed it to do.

For a side project where "works" matters more than "perfect," this was the right call.


Links:

All the prompts, handover documents, and development history are public. Fork it, learn from it, tell me what I got wrong.


The Mermaid renderer is planned for extraction as a standalone Rust crate. If that interests you, follow the project.

Top comments (0)