Developer Docs
Everything you need to build, understand, and extend Lexicon: one C++23 backend and three clients. The Qt desktop client opens the SQLite database directly; the web client and the Android app talk to LexiconServer over a REST API.
Technology stack
| Part | Technology | Notes |
|---|---|---|
| Backend | C++23 | CMAKE_CXX_STANDARD 23, extensions off, no Qt |
| Persistence | SQLite C API | One database file with versioned migrations; FTS5 search where SQLite has it; files in blobs/ beside it |
| Desktop client | Qt 6 Widgets | Classic desktop widgets, no QML; Markdown by the vendored md4qt |
| Server | LexiconServer | REST/JSON under /api/v1, vendored cpp-httplib and nlohmann/json, OpenSSL for TLS and hashing |
| Web client | HTML, CSS, JavaScript modules | No framework and no build step; vendored marked and DOMPurify |
| Android client | Kotlin, Jetpack Compose | A separate Gradle project; no database of its own |
| Build | CMake β₯ 3.21, Gradle | CMake for the C++ targets, Gradle for Android |
| Tests | CTest, Node, Robolectric, a headless browser | All run on every push by GitHub Actions |
| License | MIT | Free for any use |
Repository layout
lexicon/
βββ lexicon-core/ # records, validation, review rules, wiki links, image values
βββ lexicon-application/ # services and the Repository interface
βββ lexicon-storage-sqlite/ # native SQLite, migrations, search index, Blob files
βββ lexicon-json/ # the JSON form of records; export and import
βββ lexicon-http/ # REST routes, authentication, sessions, CORS, TLS
βββ lexicon-server/ # LexiconServer and its automatic backups
βββ lexicon-qt-bridge/ # Qt / UTF-8 conversions
βββ lexicon-qt/ # Qt Widgets desktop client
βββ lexicon-web/ # static web client
βββ lexicon-android/ # Android client (Gradle)
βββ tests/ # C++ tests, including offscreen desktop dialogs
βββ tools/ # web-e2e.py (browser test), serve-web.py
βββ docs/ # REST API, server, export format
βββ web/ # this site
βββ 3rdparty/ # md4qt, cpp-httplib, nlohmann/json
How it fits together
Each program has a composition root that opens the SQLite repository and injects it into LexiconApplication: the desktop client in lexicon-qt/, the server in lexicon-server/. Only the storage target runs SQL. The server exposes the same services over REST, and the web client and the Android app use nothing else. Read the architecture guide.
Jump in
π¨ Building from source
Prerequisites, the desktop client, the server, the web and Android clients, and the tests.
ποΈ Architecture
Targets and their dependencies, transactions, revisions, search, files, and the clients.
ποΈ Database schema
Tables, indexes, cascade rules, and the versioned migrations β with full DDL.
πΊοΈ Roadmap & TODO
What shipped, what may come later, and the working TODO list.
π€ Contributing
How to report issues, propose changes, and submit pull requests β plus licensing details.
π GitHub repository
Browse the source, open issues, and star the project.