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.