Servo is now available on crates.io (servo.org)

328 points by ffin 7 hours ago

nicoburns 6 hours ago

Some notes:

- The docs.rs docs are still building, but the docs from the recent RC are available [0]

- The Slint project have an example of embedding Servo into Slint [1] which is good example of how to use the embedding API, and should be relatively easy to adapt to any other GUI framework which renders using wgpu.

- Stylo [2] and WebRender [3] have both also been published to crates.io, and can be useful standalone (Stylo has actually been getting monthly releases for ~year but we never really publicised that).

- Ongoing releases on a monthly cadance are planned

[0]: https://docs.rs/servo/0.1.0-rc2/servo

[1]: https://github.com/slint-ui/slint/tree/master/examples/servo

[2]: https://docs.rs/stylo

[3]: https://docs.rs/webrender

apitman 5 hours ago

Tangent, but Slint is a really cool project. Not being able to dynamically insert widgets from code was the only thing that turned me off of it for my use case.

simonw 4 hours ago

Here's a vibe-coded "servo-shot" CLI tool which uses this crate to render an image of a web page: https://github.com/simonw/research/tree/main/servo-crate-exp...

  git clone https://github.com/simonw/research
  cd research/servo-crate-exploration/servo-shot
  cargo build
  ./target/debug/servo-shot https://news.ycombinator.com/
Here's the image it generated: https://gist.github.com/simonw/c2cb4fcb15b0837bbc4540c3d398c...

scrame 4 hours ago

That's pretty cool. I'm guessing it would need some tweaking to handle things like cookies, or does it just need a pointer to the cookiejar? I'm not too familiar with servo,

simonw an hour ago

It's a VERY simple initial demo, I expect things like cookies would require quite a lot more work.

echelon 4 hours ago

This is super useful! I have immediate use for this.

Do you know if Servo is 100% Rust with no external system dependencies? (ie, can get away with rustls only?)

Can this do Javascript? (Edit: Rendering SPAs / Javascript-only UX would be useful.)

Edit 2: Can it do WebGL? Same rationale for ThreeJS-style apps and 3D renders. (This in particular is right up my use case's alley.)

simonw 4 hours ago

It depends on stuff like SpiderMonkey so not pure Rust.

It should be able to render JavaScript but I've seen it throw bugs on simple pages, no doubt because my vibe-coded thing is crap not because Servo itself can't handle them.

minimaxir 4 hours ago

I have been building/vibecoding a similar tool and unfortunately came to the conclusion that in practice, there are just too many features dependent on the full Chrome stack that it's just more pragmatic to use a real Chromium installation despite the file size. Performance/image generation speed is still fine, though.

In Rust, the chromiumoxide crate is a performant way to interface with it for screenshots: https://crates.io/crates/chromiumoxide

rafaelmn 4 hours ago

This should be the real benchmark of AI coding skills - how fast do we get safe/modern infrastructure/tooling that everyone agrees we need but nobody can fund the development.

If Anthropic wants marketing for Mythos without publishing it - show us servo contrib log or something like that. It aligns nicely with their fundamental infrastructure safety goals.

I'd trust that way more than x% increase on y bench.

Hire a core contributor on Servo or Rust, give him unlimited model access and let's see how far we get with each release.

mort96 4 hours ago

We do not need vibe-coded critical infrastructure.

falcor84 4 hours ago

As I see it, the focus should not be about the coding, but about the testing, and particularly the security evaluation. Particularly for critical infrastructure, I would want us to have a testing approach that is so reliable that it wouldn't matter who/what wrote the code.

bawolff 4 hours ago

mort96 4 hours ago

andai an hour ago

They're getting really good at proofs and theorems, right?

rafaelmn 4 hours ago

If you're trusting core contributors without AI I don't see why you wouldn't trust them with it.

Hiring a few core devs to work on it should be a rounding error to Anthropic and a huge flex if they are actually able to deliver.

mort96 3 hours ago

t43562 3 hours ago

jddj an hour ago

scrame 4 hours ago

Unfortunately we're going to get it whether or not we need it.

teaearlgraycold 2 hours ago

Well if the big players want to tell me their models are nearly AGI they need to put up or shut up. I don't want a stochastically downloaded C compiler. I want tech that improves something.

Night_Thastus 39 minutes ago

The problem with such infrastructure is not the initial development overhead.

It's the maintenance. The long term, slow burn, uninteresting work that must be done continually. Someone needs to be behind it for the long haul or it will never get adopted and used widely.

Right now, at least, LLMs are not great at that. They're great for quickly creating smaller projects. They get less good the older and larger those projects get.

rafaelmn 24 minutes ago

I mean the claim is that next generation models are better and better at executing on larger context. I find that GPT 5.4 xhigh is surprisingly good at analysis even on larger codebases.

https://x.com/mitchellh/status/2029348087538565612

Stuff like this where these models are root causing nontrivial large scale bugs is already there in SOTA.

I would not be surprised if next generation models can both resolve those more reliability and implement them better. At that point would be sufficiently good maintainers.

They are suggesting that new models can chain multiple newly discovered vulnerabilities into RCE and privilege escalations etc. You can't do this without larger scope planning/understanding, not reliabily.

raincole 7 minutes ago

Perhaps, you know, not every thing, especially not every thread on HN, has to be about AI?

I read the link twice and no AI or LLM mentioned. I don't know why people are so eager to chime in and try to steer the conversation towards AI.

nicoburns 4 hours ago

> show us servo contrib log or something like that

Servo may not be the best project for this experiment, as it has a strict no-AI contributions allowed policy.

andai 2 hours ago

Replicating Chromium as a benchmark? ;)

Replicating Rust would also be a good one. There are many Rust-adjacent languages that ought to exist and would greatly benefit mankind if they were created.

dabinat 2 hours ago

The true solution to this is to fund things that are important, especially when billion-dollar companies are making a fortune from them.

beepbooptheory an hour ago

Oh good, I was worried for a sec that people wouldn't be talking about AI in this thread.

manx 4 hours ago

Agreed. Which other software does society need badly?

phaistra 6 hours ago

Is there a table of implemented RFCs? Something similar to http://caniuse.com where we can see what HTML/JS/CSS standards and features are implemented? If it exists, I can't seem to find it. Closest thing seems to be "experimental features" page but its not quite detailed enough.

lastontheboat 5 hours ago

Oh, I forgot that https://arewebrowseryet.com/ exists for this too!

lastontheboat 5 hours ago

https://doc.servo.org/apis.html is auto-generated from WebUDL interfaces that exist in Servo. It's not great but better than nothing.

jszymborski 5 hours ago

Closest is perhaps the web platform tests

https://servo.org/wpt/

that_lurker 5 hours ago

Their bloghas monthly posts on changes https://servo.org/blog/

givemeethekeys 4 hours ago

So, since this is the top post on Hacker News, and the website's description is a bit too high level for me, what does Servo let me do? By "web technologies", does it mean "put a web browser inside your desktop app"?

01HNNWZ0MV43FF 19 minutes ago

Yes, Servo is an embeddable web browser / webview, like Chromium Embedded Framework. (CEF)

Electron = Node.js + CEF

Tauri = Rust + webview

Tauri has an experimental branch to use Servo to provide a bundled webview. Currently it relies on a system-level webview, like Edge on Windows, Safari on MacOS, and webkit-gtk on Linux.

caminanteblanco 4 hours ago

It's an alternative browser engine, vis a vis Ladybird

swiftcoder 3 hours ago

Specifically, it's the browser engine that spun out of Mozilla's early efforts towards a rust-based browser, and is one of the motivating projects for the entire Rust ecosystem

giovannibonetti 3 hours ago

For those of you using a browser to generate PDFs, the Rust crate you should look into is Typst [1]. Regardless of your application language, you can use their CLI.

It takes some time to get used to their DSL to write PDFs, but nowadays with AI that shouldn't take too long.

[1] https://crates.io/crates/typst

andai an hour ago

I keep hearing about this one as a LaTeX alternative. I shall have to take a proper look.

nmvk an hour ago

Really excited to see this. I contributed to Servo open source 10 years ago, and it was a very cool experience.

apitman 5 hours ago

> As you can see from the version number, this release is not a 1.0 release. In fact, we still haven’t finished discussing what 1.0 means for Servo

Wait, crate versions go up to 1.0?

EDIT: Sorry, while crate stability may be an interesting conversation, this isn't the place for it. But I can't delete this comment. Please downvote it. Mods feel free to delete or demote it.

mort96 5 hours ago

The fundamental problem with Rust versioning is that 0.3.5 is compatible with 0.3.6, but not 0.4.0 or 1.0.0; when major version is 0, the minor takes the role of major and patch takes the role of minor. So packages iterate through 0.x versions, and eventually, they reach a version that's "stable".

If version 0.7 turned out to hit the right API and not require backward incompatible changes, releasing a version 1.0 would be as disruptive as a major version change to your users and communicate through version semantics that it is a breaking change.

Semver declares that version 0.x is for initial development where there is no stability guarantee at all. This is the right semantics for a versioning system, but Cargo doesn't follow this part of semver. Providing stability guarantees throughout the 0.x cycle inevitably results in projects getting stuck in 0.x.

This is one of my biggest gripes with Cargo. But Rust people seem to universally consider it a non-issue so I don't think it'll ever be fixed.

kibwen 22 minutes ago

> If version 0.7 turned out to hit the right API and not require backward incompatible changes, releasing a version 1.0 would be as disruptive as a major version change

Nope, this is what the semver trick is for: https://github.com/dtolnay/semver-trick

TL;DR: You take the 0.7 library, release it as 1.0, then make a 0.7.1 release that does nothing other than depend on 1.0 and re-export all its items. Tada, a compatible 1.0 release that 0.7 users will get automatically when they upgrade.

Even more interesting is that you can use this to coordinate only partially-breaking changes, e.g. if you have 100 APIs in your library but only make a breaking change to one, you can re-export the 99 unbroken APIs and only end up making breaking changes in practice for users who actually use the one API with breaking changes.

sheepscreek 4 hours ago

> The fundamental problem with Rust versioning is that 0.3.5 is compatible with 0.3.6, but not 0.4.0 or 1.0.0

That’s a feature of semver, not a bug :)

Long answer: You are right to notice that minor versions within a major release can introduce new APIs and changes but generally, should not break existing APIs until the next major release.

However, this rule only applies to libraries after they reach 1.0.0. Before 1.0.0, one shouldn’t expect any APIs to be frozen really.

mort96 4 hours ago

Starlevel004 4 hours ago

The standard library has a whole bunch of tools to let them test and evolve APIs with a required-opt in, but every single ecosystem package has to get it right first try because Cargo will silently forcibly update packages and those evolution tools aren't available to third party packages.

Such a stupid state of affairs.

moron4hire 4 hours ago

Personally, I think the 0 major version is a bad idea. I hear the desire to not want to have to make guarantees about stability in the early stages of development and you don't want people depending on it. But hiding that behind "v0.x" doesn't change the fact that you are releasing versions and people are depending on it.

If you didn't want people to depend on your package (hence the word "dependency") then why release it? If your public interface changes, bump that major version number. What are you afraid of? People taking your project seriously?

jaapz 4 hours ago

mort96 4 hours ago

the__alchemist 4 hours ago

Hey - Many rust libraries adopt [0-based versioning](https://0ver.org/). That link can describe it more elegantly than I.

Fokamul 4 hours ago

If you want to lure Microslop to migrate all their "great" apps to Servo.

Easy, just add bloat code so it will use 5GB of RAM by default, that's instant adoption by MS.

tracker1 3 hours ago

I was a little curious to see if there was any Tauri integration, and it looks like there is (tauri-runtime-verso) ... Not sure where that comes out size-wise compared to Electron at that point though. My main desire there would be for Linux/flathub distribution of an app I've been working on.

solomatov 5 hours ago

What this crate could be used for?

grimgrin 5 hours ago

when servo is ready i have plans to swap it into qutebrowser which ive been growing fonder of

Talderigi 6 hours ago

Is Servo production-ready enough to replace or embed alongside engines like WebKit or Blink?

bastawhiz 5 hours ago

It depends on your use case. I wouldn't use it for a JS-heavy site. But if you have simple static content, it's probably enough. It's worth testing it out as a standalone app before integrating it as a library.

mayama 3 hours ago

It doesn't crash as often as it used to few years ago. JS heavy sites might not work, and layout issues too. And internet gatekeepers cloudflare turnstile doesn't work.

andriy_koval an hour ago

why did it crash? Rust is supposed to be memory safe?..

nablaxcroissant 13 minutes ago

z3ratul163071 3 hours ago

we've come full circle. they've invented rust to do servo with it.

hybirdss 3 hours ago

feels like we're actually getting new browser engines this decade and it's kind of strange

t43562 3 hours ago

Servo has been on-the-go for a while though. It hasn't been a lightning speed development, it's just getting a bit more visible.

tusharkhatri369 4 hours ago

Sounds great, would use the crate from now on. its more convenient that way

phplovesong 5 hours ago

Did firefox drop servo? I recalled they where in the progress of "rewrite in rust"?

dralley 5 hours ago

Firefox incorporated parts of the Servo effort which were able to reach maturity. Stylo (Firefox's current CSS engine) and Webrender (the rendering engine) and a few other small components came from the Servo project.

Most other parts of Servo were not mature enough to integrate at the time Mozilla decided to end support for the project and didn't look like they would be mature enough any time soon. The DOM engine for example was in the early stages of being completely rewritten at the time because the original version had an architecture that made supporting the entire breadth of web standards challenging.

Keep in mind that you can continue adding Rust to Firefox without replacing whole components. It's not like Mozilla abandoned the idea of using more Rust in Firefox just because they stopped trying to rewrite whole components from the ground up.

andruby 5 hours ago

Yes, during the layoff of August 2020

Mozilla laid off the full Servo team, but never publicly announced this afaik. Wikipedia includes it here: https://en.wikipedia.org/wiki/Firefox#cite_ref-120

Sammi 5 hours ago

Mozilla can't help it but be their own worst enemy. Ladybird may well never have happened if Mozilla just had kept working on Servo, and Ladybird is most definitely going to out compete Firefox when it reaches maturity, as Mozilla keeps on burning bridges with open source enthusiasts.

zarzavat 4 hours ago

estebank 3 hours ago

To add to the other replies, Firefox was explicitly never going to consume all of Servo. It was always meant to be a test bed project where sub-projects could be migrated to Firefox. I suspect that the long term intent might have been for Servo to get to a point where it could become Firefox, but that wasn't the stated plan.

alarmingfox 5 hours ago

I think they implemented parts of it into their Gecko engine. But they laid of all the Servo development team in like 2020 I believe.

Only recently when it moved over to the Linux Foundation has Servo started being worked on again

9fwfj9r 6 hours ago

It's a great move. The early development of Rust aimed to support Servo. However, it's still disappointing that the script engine uses SpiderMonkey, which is purely C++.

drzaiusx11 5 hours ago

It's best not to try and eat the elephant in one bite, which is perhaps where this project went wrong initially. Maybe this is a symptom of learning from past mistakes rather than a flaw.

saghm 5 hours ago

My understanding is that the original intent of Servo was to be a way to develop features and port them over to Firefox itself (which did happen with at least a few features), and the relatively slower pace of developer is more due to Mozilla laying off everyone who was working on it. (Yes, presumably many of the same people are involved, but I would expect that being able to work on something full time without needing another source of income will end up making progress faster than needing to find time outside of work and balance between other things in life, ideally in a way that avoids burnout).

drzaiusx11 4 hours ago

swiftcoder 5 hours ago

There are what, 5+ rust javascript engines that claim to be production-ready? Bolting one of those on in place of spider monkey seems like a reasonable future direction

mort96 5 hours ago

What do you mean by "production ready" here exactly? In a web browser context, the JS engine is expected to have a high performance optimising JIT compiler. Do the existing Rust JS engines have that?

8NNTt8z3QvLT8tp 4 hours ago

swiftcoder 4 hours ago

nicoburns 4 hours ago

They're all more than 10x slower than SpiderMonkey.

depr 4 hours ago

They may be production-ready in some sense but they're not ready to be put in Firefox, and/or they are v8 bindings.

tialaramex 5 hours ago

I mean SpiderMonkey works, and presumably is fairly self-contained, so I can see why replacing that isn't attractive unless you believe you can make it significantly better in some way.

diath 5 hours ago

Too little too late now that the new meta is to use system provided webviews so you don't have to ship a big ass web renderer per app.

bastawhiz 5 hours ago

System web views were available as drag and drop components in VB6 two and a half decades ago. There's nothing "new" about that as a concept, and plenty of reasons to not want to use Blink/WebKit.

diath 5 hours ago

> System web views were available as drag and drop components in VB6 two and a half decades ago. There's nothing "new" about that as a concept

We are in a thread discussing a Rust library, logically, I was referring to the current approach in GUI rendering in the Rust space (such as Tauri and Dioxus).

> and plenty of reasons to not want to use Blink/WebKit.

Such as? Can you name a few objective reasons against Blink/WebKit (the technology) that does not involve just not liking Google/Apple?

bastawhiz an hour ago

airstrike 5 hours ago

swiftcoder 5 hours ago

No particular reason Servo couldn't one day become the system web view on Linux distros...

chrismorgan 4 hours ago

Linux (GNU/Linux or whatever) doesn’t even have the concept of a system web view. The closest you might get to the notion is probably WebKitGTK which is perhaps the GNOME idea of a system web view, but it’s nothing like WebKit on macOS or WebView2 (or MSHTML in the past) on Windows for popularity or availability.

As a user of a desktop environment other than gnome-shell, I only have webkitgtk-6.0 installed because I chose to install Epiphany—it’s a good proxy for testing on Safari, which Apple makes ridiculously expensive.

mort96 4 hours ago

Yeah the closest thing you come today is arguably WebKitGTK, which is known for being not exactly great.

charcircuit 3 hours ago

That is not the meta. The meta is to ship blink so you only have to support a single version of a single web engine in stead of many versions of many different web engines.