A HTML5/CSS3 rendering engine written in Nim
  • Nim 89%
  • HTML 7.4%
  • JavaScript 2.6%
  • CSS 0.9%
Find a file
xTrayambak 1585f9edd3 fix: js: syntax error
I love vim.
2026-09-24 12:37:01 +05:30
assets ref: js: replace CreateMutVal/CreateImmutVal with Declaration nodes 2026-09-10 14:29:44 +05:30
components fix: js: syntax error 2026-09-24 12:37:01 +05:30
docs fix: docs: formatting error in CONTRIBUTING.md 2026-09-12 19:05:11 +05:30
screenshots xxx: update README.md 2026-08-28 13:15:05 +05:30
spec add: websocket+webview: dispatch error events when needed 2026-09-20 10:16:28 +05:30
src add: js: microtask queue 2026-09-24 00:23:40 +05:30
tests add: js: Promise.prototype.then() implementation 2026-09-24 12:35:17 +05:30
tools add: bootstrap script 2026-09-12 12:22:51 +05:30
.gitignore add: bootstrap script 2026-09-12 12:22:51 +05:30
.gitmodules add: bootstrap script 2026-09-12 12:22:51 +05:30
config.nims add: dependencies for figdraw 2026-06-20 10:36:44 +05:30
LICENSE feat: initial commit 2026-05-27 15:28:56 +05:30
neo.lock add: idl: start re-adding WebIDL infra 2026-09-03 15:44:33 +05:30
neo.toml fix: add gtk4 and libadwaita-1 to platforms.native 2026-09-12 10:23:27 +05:30
nim.cfg add: GTK4 based browser shell WIP 2026-08-11 00:29:53 +05:30
README.md add: docs: link to forge in CONTRIBUTING.md; add this to README 2026-09-12 19:04:10 +05:30
shell.nix fix: nix: fetch libcurl with WebSocket support enabled 2026-09-18 16:33:28 +05:30
vendor.paths xxx: adopt figdraw fork into tree 2026-08-12 17:44:51 +05:30

sirius

Sirius is an independent web rendering engine written in Nim. It is currently in an experimental phase, and is capable of parsing and handling some parts of HTML5, CSS3 and JavaScript.

It's also multiprocessed, but doesn't have sandboxing as of yet.

It also has a relatively capable embedding API, that lets other Nim programs (like game engines, UI toolkits, and so on) use it as a standalone web rendering view, while still using the very same multiprocessed architecture.

An image of Sirius on the Wiby search engine An image of Sirius rendering the first test page An image of Sirius rendering the second test page

contributing

In order to set up a development environment for hacking on Sirius, check the contribution guide document for more information.

close roadmap

  • HTML5 parsing infra/DOM types (mostly taken from Chame's minidom for now)
  • CSS3 parsing infra
  • Style map building and matching
  • Flow Layout (mostly)
  • Initial user agent
  • Inline styles
  • Network content fetching
  • Vulkan (OpenGL/Metal eventually?) based renderers using FigDraw
  • HarfBuzz for text shaping
  • JavaScript execution, very early DOM bindings
  • Content caching
  • Forms support
  • WebIDL -> Nim stub generator
  • CSS Grid Layout
  • Sandboxing
  • MacOS support
  • Android support

why not work on ferus?

Ferus was mostly written back when I was still learning Nim. As such, it has some pretty nasty code that I'd much rather not spend energy refactoring.

Also, its hypermodular nature made it extremely tiring to make minor changes in its components.

then how is this different?

Most of the unstable, fast-moving components are located at components/, so I can make changes to them without pulling my hair out. The stable parts like the CSS3 parser are already separate packages that others rely on, so they stay as-is (albeit Stylus did get a new release to fix some of the aforementioned nasty code from ye olden days).