greencube
Health Warn
- No license — Repository has no license file
- Description — Repository has a description
- Active repo — Last push 0 days ago
- Low visibility — Only 5 GitHub stars
Code Pass
- Code scan — Scanned 12 files during light audit, no dangerous patterns found
Permissions Pass
- Permissions — No dangerous permissions requested
No AI report is available for this listing yet.
Local, private AI for your laptop.
GreenCube
A personal AI assistant that runs entirely on your own computer.
GreenCube is like having a smart helper that lives inside your laptop instead of
on someone else's servers. You can talk to it, and it can actually do things for
you — make and edit files, organize documents, browse the web, and connect to apps
you already use like Gmail, Google Calendar, GitHub, Notion, Slack, and Dropbox.
The difference from every other AI assistant: nothing leaves your machine. The
model runs locally, your data stays with you, it works offline, and there's no
monthly subscription. You buy it once and it's yours.
This repository is private. Our public marketing lives at
greencube.app. This README is for collaborators — it's
meant to help you understand and work on the code, not to sell anything.
Philosophy
Every other AI assistant is rented. This one is yours.
The big AI products are something you rent forever: you pay every month, your
conversations live on their servers, and the company learns everything about you to
make money. The moment you stop paying, you lose it all. And it never really
belonged to you in the first place.
GreenCube is built on the opposite belief: people should own their tools, not rent
them. A tool should serve the person using it, fully under their control. So we
made an assistant that:
- Runs locally. The AI model lives on your computer and does its thinking there.
- Is fully private. Your data never leaves your machine. No cloud, no harvesting.
- Works offline. No internet required for the core assistant.
- Is owned, not rented. One-time purchase. No subscription, ever.
Everything we build is measured against that idea. If a feature would mean sending
your private data somewhere or locking you into a recurring bill, it doesn't fit.
Tech stack
Versions below are taken straight from the project files, not guessed.
| Layer | What we use |
|---|---|
| Desktop shell | Tauri 2.10 (native window + Rust backend, ships a small NSIS installer for Windows) |
| Backend | Rust (edition 2021, min toolchain 1.77.2) |
| Local AI inference | llama-cpp-2 0.1 with mtmd for vision — runs GGUF models on-device |
| Frontend | React 18 + TypeScript 5.6, built with Vite 5.4 |
| Styling | Tailwind CSS 3.4 |
| Local storage | SQLite via rusqlite (bundled) |
| Integrations / OAuth | Nango frontend SDK 0.70 for the OAuth handshakes |
| Platform glue (Windows) | windows-capture (screen), enigo (input), winreg (autostart), DXGI for GPU/VRAM detection |
GPU acceleration (Vulkan) is an optional compile-time feature. The default build
is CPU-only so it compiles cleanly on any machine; shipped installers are built with
Vulkan turned on in CI, and the app detects the right path at runtime. See
Build modes below.
Project structure
A short map so a new collaborator can find their way around fast.
greencube/
├── src/ # Frontend — React + TypeScript
│ ├── App.tsx # Root component / app state
│ ├── main.tsx # Entry point
│ ├── types.ts # Shared TS types
│ ├── components/ # UI screens & widgets
│ │ ├── MainArea.tsx # main chat / work area
│ │ ├── Sidebar.tsx # conversation list & nav
│ │ ├── SetupScreen.tsx # first-run setup
│ │ ├── WizardScreen.tsx # guided onboarding wizard
│ │ ├── SplashScreen.tsx # loading splash
│ │ ├── MemoryVaultTab.tsx # the assistant's memory UI
│ │ └── ... # dialogs, licenses, etc.
│ ├── lib/ # Frontend helpers
│ └── styles/ # Tailwind + design tokens
│
├── src-tauri/ # Backend — Rust (the engine)
│ ├── src/
│ │ ├── commands.rs # Tauri command surface (what the UI can call)
│ │ ├── inference.rs # local model inference loop
│ │ ├── models.rs # model catalog / download / load
│ │ ├── agent*.rs # agent loop, KV-cache, UIA agent variants
│ │ ├── browser.rs # web browsing
│ │ ├── vision.rs # screenshot understanding
│ │ ├── uia.rs / input.rs # reads/controls the desktop (UI Automation, input)
│ │ ├── capture.rs # screen capture
│ │ ├── hardware.rs # GPU/VRAM detection
│ │ ├── db.rs # SQLite storage
│ │ └── ...
│ ├── capabilities/ # Tauri permission config
│ ├── icons/ # App icons
│ ├── Cargo.toml # Rust dependencies & feature flags
│ ├── tauri.conf.json # App/window/bundle config
│ └── google_workspace.config.example.json # Template for the real (gitignored) config
│
├── scripts/
│ └── check-no-secrets.mjs # Scans release binaries for leaked keys (CI/release guard)
│
├── site/ # Landing site — SEPARATE repo, gitignored here
├── package.json # Frontend deps + the tauri:* build scripts
└── README.md
site/is the marketing landing page. It has its own git repo and Vercel
deployment and is gitignored here — don't edit it from this repo.
Getting started
Prerequisites
- Node.js (LTS) and npm
- Rust toolchain (
rustup, stable, ≥ 1.77.2) - Tauri prerequisites for your OS — on Windows that's the WebView2 runtime and
the MSVC build tools. See the
Tauri prerequisites guide.
Setup
# 1. Clone
git clone https://github.com/greencube-ai/greencube.git
cd greencube
# 2. Install frontend dependencies
npm install
# 3. Create your local integrations config from the template
# (the real *.config.json is gitignored — it holds your own keys)
cp src-tauri/google_workspace.config.example.json src-tauri/google_workspace.config.json
# then fill in only the keys you actually need
# 4. Run the app (CPU build — works on any machine)
npm run tauri:dev:cpu
⚠️ Gotcha worth remembering: whenever you pull a branch where someone added an
npm package, runnpm installbefore starting the dev server. If you skip it,
the dev server crashes on a missing dependency. When in doubt,npm installfirst.
Build modes
GPU acceleration is optional. Use the CPU path by default; it's the one that builds
cleanly everywhere.
| Task | CPU (default) | Vulkan (opt-in) |
|---|---|---|
| Type-check Rust | npm run cargo:check:cpu |
npm run cargo:check:vulkan |
| Run dev app | npm run tauri:dev:cpu |
npm run tauri:dev:vulkan |
| Build installer | npm run tauri:build:cpu |
npm run tauri:build:vulkan |
Notes:
- Vision support is on in both modes.
- The CPU build is the path for CI and fresh dev machines. Vulkan needs local
GPU/Vulkan tooling set up correctly (MSVC + shader compiler) and is meant for CI
release builds, where the environment is controlled. - After any release build,
check-no-secrets.mjsruns automatically (it's wired as apost*hook) and fails the build if it finds a leaked key. - Don't put custom Cargo
--target-dirfolders insidesrc-tauri; Tauri's dev
watcher can mistake compiler output there for source changes and loop forever.
Integrations
GreenCube can connect to external apps. OAuth handshakes go through Nango; the full
list of connectable services and the keys they need lives insrc-tauri/google_workspace.config.example.json.
Currently supported connectors include:
- Google — Gmail, Calendar, Drive (and Places for location data)
- Microsoft 365
- GitHub
- Notion
- Dropbox
- Slack
- Web search / data providers — Brave, Tavily, Exa, Jina, Firecrawl, and others
API keys for billable services are user-supplied, never embedded in the app. A
user adds their own keys through Settings (or their local config file). This is a
deliberate part of our security model — see below.
Security notes
The short version: secrets never get baked into the shipped binary.
- No embedded secrets. API keys and OAuth client secrets are not compiled into
the app. They come from the user's local config / environment / Settings at
runtime. - Release scanner.
scripts/check-no-secrets.mjsscans the built binary for
known secret patterns (Google/OpenAI/Anthropic/GitHub/Slack/Nango tokens, PEM
blocks, AWS keys, etc.) and fails the release if any are found. It runs
automatically after everytauri:build:*. - Local config is gitignored. Real config files (
src-tauri/*.config.json) are
ignored by git; only the*.config.example.jsontemplates are committed. Never
commit a filled-in config. - Private repos. This code is private and shared only with chosen collaborators.
If you're adding a new integration, follow the same rule: ship the example template,
keep the real keys out of the binary, and add the new secret's pattern tocheck-no-secrets.mjs if it has a recognizable format.
Who's building this
Two people:
- Hector — product, vision, business
- Pawel — engineering / CTO
Reviews (0)
Sign in to leave a review.
Leave a reviewNo results found