In late March 2024, the official Gemini specification was refactored into two separate documents, one which addresses only the network protocol and one which addresses only the markup format. Both specifications are intended to be more formal and less ambiguous than the combined document which historical served as a "speculative specification".
Gemini network protocol specification
Gemini hypertext format ("gemtext") specification
The old speculative specification, which used to live at the URL you're at right now, will evolve instead into a "technical overview". It's more detailed than the Project Gemini FAQ, and is aimed at geeks, not a general audience, but it stops short of covering every corner case and defining things in down-to-the-byte detail, for which you should see the appropriate specification above. The overview serves as a good and highly readable introduction to the technologies behind Gemini. You can probably still use it to write a client which works well enough, often enough to be genuinely useful.
Project Gemini technical overview
If you've arrived at this page by following a link or a bookmark, please consider updating it, or asking for it to be updated, to point to the technical overview if you think that's more appropriate for the intended audience than this explanatory page.