From MozillaWiki
Jump to: navigation, search

Stylo (a.k.a. Quantum CSS) will integrate Servo's CSS style system into Gecko, such that the style system code can be shared by Gecko and Servo. Stylo V1 will support Firefox on Windows, macOS, and Linux. Android support may ship in a later release.

Stylo is a core part of Project Quantum.

Getting Involved

If you're interested in contributing to Stylo or Servo, drop by the #servo IRC channel on Mozilla's IRC server.

One front where you can help out is adding new properties to Servo's CSS parsing crate. This requires familiarity with Rust, but is otherwise a good way to dip your toes into Servo's style system. To get started, see Servo's CSS property hacking guide for more information.

If you do not know Rust, you can help implement keyword properties. See the Stylo hacking guide for more details. The Stylo hacking guide also has instructions for building Stylo if you wish to play with it yourself. If you know C++, Firefox bug 1277133 has information about easy Gecko bugs that will assist Stylo's integration with Gecko.

Some Stylo bugs that are good for new Servo contributors are tagged on GitHub as “easy” bugs and “less-easy” bugs.

Release Criteria

Stylo should not cause us to regress any CSS feature unless we explicitly decide that regressing that specific feature is acceptable. The existing test suite will be the primary benchmark of this, with cross-validation from an automated analysis and manual QA of the Alexa Top 500 sites.

  • Stylo should have zero blocking bugs.
  • Stylo should pass all (non-disabled) Gecko reftests and mochitests.
  • Stylo should have no more unimplemented properties on the Alexa Top 500 sites than Gecko.
  • Stylo should pass visual diff testing (bug 1331552) for the Alexa Top 500 (?) sites.
  • Stylo's Talos test performance should be faster than or equal to Gecko's.
  • Stylo's memory usage (both Talos and beta telemetry) should be less than or equal to Gecko's.
  • Stylo's crash rate should be less than or equal to Gecko's.
  • Stylo's user engagement ratio (DAU/MAU) should be greater than or equal to Gecko's.

Work Breakdown Structure

  • Tests
    • reftests: Shing
    • mochitests: TBD
  • Cargo
    • Build Support: Nathan, Ralph
      • Build Stylo: Lars
    • Vendoring Support: Ted, Yehuda
      • Vendor Servo: Lars
  • Glue (Gecko/C++/Rust/Servo): Manish, Simon, Xidorn, Michael
  • CSS Support
    • CSS Properties: Cameron, Xidorn, Simon, Emilio, Bobby, Brian
    • CSSOM: Xidorn, Simon
  • Autoland
    • Servo CI and Autolander: Emily
    • Gecko CI and Autolander: Emily




  • Enable Stylo in Nightly (bug 1330412) (dependencies)
    • Implement parsing of all CSS properties supported by Firefox
    • Fix and enable all tests (without skipping or expecting failure)
    • Fix all crashes and assertion failures
      • Fuzz Stylo
      • Pass [Auto-tools/Projects/BugHunter Bughunter]
    • Manual QA sign-off
      • Smoke test Alexa Top N sites
      • Exploratory testing of browser UI and features


  • Stylo meta bug 1243581 (dependencies)
  • Run experiment comparing Stylo vs Gecko on engagement ratio, performance, crash rate, and memory usage.
  • Let Stylo ride the trains
    • Enable Stylo on all platforms (bug stylo-nightly)
      • Pass QA on all platforms (tests, fuzzing, BugHunter)
  • Ship Stylo to Release


Bugzilla Queries

P1 Bugs

ID Priority Summary Keywords Assigned to
1331047 P1 stylo: Teach servo how to restyle pseudo-implementing NAC Bobby Holley (:bholley) (busy with Stylo)
1331578 P1 stylo: Stylo is slower than Gecko on etc/ci/performance TP5 tests Bobby Holley (:bholley) (busy with Stylo)
1331843 P1 stylo: Servo CSS stylesheet parsing is 35% slower than Gecko's on myspace Talos testcase Bobby Holley (:bholley) (busy with Stylo)
1331848 P1 stylo: sequential style traversal is 3x slower than stock Gecko on myspace Talos testcase Bobby Holley (:bholley) (busy with Stylo)
1334732 P1 stylo: Handle all the ways that style data can be invalidated Bobby Holley (:bholley) (busy with Stylo)
1347408 P1 stylo: add a 1-entry cache to cssparser to avoid tokenizing twice Bobby Holley (:bholley) (busy with Stylo)
1348935 P1 stylo: Gecko selector matching overhead scales better with the number of rules than Servo's Bobby Holley (:bholley) (busy with Stylo)
1350244 P1 stylo: Hit MOZ_CRASH(Array not threadsafe) in layout/reftests/bugs/652301-1b.html Bobby Holley (:bholley) (busy with Stylo)
1350441 P1 stylo: fix a few restyle state coherency bugs Bobby Holley (:bholley) (busy with Stylo)
1351518 P1 stylo: Stop bailing out before NS_DOCUMENT_STATE_WINDOW_INACTIVE check Bobby Holley (:bholley) (busy with Stylo)
1341372 P1 stylo: detect new transitions and let it run Boris Chiou [:boris]
1343753 P1 stylo: Update CSS transitions with servo's computed values instead of nsStyleContext Boris Chiou [:boris]
1339629 P1 stylo: ServoStyleSheets don't permit modification Brad Werth [:bradwerth]
1341721 P1 stylo: add support for alternate ServoStyleSheets Brad Werth [:bradwerth]
1346256 P1 stylo: Expose computed style list to dev tools Brad Werth [:bradwerth]
1348481 P1 stylo: Stylesheet cloning doesn't seem to work right Brad Werth [:bradwerth]
1292609 P1 stylo: Incremental restyle for anonymous boxes Boris Zbarsky [:bz] (still a bit busy) (if a patch has no decent message, automatic r-)
1324618 P1 stylo: support ::first-letter Boris Zbarsky [:bz] (still a bit busy) (if a patch has no decent message, automatic r-)
1324619 P1 stylo: support ::first-line Boris Zbarsky [:bz] (still a bit busy) (if a patch has no decent message, automatic r-)
1340404 P1 stylo: dynamic changes to border-spacing on an ancestor of an anonymous table don't work properly Boris Zbarsky [:bz] (still a bit busy) (if a patch has no decent message, automatic r-)
1340405 P1 stylo: dynamic changes to text-indent on an ancestor of an anonymous table-cell don't work properly Boris Zbarsky [:bz] (still a bit busy) (if a patch has no decent message, automatic r-)
1290276 P1 stylo: XBL <stylesheet> support Cameron McCormack (:heycam)
1345695 P1 stylo: Assert that we have computed style in Servo_ResolveStyle when lazy computation is forbidden Cameron McCormack (:heycam)
1350671 P1 stylo: PresShell::RecreateFramesFor is sometimes called when there are pending restyles Cameron McCormack (:heycam)
1341761 P1 stylo: need -moz-element support Nazım Can Altınova [:canaltinova]
1351262 P1 stylo: Unquoted font-family should be serialized without quote Nazım Can Altınova [:canaltinova]
1351356 P1 stylo: Support -moz-transform Nazım Can Altınova [:canaltinova]
1336863 P1 stylo: style change via insertRule and deleteRule may not work C.J. Ku[:cjku](UTC+8)
1341667 P1 stylo: Figure out why all the W3C masking reftests fail C.J. Ku[:cjku](UTC+8)
1341703 P1 stylo: border-image support with url() seems to be broken C.J. Ku[:cjku](UTC+8)
1325878 P1 stylo: Implement Servo-backed nsMediaList Emilio Cobos Álvarez [:emilio]
1332525 P1 stylo: Style sharing cache not working Emilio Cobos Álvarez [:emilio]
1337541 P1 stylo: improve bloom filter usage in rust-selectors Emilio Cobos Álvarez [:emilio]
1347410 P1 stylo: something is weirdly wrong with viewport units Emilio Cobos Álvarez [:emilio]
1350140 P1 stylo: Implement all the pending state pseudo-classes. Emilio Cobos Álvarez [:emilio]
1288282 P1 land mozilla-central's Servo/Stylo code changes to servo/servo on GitHub Byron Jones ‹:glob›
1346232 P1 stylo: Reftests application timed out after 330 seconds with no output intermittent-failure Hiroyuki Ikezoe (:hiro)
1290237 P1 stylo: @font-face support Jonathan Kew (:jfkthame)
1345206 P1 stylo: Implement @page support J. Ryan Stinnett [:jryans] (use ni?)
1341714 P1 stylo: Need to support all the nsHTMLStyleSheet bits Manish Goregaokar [:manishearth]
1341724 P1 stylo: Add proper support for the "ch" unit and other font metrics Manish Goregaokar [:manishearth]
1349417 P1 stylo: support system fonts Manish Goregaokar [:manishearth]
1335990 P1 stylo: border-width is not computed to medium when border-style is specified Matt Brubeck (:mbrubeck)
1344314 P1 stylo: Setup for pref checks is broken for aliases Matt Brubeck (:mbrubeck)
1349651 P1 stylo: Need to implement HasAuthorSpecifiedStyle, so -moz-appearance will actually work with values other than "none" Matt Brubeck (:mbrubeck)
1338964 P1 [Stylo] Crash on google doc (blocks Hasal) crash
1349479 P1 stylo: bindgen busted on llvm4.0
1351200 P1 stylo: Gecko_nsStyleFont_GetBaseSize isn't thread-safe
1294915 P1 stylo: Explore more robust checking against FFI race conditions Steve Fink [:sfink] [:s:]
1321754 P1 stylo: UA style sheets parsed with author features should be added at the UA level Ting-Yu Lin [:TYLin] (UTC+8) (Away Mar 30 ~ April 4)
1321769 P1 stylo: scrollbars don't work Ting-Yu Lin [:TYLin] (UTC+8) (Away Mar 30 ~ April 4)
1330503 P1 stylo: URL values in CSSStyleSheet.insertRule and rule.style.setProperty are not recognized correctly Xidorn Quan [:xidorn] (UTC+10)
1331291 P1 stylo: URL is incorrectly resolved when it is from a stylesheet loaded via @import Xidorn Quan [:xidorn] (UTC+10)
1343964 P1 stylo: Figure out a performant solution for base URIs Xidorn Quan [:xidorn] (UTC+10)
1345696 P1 stylo: Implement access to CSSFontFaceRule Xidorn Quan [:xidorn] (UTC+10)
1346974 P1 stylo: base URI handling for inline style sets is super-slow Xidorn Quan [:xidorn] (UTC+10)

56 Total; 56 Open (100%); 0 Resolved (0%); 0 Verified (0%);

Fixed Recently Bugs

ID Priority Summary Keywords Assigned to
1347435 P1 stylo: handle URLs more efficiently Bobby Holley (:bholley) (busy with Stylo)
1349815 P1 stylo: Gecko_GetLookAndFeelSystemColor mutates static data Bobby Holley (:bholley) (busy with Stylo)
1348606 P1 stylo: Gecko_CopyStyleContentsFrom modifies non-threadsafe refcounts Bobby Holley (:bholley) (busy with Stylo)
1350115 P1 stylo: StyleNewSubtree triggers animation restyle and requests a post-traversal we aren't set up to do Bobby Holley (:bholley) (busy with Stylo)
1351026 P1 stylo: nsCSSValue::Reset asserts when OMTA runs concurrently with parallel traversal Bobby Holley (:bholley) (busy with Stylo)
1349834 -- stylo: Remove eRestyle_SVGAttrAnimations declartion. Boris Chiou [:boris]
1349659 -- stylo: implement :required and :optional pseudo-classes Boris Zbarsky [:bz] (still a bit busy) (if a patch has no decent message, automatic r-)
1349457 P1 stylo: eagerly style generated content just after it is created Cameron McCormack (:heycam)
1349134 P1 stylo: TraversalRootBehavior::UnstyledChildrenOnly doesn't work when <xbl:children> distributes the new children further down the tree Cameron McCormack (:heycam)
1349487 P1 stylo: eagerly style content appended in a ShadowRoot Cameron McCormack (:heycam)
1342139 P1 stylo: Need will-change support Nazım Can Altınova [:canaltinova]
1341763 P1 stylo: need -moz-image-rect support Nazım Can Altınova [:canaltinova]
1345950 P1 stylo: slow selector flag handling is broken Emilio Cobos Álvarez [:emilio]
1349553 P1 stylo: Fix a few dynamic state change handling bugs. Emilio Cobos Álvarez [:emilio]
1349885 P1 stylo: Simplify computation of float and position. Emilio Cobos Álvarez [:emilio]
1346663 P1 stylo: Add a function that returns computed values without animation/transition rules Hiroyuki Ikezoe (:hiro)
1344966 P1 stylo: Implement eRestyle_CSSAnimations and eRestyle_CSSTransitions to avoid triggering CSS transitions due to style changes caused by animations Hiroyuki Ikezoe (:hiro)
1350754 P3 stylo: Call EffectCompositor::UpdateEffectProperties() Hiroyuki Ikezoe (:hiro)
1351145 -- stylo: Enable in-visibility-hidden-animation-pseudo-element.html test Hiroyuki Ikezoe (:hiro)
1347819 -- stylo: Change nsFont::languageOverride to store uint32_t directly Jeremy Chen [:jeremychen] UTC+8 (Away 4/3-4/4)
1347821 P1 stylo: Implement gecko glue for font-language-override Jeremy Chen [:jeremychen] UTC+8 (Away 4/3-4/4)
1343031 P4 stylo: Intermittent ogg-video/444-1.html == ogg-video/444-1.html | image comparison, max difference: 25, number of differing pixels: 2299 intermittent-failure Joel Maher ( :jmaher)
1348754 P2 stylo reftests appear to be running as non-e10s but are reported as e10s Joel Maher ( :jmaher)
1349149 -- stylo: Build failure in geckoservo crate with rustc 1.16.0 regression Manish Goregaokar [:manishearth]
1341086 P1 stylo: need to support the :-moz-system-metric pseudo-class Manish Goregaokar [:manishearth]
1330051 P1 stylo: Serialize/reparse style attributes when moving nodes between documents with different style backends Manish Goregaokar [:manishearth]
1341775 P1 stylo: need to do the right thing with "font-family: monospace" in terms of font size Manish Goregaokar [:manishearth]
1337068 P1 stylo: implement support for :-moz-only-whitespace and  :-moz-first-node in rust-selectors Matt Brubeck (:mbrubeck)
1348398 P5 Remove unused Gecko_Truncate[C]String once it is no longer used by stylo Michael Layzell [:mystor]
1342739 P2 stylo: need to do display fixup based on writing-mode
1351204 -- stylo: Assertion failure: pixelValue >= 0 (we ensured non-negative while parsing)
1350751 P3 stylo: Cleanup animation-only flag handling in traversal.rs
1339703 P1 stylo: iter_declarations is slow Simon Sapin (:SimonSapin)
1322570 P1 stylo: assert against calling GetParent for stylo-backed style contexts Ting-Yu Lin [:TYLin] (UTC+8) (Away Mar 30 ~ April 4)

34 Total; 0 Open (0%); 34 Resolved (100%); 0 Verified (0%);