Gemalaya is a keyboard-driven Gemini browser written in QML (with PySide6).

Screenshots | Issues | Contact | Donate (ko-fi) | Donate (liberapay)


Download Gemalaya's latest AppImage (x86_64)

Be sure to have all the xcb libraries installed on your system before running the AppImage (run with QT_DEBUG_PLUGINS=1 if you get an error about the xcb plugin failing to load)

The AppImage will download updates automatically, you only need to download the AppImage once.


Text-to-speech demo

Screenshots gallery.


Gemalaya doesn't use a tab bar, there's just a stack layout with gemspaces in it, you'll see the gemspace index on the top-left corner. The browser will automatically generate a certificate, if you want to use an already generated certificate, copy it as $HOME/.config/gemalaya/client.{crt,key}.

To change the keyboard shortcuts, press F12 to open the configuration settings dialog.

Each link in a gemini page is assigned a number. To follow a link, just type in the number of the link on the keyboard. The link is opened after a certain timeout (you can change the timeout in the settings).

Gemalaya supports the automatic proxying of web (http/https) content by running an instance of levior. When levior is running, regular web pages can be accessed and rendered as gemtext transparently. The proxy can be disabled in the config or by passing --no-proxy when running the app.

Address bar

Search macros

In the address bar you can also use certain keywords that will be translated to a gemini URL. Here are the default keywords:


gemalaya can do text-to-speech conversion on the text contained in the Gemini pages that you browse.

To enable the text-to-speech feature, press F12, go to UI settings and check Enable text-to-speech conversion. There are 3 TTS engines supported:

If the Automatically play audio after conversion setting is enabled, when you change the focus to a text item in the page, the TTS audio file will be played automatically without requiring any user intervention. If it's not enabled, all you need to do to play the audio is to press Space or r (for read). See the TTS player shortcuts section below for a list of all the supported keyboard shortcuts by the TTS player.

Links layout

You can choose between 2 different layout modes for links:

There are a few config settings for links groups:

Keyboard shortcuts

When you access a new page (or switch between gemspaces), the top element in the page will get the focus.

These shortcuts allow you to change the currently focused item in the page. They cannot be changed (see QML's KeyNavigation docs). Pressing Tab or Shift+Tab from a links grid will cycle between the links in the grid.

Main shortcuts

Address bar shortcuts

Text Item shortcuts

These are keyboards shortcuts specific to text items, and will only work when some text is being focused. Enable text translation first in the settings if you want to use any of the text translation shortcuts.

TTS player shortcuts

These are keyboards shortcuts specific to the text-to-speech audio player

These are keyboards shortcuts specific to links, and will only work when a link is being focused.

Scrolling the page

Press the Up, PageUp, or Down, PageDown keys to scroll the page up or down. Holding the Control and/or Shift keys while doing so will amplify the scrolling/flicking speed (the fastest being when you hold both Control and Shift).

To go to the top of the page, press the Home key. To go to the bottom of the page, press the End key.

Default locations

The main config file is stored in the following file:


The default downloads directory is:


gemalaya uses a client library called ignition, which stores the known gemini certificate fingerprints ("known hosts") in the following file:


Delete the known hosts file if a gemini capsule has changed its certificate after you've visited it and you see a "Untrusted certificate" message !


You can write your own theme, it should be a YAML file with the following path (on Linux), theme_name being the name of your theme. Look in the gemalaya/themes directory for an example.


Then set the ui.theme config setting in the main config file which is stored in:


Project links