Kern
| Laag | Taal / build |
|---|---|
Binary markdowner |
C11 + C++17, make / CMake |
| Web-UI | Python stdlib HTTP-server + vanilla HTML/CSS/JS (geen npm, geen framework) |
| Sidecars (OCR, ASR, mail, RAG) | Python 3.10–3.12 in third_party/ocr-venv |
De C-laag doet convert, vault, zettel, index, search. C++ zit vooral in OCR/ASR/ask. Zware of copyleft-tools draaien niet in-process, maar als subprocess.
In-process libraries
In de binary:
- zlib / libzip — ZIP/Office-containers
- pugixml — XML (Office/ODF)
- SQLite + FTS5 — full-text index (
_meta/inv/fts.db) - OpenSSL — hashing/crypto
- libcurl + nlohmann/json — optionele
ask→ Mistral - Tesseract + Leptonica — OCR-fallback
Sidecars en externe tools
Conversie (PATH, niet gelinkt)
Pandoc, LibreOffice (soffice), Poppler (pdftotext/pdftoppm), antiword/catdoc, readpst, ffmpeg.
tools/mail_sidecar.py met extract-msg, icalendar, vobject.
OCR / HTR
RapidOCR (ONNX, default, licht), optioneel PaddleOCR / PP-StructureV3 (zwaar). Handschrift: Qwen2.5-VL, Kraken+ARletta (historisch NL), TrOCR (modern). GPU via PyTorch (CUDA of ROCm). Per pagina kiest een heuristische competitie de winnaar.
ASR
faster-whisper + lokaal Whisper-model.
RAG (ask)
sentence-transformers (BGE-M3), chonkie, rank_bm25, numpy, usearch. Chat: lokaal Ollama (o.a. Qwen) of optioneel Mistral-API.
Graph
Logseq 0.10.x (file-graph AppImage), geen Logseq 2.x-database.
Architectuur in één zin
C/C++-CLI als orchestrator → Markdown-vault → SQLite FTS5 + lokale embeddings → Python-sidecars voor OCR/ASR/RAG → dunne lokale web-UI op 127.0.0.1:8877. Alles is offline-first / OSS; cloud alleen als je zelf een API-key zet.
De commando’s staan op de man-page.
Open source
De stack van Markdowner is open source. Het enige echte niet-open-source-pad is optionele cloud-chat bij Mistral. Sommige modelgewichten zijn wel vrij te downloaden, maar geen OSI-open source.
De CLI, parsers, web-UI, sidecars en plugins zijn OSS. In de binary zitten alleen permissieve libs: zlib, libzip, pugixml, SQLite, OpenSSL, libcurl, nlohmann/json, Tesseract/Leptonica.
Zwaardere of copyleft-tools draaien expres buiten de binary (subprocess), maar zijn wél open source:
| Onderdeel | Licentie (kort) |
|---|---|
| Pandoc, Poppler, LibreOffice, readpst | GPL / MPL / vergelijkbaar copyleft |
| Logseq 0.10.x | AGPL |
| PaddleOCR, RapidOCR, faster-whisper, kraken, Transformers, Ollama | OSS (Apache/MIT e.d.) |
| RAG-libs (chonkie, rank_bm25, usearch, sentence-transformers) | OSS |
Geen commerciële SDK’s in de binary. Zonder API-key blijft alles lokaal.
Wel downloadbaar, niet altijd “open source”
Modelgewichten zijn geen programma. Die hebben eigen voorwaarden.
| Model | Gebruik | Open source? |
|---|---|---|
| BGE-M3 (embeddings) | lokale ask / index |
ja (MIT) |
| Whisper (ASR) | audio → tekst | ja (MIT) |
| TrOCR | modern handschrift | ja (MIT) |
| ARletta | historisch NL-HTR | open inhoud (CC-BY), geen software-OSS |
| Qwen2.5 72B via Ollama | lokale chat | ja (Apache 2.0) |
| Qwen2.5-VL (handschrift-VLM) | lokale OCR | nee — Qwen Research License, alleen non-commercieel |
NVIDIA-CUDA-drivers zijn propriëtair; ROCm is opener. Dat is de GPU-runtime, niet Markdowner.
Niet open source
Mistral API (MISTRAL_API_KEY): closed cloud. Chunks en vragen gaan naar api.mistral.ai. Hetzelfde voor mistral-large en optioneel ASK_RAG_EMBED=mistral.
Zonder key: retrieval lokaal; chat via Ollama als die draait, anders alleen hits.
Jouw vaults — scans, mail, notities — zijn jouw data, geen OSS.
Kort: code en lokale pipeline = OSS. Mistral = gesloten cloud (opt-in). Qwen2.5-VL-gewichten = restrictief, geen OSI-licentie.