Note
This project is primarily a playground for experimenting with new C++ technologies and approaches, so some parts of the codebase may remain a little rough around the edges.
Description • Key features • SetUp • Roadmap • Tech stack
Build • Tests • Project structure • Credits
TermGraph is a terms diagram builder. It helps to make a hierarchical projection of a terms-space onto 2d plane and build a map of definitions. Like this, but bigger:
graph RL
classDef stdN fill:#1f5f5f,stroke-width:0px;
Node("<b><i>Node</i></b></br>some point in space"):::stdN
Edge("<b><i>Edge</i></b></br>line, connecting two {nodes}"):::stdN
Arc("<b><i>Arc</i></b></br>{edge}, that has a direction"):::stdN
Graph("fa:fa-diagram-project <b><i>Graph</i></b></br>set of {nodes} and associated with them {edges}"):::stdN
Edge --> Node
Arc --> Edge
Graph -.-> Node
Graph --> Edge
Short answer: This will help you learn something new faster and with deep understanding.
Long answer: In all well-structured areas of knowledge, it is easy to see how explanations are built up on each other.
The most basic concepts are easily accessible to any beginner. More complex concepts require more effort and are always explained in terms of simpler ones.
If you try to draw the first few "layers" of these terms, it will look like a ladder or lasagna) If you draw them all, you will get a knowledge area map, which can be very useful.
- Its construction guarantees learning with active memorization
- Wikipedia wandering can become a good teacher with this approach (I have checked)
- Understanding what to learn and in what order
- Easier to google something
- If you forgot the term, but remember it's connections - you can easily find it
- You see the "big picture" of knowledge
- Blind spots of your knowledge become visible
- Fights the illusion of knowledge
- The learning curve gets higher
- Assistance in the transfer of experience
- Understanding how your expertise relates to other areas of knowledge
- Builds on Desktop and Wasm
- Supports big maps (at least 1500 nodes)
- Devices synchronization
- Semi-automatic links markup
- Desktop: build from sources on ubuntu (yet)
- Wasm: build from sources or available here
- Make "hard/quick links" with uuid
- Fully automatic link search
- Map layers
C++ 23
Qt 6.8.3 | QML
CMake 4.0+ (via Conan)
Conan 2
- 🔧 Clang 21
- 🔧 Ninja (via Conan)
- 🌐 Emscripten 3.1.56 (WASM builds)
- 🧪 GTest 1.17.0 (desktop tests)
- 📚 OleanderStemmingLibrary (git submodule)
- Clang 21
- Conan 2
- Qt 6.8.3 (with Qml modules)
- Emscripten 3.1.56 (for WASM builds only)
CMake and Ninja are provided automatically via Conan tool_requires.
You can build project with QtCreator, using CMake Presets (which QtCreator more or less understands).
Also you can build it with python script at repository root.
Try ./project.py --deps-install --build --run, it would build and run desktop version
Tests working only with desktop target. GTest library installed via conan, only for desktop target.
You can start tests from:
- QtCreator or
- run
ctest ./in build folder atbuild/desktop_(dev|release)or - run
./project.py --testat repository root
├── .github/workflows/ # GitHub actions (CI)
├── conanfiles/ # Conan profiles (host/build/base)
├── data/ # Static data (JSON knowledge graphs)
├── resources/ # Resources: app icons, main html wrapper etc...
├── source/ # Main source code
│ ├── Atoms/ # QML atoms components (atomic design)
│ ├── CommonTools/ # Some common tools with wide reuse
│ ├── enums/ # Enum definitions
│ ├── graph/ # Graph theory primitives
│ ├── helpers/ # Helper utilities (links, stemming, settings)
│ ├── managers/ # Business logic managers
│ ├── model/ # Qt models for graph data
│ ├── Molecules/ # QML molecules components (atomic design)
│ ├── Pages/ # QML pages
│ ├── staticDataStorage/ # Static data storage class
│ ├── TermDataConnection/ # Abstracts the data interface connection
│ ├── TermDataInterface/ # Data storage interface
│ ├── TermDataStorage/ # Data storage
│ ├── Text/ # Text processing
│ ├── Theme/ # QML theme. Colors, icons, fonts etc...
│ └── Tools/ # Some QML debugging tools
├── test/ # Tests (GTest, desktop only)
├── third_party/ # Git submodules (stemming library)
├── tools/ # Side utilities
├── CMakeLists.txt # Main CMake file
├── CMakePresets.json # CMake presets
├── conanfile.py # Conan dependencies
└── project.py # Python script for building and running project