A HTML5/CSS3 rendering engine written in Nim
  • Nim 89.6%
  • HTML 7.1%
  • JavaScript 2.4%
  • CSS 0.8%
Find a file
2026-11-12 12:52:06 +05:30
assets add: webview: WebRenderer::loadFile() now shows error page instead of crashing when file does not exist 2026-11-06 10:14:51 +05:30
components fix: js/promise: executor closure would wrongly assign [[Reject]] slot to resolve function instead 2026-11-12 12:52:06 +05:30
docs add: scripting+webview+browser+ipc: Clipboard.prototype.readText() implementation 2026-11-12 12:13:21 +05:30
examples/hello feat: js+scripting+ipc+webview: new embedding API 2026-11-09 12:15:38 +05:30
screenshots fix: style+layout: inline styling, margin's longhand variants shouldn't override it 2026-09-26 19:57:00 +05:30
spec feat: js+scripting+ipc+webview: new embedding API 2026-11-09 12:15:38 +05:30
src add: scripting+webview+browser+ipc: Clipboard.prototype.readText() implementation 2026-11-12 12:13:21 +05:30
tests add: scripting+webview+browser+ipc: Clipboard.prototype.readText() implementation 2026-11-12 12:13:21 +05:30
tools feat: port balde to Windows 2026-10-27 21:38:20 +05:30
.gitignore feat: port balde to Windows 2026-10-27 21:38:20 +05:30
.gitmodules add: js/{runtime+stdlib}: proper Error implementation 2026-10-24 18:50:11 +05:30
config.nims add: dependencies for figdraw 2026-06-20 10:36:44 +05:30
LICENSE xxx: relicense to GPL3 2026-10-10 01:30:22 +05:30
neo.lock feat: port balde to Windows 2026-10-27 21:38:20 +05:30
neo.toml feat: js+scripting+ipc+webview: new embedding API 2026-11-09 12:15:38 +05:30
nim.cfg feat: port balde to Windows 2026-10-27 21:38:20 +05:30
README.md add: scripting: Node.appendChild() implementation 2026-10-03 12:30:32 +05:30
shell.nix xxx: cleanup Nix shell 2026-10-28 00:03:31 +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 rendering Acid1 An image of Sirius on the Wiby search engine 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
  • Acid 1
  • Basic DHTML (document.createElement(), Node.appendChild(), etc.)
  • Acid 2 (not that close)
  • 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).