{"id":49171561,"url":"https://github.com/fluxgitapp/fluxgit","last_synced_at":"2026-04-22T19:01:40.635Z","repository":{"id":345148907,"uuid":"1184716095","full_name":"fluxgitapp/fluxgit","owner":"fluxgitapp","description":"FluxGit — The next-generation Git client with AI-powered workflows and Flux Streams","archived":false,"fork":false,"pushed_at":"2026-04-21T22:27:25.000Z","size":4706,"stargazers_count":0,"open_issues_count":7,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-22T00:32:29.018Z","etag":null,"topics":["ai","developer-tools","git","rust","tauri"],"latest_commit_sha":null,"homepage":"https://fluxgit.vercel.app","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/fluxgitapp.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.md","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-17T21:34:14.000Z","updated_at":"2026-04-21T22:27:21.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/fluxgitapp/fluxgit","commit_stats":null,"previous_names":["fluxgitapp/fluxgit"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/fluxgitapp/fluxgit","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fluxgitapp%2Ffluxgit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fluxgitapp%2Ffluxgit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fluxgitapp%2Ffluxgit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fluxgitapp%2Ffluxgit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fluxgitapp","download_url":"https://codeload.github.com/fluxgitapp/fluxgit/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fluxgitapp%2Ffluxgit/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32150399,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-22T17:06:48.269Z","status":"ssl_error","status_checked_at":"2026-04-22T17:06:19.037Z","response_time":58,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai","developer-tools","git","rust","tauri"],"created_at":"2026-04-22T19:01:37.500Z","updated_at":"2026-04-22T19:01:40.141Z","avatar_url":"https://github.com/fluxgitapp.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"apps/desktop/static/images/logo.png\" alt=\"FluxGit Logo\" width=\"80\" /\u003e\n  \u003ch1\u003eFluxGit\u003c/h1\u003e\n  \u003cp\u003e\u003cstrong\u003eA modern Git client with multi-AI provider support, built on Tauri + SvelteKit\u003c/strong\u003e\u003c/p\u003e\n\n  [![Build](https://github.com/fluxgitapp/fluxgit/actions/workflows/build.yml/badge.svg)](https://github.com/fluxgitapp/fluxgit/actions/workflows/build.yml)\n  [![Release](https://img.shields.io/github/v/release/fluxgitapp/fluxgit)](https://github.com/fluxgitapp/fluxgit/releases)\n  [![License](https://img.shields.io/badge/license-FSL--1.1--MIT-blue)](LICENSE.md)\n\u003c/div\u003e\n\n---\n\n## What is FluxGit?\n\nFluxGit is a desktop Git client for Windows (macOS and Linux coming soon) that combines powerful branch management with AI-assisted workflows. It lets you manage stacks of branches, generate commit messages with AI, chat with an AI agent about your code, and authenticate with GitHub — all from a single native desktop app.\n\n---\n\n## Features\n\n### 🌿 Git \u0026 Branch Management\n- Visual stack-based branch management\n- Commit, amend, squash, reorder, and rebase from the UI\n- Drag-and-drop file assignment to branches\n- Upstream integration and conflict resolution\n- Oplog (snapshot history) with one-click restore\n- Git hooks support (pre-commit, post-commit, message)\n- Worktree management\n\n### 🤖 Multi-AI Provider Support\nFluxGit supports four AI providers for commit message generation and agent chat:\n\n| Provider | Models |\n|----------|--------|\n| 🟦 Google Gemini | `gemini-2.5-flash`, `gemini-2.5-pro`, `gemini-2.0-flash` |\n| 🟧 Mistral AI | `mistral-small-latest`, `mistral-medium-latest`, `mistral-large-latest` |\n| ⬛ Grok (xAI) | `grok-2`, `grok-2-mini` |\n| 🟩 DeepSeek | `deepseek-chat`, `deepseek-reasoner` |\n\n**AI Settings Panel** (Project Settings → AI Options):\n- Provider selector with status indicators (grey/yellow/green/red dots)\n- Per-provider API key storage via Tauri Store (never written to `.env` or git config)\n- Model dropdown filtered per provider\n- Test Connection button with live feedback\n- Toggles: \"Use for commit message generation\" and \"Use for AI agent chat\"\n- Default fallback to Gemini if `GEMINI_API_KEY` is set in environment\n\n**Commit Message Generation:**\n- Reads staged diff and sends to selected AI provider\n- Button tooltip shows active provider: \"Generate with Gemini 2.5 Flash\"\n- Falls back to existing AI service if new provider not configured\n- Error toasts on API failures (e.g. 503 capacity errors)\n\n**AI Agent Chat:**\n- Generic chat panel powered by selected provider\n- Shows \"FluxGit AI — Google Gemini gemini-2.5-flash\" in header\n- Automatically switches when provider changes in settings\n- Falls back to Claude Code panel if `useForAgentChat` is disabled\n\n### 🔐 GitHub OAuth (FluxGit-branded)\n- Custom GitHub OAuth App registered as **\"FluxGit\"**\n- Uses GitHub Device Flow — no browser redirect needed\n- OAuth backend deployed on Railway (`fluxgit-api-production.up.railway.app`)\n- Shows \"Authorize FluxGit\" instead of \"Authorize GitButler Client\"\n\n### 🔗 Forge Integrations\n- GitHub: Pull requests, reviews, checks, auto-merge\n- GitLab: Merge requests, self-hosted support\n- Gerrit: Push and review support\n\n### 🎨 UI \u0026 UX\n- Dark theme with customizable appearance\n- Floating commit box mode\n- Resizable panels\n- Keyboard shortcuts\n- Svelte 5 runes-based reactive UI\n\n---\n\n## Architecture\n\n```\nfluxgit/\n├── apps/\n│   ├── desktop/          # SvelteKit + Tauri desktop app (main app)\n│   │   ├── src/\n│   │   │   ├── components/\n│   │   │   │   ├── AIChatPanel.svelte          # Generic AI chat panel\n│   │   │   │   ├── CommitMessageEditor.svelte  # AI-powered commit editor\n│   │   │   │   ├── StackView.svelte            # Branch stack view\n│   │   │   │   ├── projectSettings/\n│   │   │   │   │   └── AISettingsPanel.svelte  # Multi-AI settings UI\n│   │   │   │   └── codegen/\n│   │   │   │       └── CodegenMessages.svelte  # Claude Code chat\n│   │   │   └── lib/\n│   │   │       ├── ai/\n│   │   │       │   ├── aiProviderClient.ts         # Shared types \u0026 interfaces\n│   │   │       │   ├── aiProviderService.svelte.ts # Reactive service + Tauri Store\n│   │   │       │   ├── geminiProviderClient.ts     # Gemini via @google/genai\n│   │   │       │   ├── openAICompatibleClient.ts   # Mistral/Grok/DeepSeek via fetch()\n│   │   │       │   ├── providerCatalogue.ts        # Provider + model definitions\n│   │   │       │   └── providerStatus.ts           # Status dot color logic\n│   │   │       └── bootstrap/\n│   │   │           └── deps.ts                 # DI registration\n│   │\n│   ├── web/              # SvelteKit marketing + cloud web app\n│   │   └── src/routes/\n│   │       ├── (home)/   # Landing page (Hero, Features, AI, Changelog)\n│   │       ├── (app)/    # Cloud app (login, profile, orgs, reviews)\n│   │       ├── downloads/# Download page (macOS, Linux, Windows)\n│   │       ├── releases/ # Release notes (same as downloads, used by CLI)\n│   │       ├── nightly/  # Nightly builds page\n│   │       ├── cli/      # CLI documentation page\n│   │       └── install.sh/ # Shell install script endpoint\n│   │\n│   └── lite/             # Electron lite version\n│\n├── crates/               # Rust backend (Tauri)\n│   ├── fluxgit-tauri/    # Main Tauri app entry point\n│   ├── but-github/       # GitHub OAuth device flow\n│   ├── but-settings/     # App settings with defaults.jsonc\n│   ├── but-api/          # Tauri command handlers\n│   └── ...               # 40+ Rust crates\n│\n├── packages/\n│   ├── ui/               # Shared Svelte UI component library\n│   ├── shared/           # Shared TypeScript utilities\n│   └── core/             # DI context (InjectionToken)\n│\n└── fluxgit-api/          # OAuth backend (Node.js + Express)\n    └── src/index.js\n```\n\n---\n\n## FluxGit Web App\n\nThe web app (`apps/web`) is a SvelteKit application deployed on Vercel. It serves two purposes:\n\n### 1. Marketing Website\nThe public-facing landing page at `fluxgit.com`:\n- **Hero** — tagline and download CTA\n- **Main Features** — stack-based branch management, unlimited undo, agent integrations\n- **AI Features** — showcase of AI-powered workflows\n- **Feature Updates** — latest additions\n- **Social Quotes** — community testimonials\n- **Changelog** — release history pulled from GitHub releases\n- **Blog Highlights** — latest posts from Ghost CMS\n\n### 2. Downloads \u0026 Releases\n- `/downloads` — latest release with platform-specific download cards:\n  - macOS: Apple Silicon + Intel\n  - Linux: `.deb` and `.rpm` for x86-64 and ARM64, plus CLI binary\n  - Windows: MSI installer\n- `/releases` — same page, used by the CLI after updates to show release notes\n- `/nightly` — nightly build downloads\n\n### 3. Cloud App (authenticated)\nRoutes under `/(app)/`:\n- `/login` — GitHub OAuth login\n- `/profile` — user profile management\n- `/organizations` — org management\n- `/[ownerSlug]/[projectSlug]/reviews` — code review interface\n- `/signup` — account creation\n\n### 4. CLI Page\n- `/cli` — CLI documentation with features, AI features, and scripts\n\n### 5. Install Script\n- `/install.sh` — shell script endpoint for `curl | sh` installation\n\n### Tech\n- **Framework:** SvelteKit with `@sveltejs/adapter-vercel`\n- **CMS:** Ghost Content API for blog posts\n- **Analytics:** Sentry\n- **Deployment:** Vercel\n\n---\n\n## FluxGit API (OAuth Backend)\n\nA lightweight Node.js/Express server that handles GitHub OAuth authentication.\n\n**Deployed at:** `https://fluxgit-api-production.up.railway.app`\n\n### Endpoints\n\n| Method | Path | Description |\n|--------|------|-------------|\n| `GET` | `/health` | Health check → `{ status: \"ok\", app: \"FluxGit API\" }` |\n| `GET` | `/login` | Redirect to GitHub OAuth authorization |\n| `GET` | `/auth/callback` | Exchange code for access token |\n| `GET` | `/login/token.json` | Tauri-compatible token endpoint |\n| `GET` | `/login/whoami` | Validate token, return GitHub user info |\n\n### Features\n- Rate limiting (100 req/15min global, 20 req/15min for auth endpoints)\n- CORS configured for allowed origins\n- Request logging via Morgan\n- Error handling on all routes\n- Deployed on Railway with auto-deploy from GitHub\n\n### Source\nRepository: `https://github.com/fluxgitapp/fluxgit-api`\n\n---\n\n## Tech Stack\n\n### Frontend (Desktop App)\n- **Framework:** SvelteKit with Svelte 5 runes (`$state`, `$derived`, `$effect`)\n- **Desktop:** Tauri v2 (Rust backend + WebView frontend)\n- **Styling:** PostCSS with CSS custom properties\n- **State:** Redux (via `@reduxjs/toolkit`) + Svelte 5 reactive state\n- **Build:** Vite + Turborepo\n\n### Web App\n- **Framework:** SvelteKit with `@sveltejs/adapter-vercel`\n- **Deployment:** Vercel\n- **CMS:** Ghost Content API (blog/changelog)\n- **Markdown:** `svelte-exmarkdown` + `marked`\n- **Syntax highlighting:** `highlight.js`\n\n### Backend (Rust)\n- **Language:** Rust (stable)\n- **Async:** Tokio\n- **Git:** `git2` (libgit2 bindings) + `gix`\n- **IPC:** Tauri commands\n- **Storage:** Tauri Store plugin (`@tauri-apps/plugin-store`)\n- **Secrets:** OS keychain via `but-secret`\n\n### AI Integration\n- **Gemini:** `@google/genai` SDK\n- **Mistral / Grok / DeepSeek:** Native `fetch()` to OpenAI-compatible endpoints\n- **Storage:** All API keys stored in Tauri Store (never in git config or `.env`)\n\n### OAuth API\n- **Runtime:** Node.js 18+\n- **Framework:** Express 4\n- **Deployment:** Railway\n- **Rate limiting:** `express-rate-limit`\n- **Logging:** Morgan\n\n---\n\n## Getting Started\n\n### Prerequisites\n- [Rust](https://rustup.rs/) (stable)\n- [Node.js](https://nodejs.org/) 22+\n- [pnpm](https://pnpm.io/) (version from `package.json`)\n- Windows: Visual Studio Build Tools with MSVC\n\n### Development\n\n```bash\n# Clone the repo\ngit clone https://github.com/fluxgitapp/fluxgit.git\ncd fluxgit\n\n# Install dependencies\npnpm install\n\n# Start dev server (Tauri + SvelteKit hot reload)\npnpm tauri dev\n```\n\n### Production Build\n\n```bash\npnpm tauri build\n```\n\nOutputs to `target/tauri/release/bundle/`:\n- `msi/FluxGit_1.0.0_x64_en-US.msi` — Windows MSI installer\n- `nsis/FluxGit_1.0.0_x64-setup.exe` — Windows NSIS installer\n\n### Running the OAuth API locally\n\n```bash\ncd fluxgit-api\ncp .env.example .env\n# Fill in GITHUB_CLIENT_ID and GITHUB_CLIENT_SECRET\nnpm install\nnpm start\n# API runs on http://localhost:3333\n```\n\n---\n\n## Configuration\n\n### AI Providers\nGo to **Project Settings → AI Options** to configure:\n1. Select a provider (Gemini, Mistral, Grok, or DeepSeek)\n2. Enter your API key\n3. Choose a model\n4. Click **Save** then **Test Connection**\n5. Enable toggles for commit messages and/or agent chat\n\n### GitHub OAuth\nThe app uses the FluxGit GitHub OAuth App (`Ov23liC1vTzKIVDLMKby`) for authentication via the Device Flow. No browser redirect is required — just enter the code shown in the app at `github.com/login/device`.\n\n---\n\n## CI/CD\n\nGitHub Actions workflow (`.github/workflows/build.yml`) triggers on `v*` tags:\n\n1. Checks out code\n2. Installs Rust stable + pnpm + Node 22\n3. Builds with `pnpm tauri build`\n4. Signs updater artifacts with `TAURI_SIGNING_PRIVATE_KEY`\n5. Uploads MSI and NSIS installers as artifacts\n6. Creates a GitHub Release with all installer files\n\n### Required GitHub Secrets\n| Secret | Description |\n|--------|-------------|\n| `TAURI_SIGNING_PRIVATE_KEY` | Minisign private key for updater signing |\n| `TAURI_SIGNING_PRIVATE_KEY_PASSWORD` | Password for the private key |\n\n---\n\n## Release\n\nTo create a new release:\n\n```bash\ngit tag v1.0.2\ngit push origin v1.0.2\n```\n\nThis triggers the CI build and automatically creates a GitHub Release at `https://github.com/fluxgitapp/fluxgit/releases`.\n\n---\n\n## License\n\n[FSL-1.1-MIT](LICENSE.md) — Functional Source License\n\n---\n\n\u003cdiv align=\"center\"\u003e\n  Built with ❤️ by \u003ca href=\"https://github.com/fluxgitapp\"\u003eFluxGit \u0026 SHafian Khan\u003c/a\u003e\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffluxgitapp%2Ffluxgit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffluxgitapp%2Ffluxgit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffluxgitapp%2Ffluxgit/lists"}