Skip to content


Repository files navigation

Duckling Proxy

Duckling proxy is a Gemini proxy to access the Small Web. Connecting to it with your Gemini client means you can access many web pages directly with your favourite client.

Cross platform, written in Go.

What is the Small Web?

The Small Web are those pages on the WWW that are typically characterised:

  • simple and document/content centric, using simple headings, bullets, links and tables only
  • accessible to different web clients, but do not need a monster browser such as Chrome to view them
  • do not require client side javascript
  • do not require tracking, cookies, forms or authentication to be viewed
  • can be accessed using standard HTTP GET requests
  • could be rendered as text/gemini without significant loss of information
  • apart from the huge commercial mega sites, a significant portion of the web

With Duckling, you can now browse the Small Web using your favourite Gemini client, and just open a standard web browser only when you need to!

What is the Duckling proxy?

The Duckling proxy is a scheme-specific filtering proxy for Gemini clients to access the web. It behaves as a normal Gemini server, except it retrieves its content from the web. You can tailor its behaviour when it starts, to tailor how web pages are transformed to gemtext.

It is scheme-specific, i.e. it is designed to handle HTTP requests only. Agena is another example of a scheme specific proxy, supporting gopher://

Web pages are translated to text/gemini. Other web resources are returned directly.

The primary intended use case for this proxy is as a personal proxy to make the web accessible to your favourite Gemini client.

Why is it called "Duckling"?

Small Web Daemon -> Small WebD -> Small webbed -> Duckling.



duckling-proxy [flags]

  -a, --address string          Bind to address
                                 (default "")
  -m, --citationMarkers         Use footnote style citation markers
  -s, --citationStart int       Start citations from this index (default 1)
  -e, --emitImagesAsLinks       Emit links to included images
  -l, --linkEmitFrequency int   Emit gathered links through the document after this number of paragraphs (default 2)
  -T, --maxConnectTime int      Max connect time (s)
                                 (default 5)
  -t, --maxDownloadTime int     Max download time (s)
                                 (default 10)
  -n, --numberedLinks           Number the links
  -p, --port int                Server port (default 1965)
  -r, --prettyTables            Pretty tables - works with most simple tables
  -c, --serverCert string       serverCert path.
  -k, --serverKey string        serverKey path.
      --unfiltered              Do not filter text/html to text/gemini
  -u, --userAgent string        User agent for HTTP requests
  -v, --version                 Find out what version of Duckling Proxy you're running


  • serverCert - required - path to Gemini server TLS certificate
  • serverKey - required - path to Gemini server TLS private key
  • All other flags are optional and you can experiment with them

You will need to configure your Gemini client to point to the server when there is a need to access any http:// or https:// requests.

Supported clients

The following clients support per-scheme proxies and can be configured to use Duckling proxy.

  • Amfora - supports per scheme proxies since v1.5.0
  • AV-98 - Merge pull request #24 then use set http_proxy machine:port to access.
  • diohsc - edit diohscrc config file
  • gemget - use -p option
  • GemiNaut - since 0.8.8, which also has its own native html to gemini conversion - update in settings
  • Lagrange - set proxy in preferences (use, not localhost:port for localhost)
  • Telescope - set proxy in the config file add: proxy "https" via "gemini://", and similarly for http

Let me know if your client supports per scheme proxies and I'll add it to the list.


If you have Go installed, you can also install the latest commit it with:

go env -w GO111MODULE=on
go get


Send me your thoughts and feedback to

luke [at] marmaladefoo [dot] com



First publicly versioned build.

  • fix bug whereby Duckling would crash on download timeout.
  • removed patch for AV-98 and updated readme now that AV-98 is officially supports http proxies
  • add -v version flag
  • print version in footer


First release (unversioned), 30-Aug-2020


Duckling proxy is a Gemini proxy to access the Small Web








No releases published


No packages published