gemiweb0

A minimalist Internet better than gemini: program your own web browser, parser and interpreter! Subset of HTML, HTTP, CSS and JavaScript. Work in progress: https://bkil.gitlab.io/gemiweb0/ https://github.com/bkil/gemiweb0

Active Pure Nim score 65/100 · last commit 2026-08-13 · 2 stars · tests present · no docs generated

Summary

Latest Version Unknown
License Unknown
CI Status Failing
Stars 2
Forks 0
Open Issues 0
Last Commit 2026-08-13
Downloads 0
Last Indexed 2026-09-06 06:05

Installation

nimble install gemiweb0
choosenim install gemiweb0
git clone https://gitlab.com/bkil/gemiweb0

OS Compatibility

Platform Linux macOS Windows FreeBSD OpenBSD NetBSD Android iOS WASM Embedded
gemiweb0 - - - - - - - - -

Source

Repository https://gitlab.com/bkil/gemiweb0
Homepage https://gitlab.com/bkil/gemiweb0
Registry Source gitlab

README

gemiweb0, a gemini-HTTP/HTML subset

No need to install a special client or pay for a custom server: enables HTTP-based shared web hosting of the simplest artisan content possible.

Status

Status: not public yet, volunteer developers and user brainstorming welcome!

The internal names of the work in progress subsets used are HTTP0, HTML0, JS0 and CSS0 respectively.

Documentation

See the doc folder for more information:

Older notes:

Development snapshots

Note that we are still accepting developer feedback on the specification. You should not build anything serious on it until we have finalized it. The proof of concept implementation of the js0 runtime, http0 fetcher and html0 renderer (so called "picobrowser") is not intended for general audiences yet and serves more of a code sample to review and be inspired by. All example web content is tested for compatibility with this kit. For safety, do consider running with containerization during testing.

  • https://bkil.gitlab.io/gemiweb0/js0br0.zip
  • https://bkil.gitlab.io/gemiweb0/js0br0-dev.zip
  • https://bkil.gitlab.io/gemiweb0/js0br0-doc.zip
  • https://bkil.gitlab.io/gemiweb0/js0-dl
  • https://bkil.gitlab.io/gemiweb0/js0-static
  • https://bkil.gitlab.io/gemiweb0/js0-min-static

Example web content

Play with an example game obeying this subset:

https://bkil.gitlab.io/static-wonders.js/game/rockpaps.htm

https://bkil.gitlab.io/static-wonders.js/game/talkidea.htm

https://bkil.gitlab.io/static-wonders.js/game/memopair.htm

https://bkil.gitlab.io/static-wonders.js/game/memonums.htm

https://bkil.gitlab.io/static-wonders.js/game/towhanoi.htm

https://bkil.gitlab.io/static-wonders.js/game/permslid.htm

https://bkil.gitlab.io/static-wonders.js/share/rot13.htm

https://bkil.gitlab.io/static-wonders.js/share/sumlist.htm

https://bkil.gitlab.io/static-wonders.js/audio/evalmus.htm

https://bkil.gitlab.io/static-wonders.js/audio/ansimus.htm

https://bkil.gitlab.io/static-wonders.js/edu/knowende.htm

https://bkil.gitlab.io/static-wonders.js/edu/knownone.htm

https://bkil.gitlab.io/static-wonders.js/compress/treedict.htm

https://bkil.gitlab.io/static-wonders.js/edu/goodshuf.htm#

https://bkil.gitlab.io/static-wonders.js/edu/knowcard.htm#

https://bkil.gitlab.io/static-wonders.js/edu/sortfun.htm

https://bkil.gitlab.io/static-wonders.js/game/markov.htm

https://bkil.gitlab.io/static-wonders.js/toy/daystill.htm

https://bkil.gitlab.io/static-wonders.js/toy/randjs.htm

https://bkil.gitlab.io/static-wonders.js/toy/namegen.htm

https://bkil.gitlab.io/static-wonders.js/joke/dare.htm

https://bkil.gitlab.io/static-wonders.js/joke/js-nojs.htm

https://bkil.gitlab.io/static-wonders.js/joke/hole-dimension-dirt-volume.htm

https://bkil.gitlab.io/static-wonders.js/crypto/randhash.htm

Example visual web content

The visual impaired may not find the following examples enjoyable:

https://bkil.gitlab.io/static-wonders.js/game/rgbname.htm

https://bkil.gitlab.io/static-wonders.js/game/guard.htm

https://bkil.gitlab.io/static-wonders.js/game/catmazes.htm

https://bkil.gitlab.io/static-wonders.js/game/catmaze.htm

https://bkil.gitlab.io/static-wonders.js/game/wallrace.htm

https://bkil.gitlab.io/static-wonders.js/game/holejump.htm

https://bkil.gitlab.io/static-wonders.js/share/colword.htm

https://bkil.gitlab.io/static-wonders.js/toy/busybvr.htm

https://bkil.gitlab.io/static-wonders.js/toy/busybvr4.htm

https://bkil.gitlab.io/static-wonders.js/toy/nqueens.htm

https://bkil.gitlab.io/static-wonders.js/toy/ploteval.htm

https://bkil.gitlab.io/static-wonders.js/toy/mandbrot.htm

https://bkil.gitlab.io/static-wonders.js/toy/logismap.htm

https://bkil.gitlab.io/static-wonders.js/toy/langtona.htm

https://bkil.gitlab.io/static-wonders.js/toy/rule110.htm

https://bkil.gitlab.io/static-wonders.js/toy/snowdown.htm

https://bkil.gitlab.io/static-wonders.js/crypto/papotp.htm

https://bkil.gitlab.io/static-wonders.js/draw/pixfont.htm

Bookmarklets:

  • https://bkil.gitlab.io/static-wonders.js/userjs/gmaps-embed.js0.html
  • https://bkil.gitlab.io/static-wonders.js/userjs/localStorage-stub.html
  • https://bkil.gitlab.io/static-wonders.js/userjs/maltai-map.js0.html

This is the tool I made to convert gemini-flavored markdown to this very HTML site:

  • https://bkil.gitlab.io/gemiweb0/src/convert/gem2htm.js

The bare picobrowser bundled with the proof of concept interpreter that I use to test all the other examples with is itself also implemented in an earlier dialect of js0:

  • https://bkil.gitlab.io/gemiweb0/src/br/br-lib.js

Contact

Join our free chat room on Matrix, also relayed over an XMPP MUC and the IRC channel #gemiweb0. You can participate in brainstorming and give a hand by implementing the standard from scratch in your favorite language:

Source code repository

Web viewing may be blocked from some ISP due to load.

  • https://gitlab.com/bkil/gemiweb0
  • https://github.com/bkil/gemiweb0

Feeds

Subscribe to the feed of changes via Atom (RSS):

  • https://gitlab.com/bkil/gemiweb0/-/commits/master?format=atom

88x31 badges

The rendered website should be faster and more accessible than the git repository.

<a href="https://bkil.gitlab.io/gemiweb0" target="_blank" rel="noopener" referrerpolicy="unsafe-url"><img alt="with(js0){bkil.write('minimal','browser');for 80x25 bright" width="88" height="31" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFgAAAAfBAMAAACR5hfTAAAAElBMVEWSkpIAAP////+2trZJSUkAAAAizS8YAAABoklEQVR4AX2RUY7iMBBEG6/2P3guYBfjfyRn/leJD4CMfP+rbLvw9CRks9UtZKSnp6aQy4RtQv5P5D0BAeKCCFxAxGfhIgLxQ0R+t/Ywdgro01dhD+UKsCzwiDejDA7fsMiAC+F4vVFsecg9iOzMRffMfIdzEDfgiLLo2s1mZhQ+z9HM377o5wLgVc1oR35tzOIIK/kJLAY7a2dndmGYF4MDzYRploe62bTD3hx9EDk1I2xuLkv0cA6O8p25EYb8wXn2ZicK+4SWamqo+qipNqAiAZUwzcLoGRHKtIqKlqDTGlIyeB/CtRJuHe5kI9z/wTmX76z5rnCXcAjjdRWAF/wTheEJ281I4yvibWvWKHye28HcdX0TL0Hr0qavCPyYDUa1RU1sjW8fD22YubKUZGb4br5cr9MGBszceA3NgJo/DmaAWqUwKm6EI9v4YvIzP5+sbp+8jYhCmq+s0+HoAQRBcBCncMl5VW5ec1nNrF6aQRhwoS/mvM4sVx/5ePPV06zkMM/KrXOhGZtcpumfZh2VH+E44OAI8+ZhzvKesk/e5i/Q5MGg7MqgLQAAAABJRU5ErkJggg==" /></a>
<a href="https://bkil.gitlab.io/gemiweb0" target="_blank" rel="noopener" referrerpolicy="unsafe-url"><img alt="with(js0){bkil.write("minimal","browser");for 80x25 dark" width="88" height="31" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFgAAAAfBAMAAACR5hfTAAAAElBMVEWSkpIAAP////9JSUkAAAC2trYVGYSLAAABoUlEQVR4AX2SUW7bMBBENy4PYCM6gLHiAQoL/Sfl8b+Bkve/SodThZKqKsMFwQAPD5O17OPq29ynb2L/JiHBQjJDSMh4VQ1fyJ9mFoDU2SthHk6DB5CrQCl85menOpy+YLMFroLz7SlxT7J3MtuZK+fM/EYIsLDAGbVweuedGYTPczTrfy+8S6ul1SzbsR8bs10Ek3wBpcOhb2dnvtwXc+lwklmwzJaaOzXY9+Y8JLNTs983nWvJQ1tNkHxnhmC3nzjP3nwxwsMMn+PsiHzEOToQMfMSLLMprJFBxiMifAaPO+a5w/sIjlGwN7iRLrj9gr/r9JVf9U24SXQEQ60I4y+8hjAGwb0zYf1J+CnzGsLneR7MTddmVpPmdl5sDKzmFY59eGlreg/H77mbo5YydzOGZv643a4bGKvZ1UZmgObPgxmLlgWWFbvgrG0Upb7q66XV7TNtY0aIKZWnwXnQB4sUYIGwT9NI7jFOPq5mqmUWDITUBo9pfDwmho/p2Pk2yExyMRMex4fL7Jt8XK//NfNQfoSzYE4QrM6L+VDDpm/yBzUN+jDXn7S6AAAAAElFTkSuQmCC" /></a>
<a href="https://bkil.gitlab.io/gemiweb0" target="_blank" rel="noopener" referrerpolicy="unsafe-url"><img alt="# gemiweb0 &gt; tiny * browser ``` js0 ``` bright" width="88" height="31" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFgAAAAfAgAAAAAME02dAAABJUlEQVR4AXXSIWgDMRQG4LC4mng3OWbPBuI92+S816Njct4zKsoRVc/GHZw9iDxZrxp4tCf60rd3uRwJ4/ZDKz4ejyT/Cbsa0dBKbgsD/5A8CzWnzBTZGWK9Mn87kl7LDpH/Jz5db8wHieB0D9g7DT0zJ04jtJFbDS5xmkYEFA4zp92IGrxWvjwgUJHzE+eZGVXJF8vZM3NWeTuWvLP2Yy9+mP9OP/D0NrwM4fW4Xfi93kx85CVhzFzv7D3zGHnMXD/m6fOMitl+xt00hLcxzFwxf23iSWISa+byOgPFGHO5S1zGuHxLUzAsT+VKrmR6WGaBqgNoUbUkXGr+0BsNpKEyUzeoUvONpJk7r3jb0nxTRfYSgSKnLpEkUAdOoMr83zdoV/MLsU8sS9NgqKkAAAAASUVORK5CYII=" /></a>
<a href="https://bkil.gitlab.io/gemiweb0" target="_blank" rel="noopener" referrerpolicy="unsafe-url"><img alt="# gemiweb0 &gt; tiny * browser ``` js0 ``` dark" width="88" height="31" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFgAAAAfAgAAAAAME02dAAABIklEQVR4AWzRIWgDMRgF4Nf7K9LyQ+pVZWXg7MGVzVMVSkWZ90yOHfNeT27znkBs7ZicdzF1Gd1/aW4Jo0+c+HgcSR7szWCLG5lNzAAIOsmqMBIbB9G58L1B1D52RPIdeTWfCe8isfEtU2s8t8KS1CbuE/eeTebcJmK6GCqc/03kWfug6wMyqiw/JO/CFGpeWMlBuE7Ng6r5aO3TAXfC/9tf0h6at03zuh4mft6fR15jUI0qvD/ab2GVWBXef5b2En9sH0cesGleVHNFI/xwTidJydwJ19fZIKXH4qdmZHbllq7iMD2VqbnNDzvyhULH3FPoAZeX37XOMzyf3HWbvPw24sqdDiPn5benxDoSI3HekhAZHZsLBfc7uDCONIgjxQIAqb51UnzN6yUAAAAASUVORK5CYII=" /></a>

80x15 badges

<a href="https://bkil.gitlab.io/gemiweb0" target="_blank" rel="noopener" referrerpolicy="unsafe-url"><img alt="best viewed in 80x25 bright" width="80" height="15" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAAAPBAMAAACB51W8AAAAElBMVEWqqqoAAKr///9VVVUAAABV//98YHRCAAAA3UlEQVR4AX2RQWrDMBBFJyXd2zpB/UcHMCO6N0LZF2rf/yr5nyFgMPhlFgI93ijYHhPEj7V7zOw5jEyBO9zESWzwQEMLIMJ5CoTrZzbE2NYUdevQICRDItxVTNao/VOMFLMY6knMoMSat+p9xIDELD6psrhFRc+iq5h6o4N8Y5Jivf3XKm4pMpkExHzGvn//G/lbJXISbxKpLnTKMmNJ8Tgk1jqQhCta5qWUWSZ9M2UJxdH7WVSx0FmoFa4+Xi8Oi8Do1yIdVbl63/eDq6/fOt/IYtHJviAe09QuzGfeyXVS0QO6XxcAAAAASUVORK5CYII=" /></a>
<a href="https://bkil.gitlab.io/gemiweb0" target="_blank" rel="noopener" referrerpolicy="unsafe-url"><img alt="best viewed in 80x25 dark" width="80" height="15" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAAAPBAMAAACB51W8AAAAElBMVEWqqqoAAKr///9VVVUAAABV//98YHRCAAAA2ElEQVR4AX2RQWrEMAxF/xR1H/kEtckBApnuRftnX2hy/6tUn5jUJXSesjD48WQIblMTb1ifA8CIZLrzGZ8QgwiGEYSRZkHQaJGTIiliOUTdBhk6StYEI36Ly1C0FM+iqSiRIiTO/ZZxiiaxFy1VAHFn68VQ8dCRDvsbRRdn/ksvxiE2dozCR/D6/r0mX4vEMxmQ2NxrOqV6q4e47xLn07NQtHgtxWWmDyibpMiPP6KKKdaaWsnV++ORn4riWtS45+pt2/Zcff3X/Y21lpYnvDRxm6b1go/8AJx2aM7HqVTHAAAAAElFTkSuQmCC" /></a>

LICENSE