mdExplorer — Markdown-Bestände durchsuchen und pflegen
Irgendwann ist mein Notizordner mir über den Kopf gewachsen. Hunderte Markdown-Dateien — Projektnotizen, Regeln, die ich mir für die Arbeit mit KI aufgeschrieben habe, halbfertige Artikel, Konzepte, technische Spickzettel. Alles schön in Textdateien, alles versioniert, alles theoretisch durchsuchbar. Praktisch aber habe ich Sachen nicht mehr wiedergefunden. Mein Editor durchsucht zwar Dateien, aber er zeigt mir nicht, wie die Notizen zusammenhängen, welche Begriffe ich immer wieder verwende oder welche Datei eigentlich auf welche andere verweist. Aus diesem Frust ist mdExplorer entstanden — ein Werkzeug, das einen Markdown-Bestand nicht nur öffnet, sondern erkundbar macht.
Worum es geht
mdExplorer ist eine Windows-Desktop-Anwendung, die einen oder mehrere Ordner voller Markdown-Dateien indexiert und durchsuchbar macht. Es ist kein Editor-Ersatz und will auch keiner sein. Es ist ein Werkzeug zum Erkunden, Finden und Pflegen — gedacht für den Moment, in dem du nicht mehr genau weißt, wo etwas steht, aber ungefähr weißt, worum es ging. Du gibst ein paar Wörter ein, und mdExplorer zeigt dir die passenden Dateien, rendert sie als lesbares HTML und lässt dich bei Bedarf direkt etwas ändern.
Das Wichtigste vorweg: Alles passiert lokal. Es gibt keinen Server, kein Konto, keine Cloud. Der Suchindex liegt in einer SQLite-Datenbank im lokalen Anwendungsordner, die Dateien bleiben dort, wo sie sind, und nichts verlässt deinen Rechner. Das ist keine Marketing-Aussage, sondern eine Architekturentscheidung — die ganze Anwendung ist so gebaut, dass sie ohne Netzwerkverbindung vollständig funktioniert. Veröffentlicht ist das Projekt unter der MIT-Lizenz, der Quellcode steht offen auf GitHub.
Die drei Panel
Das Hauptfenster ist in drei Spalten geteilt, und diese Aufteilung ist der Kern der Bedienung. Links siehst du entweder einen Ordnerbaum mit deinen Index-Wurzeln oder eine flache Liste aller erfassten Dateien — je nachdem, ob du dich lieber durch die Struktur klickst oder den ganzen Bestand auf einmal überblicken willst. In der Mitte sitzt die Suche mit der Trefferliste. Rechts ist das Dokument-Panel, das die ausgewählte Datei anzeigt, wahlweise gerendert zum Lesen oder als Rohtext zum Bearbeiten.
Optional lässt sich ganz rechts noch eine Tag-Cloud einblenden. Diese Aufteilung klingt erstmal unspektakulär, aber sie ist bewusst so gewählt: Du hast den Kontext links, das Finden in der Mitte und das Lesen rechts — und musst nie zwischen Ansichten hin- und herspringen. Die Spaltenbreiten merkt sich die Anwendung über Neustarts hinweg, sodass dein Layout so bleibt, wie du es eingerichtet hast.
Suche, die mitdenkt
Die Suche ist das Herzstück, und sie sucht beim Tippen. Nach einer kurzen, konfigurierbaren Pause — dem sogenannten Debounce, der verhindert, dass nach jedem einzelnen Tastendruck eine neue Suche losläuft — feuert die Volltextsuche automatisch. Dahinter steckt FTS5, die Volltext-Suchmaschine von SQLite, die einen invertierten Index über alle Dokumente legt. Das bedeutet praktisch: Auch bei mehreren Tausend Dateien kommt das Ergebnis ohne spürbare Verzögerung.
Mehrere Wörter werden mit „und“ verknüpft, Anführungszeichen suchen eine exakte Phrase, ein Stern am Wortende sucht alle Wörter mit diesem Präfix. Dazu kommen Filter: tag: schränkt auf Notizen mit einem bestimmten Schlagwort ein, -tag: schließt eines aus, und path: filtert auf einen Teil des Dateipfads. Über zwei Auswahlfelder lässt sich der Modus zwischen klassischer Volltextsuche und regulären Ausdrücken umschalten sowie die Ähnlichkeit steuern — von exakt über Wortstamm-Reduktion bis hin zu einer Suche, die auch verwandte Wortformen und Synonyme einbezieht. Das ist der Unterschied zwischen „ich suche genau dieses Wort“ und „ich suche das Thema, egal wie ich es damals genannt habe“.
Ein Kontrollkästchen entscheidet über den Suchradius. Ohne Haken sucht mdExplorer global über alle Index-Wurzeln, mit Haken nur im gerade gewählten Ordner und seinen Unterordnern. Das ist genau dann praktisch, wenn du weißt, dass die gesuchte Notiz in einem bestimmten Projekt liegt, und nicht von Treffern aus allen anderen Ecken zugeschüttet werden willst.
Bearbeiten ohne Reue
Im rechten Panel kannst du jede Datei direkt bearbeiten, ohne einen externen Editor zu öffnen. Die Umschaltung zwischen Lesen und Bearbeiten passiert über einen Knopf oder ein Tastenkürzel. Im Bearbeiten-Modus zeigt eine Textfläche den Rohtext, und die Tag-Leiste darüber aktualisiert sich live, während du tippst.
Mir war beim Bauen ein Punkt besonders wichtig: nichts versehentlich kaputtmachen. Deshalb ist jede frisch geladene Datei standardmäßig schreibgeschützt. Tippen, Tags ändern, Speichern — alles bleibt wirkungslos, bis du die Datei über einen ausdrücklichen Knopf entsperrst. Das klingt nach einem unnötigen Klick, hat mir aber schon mehrfach erspart, in einer Datei herumzuändern, die ich eigentlich nur lesen wollte.
Gespeichert wird atomar. Das heißt, die Anwendung schreibt zuerst eine temporäre Datei und benennt sie dann in einem einzigen Schritt um — so kann selbst ein Absturz mitten im Speichern die Originaldatei nicht in einem halb geschriebenen Zustand hinterlassen. Das ursprüngliche Zeilenende, ob Windows- oder Unix-Stil, bleibt dabei erhalten, damit ein Speichervorgang nicht die halbe Datei in der Versionskontrolle als geändert markiert. Und wenn eine Datei sich während deiner Bearbeitung von außen verändert hat — etwa weil ein anderes Programm hineingeschrieben hat — erkennt mdExplorer das vor dem Speichern und blockiert, bis du selbst entscheidest, was gelten soll. Lieber ein Hinweis als ein stiller Datenverlust.
Tags ordnen das Chaos
Markdown-Notizen leben von Schlagwörtern, und mdExplorer behandelt sie als erstklassige Bürger. Tags lassen sich direkt im Editor hinzufügen, entfernen oder umbenennen. Neue Tags landen in einem verwalteten Kommentarblock am Dateiende, der so aufgebaut ist, dass er beim Lesen der Notiz nicht stört, aber maschinell sauber wiederzufinden ist. Wer seine Tags lieber im YAML-Frontmatter pflegt — also dem strukturierten Kopfbereich, den viele Markdown-Systeme am Dateianfang verwenden — wird dort ebenfalls erkannt.
Die Tag-Cloud rechts zeigt die häufigsten Schlagwörter, wobei die Schriftgröße logarithmisch mit der Häufigkeit skaliert — ein Tag, das doppelt so oft vorkommt, wird also nicht doppelt so groß, sonst würden ein paar Dauerbrenner die ganze Wolke dominieren. Ein Klick setzt die Suche auf dieses Tag, mit gedrückter Steuerungs- oder Alt-Taste lässt sich additiv ergänzen oder gezielt ausschließen.
Richtig nützlich wird es bei der Tag-Verwaltung. Über einen eigenen Dialog kannst du ein Schlagwort in allen betroffenen Dateien auf einmal umbenennen, zwei Tags zusammenführen oder eines komplett entfernen — jeweils sowohl im Fließtext als auch im Frontmatter, und Duplikate räumt der Dialog dabei automatisch weg. Vor jeder Operation zeigt eine Rückfrage, wie viele Dateien betroffen sind und welche das sind. Wer schon mal ein Schlagwort über zweihundert Dateien hinweg von Hand korrigiert hat, weiß, warum diese Funktion existiert.
Der WikiLink-Graph
Viele Notizsysteme erlauben es, mit doppelten eckigen Klammern von einer Datei auf eine andere zu verweisen — ein WikiLink. Über die Zeit entsteht so ein Netz aus Querverweisen, das man als einzelne Datei aber nie zu sehen bekommt. mdExplorer macht dieses Netz sichtbar. Ein eigenes Fenster zeigt den Graphen des gesamten Bestands: Jeder Knoten ist eine Markdown-Datei, jede Kante ein Verweis. So erkennst du auf einen Blick, welche Notizen zentral sind, welche isoliert herumliegen und wo Themen zusammenhängen, die du nie bewusst verknüpft hast.
Der Graph wird in einer eingebetteten Browser-Komponente gerendert, der WebView2-Laufzeitumgebung von Windows. Und hier kommt wieder die Lokal-zuerst-Philosophie ins Spiel: HTML, JavaScript und CSS für die Darstellung sind als eingebettete Ressourcen Teil der Anwendung, es wird nichts von einem externen Server nachgeladen. Eine strenge Content-Security-Policy verbietet jede Quelle, die nicht ausdrücklich erlaubt ist, und lässt nur Skripte mit einem passenden Einmal-Token zu. Auch der hübsche Graph braucht also keine Internetverbindung und öffnet keine Hintertür.
Im Betrieb
Ein Werkzeug, das ich täglich nutze, muss mir auch sagen, wenn etwas nicht stimmt. Deshalb sitzt links in der Statusleiste eine kleine Betriebs-Leuchte: grün heißt normal, gelb steht für Warnungen im jüngsten Protokoll, rot für Fehler. Ein Klick darauf öffnet direkt den Protokoll-Betrachter, in dem die letzten Einträge aus einem Ringpuffer im Arbeitsspeicher stehen — gefiltert nach Schweregrad oder durchsucht nach einem Stichwort, und bei Bedarf als Datei exportierbar.
Auch die Einstellungen führen ein Gedächtnis. Jede Änderung erzeugt automatisch einen vollständigen JSON-Schnappschuss und einen Eintrag in einem Audit-Protokoll, das genau festhält, wann sich was von welchem auf welchen Wert geändert hat. Identische Speichervorgänge werden dabei ignoriert, damit das Protokoll nicht mit Leerläufen vollläuft. Das ist mehr Sorgfalt, als ein Notiz-Werkzeug streng genommen braucht — aber es entspricht der Art, wie ich Software baue: nachvollziehbar statt magisch.
Bei sehr großen Beständen mit mehreren Tausend Dateien würde ein vollständiger Erst-Scan sonst dazu führen, dass die Oberfläche minutenlang leer bleibt. Deshalb committet der Indexer den ersten Durchlauf in Häppchen: Nach jeweils hundert Dateien schreibt er einen Zwischenstand, und die Dateiliste füllt sich Stück für Stück, statt erst am Ende auf einen Schlag. Du kannst also schon arbeiten, während im Hintergrund noch indexiert wird.
Wie es gebaut ist
mdExplorer ist in C# auf .NET 10 geschrieben, die Oberfläche nutzt WPF nach dem MVVM-Muster — die Logik steckt in den ViewModels, die Oberfläche bindet sich an deren Eigenschaften, und Code direkt hinter den Fenstern wird so weit wie möglich vermieden. Die Architektur folgt einem strikten Modulprinzip mit flacher Struktur: Es gibt einen Kern mit den Abstraktionen, ein Datenmodul für SQLite über Entity Framework Core, einen Indexer, der das Dateisystem überwacht, einen Parser auf Basis von Markdig mit einer eigenen WikiLink-Erweiterung, ein Suchmodul, das Graph-Modul und die Tag-Cloud. Jedes Modul hat seine eigene Zuständigkeit und seine eigenen Tests.
Auf Qualität achte ich dabei nicht nur in Worten. Der Build zieht StyleCop und SonarAnalyzer zentral ein und läuft mit der Einstellung, dass jede Warnung als Fehler gilt. Eine einzige übersehene Stil- oder Analyse-Meldung bricht also den Build — null Warnungen ist kein Wunschziel, sondern eine Bedingung. Jedes Modul hat seine eigene xUnit-Testsuite, und im Werkzeug-Ordner liegt zusätzlich ein Geheimnis-Scanner, der verhindert, dass versehentlich ein Zugangsschlüssel im Quellcode landet. Das ist die Art von Disziplin, die man bei einem Hobbyprojekt weglassen könnte — aber genau dann gewöhnt man sie sich für die ernsten Projekte ab.
Warum lokal statt Cloud
Es gibt großartige Notiz- und Wissensdienste im Netz, und für viele Leute sind sie genau richtig. Aber meine Notizen sind das Rohmaterial meiner Arbeit — Projektgedanken, halbfertige Ideen, interne Regeln. Das will ich nicht auf einem fremden Server liegen haben, schon gar nicht in einem Format, das mir irgendwann den Zugang verwehren könnte, wenn ein Abo ausläuft oder ein Anbieter den Dienst einstellt. Markdown-Dateien auf der eigenen Platte gehören mir, sind in dreißig Jahren noch lesbar und lassen sich mit jedem Werkzeug öffnen.
mdExplorer fügt diesem Bestand nur eine Linse hinzu, ohne ihn zu vereinnahmen. Es schreibt seine Tags in die Dateien selbst, seinen Index in eine separate Datenbank, die sich jederzeit neu aufbauen lässt, und ansonsten lässt es deine Ordnerstruktur in Ruhe. Selbst die Aktualisierungsprüfung ist zurückhaltend gebaut: Einmal täglich fragt die Anwendung bei GitHub nach, ob es eine neuere Version gibt, und zeigt bei Bedarf einen dezenten Hinweis — heruntergeladen oder installiert wird nichts automatisch, und ohne Internetverbindung verhält sich alles unverändert. Wer den Quellcode sehen, das Werkzeug selbst bauen oder etwas beitragen will, findet das Projekt offen auf GitHub unter github.com/ReneSchustek/mdExplorer.
Die gezeigten Code-Beispiele dienen zur Veranschaulichung. Nutzung auf eigene Verantwortung. Mehr dazu