-
Notifications
You must be signed in to change notification settings - Fork 0
2.1 Build and Deployment Guide
This document explains how to compile, package, and deploy ClioDeck for different platforms.
- Technical Stack
- Prerequisites
- Installation
- Development
- Build and Packaging
- User Installation
- Initial Configuration
- Common Issues
- Distribution and Releases
- Electron 40 - Multi-platform desktop
- React 18 - UI components
- TypeScript 5 - Type safety
- CodeMirror 6 - Markdown editor with live rendering
- Zustand - State management
- Vite - Build tool
- Node.js 20+ - JavaScript runtime
- better-sqlite3 - SQLite database (vector store)
- pdfjs-dist - PDF extraction
- electron-store - Config persistence
- Python 3.11+ - Analysis services (topic modeling)
-
Ollama - Local models (nomic-embed-text, gemma2:2b)
- Embedding model:
nomic-embed-text(768 dimensions) ormxbai-embed-large - Chat model:
gemma2:2b(fast, multilingual) or any chat model that can be used through ollama, depending on your computer
- Embedding model:
- embedded (without ollama) qwen-0.5 or 1.5
- BERTopic - Topic modeling and clustering (Python)
- Node.js 18+ and npm
- Python 3.9+ (for better-sqlite3 and Python services)
- Ollama installed locally for testing
Linux:
sudo apt-get install build-essential python3-devmacOS:
xcode-select --installWindows:
- Visual Studio Build Tools or Visual Studio Community
- Python 3.9+ with pip
npm installThis command installs all Node.js dependencies and automatically compiles native modules (better-sqlite3, hnswlib-node, etc.).
Python services are used for topic modeling. For the development environment:
cd backend/python-services/topic-modeling
python3 -m venv .venv
source .venv/bin/activate # Linux/macOS
# Or: .venv\Scripts\activate # Windows
pip install -r requirements.txtnpm run devThis command launches in parallel:
- Main process TypeScript in watch mode
- Preload script in watch mode
- Renderer (React) with Vite hot reload
In another terminal:
npm startnpm run dev:fullLaunches build watch AND the application automatically after 3 seconds.
# Run once
npm test
# Watch mode
npm run test:watch
# With UI
npm run test:ui
# With coverage
npm run test:coverage# Linter
npm run lint
# Type checking
npm run typechecknpm run buildCompiles:
- Main process TypeScript →
dist/src/main/ - Preload script →
dist/src/preload/ - Renderer React →
dist/src/renderer/
npm run build:allCreates installers for all platforms configured in package.json.
# Linux (AppImage + deb)
npm run build:linux
# macOS (DMG for Intel and Apple Silicon)
npm run build:mac
# Windows (NSIS installer)
npm run build:win# Intel only
npm run build:mac-intel
# Apple Silicon only
npm run build:mac-arm
# Universal (Intel + Apple Silicon)
npm run build:mac-universalnpm run build:dirCreates an unpackaged executable folder in release/.
cliodeck/
├── dist/ # Compiled code
│ ├── src/
│ │ ├── main/ # Main process JS
│ │ ├── preload/ # Preload script JS
│ │ └── renderer/ # React build
├── release/ # Installers
│ ├── ClioDeck-1.0.0.AppImage
│ ├── ClioDeck-1.0.0.dmg
│ ├── ClioDeck-1.0.0.deb
│ └── ClioDeck Setup 1.0.0.exe
└── build/ # Packaging assets
├── icon.png
├── icon.icns
└── icon.ico
Linux → all OS: Possible with Docker:
docker run --rm -v $(pwd):/project electronuserland/builder:wine \
bash -c "cd /project && npm install && npm run build:all"macOS → macOS/Linux/Windows: macOS can build for all platforms natively.
Windows → Windows only: Windows can only build for Windows.
- Ollama installed on the machine
-
Models downloaded:
ollama pull nomic-embed-text ollama pull gemma2:2b
AppImage (recommended):
# Download from GitHub Releases
wget https://github.com/cliodeck/cliodeck-app/releases/latest/download/ClioDeck-1.0.0.AppImage
# Make executable
chmod +x ClioDeck-1.0.0.AppImage
# Launch
./ClioDeck-1.0.0.AppImageDebian/Ubuntu (.deb):
sudo dpkg -i ClioDeck-1.0.0.deb
sudo apt-get install -f # Fix dependencies if necessary
cliodesk- Download the DMG file from GitHub Releases
- Double-click to mount the disk image
- Drag ClioDeck to the Applications folder
- Launch from Launchpad or Applications
First launch: If macOS displays "app cannot be opened because it is from an unidentified developer":
xattr -cr /Applications/ClioDeck.appOr: Right-click → Open → Confirm
- Download
ClioDeck-Setup-1.0.0.exefrom GitHub Releases - Double-click the installer
- Follow the installation wizard
- Launch from Start menu or desktop shortcut
On first launch, ClioDeck automatically checks the Ollama connection.
If Ollama is not detected:
-
Install Ollama: https://ollama.ai/download
-
Start the service:
# Linux/macOS ollama serve # Windows: Ollama starts automatically as a service
-
Verify the service is working:
curl http://localhost:11434/api/tags
# Embedding model (REQUIRED)
ollama pull nomic-embed-text
# Chat model (RECOMMENDED)
ollama pull gemma2:2b
# Chat alternatives
ollama pull mistral:7b-instruct # More accurate but heavier
ollama pull llama3.1:8b # Very performantTo sync with Zotero:
-
Get an API key:
- Go to https://www.zotero.org/settings/keys/new
- Permissions: Read library, Write library
- Copy the generated key
-
Configure in ClioDeck:
- Settings → Zotero Integration
- User ID: your Zotero user ID (visible in your library URL)
- API Key: paste the key
- Test Connection to verify
-
Sync:
- Select a Zotero collection
- Click "Sync"
- Wait for PDFs and BibTeX file download
Symptom:
mach-o file, but is an incompatible architecture (have 'arm64', need 'x86_64')
Cause: Native modules (better-sqlite3, hnswlib-node) are compiled for the wrong architecture.
Solution:
# Rebuild for your architecture
npm run rebuild:native
# Or specifically:
npm run rebuild:x64 # Intel
npm run rebuild:arm64 # Apple SiliconThe script scripts/after-pack.cjs automatically rebuilds native modules during packaging.
npm rebuild better-sqlite3 --build-from-sourceIf the issue persists, verify that Python and build tools are installed.
# Install C++ build tools
# macOS:
xcode-select --install
# Linux:
sudo apt-get install build-essential
# Then:
npm rebuild hnswlib-node --build-from-sourcePort already in use:
# Kill process on port 8001
lsof -ti:8001 | xargs kill -9Missing Python dependencies:
cd backend/python-services/topic-modeling
source .venv/bin/activate
pip install -r requirements.txtLinux:
# Check status
systemctl status ollama
# Start manually
ollama servemacOS:
# Check if process is running
ps aux | grep ollama
# Start manually
ollama serveWindows:
# Open services.msc
# Check "Ollama" service-
Use CPU optimized config:
- Settings → RAG → Chunking: CPU Optimized
-
Reduce topK:
- Settings → RAG → Top K: 5 (instead of 10)
-
Use a lighter model:
ollama pull gemma2:2b # Instead of mistral:7b
-
Check Ollama:
curl http://localhost:11434/api/tags
-
Verify chat model is installed:
ollama list
-
Change model:
- Settings → LLM → Chat Model
- Select an installed model
Empty extracted text:
- The PDF is image-only (no selectable text)
- Solution: Use external OCR then reimport
Poor extraction quality:
- The PDF is poorly formatted or corrupted
- Check the PDF in an external reader
- Verify API key is valid
- Verify User ID is correct
- Check internet connection
- Check logs for more details
Locations:
- Linux:
~/.config/ClioDeck/logs/ - macOS:
~/Library/Logs/ClioDeck/ - Windows:
%APPDATA%\ClioDeck\logs\
View logs:
# Linux
cat ~/.config/ClioDeck/logs/main.log
# macOS
cat ~/Library/Logs/ClioDeck/main.log
# Windows
type %APPDATA%\ClioDeck\logs\main.log- Get an Apple Developer certificate
- Configure in
package.json:
{
"build": {
"mac": {
"identity": "Developer ID Application: Your Name (TEAM_ID)"
}
}
}- Build with signing:
CSC_NAME="Developer ID Application" npm run build:mac- Get a code signing certificate
- Configure and build:
set CSC_LINK=path/to/cert.pfx
set CSC_KEY_PASSWORD=your_password
npm run build:win- Create a version tag:
git tag v1.0.0
git push origin v1.0.0- Build and publish:
GH_TOKEN=your_github_token npm run build:allelectron-builder can automatically publish to GitHub Releases if configured.
- Auto-update configuration:
In package.json:
{
"build": {
"publish": {
"provider": "github",
"owner": "inactinique",
"repo": "cliodeck"
}
}
}Build:
-
CSC_LINK: Path to signing certificate -
CSC_KEY_PASSWORD: Certificate password -
GH_TOKEN: GitHub token for releases -
DEBUG: Enable electron-builder debug logs
Runtime:
-
NODE_ENV:developmentorproduction -
OLLAMA_HOST: Ollama URL (default: http://localhost:11434)
Minimum:
- CPU: Dual-core
- RAM: 4 GB
- Disk: 5 GB free
Recommended:
- CPU: Quad-core
- RAM: 8 GB
- Disk: 10 GB free
Optimal:
- CPU: 8+ cores
- RAM: 16 GB
- Disk: 20 GB free (for Ollama models)
- Linux AppImage: ~150-200 MB
- Linux deb: ~150-200 MB
- macOS DMG: ~180-250 MB
- Windows NSIS: ~150-200 MB
- App: ~200 MB
- Ollama models: ~500 MB - 5 GB (depending on models)
- Vector database: 50-500 MB per project (depending on PDF count)
- Research journal: 1-5 MB per session, 50-200 MB for a long project
All data remains local:
- PDFs and documents: stored in project folder
- Embeddings and indexes: local SQLite (
.cliodeck/vectors.db) - LLM and models: local Ollama
No data is sent to external servers (except if Zotero API is configured for sync).
Zotero API Key:
- Stored in electron-store (OS-provided encryption)
- Linux: GNOME Keyring / KWallet
- macOS: Keychain
- Windows: Credential Manager
# Full cleanup
npm run clean
# Reinstall all dependencies
rm -rf node_modules package-lock.json
npm install
# Rebuild native modules
npm run rebuild:native
# Check types
npm run typecheck
# Linter
npm run lint
# Build preview
npm run preview- Electron Builder Documentation
- Vite Documentation
- Ollama Documentation
- TypeScript Documentation
- Vitest Documentation
Note for daily development: Simply use npm run dev in one terminal and npm start in another.