I've been running a private Gollum wiki and evaluated some other options, but I'm consistently unhappy with the editing experience. Most wiki software prioritizes web accessibility over the rich editing experience that desktop applications can provide. So I'm building my own desktop wiki application using Qt and C++.

Fukuro is a markdown-based wiki with some cool features: tiling window management, real-time physics-based graph visualization, and SQLite-powered full-text search. It's been a fun project to explore some ideas I've had about how note-taking applications could work.

Custom Tiling Window System

Inspired by tiling window managers like i3, I'm implementing a custom tiling system that splits the editor workspace dynamically. This is more challenging than I expected - most applications rely on existing frameworks, but I'm building the entire system from scratch using QML and JavaScript. The system maintains a binary tree structure where each tile can be split horizontally or vertically. Navigation between tiles uses keyboard shortcuts (Alt+Arrow keys), and the layout responds dynamically to window resizing. You can split with Alt+Shift+Down/Right and navigate seamlessly between multiple documents.

Physics-Based Graph Visualization

Another cool feature is the network graph view that shows relationships between wiki pages. Rather than a static diagram, this implements a real-time physics simulation with springs and repelling forces to create natural document clustering. The graph is interactive and you can drag nodes, making the node graph feel organic and alive as nodes gently oscillate and settle into stable configurations. I used a spatial hash to accelerate neighbor queries for the repelling forces:

Markdown Support

The editor features comprehensive syntax highlighting for markdown with embedded code block support. The MarkdownHighlighter class recognizes dozens of programming languages and applies appropriate syntax coloring in real-time. Wiki-style [[links]] are automatically detected and indexed for the graph visualization.

Auto-completion suggests document titles as you type, and the search system provides expandable context snippets that slide out on hover. The combination creates a fluid writing experience that encourages linking between related concepts.

Technical Architecture

SQLite as the Storage Backend

One decision I'm particularly happy with is using SQLite as the primary storage backend instead of just the filesystem. While markdown files remain the source of truth, SQLite handles indexing, search, and metadata. This architecture enables instant full-text search across thousands of documents using SQLite's FTS5 extension:

CREATE VIRTUAL TABLE documents_fts USING fts5(name, content, content='documents', content_rowid='id');

The DBManager singleton maintains real-time synchronization between file system changes and the database index. When files get modified, added, or deleted, the search index updates automatically without requiring manual rebuilding.

Qt/QML for the UI

The application has clean separation between C++ backend services and QML frontend components. Core services like database management, file system monitoring, and Git integration use the singleton pattern with Qt's signal-slot system for loose coupling:

// Real-time sync between file system and database
connect(&fileManager, &FileManager::signalNewFiles, 
        DBManager::getInstance(), &DBManager::slotNewFiles);

connect(&fileManager, &FileManager::fileRenamed, 
        DBManager::getInstance(), &DBManager::slotFileRenamed);

Next Steps

There's still work to be done - I want to add better markdown preview capabilities and improve the Git integration. The physics simulation could use some tuning to make the graph more stable, and I'm thinking about adding more sophisticated search operators.

Update

I archived Fukuro. It's been a fun exploration of desktop application development. However, it doesn't seem sensible to continue further, as better options emerged. Most pain points in my everyday usage were related to text editing. Further improvements beyond the basic QTextEdit would mean implementing yet another text editor. In my opinion, dendron's approach to plug into VS Code and "only" adding a thin layer of wiki capabilities like backlinks and a nice graph view is superior. This means getting excellent editing capabilities, markdown preview, and git integration out of the box. Obsidian also emerged as a better implementation of the standalone tool strategy. So while it's been fun, I'm going to use dendron and spend my coding time on other stuff.