Wiki server and protocol for Gemini
49c22e5a — Frederick Yin 3 years ago
Update test suite
e670aa43 — Frederick Yin 3 years ago
Absolute path at /var/sophon
fa42aef9 — Frederick Yin 3 years ago
Trim ".gmi" from page list


browse  log 



You can also use your local clone with git send-email.

#Sophon - a Wiki server for Gemini

Sophon is under development. Heavy development. Needs contributors. Thank you.

#Dev environment

  • A recent version of Go
  • Install dependency: go get -u github.com/sergi/go-diff/tree/master/diffmatchpatch
  • Clone and change into this repo
  • server/ emulates what you would deploy on a server
  • Generate a TLS certificate using e.g. gemcert and save as server/cert/cert.pem and server/cert/key.pem
  • go build -o server/sophon
  • cd server
  • ./sophon
  • Bear in mind that ./server/sophon will NOT work because of relative paths


See the last paragraph of Wikipedia: The Three-Body Problem (novel) Ā§Plot


All files under this directory are RFC's. They are by no means authoritative nor final, but instead guide Sophon's development at present and that of its compliant clients.

If you have a proposal for the project, especially the wiki protocol, please consider informing me by means of the mailing list, either in an informal heads-up or, if you prefer, in an RFC just like those in docs/ as a patch. Clarity should be the top priority when authoring an RFC; language polishedness comes (at least) second. Use accurate terms as decribed in existent RFC's whenever possible, and invent new terms with scrutiny.


Sophon would be impossible without the efforts of authors and contributors of the following projects:


Twinwiki is the very project that inspired me to create Sophon. To be completely honest, I would have based Sophon on it had Rust not been beyond me. Unlike Twinwiki, which only allows users to edit pages on a per-page basis by means of sed commands, Sophon principally employs a character-level diff algorithm (see below).

#diff-match-patch and go-diff

diff-match-patch is a collection of plaintext diff algorithms. Sophon makes use of its Python 3 version in the tests, and more importantly uses an unofficial port, go-diff, in the Go code, to generate and parse Unidiff.

#Molly Brown

Molly Brown is a versatile server implemented in Go. I extracted some code from it for Gemini request a.k.a. glorified TCP packets handling in Sophon.