Developer Guide
Welcome to the GEMINI Breeding developer documentation.
Overview
The GEMINI project consists of a Tauri-based desktop shell, a React frontend, and a FastAPI backend.
Tech Stack
| Layer | Technology |
|---|---|
| Desktop shell | Tauri v2 (Rust) |
| Frontend | React 18, TanStack Router, TanStack Query, shadcn/ui, Tailwind CSS |
| Backend | FastAPI, SQLModel, SQLite |
| Python runtime | Python 3.12, managed by uv |
| API client | Auto-generated from OpenAPI schema via @hey-api/openapi-ts |
Development Setup
- Clone with submodules:
git clone --recurse-submodules https://github.com/GEMINI-Breeding/GEMINI-App.git cd GEMINI-App - Setup Backend:
cd backend uv sync - Setup Frontend:
cd frontend npm install
Starting the App
For development, you can use the following commands from the frontend/ directory:
- Full stack (Backend + Vite):
npm run dev:full - Tauri native desktop window:
npm run tauri:dev
Building the App
Building the application requires environment-specific setups.
Quick Build Overview
- Linux/macOS: Use the root
build.shscript. - Windows: Use the
build-windows.ps1PowerShell script.
Platform-Specific Requirements
| Platform | Key Requirements | Build Command |
|---|---|---|
| Linux | Ubuntu 22.04 (recommended) | ./build.sh |
| macOS | Xcode CLI Tools | ./build.sh |
| Windows | Visual Studio Build Tools 2022, Inno Setup 6, Docker Desktop | .\build-windows.ps1 |
Note on Windows: Docker Desktop is required for certain data processing features in the application. Ensure it is running when performing these tasks.
Build Optimization
You can skip full rebuilds if only the frontend has changed:
- Linux/macOS: ./build.sh tauri
- Windows: .\build-windows.ps1 tauri
For comprehensive build instructions, troubleshooting, and platform-specific prerequisites, please consult the BUILDING.md file in the GEMINI-App repository.
Schema Summary
The GEMINI project utilizes a flexible SQLite-based backend managed by SQLModel, alongside a structured filesystem layout.
Database
- Core Tables:
User,Workspace,Pipeline,PipelineRun,TraitRecord,PlotRecord. - Schema Management: The schema is automatically created via
SQLModel.metadata.create_all()at startup; no manual migrations are required. - Data Access: All persistence is handled via CRUD helpers in
backend/app/crud/.
Filesystem Structure
The project follows a deterministic path convention defined in RunPaths.
- Raw/: Stores raw uploaded data (images, logs).
- Intermediate/: Stores derived data (plot boundaries, GCPs, sync files).
- Processed/: Stores final outputs (orthomosaics, trait GeoJSONs, cropped plot images).
All file paths should be accessed via the RunPaths utility to ensure environment portability. Relative paths are stored in the database, with absolute paths reconstructed at runtime.
For a comprehensive reference, please refer to the SCHEMA.md file in the GEMINI-App repository.