A noJS and highly hackable browser engine.
f5095fbf — Adrian Cochrane 5 months ago
Show resolved font files.
1debdc29 — Adrian Cochrane 5 months ago
Implement font filtering.
3a4c612a — Adrian Cochrane 5 months ago
Fix parsing of src @font-face property.

refs

master
browse log

clone

read-only
https://git.sr.ht/~alcinnz/memex
read/write
git@git.sr.ht:~alcinnz/memex

Memex browser engine

Blog|Issues|Things that need help

Memex ultimately aims to show that it can be desirable to remove JavaScript from the web platform and instead move more in the direction of HTML and CSS. That doing so the web will not only improve security, but also:

  • strengthen consent/trust,
  • be easier to program against,
  • work naturally with a greater range of UI devices,
  • and possibly use less computing power.

All while providing alternative specifications so websites can continue to deliver the usability benefits they currently get from JavaScript.


Though before we can present alternatives, we need a browser engine that's hackable enough for us to quickly try ideas out. And we'll achieve that by not implementing JavaScript or the Document Object Model.

It will share significant components with Servo/Gecko, and thus implemented in Rust.

Memex priorities

  1. Do not run any untrusted code, even in a sandbox.
  2. Be easy to understand and contribute to.
  3. Avoid causing further collatoral damage.
  4. Where it doesn't make a difference to code readability, choose greater performance.

We are more than happy to accept contributions to fix the rendering of any webpage you care about, and would consider it a bug if that's too complex of a task for you. At the same time we'll be kept busy with just the basics and trying new ideas out, so expect breakages.

What's with the name?

The Memex was an early hypertext concept, which was going to be built using microfilm. Hypertext is what characterises The Web, and we wish to highlight that.

Also memes are an academic term (commonly used causely to refer to online pictoral forms) for ideas that spread. The possibilities of a post-JavaScript web is a meme we wish to spread.

How to run it?

Given you have installed Rust installed, you can run Memex using the following commands:

cd viewport
cargo run ../test-pages/replacing-javascript.xhtml

You can replace ../test-pages/replacing-javascript.xhtml with any other XHTML file on your system.

This program is very far from being complete.

Components

Memex is split into several components:

  • viewport renders webpages to whatever extent we currently support.
  • gofer currently only contains parsing utilities to be replaced by Nom, but it will later contain utilities for resolving a URL and dispatching the response for parsing.
  • microfilm parses webpages to it's own datatypes.

  • stylist computes which styles apply to which elements, consisting of CSS parsing, selectors, cascade, and (partial) inheritance.

  • stylist_viewer debugging program to see how CSS files are tokenized.

  • fashionista parses and resolves CSS properties related to visual output.

See each of these folder's READMEs for more detail.

Dependencies

  • Rust 1.30.0
  • Cargo 1.30.0
  • At least 700MB additional space

Give Cargo some extra time on first build to download the rest of Memex's dependencies. Subsequent builds are fast.