This guide explains how to build the SentraCore engine, compile the Flutter dashboard, and package the application for desktop distribution.
The project is designed to support standalone deployment with a bundled local monitoring engine and desktop dashboard.
SentraCore consists of two primary components:
| Component | Description |
|---|---|
| Engine | Python-based monitoring and intelligence service |
| Dashboard | Flutter desktop application |
These components are packaged together into a desktop installer for distribution.
| Requirement | Verification |
|---|---|
| Python 3.11 or higher | python --version |
| Flutter SDK | flutter --version |
| Git | git --version |
Install:
- Visual Studio 2022 Community Edition or higher
- Desktop development with C++
- MSVC build tools
- C++ CMake tools
- Windows SDK
Verify setup:
flutter doctorExample dependencies for Ubuntu/Debian:
sudo apt install clang cmake ninja-build pkg-config libgtk-3-devInstall:
- Xcode Command Line Tools
- CocoaPods
xcode-select --install
sudo gem install cocoapodsInstall PyInstaller inside the active virtual environment:
pip install pyinstallerVerify installation:
pyinstaller --versionThe engine is packaged as a standalone executable using PyInstaller.
Example build command:
pyinstaller engine.specTypical packaged output:
dist/SentraCoreEngine/
or:
dist/SentraCoreEngine.exe
depending on build configuration.
The packaged engine:
- runs as a background service
- exposes REST and WebSocket interfaces locally
- supports file-based logging in non-console environments
- includes required hidden imports for FastAPI and Uvicorn
Production builds commonly use:
--noconsole- optimized bundling
- application icons
- version metadata
Navigate to the dashboard directory:
cd dashboardflutter build windows --releaseflutter build linux --releaseflutter build macos --releasebuild/windows/x64/runner/Release/
build/linux/x64/release/bundle/
build/macos/Build/Products/Release/
Flutter desktop builds include:
- executable files
- runtime DLLs/frameworks
- asset bundles
- platform-specific dependencies
The complete release output directory should always be distributed together.
SentraCore uses Inno Setup for Windows installer generation.
Install:
- Inno Setup 6 or higher
Official website:
The installer may:
- copy engine and dashboard binaries
- create desktop and Start Menu shortcuts
- configure startup behavior
- register uninstall information
- launch the engine after installation
- clean up runtime files during uninstall
Windows Defender SmartScreen and the UAC prompt show Unknown publisher when the installer (or the executables inside it) are not signed with a publicly trusted Authenticode (code signing) certificate.
AppPublisher and related Inno Setup fields improve Add/Remove Programs and installer metadata, but they do not replace a digital signature.
What actually fixes the warning:
- Obtain a code signing certificate from a CA that chains to the Microsoft Trusted Root Program (for example standard OV or EV code signing). EV certificates are often associated with faster SmartScreen reputation for brand-new binaries.
- Sign
SentraCoreEngine.exe,sentracore_dashboard.exe, and the setup.exewithsigntool(Windows SDK), including an RFC 3161 timestamp so signatures stay valid after the cert expires. - For releases built in GitHub Actions, add repository secrets (see below) so the workflow can sign before uploading artifacts.
Local signing (PFX on your machine):
$env:WINDOWS_CODESIGN_PFX_PASSWORD = '<your-pfx-password>'
.\scripts\sign-windows-artifacts.ps1 -PfxPath C:\path\to\codesign.pfx
# After Inno Setup produces dist\SentraCore_Setup_v*.exe:
.\scripts\sign-windows-artifacts.ps1 -PfxPath C:\path\to\codesign.pfx -InstallerOnlyGitHub Actions (optional): create secrets WINDOWS_CODESIGN_PFX_BASE64 (base64-encoded .pfx file) and WINDOWS_CODESIGN_PFX_PASSWORD. When WINDOWS_CODESIGN_PFX_BASE64 is set, the release workflow signs the engine and dashboard before packaging, then signs the installer afterward. Protect these secrets with restricted environments / branch policies where possible.
References: Microsoft: Sign Windows apps, Introduction to code signing.
1. Build Engine
2. Build Dashboard
3. Validate Release Builds
4. Package Installer
5. Test Clean Installation
6. Publish Release Assets
Version information should remain synchronized across:
- engine metadata
- dashboard application version
- installer version
- release artifacts
A typical release process includes:
- Update version metadata
- Build production artifacts
- Validate installation behavior
- Test dashboard-engine communication
- Generate installer packages
- Create tagged release builds
- Publish release assets
Before publishing a release, verify:
- engine starts successfully
- dashboard connects automatically
- live telemetry updates function correctly
- alerts and history load properly
- notifications operate correctly
- installer shortcuts work
- uninstall removes runtime artifacts cleanly
- Windows release: setup and shipped
.exefiles show a trusted publisher after code signing (see Windows SmartScreen and "Unknown publisher" above)
SentraCore can be integrated into CI/CD pipelines for:
- linting
- automated testing
- desktop builds
- packaging validation
- release automation
Typical tooling:
- GitHub Actions
- pytest
- flutter test
- ruff
- PyInstaller
- Flutter build pipeline
- Windows currently provides the most mature packaging workflow.
- Linux and macOS builds support desktop execution and development workflows.
- Some platform-specific packaging behaviors may vary depending on operating system requirements and distribution targets.
Run:
flutter doctorResolve any reported SDK or dependency issues.
Ensure the entire Flutter release directory is distributed, not only the executable.
Verify:
- required Python dependencies are included
- hidden imports are configured correctly
- firewall settings are not blocking local communication
Check:
- installation paths
- bundled runtime files
- startup permissions
- application icons and resource paths
SentraCore is structured for modular desktop deployment:
- Python handles telemetry collection and intelligence processing
- Flutter provides the real-time desktop experience
- platform-specific packaging systems distribute the application as a standalone product
This architecture allows the engine and dashboard to evolve independently while remaining tightly integrated during runtime.