^^ @@@@@@@@@
^^ ^^ @@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@ ^^
@@@@@@@@@@@@@@@@@@@@
~~~~ ~~ ~~~~~ ~~~~~~~~ ~~ &&&&&&&&&&&&&&&&&&&& ~~~~~~~ ~~~~~~~~~~~ ~~~
~ ~~ ~ ~ ~~~~~~~~~~~~~~~~~~~~ ~ ~~ ~~ ~
~ ~~ ~~ ~~ ~~ ~~~~~~~~~~~~~ ~~~~ ~ ~~~ ~ ~~~ ~ ~~
~ ~~ ~ ~ ~~~~~~ ~~ ~~~ ~~ ~ ~~ ~~ ~
~ ~ ~ ~ ~ ~~ ~~~~~~ ~ ~~ ~ ~~
~ ~ ~ ~ ~~ ~ ~
A blog on a Gemini capsule is called a gemlog. This guide covers why you'd want one, where to host it, how the community's conventions work, and the amount of interactivity the protocol allows.
Publishes to https://, gemini://, and gopher:// simultaneously. Simple web interface, $5 for lifetime access.
Public Unix servers with lots of features. Requires some knowledge of the terminal and ssh.
Gemini-only tilde; you get a capsule automatically with your account (you're reading this on it!)
Run `town request-gemini` to set up your capsule
Gives you a Gopherspace rather than a capsule
Gemini-specific hosting (manual approval required)
Gemini-specific publishing (manual approval required)
Free, instant access, easy web interface.
You can also host your own Gemini server on a VPS, there are plenty of resources on that, but it's outside the scope of this guide.
Less is more, here. All you need is a folder and some plain text files. A flat structure like so:
index.gmi # the file served at your base URL (like index.html)
about.gmi # who you are
now.gmi # what you're currently up to
hobbies.gmi # what you're interested in
links.gmi # interesting non-https links you've found
quotes.gmi # quotes you want to keep and share
gemroll.gmi # other people's capsules you want to share
gemlog/
index.gmi # the root file of the gemlog
2026-09-15-thoughts.gmi # a blog post
2026-09-01-update.gmi # another blog post
There's no official gemlog spec, but the community has settled on some norms:
# My Gemlog => /gemlog/2026-09-15-thoughts.gmi 2026-09-15: Some thoughts => /gemlog/2026-09-01-update.gmi 2026-09-01: An update
The YYYY-MM-DD date at the start of the link label lets Gemini clients and aggregators automatically detect and subscribe to new posts, no RSS required, though many gemlogs also publish an atom.xml for feed readers.
By convention, a post's first line is a # heading used as its title when aggregated elsewhere.
Most Gemini browsers also handle the older finger:// protocol. Add a finger link like any other:
=> finger://brennan@omg.lol Finger me for my current status => finger://example.com/kenny .plan file
There's a spec proposal for capsules to include a plain-text favicon.txt containing a single Unicode emoji.
The emoji favicon spec proposal
Good practice to include .well-known/security.txt, same as any website. Gemini also supports robots.txt, but since requests carry no user-agent string, the convention defines virtual user-agents by purpose:
User-agent: archiver Disallow: /private/ User-agent: indexer Disallow: /drafts/ User-agent: webproxy Disallow: / User-agent: * Disallow: /cgi-bin/
With only text to work with, ASCII art becomes your visual identity. There are text-to-ASCII generators, archives of existing art, and browser-based drawing tools. WikiHow even has a decent tutorial.
|
\ _ /
-= (_) =-
.\/. / \
.\\//o\\ ,\/. | ,~
//o\\|,\/. ,.,., ,\/. ,\//o\\ |\
| |//o\ /###/#\ //o\ /o\\| /| \
^^|^^|^~|^^^|' '|:|^^^|^^^^^|^^|^^^""""""""("~~~~~~~~/_|__\~~~~~~~~~~
.|'' . | '''""'"''. |`===`|'' '"" "" " (" ~~~~ ~ ~======~~ ~~ ~
jgs^^ ^^^ ^ ^^^ ^^^^ ^^^ ^^ ^^ "" """( " ~~~~~~ ~~~~~ ~~~ ~
Yes, Gemini has interactive sites! Gemini BBS, Station, and the Astrobotany plant game being the popular examples. They're built from a few small primitives:
gemcert, Solderpunk's client certificate tooling
No PHP or server-side JS, but old-school CGI works: your server runs a script and pipes its stdout to the client. The response is a status code and MIME type on the first line, a blank line, then the body:
#!/usr/bin/env python3
print("20 text/gemini")
print()
print("# Hello!")
print("Welcome to my little corner of Geminispace.")
Save it as hello.cgi, chmod +x it, and drop it in your server's cgi-bin. Servers like Jetforce pass request details via environment variables like QUERY_STRING and PATH_INFO is enough to build search boxes, guestbooks, and games.
Jetforce, the server behind Astrobotany
1. Install a Gemini browser like Lagrange for GUI, Amfora or Bombadillo for terminal.
2. Pick a host from the list above. Web interfaces (SmolPub, Gemcities) need no terminal skills, or tilde servers need ssh.
3. If you've never made an SSH key pair, GitHub's guide to generating one is a good walkthrough even for non-GitHub use.
4. Learn Gemtext, the spec is short, or use a Markdown-to-Gemtext converter.
5. If you're editing over ssh, Micro is a friendlier terminal editor than vim or nano, with mouse support, ctrl+s to save, ctrl+q to quit.
Gemtext specification
My Markdown-to-Gemtext converter
Micro editor
Learning the Shell
The Missing Semester of Your CS Education
Awesome Gemini (clients, servers, tools, everything)
Geminispace has nearly as many dead links as living ones, as there's real friction in adopting a different protocol. But that's also what makes it a peaceful, calm alternative to the modern Internet. It'll probably never "take off," and I'm fine with that.
My full original essay on Gemini blogging
Main Site
Gemini capsule
Contact
© 2026 Brennan Kenneth Brown. Content available under CC BY-SA