{"id":35059292,"url":"https://github.com/bwendell/gemini-desktop","last_synced_at":"2026-03-09T06:01:03.212Z","repository":{"id":330929872,"uuid":"1117224620","full_name":"bwendell/gemini-desktop","owner":"bwendell","description":"Native desktop client for Google Gemini on Windows, macOS, and Linux. Features global hotkeys, Spotlight-style Quick Chat, and zero data collection.","archived":false,"fork":false,"pushed_at":"2026-03-06T15:39:47.000Z","size":10269,"stargazers_count":49,"open_issues_count":8,"forks_count":3,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-03-06T18:24:38.599Z","etag":null,"topics":["ai-tools","chatbot","desktop-app","electron","gemini","gemini-ai","google-gemini","privacy-focused"],"latest_commit_sha":null,"homepage":"https://bwendell.github.io/gemini-desktop/","language":"TypeScript","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/bwendell.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":"docs/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":"AGENTS.md","dco":null,"cla":null}},"created_at":"2025-12-16T02:30:37.000Z","updated_at":"2026-03-06T15:24:03.000Z","dependencies_parsed_at":null,"dependency_job_id":"d7a46cd3-1e55-47f2-9736-21c8985af953","html_url":"https://github.com/bwendell/gemini-desktop","commit_stats":null,"previous_names":["bwendell/gemini-desktop"],"tags_count":16,"template":false,"template_full_name":null,"purl":"pkg:github/bwendell/gemini-desktop","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bwendell%2Fgemini-desktop","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bwendell%2Fgemini-desktop/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bwendell%2Fgemini-desktop/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bwendell%2Fgemini-desktop/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bwendell","download_url":"https://codeload.github.com/bwendell/gemini-desktop/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bwendell%2Fgemini-desktop/sbom","scorecard":{"id":1242576,"data":{"date":"2026-01-28T05:54:18Z","repo":{"name":"github.com/bwendell/gemini-desktop","commit":"ed5a7af3e9c6b8985e64101a4085eb41fea386d2"},"scorecard":{"version":"v4.13.1","commit":"49c0eed3a423f00c872b5c3c9f1bbca9e8aae799"},"score":4.8,"checks":[{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#binary-artifacts"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'main'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#branch-protection"}},{"name":"CI-Tests","score":10,"reason":"9 out of 9 merged PRs checked by a CI test -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project runs tests before pull requests are merged.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#ci-tests"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#cii-best-practices"}},{"name":"Code-Review","score":0,"reason":"found 22 unreviewed changesets out of 23 -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#code-review"}},{"name":"Contributors","score":0,"reason":"0 different organizations found -- score normalized to 0","details":["Warn: no contributors have an org or company"],"documentation":{"short":"Determines if the project has a set of contributors from multiple organizations (e.g., companies).","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#contributors"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#dangerous-workflow"}},{"name":"Dependency-Update-Tool","score":10,"reason":"update tool detected","details":["Info: tool 'Dependabot' is used: .github/dependabot.yml:1"],"documentation":{"short":"Determines if the project uses a dependency update tool.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#dependency-update-tool"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no OSSFuzz integration found: Follow the steps in https://github.com/google/oss-fuzz to integrate fuzzing for your project.\nOver time, try to add fuzzing for more functionalities of your project. (High effort)","Warn: no OneFuzz integration found: Follow the steps in https://github.com/microsoft/onefuzz to start fuzzing for your project.\nOver time, try to add fuzzing for more functionalities of your project. (High effort)","Warn: no GoBuiltInFuzzer integration found: Follow the steps in https://go.dev/doc/fuzz/ to enable fuzzing on your project.\nOver time, try to add fuzzing for more functionalities of your project. (Medium effort)","Warn: no PythonAtherisFuzzer integration found: Follow the steps in https://github.com/google/atheris to enable fuzzing on your project.\nOver time, try to add fuzzing for more functionalities of your project. (Medium effort)","Warn: no CLibFuzzer integration found: Follow the steps in https://llvm.org/docs/LibFuzzer.html to enable fuzzing on your project.\nOver time, try to add fuzzing for more functionalities of your project. (Medium effort)","Warn: no CppLibFuzzer integration found: Follow the steps in https://llvm.org/docs/LibFuzzer.html to enable fuzzing on your project.\nOver time, try to add fuzzing for more functionalities of your project. (Medium effort)","Warn: no SwiftLibFuzzer integration found: Follow the steps in https://google.github.io/oss-fuzz/getting-started/new-project-guide/swift-lang/ to enable fuzzing on your project.\nOver time, try to add fuzzing for more functionalities of your project. (Medium effort)","Warn: no RustCargoFuzzer integration found: Follow the steps in https://rust-fuzz.github.io/book/cargo-fuzz.html to enable fuzzing on your project.\nOver time, try to add fuzzing for more functionalities of your project. (Medium effort)","Warn: no JavaJazzerFuzzer integration found: Follow the steps in https://github.com/CodeIntelligenceTesting/jazzer to enable fuzzing on your project.\nOver time, try to add fuzzing for more functionalities of your project. (Medium effort)","Warn: no ClusterFuzzLite integration found: Follow the steps in https://github.com/google/clusterfuzzlite to integrate fuzzing as part of CI.\nOver time, try to add fuzzing for more functionalities of your project. (High effort)","Warn: no HaskellPropertyBasedTesting integration found: Use one of the following frameworks to fuzz your project:\nQuickCheck: https://hackage.haskell.org/package/QuickCheck\nhedgehog: https://hedgehog.qa/\nvalidity: https://github.com/NorfairKing/validity\nsmallcheck: https://hackage.haskell.org/package/smallcheck\nhspec: https://hspec.github.io/\ntasty: https://hackage.haskell.org/package/tasty (High effort)","Warn: no TypeScriptPropertyBasedTesting integration found: Use fast-check: https://github.com/dubzzz/fast-check (High effort)","Warn: no JavaScriptPropertyBasedTesting integration found: Use fast-check: https://github.com/dubzzz/fast-check (High effort)"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: License file found in expected location: LICENSE:1","Info: FSF or OSI recognized license: LICENSE:1"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#license"}},{"name":"Maintained","score":0,"reason":"repo was created 43 days ago, not enough maintenance history","details":["Warn: repo was created in the last 90 days (Created at: 2025-12-16T02:30:37Z), please review its contents carefully"],"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#maintained"}},{"name":"Packaging","score":-1,"reason":"no published package detected","details":["Warn: no GitHub/GitLab publishing workflow detected"],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#packaging"}},{"name":"Pinned-Dependencies","score":3,"reason":"dependency not pinned by hash detected -- score normalized to 3","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/_build.yml:31: update your workflow using https://app.stepsecurity.io/secureworkflow/bwendell/gemini-desktop/_build.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/_build.yml:34: update your workflow using https://app.stepsecurity.io/secureworkflow/bwendell/gemini-desktop/_build.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/_build.yml:52: update your workflow using https://app.stepsecurity.io/secureworkflow/bwendell/gemini-desktop/_build.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/_build.yml:59: update your workflow using https://app.stepsecurity.io/secureworkflow/bwendell/gemini-desktop/_build.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/_release.yml:36: update your workflow using https://app.stepsecurity.io/secureworkflow/bwendell/gemini-desktop/_release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/_release.yml:39: update your workflow using https://app.stepsecurity.io/secureworkflow/bwendell/gemini-desktop/_release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/_release.yml:48: update your workflow using https://app.stepsecurity.io/secureworkflow/bwendell/gemini-desktop/_release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/_release.yml:54: update your workflow using https://app.stepsecurity.io/secureworkflow/bwendell/gemini-desktop/_release.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/_release.yml:68: update your workflow using https://app.stepsecurity.io/secureworkflow/bwendell/gemini-desktop/_release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/_release.yml:82: update your workflow using https://app.stepsecurity.io/secureworkflow/bwendell/gemini-desktop/_release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/_release.yml:101: update your workflow using https://app.stepsecurity.io/secureworkflow/bwendell/gemini-desktop/_release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/_release.yml:104: update your workflow using https://app.stepsecurity.io/secureworkflow/bwendell/gemini-desktop/_release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/_release.yml:113: update your workflow using https://app.stepsecurity.io/secureworkflow/bwendell/gemini-desktop/_release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/_release.yml:119: update your workflow using https://app.stepsecurity.io/secureworkflow/bwendell/gemini-desktop/_release.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/_release.yml:133: update your workflow using https://app.stepsecurity.io/secureworkflow/bwendell/gemini-desktop/_release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/_release.yml:147: update your workflow using https://app.stepsecurity.io/secureworkflow/bwendell/gemini-desktop/_release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/_release.yml:164: update your workflow using https://app.stepsecurity.io/secureworkflow/bwendell/gemini-desktop/_release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/_release.yml:167: update your workflow using https://app.stepsecurity.io/secureworkflow/bwendell/gemini-desktop/_release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/_release.yml:176: update your workflow using https://app.stepsecurity.io/secureworkflow/bwendell/gemini-desktop/_release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/_release.yml:182: update your workflow using https://app.stepsecurity.io/secureworkflow/bwendell/gemini-desktop/_release.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/_release.yml:211: update your workflow using https://app.stepsecurity.io/secureworkflow/bwendell/gemini-desktop/_release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/_release.yml:224: update your workflow using https://app.stepsecurity.io/secureworkflow/bwendell/gemini-desktop/_release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/_release.yml:241: update your workflow using https://app.stepsecurity.io/secureworkflow/bwendell/gemini-desktop/_release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/_release.yml:244: update your workflow using https://app.stepsecurity.io/secureworkflow/bwendell/gemini-desktop/_release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/_release.yml:253: update your workflow using https://app.stepsecurity.io/secureworkflow/bwendell/gemini-desktop/_release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/_release.yml:259: update your workflow using https://app.stepsecurity.io/secureworkflow/bwendell/gemini-desktop/_release.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/_release.yml:276: update your workflow using https://app.stepsecurity.io/secureworkflow/bwendell/gemini-desktop/_release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/_release.yml:291: update your workflow using https://app.stepsecurity.io/secureworkflow/bwendell/gemini-desktop/_release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/_test.yml:111: update your workflow using https://app.stepsecurity.io/secureworkflow/bwendell/gemini-desktop/_test.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/_test.yml:114: update your workflow using https://app.stepsecurity.io/secureworkflow/bwendell/gemini-desktop/_test.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/_test.yml:123: update your workflow using https://app.stepsecurity.io/secureworkflow/bwendell/gemini-desktop/_test.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/_test.yml:129: update your workflow using https://app.stepsecurity.io/secureworkflow/bwendell/gemini-desktop/_test.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/_test.yml:174: update your workflow using https://app.stepsecurity.io/secureworkflow/bwendell/gemini-desktop/_test.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/_test.yml:177: update your workflow using https://app.stepsecurity.io/secureworkflow/bwendell/gemini-desktop/_test.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/_test.yml:186: update your workflow using https://app.stepsecurity.io/secureworkflow/bwendell/gemini-desktop/_test.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/_test.yml:192: update your workflow using https://app.stepsecurity.io/secureworkflow/bwendell/gemini-desktop/_test.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/_test.yml:205: update your workflow using https://app.stepsecurity.io/secureworkflow/bwendell/gemini-desktop/_test.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/_test.yml:232: update your workflow using https://app.stepsecurity.io/secureworkflow/bwendell/gemini-desktop/_test.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/_test.yml:235: update your workflow using https://app.stepsecurity.io/secureworkflow/bwendell/gemini-desktop/_test.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/_test.yml:244: update your workflow using https://app.stepsecurity.io/secureworkflow/bwendell/gemini-desktop/_test.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/_test.yml:250: update your workflow using https://app.stepsecurity.io/secureworkflow/bwendell/gemini-desktop/_test.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/_test.yml:263: update your workflow using https://app.stepsecurity.io/secureworkflow/bwendell/gemini-desktop/_test.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/_test.yml:290: update your workflow using https://app.stepsecurity.io/secureworkflow/bwendell/gemini-desktop/_test.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/_test.yml:293: update your workflow using https://app.stepsecurity.io/secureworkflow/bwendell/gemini-desktop/_test.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/_test.yml:311: update your workflow using https://app.stepsecurity.io/secureworkflow/bwendell/gemini-desktop/_test.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/_test.yml:317: update your workflow using https://app.stepsecurity.io/secureworkflow/bwendell/gemini-desktop/_test.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/_test.yml:332: update your workflow using https://app.stepsecurity.io/secureworkflow/bwendell/gemini-desktop/_test.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/_test.yml:373: update your workflow using https://app.stepsecurity.io/secureworkflow/bwendell/gemini-desktop/_test.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/_test.yml:376: update your workflow using https://app.stepsecurity.io/secureworkflow/bwendell/gemini-desktop/_test.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/_test.yml:396: update your workflow using https://app.stepsecurity.io/secureworkflow/bwendell/gemini-desktop/_test.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/_test.yml:402: update your workflow using https://app.stepsecurity.io/secureworkflow/bwendell/gemini-desktop/_test.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/_test.yml:422: update your workflow using https://app.stepsecurity.io/secureworkflow/bwendell/gemini-desktop/_test.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/_test.yml:48: update your workflow using https://app.stepsecurity.io/secureworkflow/bwendell/gemini-desktop/_test.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/_test.yml:51: update your workflow using https://app.stepsecurity.io/secureworkflow/bwendell/gemini-desktop/_test.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/_test.yml:61: update your workflow using https://app.stepsecurity.io/secureworkflow/bwendell/gemini-desktop/_test.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/_test.yml:67: update your workflow using https://app.stepsecurity.io/secureworkflow/bwendell/gemini-desktop/_test.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/_test.yml:79: update your workflow using https://app.stepsecurity.io/secureworkflow/bwendell/gemini-desktop/_test.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/_test.yml:87: update your workflow using https://app.stepsecurity.io/secureworkflow/bwendell/gemini-desktop/_test.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/scorecard.yml:31: update your workflow using https://app.stepsecurity.io/secureworkflow/bwendell/gemini-desktop/scorecard.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/scorecard.yml:36: update your workflow using https://app.stepsecurity.io/secureworkflow/bwendell/gemini-desktop/scorecard.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/scorecard.yml:55: update your workflow using https://app.stepsecurity.io/secureworkflow/bwendell/gemini-desktop/scorecard.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/scorecard.yml:63: update your workflow using https://app.stepsecurity.io/secureworkflow/bwendell/gemini-desktop/scorecard.yml/main?enable=pin","Info:   0 out of  57 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   5 third-party GitHubAction dependencies pinned","Info:   9 out of   9 npmCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#pinned-dependencies"}},{"name":"SAST","score":8,"reason":"SAST tool is not run on all commits -- score normalized to 8","details":["Warn: 8 commits out of 9 are checked with a SAST tool","Warn: CodeQL tool not detected"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#sast"}},{"name":"Security-Policy","score":10,"reason":"security policy file detected","details":["Info: security policy file detected: docs/SECURITY.md:1","Info: Found linked content: docs/SECURITY.md:1","Info: Found disclosure, vulnerability, and/or timelines in security policy: docs/SECURITY.md:1","Info: Found text in security policy: docs/SECURITY.md:1"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#security-policy"}},{"name":"Signed-Releases","score":0,"reason":"0 out of 5 artifacts are signed or have provenance","details":["Warn: release artifact v0.5.0 does not have provenance: https://api.github.com/repos/bwendell/gemini-desktop/releases/280531920","Warn: release artifact v0.5.0 not signed: https://api.github.com/repos/bwendell/gemini-desktop/releases/280531920","Warn: release artifact v0.4.1 does not have provenance: https://api.github.com/repos/bwendell/gemini-desktop/releases/276487261","Warn: release artifact v0.4.1 not signed: https://api.github.com/repos/bwendell/gemini-desktop/releases/276487261","Warn: release artifact v0.4.0 does not have provenance: https://api.github.com/repos/bwendell/gemini-desktop/releases/275747938","Warn: release artifact v0.4.0 not signed: https://api.github.com/repos/bwendell/gemini-desktop/releases/275747938","Warn: release artifact v0.3.0 does not have provenance: https://api.github.com/repos/bwendell/gemini-desktop/releases/273878517","Warn: release artifact v0.3.0 not signed: https://api.github.com/repos/bwendell/gemini-desktop/releases/273878517","Warn: release artifact v0.2.0 does not have provenance: https://api.github.com/repos/bwendell/gemini-desktop/releases/273635699","Warn: release artifact v0.2.0 not signed: https://api.github.com/repos/bwendell/gemini-desktop/releases/273635699"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#signed-releases"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/_build.yml:1: Visit https://app.stepsecurity.io/secureworkflow/bwendell/gemini-desktop/_build.yml/main?enable=permissions\nTick the 'Restrict permissions for GITHUB_TOKEN'\nUntick other options\nNOTE: If you want to resolve multiple issues at once, you can visit https://app.stepsecurity.io/securerepo instead. (Low effort)","Info: jobLevel 'contents' permission set to 'read': .github/workflows/_build.yml:27","Warn: no topLevel permission defined: .github/workflows/_release.yml:1: Visit https://app.stepsecurity.io/secureworkflow/bwendell/gemini-desktop/_release.yml/main?enable=permissions\nTick the 'Restrict permissions for GITHUB_TOKEN'\nUntick other options\nNOTE: If you want to resolve multiple issues at once, you can visit https://app.stepsecurity.io/securerepo instead. (Low effort)","Warn: jobLevel 'contents' permission set to 'write': .github/workflows/_release.yml:31: Verify which permissions are needed and consider whether you can reduce them. (High effort)","Warn: jobLevel 'contents' permission set to 'write': .github/workflows/_release.yml:96: Verify which permissions are needed and consider whether you can reduce them. (High effort)","Warn: jobLevel 'contents' permission set to 'write': .github/workflows/_release.yml:161: Verify which permissions are needed and consider whether you can reduce them. (High effort)","Warn: jobLevel 'contents' permission set to 'write': .github/workflows/_release.yml:238: Verify which permissions are needed and consider whether you can reduce them. (High effort)","Warn: no topLevel permission defined: .github/workflows/_test.yml:1: Visit https://app.stepsecurity.io/secureworkflow/bwendell/gemini-desktop/_test.yml/main?enable=permissions\nTick the 'Restrict permissions for GITHUB_TOKEN'\nUntick other options\nNOTE: If you want to resolve multiple issues at once, you can visit https://app.stepsecurity.io/securerepo instead. (Low effort)","Info: jobLevel 'contents' permission set to 'read': .github/workflows/_test.yml:102","Info: jobLevel 'contents' permission set to 'read': .github/workflows/_test.yml:165","Info: jobLevel 'contents' permission set to 'read': .github/workflows/_test.yml:223","Info: jobLevel 'contents' permission set to 'read': .github/workflows/_test.yml:281","Info: jobLevel 'contents' permission set to 'read': .github/workflows/_test.yml:351","Info: jobLevel 'contents' permission set to 'read': .github/workflows/_test.yml:44","Warn: topLevel 'contents' permission set to 'write': .github/workflows/manual-release.yml:19: Visit https://app.stepsecurity.io/secureworkflow/bwendell/gemini-desktop/manual-release.yml/main?enable=permissions\nTick the 'Restrict permissions for GITHUB_TOKEN'\nUntick other options\nNOTE: If you want to resolve multiple issues at once, you can visit https://app.stepsecurity.io/securerepo instead. (Low effort)","Warn: topLevel 'contents' permission set to 'write': .github/workflows/release.yml:27: Visit https://app.stepsecurity.io/secureworkflow/bwendell/gemini-desktop/release.yml/main?enable=permissions\nTick the 'Restrict permissions for GITHUB_TOKEN'\nUntick other options\nNOTE: If you want to resolve multiple issues at once, you can visit https://app.stepsecurity.io/securerepo instead. (Low effort)","Info: topLevel permissions set to 'read-all': .github/workflows/scorecard.yml:14","Info: jobLevel 'contents' permission set to 'read': .github/workflows/scorecard.yml:26","Info: jobLevel 'actions' permission set to 'read': .github/workflows/scorecard.yml:27","Warn: no topLevel permission defined: .github/workflows/test.yml:1: Visit https://app.stepsecurity.io/secureworkflow/bwendell/gemini-desktop/test.yml/main?enable=permissions\nTick the 'Restrict permissions for GITHUB_TOKEN'\nUntick other options\nNOTE: If you want to resolve multiple issues at once, you can visit https://app.stepsecurity.io/securerepo instead. (Low effort)","Info: jobLevel 'contents' permission set to 'read': .github/workflows/test.yml:58"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#token-permissions"}},{"name":"Vulnerabilities","score":10,"reason":"no vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2026-01-28T10:46:18.532Z","repository_id":330929872,"created_at":"2026-01-28T10:46:18.532Z","updated_at":"2026-01-28T10:46:18.532Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30284628,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-09T02:57:19.223Z","status":"ssl_error","status_checked_at":"2026-03-09T02:56:26.373Z","response_time":61,"last_error":"SSL_read: 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-tools","chatbot","desktop-app","electron","gemini","gemini-ai","google-gemini","privacy-focused"],"created_at":"2025-12-27T10:12:07.540Z","updated_at":"2026-03-09T06:01:03.194Z","avatar_url":"https://github.com/bwendell.png","language":"TypeScript","funding_links":[],"categories":["TypeScript"],"sub_categories":[],"readme":"# Gemini Desktop — Native, Private AI Experience\n\n\u003cdiv align=\"center\"\u003e\n\n[![GitHub release](https://img.shields.io/github/v/release/bwendell/gemini-desktop?style=flat-square)](https://github.com/bwendell/gemini-desktop/releases)\n[![GitHub last commit](https://img.shields.io/github/last-commit/bwendell/gemini-desktop?style=flat-square)](https://github.com/bwendell/gemini-desktop/commits/main)\n[![Platform](\u003chttps://img.shields.io/badge/platform-Windows%20(x64%2C%20ARM64)%20%7C%20macOS%20%7C%20Linux-lightgrey?style=flat-square\u003e)](https://github.com/bwendell/gemini-desktop/releases)\n[![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/bwendell/gemini-desktop/badge)](https://securityscorecards.dev/viewer/?uri=github.com/bwendell/gemini-desktop)\n[![CodeQL](https://img.shields.io/badge/CodeQL-enabled-brightgreen?logo=github)](https://github.com/bwendell/gemini-desktop/security/code-scanning)\n\n\u003c/div\u003e\n\n\u003e **Gemini, but better.** The privacy-first, native desktop client for Google Gemini. Experience the best free AI desktop app for Windows, macOS, and Linux. Features global hotkeys, Spotlight-style Quick Chat, and zero data collection.\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"#-installation\"\u003eInstallation\u003c/a\u003e •\n  \u003ca href=\"#-quick-chat--spotlight-for-gemini\"\u003eQuick Chat\u003c/a\u003e •\n  \u003ca href=\"#-keyboard-shortcuts\"\u003eShortcuts\u003c/a\u003e •\n  \u003ca href=\"#-privacy--security-practices\"\u003ePrivacy\u003c/a\u003e •\n  \u003ca href=\"#-contributing\"\u003eContributing\u003c/a\u003e\n\u003c/p\u003e\n\n---\n\n## ✨ Why This App?\n\n### 🛡️ Safety Guarantee\n\nStart here: **[Read our Transparency Report](docs/TRANSPARENCY.md)** which includes a direct comparison to the \"GeminiDesk\" malware and explains exactly how we protect your data. We verify every release with checksums and strictly limit network traffic to `google.com`.\n\nUsers have been asking for a desktop Gemini client with these features—**we deliver on all of them**:\n\n\u003cdiv align=\"center\"\u003e\n\n| What Users Want                                | Status                       |\n| ---------------------------------------------- | ---------------------------- |\n| 🖥️ Native desktop app (not just a browser tab) | ✅ **Native \u0026 Fast**         |\n| ⌨️ Global keyboard shortcuts                   | ✅ **Fully Customizable**    |\n| 🚀 Spotlight-style Quick Chat                  | ✅ **Instant Access**        |\n| 📌 Always-on-top window                        | ✅ **Easy Access to Gemini** |\n| 🕵️ Quick Privacy / Hiding                      | ✅ **Peek and Hide**         |\n| 💻 Cross-platform (Windows, macOS, Linux)      | ✅ **All three**             |\n| 🔐 Stable login \u0026 persistent sessions          | ✅ **OAuth done right**      |\n| 🔒 No data collection                          | ✅ **Zero telemetry**        |\n| 🖨️ Print to PDF                                | ✅ **Export Chats**          |\n| 🔔 Desktop Notifications                       | ✅ **Notify on Reply**       |\n\n\u003c/div\u003e\n\n---\n\n### 🚀 Quick Chat - Spotlight for Gemini\n\n**Like macOS Spotlight, but for AI.** Press **`Ctrl+Shift+Alt+Space`** (or **`Cmd+Shift+Alt+Space`** on Mac) from anywhere—writing code, browsing, reading docs—and a floating command center appears instantly.\n\n\u003c!-- [INSERT QUICK CHAT SCREENSHOT HERE] --\u003e\n\n\u003cdiv align=\"center\"\u003e\n\n![Gemini Desktop Quick Chat Interface](docs/assets/quick_chat.png)\n\n\u003c/div\u003e\n\n**What makes it powerful:**\n\n- **🌟 Spotlight-Style Access** — Global hotkey summons Gemini over any app, just like `Cmd+Space` on Mac\n- **💬 Floating Window** — Centered, always-on-top dialog that doesn't disrupt your workflow\n- **⚡ Zero Friction** — Auto-focuses on input, submit your query, then it vanishes—results appear in your main Gemini chat\n- **⌨️ Keyboard-First** — Type, submit with Enter, dismiss with Escape. No context switching required\n- **🎯 Smart Positioning** — Appears on your active screen, keeps you in the flow\n\n### 🕵️ Peek and Hide\n\nPress **`Ctrl+Shift+Space`** (or **`Cmd+Shift+Space`**) to toggle the app visibility. First press hides to the system tray — second press restores and focuses the window instantly.\n\n### 📌 Always On Top\n\nKeep Gemini visible while you work. Toggle \"Always On Top\" mode with **`Ctrl+Shift+T`** (or **`Cmd+Shift+T`**) so you can reference chats without switching windows.\n\n---\n\n## 📥 Installation\n\n### Windows\n\nDownload the latest `.exe` installer for your architecture from [Releases](https://github.com/bwendell/gemini-desktop/releases):\n\n- **x64 (Intel/AMD)**: `Gemini Desktop-x.x.x-x64-installer.exe`\n- **ARM64 (Snapdragon/Qualcomm)**: `Gemini Desktop-x.x.x-arm64-installer.exe`\n\n\u003e 💡 **Not sure which to download?** Open Settings → System → About and check \"System type\". If it says \"ARM-based processor\", download the ARM64 version.\n\n### macOS\n\nDownload the `.dmg` for your architecture from [Releases](https://github.com/bwendell/gemini-desktop/releases):\n\n- **Apple Silicon (M1/M2/M3)**: `Gemini Desktop-x.x.x-arm64.dmg`\n- **Intel**: `Gemini Desktop-x.x.x-x64.dmg`\n\n\u003e ⚠️ **Important:** The app is not code-signed, so macOS will quarantine it on first launch. After installing, run the following command to remove the quarantine flag:\n\u003e\n\u003e ```bash\n\u003e xattr -rd com.apple.quarantine \"/Applications/Gemini Desktop.app\"\n\u003e ```\n\n### Linux\n\nDownload the `.AppImage` or `.deb` from [Releases](https://github.com/bwendell/gemini-desktop/releases).\n\n```bash\n# AppImage\nchmod +x \"Gemini Desktop-x.x.x-x64.AppImage\"\n./\"Gemini Desktop-x.x.x-x64.AppImage\"\n\n# Debian/Ubuntu\nsudo dpkg -i \"Gemini Desktop-x.x.x-x64.deb\"\n```\n\n---\n\n## 🔒 Privacy \u0026 Security Practices\n\n\u003e 📢 **Detailed Breakdown:** See our full **[Transparency Report](docs/TRANSPARENCY.md)** for network logs, data storage details, and author identity.\n\n**We take your security seriously.**\n\nFor full details, please read our [**Privacy Policy**](docs/PRIVACY.md) and [**Security Policy**](docs/SECURITY.md).\n\n\u003cdiv align=\"center\"\u003e\n\n| Category            | Practice            | Details                                                                     |\n| ------------------- | ------------------- | --------------------------------------------------------------------------- |\n| **🔐 Data**         | No collection       | Zero analytics, telemetry, or tracking                                      |\n|                     | Direct connection   | Only connects to `google.com` domains                                       |\n|                     | No password storage | Auth handled entirely by Google                                             |\n| **🛡️ Security**     | **Automated Scans** | **CodeQL and Dependency Audits run on every commit**                        |\n|                     | Context Isolation   | Renderer cannot access Node.js                                              |\n|                     | Sandboxed Renderer  | Process isolation enforced                                                  |\n|                     | Minimal Permissions | Restricted system access                                                    |\n| **💾 Storage**      | Encrypted cookies   | Standard Chromium session storage                                           |\n|                     | Local cache only    | Standard browser caching                                                    |\n|                     | No cloud sync       | All data stays on your machine                                              |\n| **🔍 Transparency** | Open source         | [Full code available](https://github.com/bwendell/gemini-desktop) for audit |\n|                     | No paywall bypass   | Respects Google's terms                                                     |\n\n\u003c/div\u003e\n\n---\n\n## ⌨️ Keyboard Shortcuts\n\n\u003cdiv align=\"center\"\u003e\n\n| Shortcut               | Action                                |\n| ---------------------- | ------------------------------------- |\n| `Ctrl+Shift+Alt+Space` | Toggle Quick Chat                     |\n| `Ctrl+Shift+Space`     | **Peek and Hide** (Toggle visibility) |\n| `Ctrl+P`               | Print to PDF                          |\n| `Ctrl+=` / `Ctrl+-`    | Zoom In / Out                         |\n| `Ctrl+,`               | Open Settings                         |\n| `Escape`               | Close Quick Chat                      |\n\n\u003c/div\u003e\n\n\u003e 💡 Hotkeys can be modified in Settings if they conflict with other apps.\n\n---\n\n## 🎯 Features\n\n- 🚀 **Native Experience** — Run Gemini as a standalone desktop app\n- 🎨 **Custom Title Bar** — Native-feeling window controls\n- 🕵️ **Peek and Hide** — Toggle app visibility: hide to tray or restore with one keystroke\n- 📌 **Always On Top** — Pin the window above others\n- 🔄 **System Tray** — Minimize to tray, quick access\n- 🌙 **Theme Sync** — Follows your system light/dark preference\n- ⚡ **Quick Chat** — Spotlight-style prompt from anywhere\n- 🔔 **Smart Notifications** — Get notified when long background responses finish\n- 🖨️ **Print to PDF** — Save your chats or code snippets as PDF\n- 🔍 **Zoom Controls** — Adjust text size for comfortable reading\n\n---\n\n## 🗺️ Roadmap\n\n\u003e **Note:** This roadmap reflects current priorities and may shift based on user feedback and upstream Gemini changes.\n\n### v0.8.0 — Chat Tabs \u0026 Release Notes\n\n- **Tabbed conversations** to keep multiple chats open at once. ([#72](https://github.com/bwendell/gemini-desktop/issues/72))\n- **Release notes discoverability** via Help menu entry and update toast action buttons.\n\n### v0.9.0 — Peek \u0026 Hide, Hotkeys \u0026 Fixes\n\n- **Peek and Hide toggle** to quickly show/hide the app without losing context. ([#91](https://github.com/bwendell/gemini-desktop/issues/91))\n- **Voice chat hotkey** wired to active tab mic. ([#117](https://github.com/bwendell/gemini-desktop/issues/117))\n- **Updated default hotkeys** — Quick Chat and Peek and Hide use new, conflict-free defaults.\n- **macOS fixes** — native Edit menu for copy/paste, tray icon handling, and window frame.\n\n### v0.9.1 — Bugfix Release\n\n- **macOS menubar icon fix** — use template tray assets to avoid stretching. ([#132](https://github.com/bwendell/gemini-desktop/issues/132), [#134](https://github.com/bwendell/gemini-desktop/pull/134))\n- **Text prediction setup fix** — handle packaged LLM fallback without export errors. ([#133](https://github.com/bwendell/gemini-desktop/issues/133), [#135](https://github.com/bwendell/gemini-desktop/pull/135))\n\n### v0.10.0 — Fixes \u0026 Updates\n\n- **Auto-update reliability on macOS** — fix the update flow that fails with a generic “auto-update service encountered an error” dialog during 0.9.x upgrades. ([#150](https://github.com/bwendell/gemini-desktop/issues/150), [#174](https://github.com/bwendell/gemini-desktop/pull/174))\n- **Native Windows ARM64 build** — ship an ARM64 installer so Windows on ARM devices can run Gemini Desktop without emulation. ([#151](https://github.com/bwendell/gemini-desktop/issues/151), [#170](https://github.com/bwendell/gemini-desktop/pull/170))\n- **Linux launch stability on modern distros** — prevent the V8 sandbox/native module memory conflict that causes a segmentation fault on KDE Wayland systems like openSUSE Leap 16. ([#158](https://github.com/bwendell/gemini-desktop/issues/158), [#176](https://github.com/bwendell/gemini-desktop/pull/176))\n- **Contributor guide** — add CONTRIBUTING.md with dev setup, test commands, and contribution expectations so new contributors don’t have to hunt for process details. ([#169](https://github.com/bwendell/gemini-desktop/issues/169), [#172](https://github.com/bwendell/gemini-desktop/pull/172))\n\n### v0.11.0 — Startup, Updates \u0026 Test Reliability\n\n- **Windows autostart option** — add a setting to launch Gemini Desktop at login, with an option to start minimized to the system tray. ([#159](https://github.com/bwendell/gemini-desktop/issues/159), [#181](https://github.com/bwendell/gemini-desktop/pull/181))\n- **Windows updater compatibility** — restore update checks for Windows x64 in v0.10.x and add legacy metadata aliases for safer client roll-forwards. ([#183](https://github.com/bwendell/gemini-desktop/pull/183), [#184](https://github.com/bwendell/gemini-desktop/pull/184))\n- **Test infrastructure hardening** — standardize WDIO config inheritance, remove flaky waits, and improve assertion/failure context helpers for more deterministic CI. ([#180](https://github.com/bwendell/gemini-desktop/pull/180), [#186](https://github.com/bwendell/gemini-desktop/pull/186), [#190](https://github.com/bwendell/gemini-desktop/pull/190), [#185](https://github.com/bwendell/gemini-desktop/pull/185))\n- **Quality and maintenance updates** — enforce lint checks in pre-commit hooks, remediate npm audit vulnerabilities, reduce E2E lint noise, and add docs updates/deprecations. ([#189](https://github.com/bwendell/gemini-desktop/pull/189), [#187](https://github.com/bwendell/gemini-desktop/pull/187), [#191](https://github.com/bwendell/gemini-desktop/pull/191), [#192](https://github.com/bwendell/gemini-desktop/pull/192))\n\n### Future Work\n\n- **Investigate AI Studio support** and feasibility for a better Gemini Live experience. ([#90](https://github.com/bwendell/gemini-desktop/issues/90))\n\n---\n\n\u003cdiv align=\"center\"\u003e\n\n![Gemini Desktop Main Window Interface](docs/assets/main_window.png)\n\n\u003c/div\u003e\n\n---\n\n## 🤝 Contributing\n\nContributions are welcome! Whether it's bug reports, feature requests, or code contributions.\n\n1. **Fork** the repository\n2. **Create** a feature branch (`git checkout -b feature/amazing-feature`)\n3. **Commit** your changes (`git commit -m 'Add amazing feature'`)\n4. **Push** to the branch (`git push origin feature/amazing-feature`)\n5. **Open** a Pull Request\n\nSee [CONTRIBUTING.md](docs/CONTRIBUTING.md) for detailed guidelines.\n\n### Reporting Issues\n\nFound a bug? [Open an issue](https://github.com/bwendell/gemini-desktop/issues/new) with:\n\n- Your OS and version\n- Steps to reproduce\n- Expected vs actual behavior\n\n---\n\n## 🛠️ Development\n\nBuilt with [Electron](https://www.electronjs.org/) + [React](https://react.dev) + [TypeScript](https://www.typescriptlang.org/) + [Vite](https://vitejs.dev/).\n\n### Prerequisites\n\n- Node.js 20+\n- npm 9+\n\n### Quick Start\n\n```bash\n# Clone the repository\ngit clone https://github.com/bwendell/gemini-desktop.git\ncd gemini-desktop\n\n# Install dependencies\nnpm install\n\n# Start development\nnpm run electron:dev\n\n# Build for production\nnpm run electron:build\n\n# Run tests\nnpm run test:all\n```\n\n### Project Structure\n\n```\ngemini-desktop/\n├── src/\n│   ├── main/      # Electron main process\n│   ├── renderer/  # React frontend\n│   └── shared/    # Shared types \u0026 constants\n├── tests/         # E2E and unit tests\n└── build/         # Build assets (icons, etc.)\n```\n\n---\n\n## 🧪 Automated Testing\n\nWe take stability seriously. Gemini Desktop is backed by a comprehensive automated testing suite ensuring that core features work reliably and regressions are caught early.\n\n### Our Strategy\n\n- **Unit Tests**: Verify individual components and logic in isolation.\n- **Integration Tests**: Ensure different parts of the system (Electron main process, renderer, localized APIs) work together smoothly.\n- **End-to-End (E2E) Tests**: Simulate real user interactions—clicking, typing, and navigating—to validate full application flows.\n\n### Running Tests\n\nIf you're contributing or just curious, you can run the full suite yourself:\n\n```bash\n# Run all tests (Unit, Integration, E2E)\nnpm run test:all\n\n# Run only E2E tests\nnpm run test:e2e\n```\n\nWe believe that a robust test suite is key to maintaining a high-quality experience.\n\n### 🧪 Wayland Support \u0026 Testing (Linux)\n\nGemini Desktop supports native global hotkeys on **KDE Wayland** via XDG Desktop Portals.\n\n- **Manual Testing**: See [Wayland Manual Testing Checklist](docs/WAYLAND_MANUAL_TESTING.md).\n- **Automated Testing**: Most Wayland tests are skipped in CI due to environment constraints. For local runs, follow the [Wayland Testing Runbook](docs/WAYLAND_TESTING_RUNBOOK.md).\n- **Debug Mode**: Run with `DEBUG_DBUS=1` to enable D-Bus signal tracking (see `docs/TEST_ONLY_SIGNAL_TRACKING.md`).\n\n---\n\n## ⭐ Star History\n\nIf you find this project useful, please consider giving it a star! ⭐\n\n\u003c!-- [INSERT STAR HISTORY CHART HERE - use https://star-history.com] --\u003e\n\n---\n\n## 💬 Community\n\n- 🐛 [Report a Bug](https://github.com/bwendell/gemini-desktop/issues/new?template=bug_report.md)\n- 💡 [Request a Feature](https://github.com/bwendell/gemini-desktop/issues/new?template=feature_request.md)\n- 💬 [Discussions](https://github.com/bwendell/gemini-desktop/discussions)\n\n---\n\n## 🙏 Acknowledgments\n\n- [Electron](https://www.electronjs.org/) - Cross-platform desktop framework\n- [React](https://react.dev/) - UI library\n- [Vite](https://vitejs.dev/) - Build tool\n- [Google Gemini](https://gemini.google.com/) - The AI we're wrapping\n\n---\n\n## ⚖️ Legal \u0026 Compliance\n\n\u003e [!IMPORTANT]\n\u003e **This is an unofficial, open-source project.** It is **NOT** affiliated with, endorsed by, or associated with Google LLC.\n\n### Trademark Notice\n\n- **Gemini** and **Google** are registered trademarks of Google LLC.\n- This software is a third-party client and is not a Google product.\n\n### What This App Does\n\nThis application is a specialized web browser that loads the official `https://gemini.google.com` website. It does not modify the Gemini service, intercept encrypted data, or bypass any authentication.\n\n### User Responsibility\n\nBy using this software, you agree to comply with:\n\n- [Google's Terms of Service](https://policies.google.com/terms)\n- [Generative AI Usage Policies](https://policies.google.com/terms/generative-ai)\n\n### Warranty Disclaimer\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED. See [LICENSE](LICENSE) for full terms.\n\n---\n\n## 📄 License\n\n[MIT](LICENSE) © [Ben Wendell](https://github.com/bwendell)\n\n---\n\n\u003cp align=\"center\"\u003e\n  Made with ❤️ by the community\n\u003c/p\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbwendell%2Fgemini-desktop","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbwendell%2Fgemini-desktop","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbwendell%2Fgemini-desktop/lists"}