Contributing
Contributions of all sizes are welcome — bug reports, documentation fixes, and code. The codebase is compact, so the barrier to entry is low.
Reporting issues
Found a bug or have a feature idea? Open an issue on the GitHub issue tracker. A useful bug report includes:
- your operating system and Qt version,
- steps to reproduce the problem,
- what you expected vs. what actually happened,
- the exact error message, if any.
Check the plan first Before proposing a feature, skim the Roadmap & TODO — it may already be planned, and your issue can then reference and refine it.
Pull requests
- Fork the repository on GitHub and clone your fork.
- Create a branch for your change:
git checkout -b fix/table-sorting. - Make the change, keeping it focused — one topic per pull request.
- Run the tests (see Building from source), then exercise the affected workflow by hand and check that migrations still apply cleanly to both a fresh and an existing
lexicon.db. GitHub Actions runs every suite on your pull request. - Open the pull request with a clear description of what changed and why.
Coding guidelines
- Match the existing style. The project uses straightforward Qt Widgets C++ — follow the naming and layout conventions in the relevant layer.
- C++23, no extensions. The build sets
CMAKE_CXX_STANDARD 23with compiler extensions off; keep code portable across GCC, Clang, and MSVC. - SQL belongs in
lexicon-storage-sqlite. UI classes call application services through the repository boundary. - Schema changes are append-only migrations. Never modify a shipped migration; add a new version instead (see Adding a migration).
- Never renumber enums.
ItemStatus,UnderstandingLevel,LinkType, andFieldDataTypevalues are persisted in SQLite (see Architecture). - Report errors, don't swallow them. Return
std::expected<T, Error>from public application and repository operations.
License
Lexicon is released under the MIT License — you may use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the software, provided the copyright notice and permission notice appear in all copies. The software is provided "as is", without warranty of any kind.
By submitting a contribution you agree that it will be licensed under the same items. Read the full text in LICENSE.
Third-party code: the vendored md4qt Markdown parser retains its own license, found under 3rdparty/.