All your local git repos. In one calm, native dashboard.
A lightweight desktop app that surfaces every local repository on your machine, its working-tree status, open pull requests, and CI checks — without juggling a browser, a terminal, and three Electron apps.
- Local-first. Recrest reads your repositories directly from disk. Nothing leaves your machine unless you open a remote PR — no telemetry, no cloud sync, no Recrest server.
- Native & tiny. Rust + Tauri core, ~12 MB bundle, under 80 MB RAM at idle. Not Electron.
- Works offline. The local status keeps updating while you work; remote state resumes automatically when you reconnect.
- Tokens stay in the OS keychain. macOS Keychain, Windows Credential Manager, libsecret on Linux. Never on disk.
- Keyboard-first.
Ctrl/Cmd + Kopens the command palette. Everything else is one key away. - i18n. English and German ship with v0.1. OS locale is auto-detected.
- Light / dark / system theme. Persisted across restarts.
- Accessible. Meets WCAG 2.1 AA; tested on every commit.
| Provider | Status | Tokens | PRs | CI checks |
|---|---|---|---|---|
| GitHub | ✅ Supported | PAT | ✅ | ✅ |
| GitLab | 🧪 Scaffolded | PAT | Soon | Soon |
| Bitbucket | 🧪 Scaffolded | App Password | Soon | Soon |
The provider layer lives behind a narrow async trait
(src-tauri/src/providers/r#trait.rs) so adding a new host or swapping in a
WASM-plugin implementation later is a drop-in.
Pre-built installers for every tagged release live on the Releases page. Pick the file for your platform:
| Platform | File |
|---|---|
| macOS (Apple Silicon + Intel universal) | Recrest_<version>_universal.dmg |
| Windows 10 / 11 (x64) | Recrest_<version>_x64-setup.msi |
| Linux (most distros) | Recrest_<version>_amd64.AppImage |
| Debian / Ubuntu | Recrest_<version>_amd64.deb |
| Fedora / RHEL | Recrest_<version>-1.x86_64.rpm |
Heads up: Recrest is not code-signed yet. Apple Developer IDs cost USD 99/year and a Windows EV certificate starts at USD 300+/year — we're an unfunded open-source project and can't carry that bill yet. The installers are built directly from the tagged source on GitHub Actions; you can read every line of the pipeline in
.github/workflows/release-tauri.ymland verify every artifact againstSHA256SUMS.txt.
- Download the
.msifrom the Releases page. - Double-click to launch the installer.
- Windows SmartScreen will say "Windows protected your PC — Unknown publisher." That's the unsigned-installer warning, not malware.
- Click More info → Run anyway.
The warning goes away once enough users run Recrest and Microsoft's reputation system catches up — or once we can afford a signing cert.
- Open the
.dmgand drag Recrest.app into Applications. - First launch: Gatekeeper will block the app with "Recrest can't be opened because the developer cannot be verified."
- Two ways to allow it:
-
In Finder: right-click (or
Ctrl-click) Recrest.app → Open. Confirm in the dialog. macOS remembers the choice. -
In Terminal:
xattr -cr /Applications/Recrest.app
-
-
AppImage:
chmod +x Recrest_*.AppImage ./Recrest_*.AppImage
-
deb:
sudo apt install ./Recrest_*_amd64.deb -
rpm:
sudo dnf install ./Recrest_*-1.x86_64.rpm
No signature prompts — Linux simply trusts the repo you installed from.
Every release ships a SHA256SUMS.txt next to the installers. Verify it:
# macOS / Linux
shasum -a 256 -c SHA256SUMS.txt
# Windows PowerShell
Get-FileHash Recrest_*.msi -Algorithm SHA256If a line comes back as FAILED, stop and re-download. Don't run anything whose checksum doesn't match.
If you prefer to build it yourself (and never see an OS warning):
- Node.js ≥ 22.20 —
.nvmrcpins the exact version. - Yarn 1.x —
npm i -g yarn. - Rust toolchain (stable) — required for the desktop build. Skip only
if you're iterating on UI with
yarn dev:web. - Platform dependencies for Tauri — see tauri.app/start/prerequisites.
git clone https://github.com/SoftVentures/Recrest.git
cd Recrest
yarn install # shared workspace builds automatically via postinstall
yarn dev # full Tauri shellFor UI-only iteration (no Rust toolchain needed):
yarn dev:web # Vite dev server at http://localhost:3000IPC calls no-op gracefully outside the Tauri runtime, so the app renders and routes work in a plain browser.
yarn build # Tauri installer for your platform, in app/src-tauri/target/release/bundle/| Layer | Choice |
|---|---|
| Desktop shell | Tauri v2 |
| Frontend | React 19 · TypeScript (strict) · Tailwind CSS v4 · shadcn-style primitives · lucide-react |
| State | Redux Toolkit + react-redux |
| i18n | react-i18next |
| Backend | Rust — git2 (libgit2), notify, reqwest, keyring |
| Responsive | device-type-detection |
| Build | Vite 5 · Yarn 1.x workspaces |
| Tests | Vitest (unit/component) · Playwright (E2E) · axe-core (a11y) |
Recrest/
├─ app/ # @recrest/app — React frontend + Rust Tauri backend
│ ├─ src/ # React · Redux · i18n · hooks
│ └─ src-tauri/ # Rust: commands, git, providers, auth, config
├─ shared/ # @recrest/shared — framework-free constants, types, utils
├─ landingpage/ # @recrest/landingpage — marketing site, GitHub Pages
├─ tests/ # @recrest/tests — Playwright E2E suite
└─ docs/
└─ plans/ # implementation-plan.md — authoritative design
Each workspace has its own CLAUDE.md with workspace-specific conventions.
All commands run from the repo root via Yarn workspaces — no need to cd
into sub-packages.
| Command | Purpose |
|---|---|
yarn dev |
Full Tauri desktop dev shell |
yarn dev:web |
Vite dev server only (browser, no Rust) |
yarn build |
Production Tauri bundle |
yarn build:landingpage |
Landingpage production bundle |
yarn test |
Vitest unit + component tests |
yarn test:e2e |
Playwright E2E (needs yarn dev:web running) |
yarn test:ts |
Typecheck all workspaces |
yarn lint |
ESLint across all workspaces |
yarn format |
Prettier with import sorting |
yarn format:check |
Verify formatting without writing |
Single test file:
yarn workspace @recrest/app test src/store/slices/uiSlice.test.ts
yarn workspace @recrest/tests test:e2e src/e2e/app/01-shell.spec.tsUser config is persisted under the OS-standard config directory:
| OS | Path |
|---|---|
| Windows | %APPDATA%\eu.softventures.recrest\ |
| macOS | ~/Library/Application Support/eu.softventures.recrest/ |
| Linux | ~/.config/eu.softventures.recrest/ |
Contents: settings.json (scan paths, polling interval, default IDE,
theme, locale, registered repos). Tokens live in the OS keychain
under the service eu.softventures.recrest — never in a plain file.
ACCESSIBILITY.md— WCAG 2.1 AA conformance, how we test, how to report barriers.- Privacy section on the landing page — what Recrest reads, what it never sends.
- Imprint, privacy policy, accessibility statement (DE/EN) — available on the live landing page under the Legal footer column.
Before opening a PR, run the full verification locally:
yarn test:ts && yarn lint && yarn test && yarn format:checkAdd every new UI string to both en/ and de/ locale bundles in
app/src/i18n/locales/. When you add a Rust IPC command, mirror its
return type as a TypeScript DTO in @recrest/shared so the cross-language
contract stays typed on both ends.
Architecture details and conventions live in the CLAUDE.md files at the
repo root and in each workspace. Start with
docs/plans/implementation-plan.md
— that's the source of truth when plan and code diverge.
See CONTRIBUTING.md and
CODE_OF_CONDUCT.md.
MIT — you can do basically anything with Recrest. Attribution appreciated, liability disclaimed.
Recrest is an open-source project under SoftVentures.
