- Rust 99.7%
- Shell 0.3%
| src | ||
| .gitignore | ||
| ARCHITECTURE.md | ||
| cargo-tree | ||
| Cargo.lock | ||
| Cargo.toml | ||
| README.md | ||
| resources | ||
| run.sh | ||
| rust-toolchain | ||
Play Browser
This is a learning experience and an experiment.
I am interested in browsing privacy and security, and I'm not happy with any of the current browsers including Firefox, Brave, or Pale Moon. Firefox has way too much cruft and complexity to be secure (but uMatrix helps). The others have their own issues.
What I'm interested in eventually is a browser that
- Has a URL blacklist
- Does what uMatrix does (blacklisting partial content based on source and type, on a per domain basis)
- Allows you to configure many settings on a per-domain basis, such as the User Agent string, fingerprinting, cookie acceptance, 3rd party cookie acceptance, etc. If you configure firefox to be strict on these, there is no easy way to remember per-domain overrides.
- Doesn't run a whole bunch of protocols that I don't want run (e.g. webrtc, DRM, etc)
- Doesn't send data back to Mozilla.
- etc, etc (this list can get very long)
I'd rather have borked functionality than security/privacy violations, usually. Sometimes I really need the functionality. Thus, I need per-domain settings.
I'd rather not come up with a catchy name at this point. Playbrowser means it's what I'm playing with at the moment.
Servo
This browser will be based on Servo. Servo is mainly written in rust (some libraries it uses link to C). Servo isn't "there yet", even though some components of Servo are stable and shipping in Firefox. It will be a few years at least before Servo is usable as a browser engine w/o all the other Firefox stuff.
How To Build
WARNING: this can easily require 50 GB of disk space. Check that you have space first.
To compile the project, you need servo along side of it (we do it this way rather than using a cargo dependency in order to have easiler access to the servo source code. Besides, servo isn't versioned yet). That comes from https://github.com/servo/servo.
$ git clone https://github.com/servo/servo
$ git clone https://github.com/mikedilger/playbrowser
$ cd playbrowser
Clean up if you've been here before (and not very recently):
$ cargo clean
Use the same rust toolchain as servo does:
$ cp ../servo/rust-toolchain .
$ RUSTVER=$(cat rust-toolchain)
$ rustup override set $RUSTVER
Copy servo's recent Cargo.lock, so we use the same versions (once we compile, Cargo will fix this for us):
$ cp ../servo/Cargo.lock .
$ cargo update
Link to servo resources (if link does not already exist)
$ ln -s ../servo/resources
And see if it would compile
$ cargo check
Update Cargo.toml versions to match what is now in Cargo.lock and run
$ cargo update
Servo updates may break playbrowser from time to time, so expect occasional updates to the code to be necessary.
Once you want to try it, build it for reals
$ cargo build --release
And run it like this (pass in whatever URL you want):
$ RUST_LOG=playbrowser=info ./target/release/playbrowser https://mikedilger.com/scratch.html