A (work-in-progress) Gemini client written in C with SDL2 and the stb libraries, for Linux and MS Windows.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Jens Pitkänen 33a5fa2d83 Add smooth scrolling 2 months ago
src Add smooth scrolling 2 months ago
.gitignore Fix windows builds, fix some variable names 2 months ago
LICENSE.md Add basic gemini protocol and ssl handling, getaddrinfo is still wip 2 months ago
Makefile.in Fix windows builds, fix some variable names 2 months ago
README.md Add readme note about tcc 2 months ago
configure Add off-main-thread page loading 2 months ago
configure.bat Add off-main-thread page loading 2 months ago


Neon's Gemini Client

A Gemini client written in C with SDL 2 and the stb libraries, for Linux and MS Windows, as well as presumably everything else¹.

If you think this project sounds interesting, you should check out Lagrange as well. It's a very similar client, built in C with SDL, and has support for Gopher!

¹ Namely, operating systems with an SDL 2.0 port. Check out the list here.

Security considerations

stb_truetype.h is used for text rendering. As it mentions in a comment at the start, it doesn't check offsets found in the font files it reads, which could lead to this program reading arbitrary memory. TODO: Provide a way to set the default font.

As a general consideration, you should probably avoid handling sensitive data with this application: while it is written with care, it is also the first relatively complicated C program I've ever written, so there probably are vulnerabilities all over the place.


All the build files are hand-written and very short, so feel free to study them if you come across issues.

Linux, probably other POSIX systems


Then run:


The executable will be built into the build-linux-<arch> directory.

Example package configurations

Feel free to send patches containing setups for your favorite distro, so others can benefit from your working setup.

  • Arch Linux:
    • core/gcc (build dependency)
    • core/make (build dependency)
    • extra/sdl2
    • core/openssl
    • core/glibc

TCC notes

Nemini can be built with tcc! With slight tweaks. Add -DSDL_DISABLE_IMMINTRIN_H to the CFLAGS variable in your Makefile, and change -pthreads in the LIBS variable to -lpthreads. To use tcc as your compiler, just set the CC environment variable, as you'd assume: CC=tcc make.



  • MSVC
    • Specifically, you need nmake.exe, cl.exe, and CMake. Install the following from Visual Studio Installer:
    • The newest package named: MSVC ... build tools ...
    • C++ CMake Tools for Windows (Needed to build LibreSSL below)
  • SDL2
    • Download the Visual C++ development libraries, and extract the lib and include directories next to this repo's src directory.
  • LibreSSL
    • The newest windows binaries released for LibreSSL (2.2.5, as I'm writing this) are too old to support the TOFU verification this program has, so you'll need to build LibreSSL yourself. Thankfully, it's pretty easy.

    • Download the newest tarball (libressl-x.x.x.tar.gz) from e.g. OpenBSD's ftp server, extract it somewhere, then build it in the Developer Command Prompt:

      mkdir build-nmake
      cd build-nmake
      cmake -G "NMake Makefiles" -DBUILD_SHARED_LIBS=ON ..
    • Copy crypto-<number>.dll and crypto-<number>.lib from the build-nmake\crypto\ directory into the lib\x86\ directory where the SDL files are.

    • Copy ssl-<number>.dll and ssl-<number>.lib from the build-nmake\ssl\ directory into the lib\x86\ directory where the SDL files are.

    • Finally, copy the include directory from the libressl root directory (same dir as build-nmake) to this directory, similar to the SDL include directory.

Open a Developer Command Prompt (x86) and run:


The configure.bat script should tell you if you're missing any of the prerequisites. If you want to build a 64-bit client, you need to edit every mention of x86 to x64 in configure.bat, and then build in a 64-bit Developer Command Prompt.

The executable will be built and the SDL2.dll (from the SDL2 prerequisite step) will be copied into the build-windows-x86 directory.

Other operating systems

This program is (hopefully) written to be portable, and it uses SDL2 in a very straightforward way. Software rendering is supported. For OS-specific instructions, see the SDL wiki's installation instructions.


This program is distributed under the terms of the GNU GPL 3.0 (or later) license.