{"id":13769751,"url":"https://github.com/dimkr/gplaces","last_synced_at":"2026-01-14T11:14:36.910Z","repository":{"id":37538168,"uuid":"479405442","full_name":"dimkr/gplaces","owner":"dimkr","description":"A simple terminal based Gemini client","archived":false,"fork":true,"pushed_at":"2025-10-04T12:02:18.000Z","size":547,"stargazers_count":38,"open_issues_count":1,"forks_count":2,"subscribers_count":2,"default_branch":"gemini","last_synced_at":"2025-10-04T12:20:13.520Z","etag":null,"topics":["client-certificate","gemini","gemini-client","gemini-protocol","shell","small-web","tofu"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"kieselsteini/delve","license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dimkr.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-04-08T13:40:32.000Z","updated_at":"2025-10-04T12:01:44.000Z","dependencies_parsed_at":"2023-01-29T17:30:52.449Z","dependency_job_id":null,"html_url":"https://github.com/dimkr/gplaces","commit_stats":null,"previous_names":[],"tags_count":36,"template":false,"template_full_name":null,"purl":"pkg:github/dimkr/gplaces","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dimkr%2Fgplaces","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dimkr%2Fgplaces/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dimkr%2Fgplaces/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dimkr%2Fgplaces/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dimkr","download_url":"https://codeload.github.com/dimkr/gplaces/tar.gz/refs/heads/gemini","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dimkr%2Fgplaces/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28418044,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T10:47:48.104Z","status":"ssl_error","status_checked_at":"2026-01-14T10:46:19.031Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["client-certificate","gemini","gemini-client","gemini-protocol","shell","small-web","tofu"],"created_at":"2024-08-03T17:00:31.215Z","updated_at":"2026-01-14T11:14:36.905Z","avatar_url":"https://github.com/dimkr.png","language":"C","funding_links":[],"categories":["Clients","\u003ca name=\"browser\"\u003e\u003c/a\u003eWeb browser"],"sub_categories":["Terminal"],"readme":"# gplaces - a simple terminal Gemini client\n\nBecause Gemini deserves a light client with a high power to weight ratio!\n\ngplaces is named after Going Places, the 1965 album by Herb Alpert and The Tijuana Brass. The \"o\" is omitted from the executable name so it doesn't mess up tab completion for Gopher users and Go developers.\n\n=\u003e https://en.wikipedia.org/wiki/Going_Places_(Herb_Alpert_and_the_Tijuana_Brass_album) Going Places\n\nThe gplaces logo is an artist's impression of a Gemini VII capsule with the red accents of a Humes and Berg Stonelined straight trumpet mute. Sort of.\n\n=\u003e https://humesandberg.com Humes and Berg\n\ngplaces is originally a Gemini port of the delve Gopher client by Sebastian Steinhauer.\n\n=\u003e https://github.com/kieselsteini/delve delve\n\n## Features\n\n* SSH-style TOFU with $XDG_DATA_HOME/gplaces_hosts or ~/.gplaces_hosts\n* client certificates support via $XDG_DATA_HOME/gplaces_$host_$port_$path.{crt,key} or ~/.gplaces_$host_$port_$path.{crt,key}\n* subscriptions\n* permanent redirects with $XDG_DATA_HOME/gplaces_redirects or ~/.gplaces_redirects\n* support for non-interactive operation\n* single configuration file: $XDG_DATA_HOME/gplacesrc, ~/.gplacesrc or /etc/gplacesrc\n* configurable MIME type handlers, with support for streaming to stdin\n* \"powerful\" shell with tab completion, hints and aliases\n* VT100 compatible with ANSI escape sequences and NO_COLOR support\n* sh-style history with $XDG_DATA_HOME/gplaces_history or ~/.gplaces_history\n* UTF-8 word wrapping\n* configurable external pager\n* optional Titan support\n* optional Gopher support\n* optional gophers:// (Gopher+TLS+TOFU) support\n* optional Spartan support\n* optional Finger support\n* optional Guppy support\n* optional support for http{,s}:// proxies\n* small, hackable codebase\n* no exotic external dependencies, no NIH: bestline, openssl or libressl, libcurl, libidn2 or libidn (optional) and libmagic (optional)\n* ~100K executable when built with -O3 and -Wl,-s on x86_64\n\n## How to install?\n\n* Using Flatpak: `flatpak install com.github.dimkr.gplaces`\n* compile yourself\n\n=\u003e https://flathub.org/apps/details/com.github.dimkr.gplaces gplaces on Flathub\n\n## How to compile?\n\n* clone this repo: `git clone --recursive https://github.com/dimkr/gplaces`\n* type `cd gplaces`\n* type `make PREFIX=/usr CONFDIR=/etc`, or `make WITH_HTTP_PROXY=0 WITH_TITAN=0 WITH_GOPHER=0 WITH_GOPHERS=0 WITH_SPARTAN=0 WITH_FINGER=0 WITH_GUPPY=0 WITH_LIBIDN2=0 WITH_LIBIDN=0 WITH_LIBMAGIC=0` to disable all optional dependencies and features\n* type `make install` to install it on the system (defaults to /usr/local)\n\n## How to use?\n\n```\n    \u003e gemini.circumlunar.space\n```\n\nto show a Gemini page, type its URL, press `ENTER` and gplaces will stream the page contents to the terminal.\n\nto abort the download, press `CTRL+c`.\n\nwhen the download is finished, gplaces will display the downloaded page using less(1), the same tool man(1) uses to display man pages.\n\n```\n    `less -r` has exited with exit status 0\n    gemini.circumlunar.space/\u003e \n```\n\nuse the arrow keys to scroll, `/` to search and `q` to exit less and return to the gplaces prompt.\n\n```\n    (reverse-i-search `g') gemini.circumlunar.space\n```\n\nin addition, gplaces adds the page URL to the history: use the `Up` and `Down` keys to navigate through the history, or `CTRL+r` to search through it. these are only three examples of key bindings from shells like bash(1) which work in gplaces, too: see bestline/README.md for a list of navigation and editing shortcuts.\n\n```\n    cached 2023-04-29 19:41:44\n    gemini.circumlunar.space/\u003e \n```\n\nif you visit the same page again, gplaces will return a cached copy and show the time the page was fetched. gplaces remembers up to `histsize` pages, so you can return to previously viewed pages immediately, without downloading them again. type `get` and press `ENTER` to force gplaces to fetch a cached page again.\n\n```\n    \u003e gemini://konpeito.media/konpeito-09-a.mp3\n```\n\ngplaces displays only Gemtext, gophermaps or plain text files: it downloads other kinds of files (like images, audio and video) to temporary files and runs external \"handler\" programs (one for each file type) defined in the gplaces configuration file.\n\n```\n    \u003e save gemini.circumlunar.space/docs/specification.gmi\n    enter filename: /home/user/Downloads/specification.gmi\n```\n\nto download a file instead of displaying it or saving it to a temporary file, type `save`, followed by its URL, then press `ENTER`.\n\n```\n    \u003e save gemini.circumlunar.space/docs/specification.gmi /tmp/spec.gmi\n```\n\nyou can also specify the destination path and skip the prompt.\n\n```\n    \u003e save gemini://konpeito.media/konpeito-09-a.mp3 -\n```\n \nalternatively, to stream a file into standard input of the handler program without saving to a file on disk and waiting for the download to complete, use `-` as the download destination. this is useful for audio or video streaming, and works only with some programs and some file formats.\n \n```\n    gemini.circumlunar.space/\u003e 2 docs/\n```\n\ngplaces associates a number with each link in the last viewed page. type the number of a link to show its URL, then press `ENTER` to follow it.\n\nto edit the URL of a link, type the link number, press `Tab`, edit the URL and press `ENTER`. for example, this is useful if a link leads to a post in another gemlog, but you want to see its homepage.\n\n```\n    gemini.circumlunar.space/\u003e #gemini://gemini.circumlunar.space/docs/\n    gemini.circumlunar.space/\u003e \n```\n\nthe history can be used as a reading list: prefix a URL with `#` and press `ENTER` to add it to the history without opening it first. for example, to add the URL of link 2 to the history, type `2`, press `Tab` to edit the URL, press `CTRL+a` or `Home` to go to the beginning of the line, type `#` and press `ENTER`. to open this URL later, press the `Up` key, press `CTRL+a` or `Home`, press `Delete` to remove the leading `#`, then press `ENTER`.\n\n```\n    gemini.circumlunar.space/docs/\u003e save 2\n    enter filename (press ENTER for `/home/user/Downloads/specification.gmi`):\n```\n\nthis number can be used to download the link, too.\n\n```\n    gemini.circumlunar.space/docs/\u003e search\n    Search query\u003e gplaces\n```\n\nthe gplaces configuration file allows you to define short aliases for URLs you visit often. for example, the default configuration file defines the `home` alias for the Gemini project homepage and the `search` alias for a Gemini search engine. type `search` and press `ENTER` to search geminispace.\n\n```\n    \u003e geminispace.info/search gplaces\n    \u003e search gplaces\n    \u003e search \"gemini client\"\n```\n\nif a URL accepts input, you can specify the input in a second argument, to avoid another request to the same URL and skip the prompt. this works with aliases, too.\n\nto show a feed of new posts, type `sub`, then press `ENTER`. the list of URLs gplaces is \"subscribed\" to is defined in the configuration file.\n\nto exit gplaces, press `CTRL+d`.\n\nadditional documentation and more details are available in `man gplaces`. type `help` and press `ENTER` to see short descriptions of available commands.\n\n## How to configure?\n\nif installed through Flatpak, copy the read-only configuration file to your home directory so you can edit:\n\n```\n    ~$ flatpak run --command=sh com.github.dimkr.gplaces\n    ~$ cp /app/etc/gplacesrc $XDG_CONFIG_HOME/\n    ~$ exit\n    ~$ xdg-open ~/.var/app/com.github.dimkr.gplaces/config\n```\n\notherwise, you can edit /etc/gplacesrc directly or edit a copy under your home directory:\n\n```\n    ~$ cp /etc/gplacesrc $XDG_CONFIG_HOME/\n    ~$ xdg-open $XDG_CONFIG_HOME/gplacesrc\n```\n\n## License\n\n=\u003e LICENSE GPLv3\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdimkr%2Fgplaces","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdimkr%2Fgplaces","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdimkr%2Fgplaces/lists"}