Skip to content


Switch branches/tags

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time



Gesha is an app for your modded espresso machine. It integrates with a MAX31855 and a relay to control brew temperature, and lets you track variables like dose, grind, ratio, etc. to make perfecting your espresso easier.

Gesha in light and dark modes


  • Finely control brew temperature with PID control
  • Easily override the PID by sliding all the way to the bottom (off) or the top (on)
  • Keep a history of past shots to help you dial in
  • Nothing to install or configure with a zero dependency binary
  • Configurable with a simple YAML file, or through the app's settings screen.
  • Written Go and TypeScript for a fast and finely tuned experience


  1. Download the latest release for your architecture
  2. Move the download to your desired server and run sudo ./gesha install
  3. Use sudo systemctl enable gesha to make sure Gesha runs on boot
  4. sudo systemctl daemon-reload sudo systemctl start gesha

The install command will copy the binary into /usr/local/, install a systemd unit, and a default configuration file.

If you do not have a distribution that uses systemd, you can run gesha directly with ./gesha start.

Developing the UI

The UI is written in HTML, CSS, and TypeScript. It doesn't use a web framework and relies on modern CSS and JS APIs.

Browser support

  • Safari latest
  • FireFox latest
  • Chrome latest


I wanted to try something new with the development toolchain, inspired by Snowpack.

The development environment does not require Node.js or NPM to be installed, instead the UI is compiled with Hammer, an extremely simple HTTP server / compiler combo that uses esbuild.

Install hammer with go get

To start developing, run make dev and load up localhost:4321.

The app should load instantly. As you edit, reload the browser to update.

Supporting documents & prior works