Skip to content

perf(core): fix slow boot by fetching experiments and quota asynchronously#25758

Open
spencer426 wants to merge 9 commits intomainfrom
slow-cli-boot
Open

perf(core): fix slow boot by fetching experiments and quota asynchronously#25758
spencer426 wants to merge 9 commits intomainfrom
slow-cli-boot

Conversation

@spencer426
Copy link
Copy Markdown
Contributor

Summary

This PR addresses the consistently high startup times of the Gemini CLI by refactoring the initialization sequence to perform network requests asynchronously.

Details

During initialization (refreshAuth), the CLI was synchronously awaiting this.experimentsPromise and quotaPromise. Because the internal proxy (gemini_api_proxy) takes ~1.42s to boot and fetch experiments, these sequential await calls were directly blocking the CLI startup, compounding latency and causing 8–10s boot times.

By removing the blocking await statements and chaining the dependent operations inside .then() and .catch(), these requests are now executed concurrently in the background. Tests in config.test.ts and trackerTools.test.ts were updated to ensure the CLI waits for the asynchronous state via config.initialize() appropriately.

Related Issues

Fixes #25757

How to Validate

  1. Run the CLI and verify the startup time is significantly reduced.
  2. Ensure the preflight script (npm run preflight) passes successfully.
  3. Validate that UI components dependent on experiments and quota resolve correctly once loaded in the background.

Pre-Merge Checklist

  • Updated relevant documentation and README (if needed)
  • Added/updated tests (if needed)
  • Noted breaking changes (if any)
  • Validated on required platforms/methods:
    • MacOS
      • npm run
      • npx
      • Docker
      • Podman
      • Seatbelt
    • Windows
      • npm run
      • npx
      • Docker
    • Linux
      • npm run
      • npx
      • Docker

@spencer426 spencer426 requested review from a team as code owners April 21, 2026 19:30
@gemini-code-assist
Copy link
Copy Markdown
Contributor

Summary of Changes

Hello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request dramatically improves the Gemini CLI's startup performance by converting critical network requests for experiments and user quota from synchronous blocking operations to asynchronous, non-blocking calls. This change addresses the root cause of high boot times, allowing the application to initialize more efficiently and responsively. The modifications ensure that the CLI can fetch necessary data in the background without delaying the user experience, while also updating dependencies and adapting tests to reflect the new asynchronous behavior.

Highlights

  • Asynchronous Initialization: Refactored the CLI initialization sequence to fetch experiments and user quota asynchronously, significantly reducing startup times by preventing synchronous blocking network requests.
  • Dependency Updates: Updated various nested dependencies in package-lock.json and removed glob and minimatch overrides from package.json, streamlining dependency resolution.
  • Test Adaptations: Updated existing tests to correctly handle the new asynchronous initialization flow, ensuring that dependent operations wait for the configuration to be fully loaded.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for GitHub and other Google products, sign up here.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request refactors the Config initialization to handle experiments, admin controls, and user quotas asynchronously. Feedback highlights that this change introduces a race condition and violates the repository's initialization guidelines. Furthermore, removing the glob version override in package.json is identified as a security regression, as it leads to the use of deprecated dependency versions with known vulnerabilities.

Comment thread packages/core/src/config/config.ts Outdated
Comment thread package.json
@gemini-cli gemini-cli Bot added area/core Issues related to User Interface, OS Support, Core Functionality 🔒 maintainer only ⛔ Do not contribute. Internal roadmap item. labels Apr 21, 2026
@spencer426 spencer426 closed this Apr 21, 2026
@spencer426 spencer426 reopened this Apr 21, 2026
@github-actions
Copy link
Copy Markdown

github-actions Bot commented Apr 21, 2026

Size Change: +114 B (0%)

Total Size: 33.7 MB

Filename Size Change
./bundle/chunk-47IBHWBB.js 0 B -14.6 MB (removed) 🏆
./bundle/chunk-AVLKHPC5.js 0 B -669 kB (removed) 🏆
./bundle/chunk-GEHXKXQJ.js 0 B -3.43 kB (removed) 🏆
./bundle/chunk-UZ5TYF7Z.js 0 B -2.73 MB (removed) 🏆
./bundle/chunk-VSIOCFQH.js 0 B -3.8 kB (removed) 🏆
./bundle/chunk-ZZQWEWOR.js 0 B -49.2 kB (removed) 🏆
./bundle/core-DF3YXFQ2.js 0 B -47.4 kB (removed) 🏆
./bundle/devtoolsService-EZXYI5WH.js 0 B -27.8 kB (removed) 🏆
./bundle/gemini-XL3WLALG.js 0 B -578 kB (removed) 🏆
./bundle/interactiveCli-BNUZ2WFS.js 0 B -1.29 MB (removed) 🏆
./bundle/liteRtServerManager-YEOWMMKG.js 0 B -2.08 kB (removed) 🏆
./bundle/oauth2-provider-SXZTOYIT.js 0 B -9.16 kB (removed) 🏆
./bundle/chunk-DQBRTN5B.js 49.2 kB +49.2 kB (new file) 🆕
./bundle/chunk-F2NMDX3Y.js 2.73 MB +2.73 MB (new file) 🆕
./bundle/chunk-GP62A3TM.js 14.6 MB +14.6 MB (new file) 🆕
./bundle/chunk-J5WCKM43.js 3.43 kB +3.43 kB (new file) 🆕
./bundle/chunk-LKLQ4XWL.js 3.8 kB +3.8 kB (new file) 🆕
./bundle/chunk-MHVPU3ZZ.js 669 kB +669 kB (new file) 🆕
./bundle/core-PJESBKZH.js 47.4 kB +47.4 kB (new file) 🆕
./bundle/devtoolsService-U2FH2HIK.js 27.8 kB +27.8 kB (new file) 🆕
./bundle/gemini-I7CD5VM2.js 578 kB +578 kB (new file) 🆕
./bundle/interactiveCli-NBTFWLEF.js 1.29 MB +1.29 MB (new file) 🆕
./bundle/liteRtServerManager-DO2UGVDL.js 2.08 kB +2.08 kB (new file) 🆕
./bundle/oauth2-provider-SBQC6R7N.js 9.16 kB +9.16 kB (new file) 🆕
ℹ️ View Unchanged
Filename Size Change
./bundle/bundled/third_party/index.js 8 MB 0 B
./bundle/chunk-34MYV7JD.js 2.45 kB 0 B
./bundle/chunk-5AUYMPVF.js 858 B 0 B
./bundle/chunk-5PS3AYFU.js 1.18 kB 0 B
./bundle/chunk-664ZODQF.js 124 kB 0 B
./bundle/chunk-DAHVX5MI.js 206 kB 0 B
./bundle/chunk-IUUIT4SU.js 56.5 kB 0 B
./bundle/chunk-RJTRUG2J.js 39.8 kB 0 B
./bundle/chunk-UHHRGNIO.js 1.97 MB 0 B
./bundle/cleanup-EMA3ZJSE.js 0 B -932 B (removed) 🏆
./bundle/devtools-36NN55EP.js 696 kB 0 B
./bundle/dist-T73EYRDX.js 356 B 0 B
./bundle/events-XB7DADIJ.js 418 B 0 B
./bundle/examples/hooks/scripts/on-start.js 188 B 0 B
./bundle/examples/mcp-server/example.js 1.43 kB 0 B
./bundle/gemini.js 4.97 kB 0 B
./bundle/getMachineId-bsd-TXG52NKR.js 1.55 kB 0 B
./bundle/getMachineId-darwin-7OE4DDZ6.js 1.55 kB 0 B
./bundle/getMachineId-linux-SHIFKOOX.js 1.34 kB 0 B
./bundle/getMachineId-unsupported-5U5DOEYY.js 1.06 kB 0 B
./bundle/getMachineId-win-6KLLGOI4.js 1.72 kB 0 B
./bundle/memoryDiscovery-CZURD35O.js 980 B 0 B
./bundle/multipart-parser-KPBZEGQU.js 11.7 kB 0 B
./bundle/node_modules/@google/gemini-cli-devtools/dist/client/main.js 222 kB 0 B
./bundle/node_modules/@google/gemini-cli-devtools/dist/src/_client-assets.js 229 kB 0 B
./bundle/node_modules/@google/gemini-cli-devtools/dist/src/index.js 13.4 kB 0 B
./bundle/node_modules/@google/gemini-cli-devtools/dist/src/types.js 132 B 0 B
./bundle/sandbox-macos-permissive-open.sb 890 B 0 B
./bundle/sandbox-macos-permissive-proxied.sb 1.31 kB 0 B
./bundle/sandbox-macos-restrictive-open.sb 3.36 kB 0 B
./bundle/sandbox-macos-restrictive-proxied.sb 3.56 kB 0 B
./bundle/sandbox-macos-strict-open.sb 4.82 kB 0 B
./bundle/sandbox-macos-strict-proxied.sb 5.02 kB 0 B
./bundle/src-QVCVGIUX.js 47 kB 0 B
./bundle/start-TYOHETGR.js 0 B -622 B (removed) 🏆
./bundle/tree-sitter-7U6MW5PS.js 274 kB 0 B
./bundle/tree-sitter-bash-34ZGLXVX.js 1.84 MB 0 B
./bundle/cleanup-JSDEJMV2.js 932 B +932 B (new file) 🆕
./bundle/start-OEULVWHY.js 622 B +622 B (new file) 🆕

compressed-size-action

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area/core Issues related to User Interface, OS Support, Core Functionality 🔒 maintainer only ⛔ Do not contribute. Internal roadmap item.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Gemini CLI Slow Boot Times (up to 9.77s)

1 participant