browser for the small internet
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.
Omar Polo d7905c759a fix git url prodded by freezr 4 weeks ago
compat readd rcs id to ease trackability 5 months ago
contrib fringes already have a prefix of "~" 7 months ago
data update emoji-data.txt to 14.0.0 6 months ago
extra rename images -> extra 6 months ago
include garbage collect even more IMSG types 3 months ago
pages fix build out-of-tree 6 months ago
parser fix possible NULL deref on gophermap' serialize_link 3 months ago
phos correctly serialize file: URIs 1 year ago
site fix git url prodded by freezr 4 weeks ago
test add a simple test for the text/gemini parser too 3 months ago
u typo 3 months ago
.gitignore update ignore pattern for built-in pages "templates" 3 months ago
ChangeLog changes for 0.8.1 3 months ago
LICENSE add LICENSE file 1 year ago fix build out-of-tree 6 months ago minor tweaks 3 months ago add bunch of compats for compatibility 1 year ago
cmd.c replace has_prefix with strncmp 4 months ago
compl.c add compl_lu completion function for load-url and load-current-url 6 months ago start a new release cycle 3 months ago
control.c work around macos lack of SOCK_CLOEXEC / SOCK_NONBLOCK 3 months ago
defaults.c replace has_prefix with strncmp 4 months ago
downloads.c garbage collect `dequeue_first_download' 3 months ago
fs.c move load session stuff to session.c 4 months ago
gencmd.awk add descr. to completions ; filter by descr. too 1 year ago
help.c replace TAILQ_EMPTY/INSERT_HEAD/TAIL dance with a single TAILQ_INSERT_TAIL 1 year ago
hist.c unroll recursion 7 months ago
keymap.c add forgotten include for string.h 4 months ago
mcache.c partial revert of "abstract over evbuffers" 4 months ago
mime.c replace has_prefix with strncmp 4 months ago
minibuffer.c reset all the state functions regardless of MB_READ vs. MB_COMPLREAD 3 months ago
net.c s/IMSG_GET_RAW/IMSG_GET and gc unused IMSG_GET_FILE 3 months ago
pagebundler.c prettify pagebundler output 6 months ago
parse.y replace has_prefix with strncmp 4 months ago
sandbox.c don't include linux/prctl.h 3 months ago
session.c don't allow the history to grow too much + save_session refactoring 3 months ago
telescope.1 add mini-kill-whole-line 4 months ago
telescope.c s/IMSG_GET_RAW/IMSG_GET and gc unused IMSG_GET_FILE 3 months ago
tofu.c merge update_cert and tofu_update into tofu_update_persist 4 months ago
ui.c rate-limit the update of the download pane 3 months ago
utils.c work around macos lack of SOCK_CLOEXEC / SOCK_NONBLOCK 3 months ago


Telescope is a Emacs/w3m-inspired browser for the "small internet" that supports Gemini, Gopher and Finger.


  • tabs
  • bookmarks
  • privsep
  • minibuffer live narrowing
  • multiple protocols support
  • fully customizable

There are still various things missing or, if you prefer, various things that you can help develop :)

  • subscriptions
  • tofu oob verification
  • client certificates
  • add other GUIs: at the moment it uses only ncurses, but telescope shouldn't be restricted to TTYs only!


Why yet another browser?

One of the great virtues of Gemini is its simplicity. It means that writing browsers or server is easy and thus a plethora of those exists. I myself routinely switch between a couple of them, depending on my mood.

More browsers brings more stability as it became more difficult to change the protocol, too.

However, Telescope was ultimately written for fun, on a whim, just to play with ncurses, libtls, libevent and the macros from sys/queue.h, but I'd like to finish it into a complete Gemini browser.


  • Fun: hacking on Telescope should be fun.
  • Clean: write readable and clean code mostly following the style(9) guideline. Don't become a kitchen sink.
  • Secure: write secure code with privilege separation to mitigate the security risks of possible bugs.
  • Fast: it features a modern, fast, event-based asynchronous I/O model.
  • Cooperation: re-use existing conventions to allow inter-operations and easy migrations from/to other clients.


Telescope aims to use the "Trust, but Verify (where appropriate)" approach outlined here: gemini://

The idea is to define three level of verification for a certificate:

  • untrusted: the server fingerprint does NOT match the stored value
  • trusted: the server fingerprint matches the stored one
  • verified: the fingerprint matches and has been verified out-of-band by the client.

Most of the time, the trusted level is enough, but where is appropriate users should be able to verify out-of-band the certificate.

At the moment there is no UI for oob-verification though.


Telescope depends on ncursesw, libtls (from either LibreSSL or libretls), libevent (either v1 or v2) and pkg-config. When building from a git checkout, yacc (or bison) is also needed.

To build from a release tarball just execute:

$ ./configure
$ make
$ sudo make install

The configure script has optional support for building with libraries provided by your distribution instead of using the bundled versions:

If you want to build from the git checkout, something that's discouraged for users that don't intend to hack on telescope

$ ./
$ ./configure
$ make
$ sudo make install	# eventually

Please keep in mind that the main branch, from time to time, may be accidentally broken on some platforms. Telescope is developed primarily on OpenBSD/amd64 and commits on the main branch don't get always tested in other OSes. Before tagging a release however, a comprehensive testing on various platforms is done to ensure everything is working as intended.


Any form of contribution is appreciated, not only patches or bug reports: feel free to open an issue or send an email to

If you have a sample configuration, custom theme, a script or anything that could be helpful to others, consider adding it to the contrib directory.

User files

Telescope stores user files according to the XDG Base Directory Specification by default. The usage and contents of these files are described in the man page, under "FILES".

Only one instance of Telescope can be running at time per user.


Telescope is distributed under a BSD-style licence. The main code is under the ISC but for files under compat/ it varies.

data/emoji.txt is copyright © 1991-2021 Unicode, Inc. and distributed under the UNICODE, Inc license agreement.