Skip to content

Roadmap

Manuel Rego edited this page Nov 29, 2024 · 126 revisions

Roadmap 2025

Note

To propose changes to the Roadmap, please leave a comment at servo/project#114 issue.

Architecture

  • (Re)split the script and layout threads
    • Servo currently uses the same thread for script and layout. With a new design, it's possible to run JavaScript (and any other DOM mutations) and layout on different threads without any global blocking.
    • People: @xiaochengh

DOM/Layout

  • Implement Shadow DOM
    • One of the most common errors when browsing real world sites/web apps is that attatchShadow is not implemented. This will help close the gap in expected web compatibility when testing Servo against existing web content.
    • People: @jdm (will break down tasks, someone would have to work on them)
  • Editability and Interactivity Enhancements
    • There are many things that are still missing int he new layout engine in Servo, one of them are some things like editing a text input (you can do it know but there's no caret or anything), editing more complex form fields, being able to interact properly with a form, selection, etc. Some of these things might be too big or complex, but in general it seems worth to improve the current status of affairs in this area to make Servo more usable.
    • People: @Igalia
  • CSS Grid Layout support
    • CSS Grid is an important modern layout method which Servo should support. Basic support through taffy has been already added, planning to devote more time to WPT test score improvements once that lands.
    • People: @nicoburns
  • Implement ReadableStream (without SpiderMonkey)
    • RedeableStream has been removed from SpiderMonkey so we need to do our own implementation in Servo. The task is in progress and we plan to carry on the work on it.
    • People: @gterzian, @Taym95

Embedding

  • Improving the Embedding API
    • There's already been some renewed talk about it in Zulip, but in general making the process of actually embedding Servo clearer and more well documented could be helpful in getting more people interested in using Servo.
    • People: @msub2, @wusyong

Infrastructure

  • Improve CI (build/lint/test) times
    • CI iterations times affect and slow down everyone working on Servo. This may be particular painful for new contributors who are not used to waiting 1 hour for CI checks, but also affects the productivity of regular contributors.
    • Commitment: @nicoburns, @dazabani

Outreach

  • Onboarding new contributors and maintainers
    • Servo currently struggles to maintain the amount of code it owns with the number of contributors/maintainers that it has. It ought to be an explicit priority to onboard new contributors, with an emphasis on onboarding senior contributors with Rust and/or browser development experience where possible. And additionally to uplift (new or existing) contributors to maintainer status where they (collectively) have the ability to independently review/approve/publish code in their area.
    • People: @nicoburns (needs support from the rest)

Performance

  • Layout performance
    • The new layout engine hasn't been optimized in most cases, it'd be useful to investigate performance and check if we can implement optimizations. One key feature that we're missing is usually known as incremental layout, that prevents having to relayout the whole website when there are changes in a particular part of it; this is a very important feature if we want to have a proper comparison with other engines after the initial layout.
    • People: @Igalia

Other ideas for the future

  • Implementing the Media Source API
    • The Media Source API is used in most major video streaming sites, including YouTube. Right now I believe Servo's video playback is limited to contexts where the entire video file is downloaded at once. I think that getting this working would help expand potential use cases for Servo, particularly for embedders that want to be able to interact with streaming video. It would also make for some nice press (worth noting Ladybird also does not support this API yet) and could help stir up more interest in the project. Not to mention there wouldn't be the ugly grey rectangle when viewing the Servo website anymore!
  • Supported embedding exemplar projects
    • We should choose 2-3 use cases for embedding Servo beyond a general purpose browser. Once these are selected, we can build representative examples of these use cases, which will help focus our API design and make Servo a more attractive option for Rust projects that match them. We have to identify use cases.
Clone this wiki locally