![A friendly beaver](media/beaver.png) # What / why / how The Web is our only hope for a platform that provides permissionless user agency. This project is about scratching that itch, building a Web based user agent that can play new tricks. Our mascot is a beaver because they are fantastic animals that heal their environment; read https://www.noemamag.com/we-need-to-rewild-the-internet/ for a good introduction, and come with us rewild your web! We build on [Servo](https://servo.org) because despite a new wave of browsers being built, they mostly go with forking blink, and that's not how we will diversify the Web. Also this is a very fun project to contribute to! The end goal is to have a suite of Web user agents. Running on top of an existing OS is a temporary stop-gap, because being a second class citizen on someone else's platform is a dead end. We will create new personal computing environments for mobile, desktop, media players, etc. We have a long road ahead, but we're not in a hurry. We hang out on [Servo's zulip](https://servo.zulipchat.com) if you want to chat about the project. # Building ## Prerequisites - Install the `forkme` utility from https://tangled.org/me.webbeef.org/forkme - Run `forkme init` - From the `source` directory, run `./mach bootstrap --skip-lints` to setup Servo build dependencies. ## Desktop builds - Update with `forkme apply` - Build with `cargo build -r -p beaver-shell` - Run with `cargo run -r -p beaver-shell` or directly from the `target` directory as usual for Rust projects. The current UI allows multiple windows, and each one is a simple tiling window manager. There is also a floating search window. ![Overview of 3 pages in tiling arrangement](media/desktop_1.png) ![Main menu and 2 pages in vertical stacking](media/desktop_2.png) ![Scrolling in the tiling WM, and the context menu](media/desktop_3.png) ![The settings app, with a few themes](media/desktop_4.png) ![The floating search window](media/desktop_5.png) ## Mobile builds (cross-compilation from macOS/Linux) The target platform is aarch64 Linux devices such as the Pixel 3a running Mobian (see https://wiki.debian.org/InstallingDebianOn/Google/Pixel3a). ![A rewilding Pixel 3a](media/pixel_3a.jpeg) ### Prerequisites - Docker Desktop (with at least 24GB memory allocated in Settings > Resources) ### Building Cross-compilation uses a Docker container with an ARM64 toolchain and all native dependencies. The source tree is bind-mounted so no separate clone is needed. ```bash # First build creates the Docker image, then compiles (takes a while): ./build-arm64.sh release # Subsequent builds are incremental: ./build-arm64.sh release # Production build with LTO: ./build-arm64.sh production ``` The binary is output to `dist/beavershell`. You can adjust parallelism if needed: `CARGO_BUILD_JOBS=2 ./build-arm64.sh release` ### Deploying to device The deploy script rsyncs the binary, resources, and UI to a remote device over SSH: ```bash ./deploy-arm64.sh ``` This expects key-based SSH access to `mobian@mobian`. Then run on device: ```bash SURFMAN_FORCE_GLES=1 WAYLAND_DISPLAY=wayland-0 ./beaver/beavershell ``` Here's what this looks like ![Simple homescreen](media/mobile_1.png) ![Searching](media/mobile_2.png) ![The radial context menu](media/mobile_3.png) ![Editing the current page URL](media/mobile_4.png)