Welcome to Fincept Terminal! This guide will get you from zero to your first contribution.
Fincept Terminal is a native C++20 desktop terminal for financial research — Qt6 UI, embedded Python 3.11 analytics, one binary.
It ships in two editions on one data core:
- Open source (this repository) — AGPL-3.0, free for learning, personal use and academic research. Ships one release a month. This guide covers building it.
- Enterprise — the private, closed-source build for funds, family offices and research desks: 41 modules, proprietary datasets, multi-agent research, live broker routing, SSO and an SLA, from $99/user/month. It is not built from this repository.
Current reality:
- Legacy professional terminals: ~$27,000/year per seat
- Industry-standard market data subscriptions: $20,000+/year
- Professional tools locked behind paywalls
What this repository is for:
- 100+ data source integrations (stocks, crypto, forex, economic data, news)
- AI-powered analysis — bring your own LLM key
- Native C++ performance — no browser/JS overhead
- Built by the community, for the community
Contributions land in the open-source edition. Private datasets, point-in-time history, included AI credits and live execution are Enterprise features.
- C++20 + Qt6 — Native performance, polished UI, single binary
- Qt6 Network + WebSockets — Cross-platform networking, TLS built-in
- Qt6 Charts — Financial charting without extra dependencies
- Qt6 Sql (SQLite) — Local data caching for speed
- Embedded Python — Access to vast ecosystem of financial libraries (yfinance, pandas, etc.)
| Tool | Required Version | Notes |
|---|---|---|
| C++ compiler | MSVC 19.40+ / GCC 12.3+ / Apple Clang 15.0+ | See platform-specific instructions below |
| CMake | 3.27+ | Build system |
| Qt | 6.8.x (6.8.3 recommended) | UI framework |
| Python | 3.11.x | Embedded analytics runtime |
Optional (faster builds):
- Ninja — parallel build system (auto-detected if installed)
- ccache — compiler cache (auto-detected if installed)
Install Visual Studio 2022 17.10+ (Community edition is free). Select the "Desktop development with C++" workload during installation.
sudo apt install -y build-essential g++-12xcode-select --installRequires Xcode 15.2+ (Apple Clang 15.0).
- Windows:
winget install Kitware.CMake - Linux:
sudo apt install -y cmake(verifycmake --version>= 3.27; if older, download from cmake.org) - macOS:
brew install cmake
Download the Qt Online Installer from https://www.qt.io/download-qt-installer
Select Qt 6.8.3 and your platform kit:
- Windows: MSVC 2022 64-bit (default install:
C:\Qt\6.8.3\msvc2022_64) - Linux: Desktop gcc 64-bit (default install:
~/Qt/6.8.3/gcc_64) - macOS: macOS (default install:
~/Qt/6.8.3/macos)
Linux system packages (alternative):
sudo apt install -y \
qt6-base-dev qt6-charts-dev qt6-tools-dev qt6-base-private-dev \
libqt6sql6-sqlite libqt6websockets6-dev \
libgl1-mesa-dev libglu1-mesa-dev- Windows: python.org 3.11.9 (check "Add to PATH")
- Linux:
sudo apt install python3.11 - macOS:
brew install python@3.11
git clone https://github.com/Fincept-Corporation/FinceptTerminal.git
cd FinceptTerminal/fincept-qtTell CMake where Qt is (pick one method):
Option A — Environment variable (recommended, set once):
# Windows (PowerShell)
$env:QT_DIR = "C:\Qt\6.8.3\msvc2022_64"
# Linux
export QT_DIR=~/Qt/6.8.3/gcc_64
# macOS
export QT_DIR=~/Qt/6.8.3/macosOption B — CMakeUserPresets.json (persistent per-clone):
cp CMakeUserPresets.json.example CMakeUserPresets.json
# Edit CMakeUserPresets.json — set CMAKE_PREFIX_PATH to your Qt install pathOption C — Command line (one-off):
cmake -B build/win-release -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_PREFIX_PATH="/path/to/Qt/6.8.3/kit"Note: If you installed Qt to the default location, CMake will auto-detect it — no configuration needed.
Windows (run from Developer Command Prompt for VS 2022 or Developer PowerShell):
cmake --preset win-release
cmake --build --preset win-release
.\build\win-release\FinceptTerminal.exeLinux:
cmake --preset linux-release
cmake --build --preset linux-release
./build/linux-release/FinceptTerminalmacOS:
cmake --preset macos-release
cmake --build --preset macos-release
./build/macos-release/FinceptTerminal.app/Contents/MacOS/FinceptTerminalWindows users: You must run from a Developer Command Prompt (or run
vcvars64.batfirst) so that MSVC, Windows SDK headers, and Ninja are on PATH. A regular PowerShell/CMD will fail with "cannot find stddef.h" errors.
Once the app opens:
- Click "Continue as Guest" — No registration needed for development
- Navigate to Markets tab — Should see market data
- Try switching tabs — Dashboard, Markets, News, etc.
FinceptTerminal/
│
├── fincept-qt/ ← Main application (you'll work here)
│ ├── src/ ← C++ source code
│ │ ├── app/ ← Entry point, MainWindow, ScreenRouter
│ │ ├── core/ ← Shared infrastructure
│ │ │ ├── config/ ← App-wide constants
│ │ │ ├── events/ ← Pub/sub messaging (EventBus)
│ │ │ ├── logging/ ← Structured logging (Logger)
│ │ │ ├── result/ ← Result<T> error handling
│ │ │ └── session/ ← Session management
│ │ ├── ui/ ← Reusable Qt widgets
│ │ │ ├── theme/ ← Obsidian design system (StyleSheets)
│ │ │ ├── widgets/ ← Card, SearchBar, StatusBadge, etc.
│ │ │ ├── charts/ ← ChartFactory (Qt6 Charts)
│ │ │ ├── tables/ ← DataTable
│ │ │ └── navigation/ ← NavigationBar, StatusBar, FKeyBar
│ │ ├── network/ ← HTTP client, WebSocket client
│ │ ├── storage/ ← SQLite databases + repositories
│ │ ├── auth/ ← Authentication (JWT, guest mode)
│ │ ├── python/ ← Python runtime bridge
│ │ ├── trading/ ← Trading engine + broker integrations
│ │ ├── services/ ← Market data, news services
│ │ └── screens/ ← Terminal screens (50+)
│ │
│ ├── scripts/ ← Python analytics scripts
│ ├── CMakeLists.txt ← Build configuration
│ ├── CMakePresets.json ← Build presets (portable, no local paths)
│ └── CMakeUserPresets.json.example ← Template for local Qt path config
│
└── docs/ ← Documentation
User clicks "Get AAPL quote"
│
▼
Screen (MarketsScreen.cpp) ← UI rendering only
│
▼
Data Service (MarketDataService) ← Fetching + caching
│
├─── HTTP API call (QNetworkAccessManager)
│ │
│ ▼
│ Parse JSON (QJsonDocument)
│
└─── Python Script (optional)
│
▼
PythonRunner executes script
│
▼
Returns JSON to C++
│
▼
UI updates with data
| If you want to... | Look at this |
|---|---|
| Add a new screen | src/screens/dashboard/ (as template) |
| Add a data fetcher | scripts/yfinance_data.py (as template) |
| Use UI widgets | src/ui/widgets/ |
| Make HTTP calls | src/network/http/HttpClient.cpp |
| Store data locally | src/storage/sqlite/Database.cpp |
| Add a Python analytics module | scripts/Analytics/ |
| Add a broker | src/trading/brokers/ |
| Style a screen | src/ui/theme/StyleSheets.cpp + DESIGN_SYSTEM.md |
Improve Documentation — Fix a typo or unclear explanation in any .md file.
Add a Python Data Fetcher — Follow the pattern in scripts/yfinance_data.py to create a wrapper for a new free API.
Add a New Screen — Follow the patterns in src/screens/ to add a new Qt6 screen.
Add a Broker Integration — Follow the BrokerInterface pattern in src/trading/brokers/.
cd fincept-qt/scripts
# Create the script
# Follow yfinance_data.py pattern: CLI args → JSON stdout
# Test standalone
python my_script.py command arg1 arg2
# Rebuild to include in resources
cd ..
cmake --build build --config Release- Create folder:
src/screens/your_feature/ - Create files:
YourScreen.h/.cpp(subclassQWidget) - Add
.cppfile toCMakeLists.txtSCREEN_SOURCESlist - Register screen in
src/app/MainWindow.cppviaScreenRouter - Add navigation entry in
NavigationBar - Build and test
git checkout -b fix/issue-123-description
# Fix the issue
cmake --build build --config Release
# Test the fix
git add <files>
git commit -m "fix: resolve market data loading crash"
git push origin fix/issue-123-description- 4-space indentation, 120 column limit
snake_casefor functions/variables,PascalCasefor types/classes- Trailing underscore for member variables:
data_,loading_ - No
using namespace std;— use explicitstd::prefix - Use
Q_OBJECTmacro in all QObject subclasses - Connect signals/slots with the new pointer-to-member syntax
Set the QT_DIR environment variable or pass -DCMAKE_PREFIX_PATH:
cmake -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="/path/to/Qt/6.8.3/platform"You're not running from a VS Developer Command Prompt. Either:
- Open "Developer Command Prompt for VS 2022" from the Start menu
- Or run
"C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvars64.bat"in your current shell
python --version # Verify Python is in PATH
python scripts/yfinance_data.py quote AAPL # Test directlysudo apt install libgl1-mesa-dev libglu1-mesa-devAlmost always RAM exhaustion, not a broken toolchain:
- The build auto-caps parallel compiles based on your RAM (a Ninja job pool in
CMakeLists.txt). If you removed it or forced a large-j, restore it — 12 simultaneous MSVC/Qt compiles need 15–48 GB and will swap a 16 GB machine until the OS freezes. Tune per-machine with-DFINCEPT_MAX_COMPILE_JOBS=N. - Keep ≥5 GB RAM free while building. The final link (1000+ objects) needs ~3–4 GB; starved of memory it pages and a one-line rebuild balloons from ~5 s to minutes. Close browsers / IDEs / other heavy apps first.
- Windows: add Microsoft Defender real-time exclusions for the repo +
build/tree and thecl.exe/link.exe/ninja.exe/cmake.exebinaries — scanning the 100 k+ build files is a big per-compile tax. - A normal one-line incremental rebuild should be ~5–6 s. If it's much slower, check free RAM first. Full rationale: Build performance & machine requirements in
CLAUDE.md.
| Channel | Link |
|---|---|
| GitHub Issues | https://github.com/Fincept-Corporation/FinceptTerminal/issues |
| GitHub Discussions | https://github.com/Fincept-Corporation/FinceptTerminal/discussions |
| Discord | https://discord.gg/ae87a8ygbN |
| support@fincept.in |
Ready to contribute?
- Pick an issue: https://github.com/Fincept-Corporation/FinceptTerminal/issues
- Read the C++ guide: fincept-qt/CONTRIBUTING.md
- Read the Python guide: PYTHON_CONTRIBUTOR_GUIDE.md