{"id":50175896,"url":"https://github.com/brainervirus/mochi","last_synced_at":"2026-06-06T07:00:28.584Z","repository":{"id":359258083,"uuid":"1245232005","full_name":"BrainerVirus/mochi","owner":"BrainerVirus","description":"Cross-platform AI coding usage companion inspired by CodexBar.","archived":false,"fork":false,"pushed_at":"2026-06-02T01:51:06.000Z","size":1496,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-02T03:22:44.510Z","etag":null,"topics":["ai-coding","codex","desktop-app","react","tanstack-start","tauri","tray-app","usage-tracker"],"latest_commit_sha":null,"homepage":"https://github.com/BrainerVirus/mochi#readme","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/BrainerVirus.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"docs/contributing.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-05-21T03:15:50.000Z","updated_at":"2026-06-02T01:50:38.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/BrainerVirus/mochi","commit_stats":null,"previous_names":["brainervirus/mochi"],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/BrainerVirus/mochi","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BrainerVirus%2Fmochi","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BrainerVirus%2Fmochi/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BrainerVirus%2Fmochi/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BrainerVirus%2Fmochi/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/BrainerVirus","download_url":"https://codeload.github.com/BrainerVirus/mochi/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BrainerVirus%2Fmochi/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33972398,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-06T02:00:07.033Z","response_time":107,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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-coding","codex","desktop-app","react","tanstack-start","tauri","tray-app","usage-tracker"],"created_at":"2026-05-25T04:01:10.689Z","updated_at":"2026-06-06T07:00:28.573Z","avatar_url":"https://github.com/BrainerVirus.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Mochi\n\n[![Pull Request](https://github.com/BrainerVirus/mochi/actions/workflows/pr.yml/badge.svg)](https://github.com/BrainerVirus/mochi/actions/workflows/pr.yml)\n[![React Doctor](https://img.shields.io/badge/React%20Doctor-enabled-61dafb?logo=react\u0026logoColor=111827)](https://react.doctor/)\n[![Tauri](https://img.shields.io/badge/Tauri-v2-24c8db?logo=tauri\u0026logoColor=white)](https://v2.tauri.app/)\n[![React](https://img.shields.io/badge/React-19-61dafb?logo=react\u0026logoColor=111827)](https://react.dev/)\n[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](LICENSE)\n\n**Soft alerts before hard limits.**\n\nMochi is a cross-platform desktop companion for AI coding tools. It tracks session and weekly usage, reset windows, provider status, and local usage signals for tools like Codex, Claude, Cursor, Gemini, Copilot, and more—without sending your data to a cloud backend.\n\nMochi exists because of [steipete/codexbar](https://github.com/steipete/codexbar). CodexBar proved how useful a focused menu-bar usage tracker for Codex could be; Mochi takes that spark seriously and expands the idea into a cross-platform companion for macOS, Windows, and Linux, with tray, widget, CLI, and status-bar surfaces that feel native on each platform.\n\n## Features\n\n- **Tray app** — Dynamic icon with usage bars; click for a compact panel where the desktop supports direct tray activation, with a menu fallback for GNOME/AppIndicator desktops.\n- **Desktop widget** — Floating overview for desktops where tray support is unreliable.\n- **Settings** — Enable providers, configure refresh intervals, update channel, and privacy-related options.\n- **Providers** — Top v1 providers (Codex, Claude, Cursor, Gemini, Copilot, Antigravity, Factory/Droid, z.ai, Kiro, Augment) with clear stale/error/incident states.\n- **CLI \u0026 status bar** — `mochi usage`, `mochi status`, Waybar JSON, and automation-friendly output.\n- **Privacy-first** — Local-only storage, no server-side aggregation, opt-in browser cookie access.\n\n## Requirements\n\nRuntime installers handle most platform dependencies:\n\n| OS          | Packages / runtime                                                                                                  | Notes                                                                                                                                                             |\n| ----------- | ------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| **Linux**   | Ayatana or legacy AppIndicator, `libsecret-1-0`, `librsvg2`; optional GNOME AppIndicator extension on Ubuntu/Debian | Formats: **AppImage**, **`.deb`**, **`.rpm` only** (not Flatpak). Cookie import uses `~/.config` profiles + GNOME Keyring/KWallet. [docs/linux.md](docs/linux.md) |\n| **Windows** | Microsoft Edge **WebView2** Runtime (winget or bootstrapper)                                                        | Cookie import uses DPAPI + Chromium `Local State`                                                                                                                 |\n| **macOS**   | None via script                                                                                                     | First cookie import may prompt Keychain; Safari import supported                                                                                                  |\n\nInstaller requirements:\n\n- **macOS / Linux scripts:** `curl`, `jq`\n- **macOS:** `hdiutil`, `ditto`\n- **Linux `.deb` / `.rpm`:** `sudo` and the matching package manager\n- **Windows:** PowerShell 5.1+\n- **Optional:** `GITHUB_TOKEN` for higher GitHub API rate limits\n- **Linux opt-outs:** `MOCHI_SKIP_DEPS=1` skips runtime dependency setup; `MOCHI_GNOME_TRAY=0` skips the optional GNOME tray extension step\n\n## Install\n\nInstall from [GitHub Releases](https://github.com/BrainerVirus/mochi/releases). Scripts default to the latest **stable** release. Pass **`-i`** (or **`--unstable`**) for the unstable channel (latest prerelease from `main`).\n\n### macOS\n\n**Direct** (downloads the release DMG and installs to `/Applications`):\n\n```bash\ncurl -fsSL https://raw.githubusercontent.com/BrainerVirus/mochi/main/scripts/install/install-macos.sh | bash\n```\n\nUnstable:\n\n```bash\ncurl -fsSL https://raw.githubusercontent.com/BrainerVirus/mochi/main/scripts/install/install-macos.sh | bash -s -- -i\n```\n\n**Homebrew** (optional local cask from the selected release; requires [Homebrew](https://brew.sh/)):\n\n```bash\ncurl -fsSL https://raw.githubusercontent.com/BrainerVirus/mochi/main/scripts/install/install-macos-brew.sh | bash\n```\n\nUnstable:\n\n```bash\ncurl -fsSL https://raw.githubusercontent.com/BrainerVirus/mochi/main/scripts/install/install-macos-brew.sh | bash -s -- -i\n```\n\n_Advanced:_ the direct script accepts `MOCHI_INSTALL_DIR` (default `/Applications`) if you need a non-system location.\\_\n\nThe Homebrew script does not require a Brew account. It generates a temporary local cask from the GitHub release asset and installs that cask. A normal `brew install --cask brainervirus/tap/mochi` flow would require publishing a Homebrew tap repository or submitting a cask PR upstream; until then, prefer the direct installer if the local cask path fails on your machine.\n\n### Linux\n\n```bash\ncurl -fsSL https://raw.githubusercontent.com/BrainerVirus/mochi/main/scripts/install/install-linux.sh | bash\n```\n\nUnstable:\n\n```bash\ncurl -fsSL https://raw.githubusercontent.com/BrainerVirus/mochi/main/scripts/install/install-linux.sh | bash -s -- -i\n```\n\nPackage selection:\n\n| Env             | Values                           | Default                                                          |\n| --------------- | -------------------------------- | ---------------------------------------------------------------- |\n| `MOCHI_PACKAGE` | `appimage`, `deb`, `rpm`, `auto` | `auto` (deb on Debian/Ubuntu, rpm on Fedora/RHEL, else AppImage) |\n\nAppImage installs to `~/.local/bin/mochi`.\n\nOn GNOME, the installer attempts to install and enable AppIndicator support so the tray icon can expose the usage panel. You may need to log out and back in after the first install. Set `MOCHI_GNOME_TRAY=0` only if you want to skip this optional desktop integration step.\n\n### Windows (PowerShell)\n\n```powershell\nirm https://raw.githubusercontent.com/BrainerVirus/mochi/main/scripts/install/install-windows.ps1 | iex\n```\n\nUnstable:\n\n```powershell\n$env:MOCHI_UNSTABLE = \"1\"; irm https://raw.githubusercontent.com/BrainerVirus/mochi/main/scripts/install/install-windows.ps1 | iex\n```\n\nOr download and run:\n\n```powershell\n.\\scripts\\install\\install-windows.ps1\n.\\scripts\\install\\install-windows.ps1 -Unstable\n```\n\nPrefer MSI (default); set `$env:MOCHI_PACKAGE = \"exe\"` for the NSIS installer.\n\n### Pin a release\n\n```bash\nMOCHI_VERSION=v1.0.0 ./scripts/install/install-macos.sh\nMOCHI_VERSION=unstable ./scripts/install/install-macos.sh -i\n```\n\n```powershell\n$env:MOCHI_VERSION = \"v1.0.0\"\n.\\scripts\\install\\install-windows.ps1\n```\n\nSet `MOCHI_UNSTABLE=1` instead of `-i` / `-Unstable` if you prefer environment variables.\n\nSee [docs/releasing.md](docs/releasing.md) for stable vs unstable release channels.\n\nLinux install runs `scripts/install/lib/linux-deps.sh` before downloading the release artifact. Windows install runs `Ensure-MochiRuntimeDependencies` before MSI/NSIS.\n\n## Tech stack\n\n| Layer     | Choices                                                                               |\n| --------- | ------------------------------------------------------------------------------------- |\n| UI        | React 19, Vite 8, TanStack Router, TanStack Query, Zustand, shadcn/ui, Tailwind CSS 4 |\n| Desktop   | Tauri v2 (Rust) — tray, widget, providers, secure storage, updater                    |\n| Quality   | oxlint, oxfmt, Zod 4, Vitest                                                          |\n| Animation | GSAP + `@gsap/react`                                                                  |\n\nSee [docs/tech-stack.md](docs/tech-stack.md) for versions, folder layout, and conventions.\n\n## Development Requirements\n\n- **Node.js** 24 LTS or newer (`.nvmrc` pins **25** for local/CI parity; npm 11 ships with Node 25)\n- **pnpm** 9.15.x — enable via [Corepack](https://nodejs.org/api/corepack.html) (`corepack enable`); version pinned in `package.json` `packageManager`\n- **Rust** stable toolchain and [Tauri prerequisites](https://v2.tauri.app/start/prerequisites/) for your OS\n\nThe stack (Vite 8, React 19, Tauri v2) targets modern Node releases, and this repo enforces **Node ≥ 24** so CI and contributors stay on current LTS or newer.\n\n## Development\n\n```bash\npnpm install\npnpm dev          # frontend dev server (port 1420)\npnpm tauri dev    # desktop app with Tauri\n```\n\nOn macOS, `pnpm tauri dev` runs an unbundled debug binary. The Dock icon is restored from bundled PNG assets when settings/about/update opens. **Installed builds** (`.app`, `.msi`, `.deb`, etc.) use the OS icon pipeline — macOS squircle masking from `icon.icns`, Windows/Linux taskbar icons from `icon.ico` / PNG. Regenerate icons with `./scripts/generate-icons.sh`.\n\n```bash\npnpm lint\npnpm format:check\npnpm build\ncargo test --manifest-path src-tauri/Cargo.toml\n```\n\nAgent and stack details: [AGENTS.md](AGENTS.md).\n\n## Contributing\n\nThis project uses **GitHub Flow**: short-lived branches from `main`, pull requests, no direct merges by automation. See [docs/contributing.md](docs/contributing.md).\n\n## Kudos\n\nDeep thanks to [Peter Steinberger](https://github.com/steipete) and [CodexBar](https://github.com/steipete/codexbar), the project that inspired Mochi’s original direction. Mochi is not a fork, but CodexBar is the origin point for this app’s menu-bar-first thinking and deserves clear credit.\n\n## License\n\n[MIT](LICENSE) © [BrainerVirus](https://github.com/BrainerVirus)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbrainervirus%2Fmochi","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbrainervirus%2Fmochi","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbrainervirus%2Fmochi/lists"}