Skip to content
forked from xfbs/diff.rs

Web application to render a diff between Rust crate versions. Implemented in Yew, runs fully in the browser as WebAssembly.

License

Notifications You must be signed in to change notification settings

SwishSwushPow/diff.rs

 
 

Repository files navigation

diff.rs

ci status

Web application to view the difference between Rust crate versions. It is deployed at diff.rs.

How it works

It uses Yew as the reactive frontend framework, and blueprint.js with yewprint for many of the components. Currently, a conversion to using tailwind CSS is underway.

The code in this repository compiles into a WebAssembly binary that runs in the browser. Since it only talks to the crates.io API, it does not need any backend and can be hosted statically.

To render a diff, it uses gloo to make a request to the crates.io API in order to fetch crate metadata. This is a JSON structure that is parsed into a CrateResponse using serde and serde_json.

Using that response, the code will resolve the versions that are in the URL by looking them up in the versions field of that response. If they exist, the code then performs another request to fetch the crate sources. These are gzip-compressed tar balls, which are decompressed using flate2 and extracted in-memory using tar.

Finally, the code uses similar to generate a diff and render it in the browser. It uses the syntect for syntax highlighting.

How to launch it

You need a recent version of Rust, which is most easily installed with rustup.rs.

In addition, you will also need Trunk, which is a tool that helps to build Rust WebAssembly applications, and the WebAssembly build target for Rust. You can install it like this:

cargo install trunk
rustup target add wasm32-unknown-unknown

You can then use trunk to launch a local server with hot-reloading for development purposes:

trunk serve

You can also use it to build an optimized release version. This will place the build output into the dist folder. The --release flag enables some optimization, both building the Rust code in release mode, and running wasm-opt for further size savings. You might see a large speedup from running it this way.

trunk build --release

How it is deployed

It is currently hosted by GitLab Pages using this CI config. It serves the application statically, and uses both gzip and brotli compression for smaller assets and faster loading times.

The deployed version of it has privacy-preserving (cookie-less) analytics enabled to help me measure how many people are actively using it. If you have an adblocker, this is likely blocked by it. You can see the data here

License

MIT, see LICENSE.md.

About

Web application to render a diff between Rust crate versions. Implemented in Yew, runs fully in the browser as WebAssembly.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Rust 93.0%
  • CSS 3.3%
  • JavaScript 1.9%
  • Just 1.2%
  • HTML 0.6%