Google's context window has held at ~1M since December 2024

How did Gemini get to a million tokens?

Google has the longest run of records here, and the most jumps: the context window changed six times between 2022 and 2026. But the interesting part is not the climb.

Since Gemini 2.0 Flash in December 2024, the value has sat at 1,048,576 tokens — 2²⁰, a round number in binary rather than decimal — and has not moved since. Gemini 2.5 Pro matched it in March 2025. Everything shipped after has held the same level. That is twenty months of stability in the specification most often used to advertise progress.

What this post deliberately does not do is quote a growth multiple. An earlier draft opened with "512×", computed from PaLM's 2,048 tokens in 2022. That figure is in the dataset but is not traced to any primary source, so the multiple built on it would have been a confident number resting on an unchecked one. Four values in the table below have the same problem and are marked ⚠︎.

The three change points this post does rest on — Gemini 1.0 Ultra, Gemini 2.0 Flash and Gemini 2.5 Pro — each link to Google's own announcement.

DateModelContext windowChange
2022-04-04PaLM2,048first recorded
2023-05-10PaLM 2—_not researched_
2023-12-06Gemini 1.0 Ultra32,76816×
2023-12-06Gemini 1.0 Pro32,768—
2023-12-06Gemini 1.0 Nano32,768—
2024-02-15Gemini 1.5 Pro2,097,15264×
2024-02-21Gemma8,1920.0×
2024-12-11Gemini 2.0 Flash1,048,576128×
2025-03-12Gemma 3131,0720.1×
2025-03-25Gemini 2.5 Pro1,048,5768×
2025-11-18Gemini 3 Pro1,048,576—
2026-05-07Gemini 3.1 Flash-Lite ⚠︎1,048,576—
2026-05-19Gemini 3.5 Flash1,048,576—
2026-06-03Gemma 4 12B—_not researched_
2026-07-21Gemini 3.6 Flash1,048,576—
2026-07-21Gemini 3.5 Flash-Lite ⚠︎1,048,576—
2026-08-13Gemini 3.7 Flash1,048,576—
2026-09-02Gemini 3.8 Flash ⚠︎1,048,576—
2026-09-02Gemini 3.8 Flash Cyber ⚠︎1,048,576—
2026-09-30Gemini 4 Argon—_not researched_
2026-10-06EmbeddingGemma 2—_not researched_

Every change, and the document behind it

What this does not claim

More questions →
How a value gets to "verified" →