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
1294915 P1 stylo: Explore more robust checking against FFI race conditions Bobby Holley (:bholley) (busy with Stylo)
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)
1347435 P1 stylo: handle URLs more efficiently Bobby Holley (:bholley) (busy with Stylo)
1348606 P1 stylo: Gecko_CopyStyleContentsFrom modifies non-threadsafe refcounts 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)
1349815 P1 stylo: Gecko_GetLookAndFeelSystemColor mutates static data 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)
1349134 P1 stylo: TraversalRootBehavior::UnstyledChildrenOnly doesn't work when <xbl:children> distributes the new children further down the tree Cameron McCormack (:heycam)
1349457 P1 stylo: eagerly style generated content just after it is created Cameron McCormack (:heycam)
1349487 P1 stylo: eagerly style content appended in a ShadowRoot Cameron McCormack (:heycam)
1341761 P1 stylo: need -moz-element support Nazım Can Altınova [:canaltinova]
1341763 P1 stylo: need -moz-image-rect support Nazım Can Altınova [:canaltinova]
1336863 P1 stylo: style change via insertRule and deleteRule may not work C.J. Ku[:cjku](UTC+8)
1341785 P1 stylo: need support for -moz-transform-* properties 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]
1349553 P1 stylo: Fix a few dynamic state change handling bugs. Emilio Cobos Álvarez [:emilio]
1288282 P1 land mozilla-central's Servo/Stylo code changes to servo/servo on GitHub Byron Jones ‹:glob›
1344966 P1 stylo: Implement eRestyle_CSSAnimations and eRestyle_CSSTransitions to avoid triggering CSS transitions due to style changes caused by animations Hiroyuki Ikezoe (:hiro)
1346663 P1 stylo: Add a function that returns computed values without animation/transition rules Hiroyuki Ikezoe (:hiro)
1290237 P1 stylo: @font-face support Jonathan Kew (:jfkthame)
1346232 P1 stylo: Reftests application timed out after 330 seconds with no output intermittent-failure Joel Maher ( :jmaher)
1345206 P1 stylo: Implement @page support J. Ryan Stinnett [:jryans] (use ni?)
1330051 P1 stylo: Serialize/reparse style attributes when moving nodes between documents with different style backends Manish Goregaokar [:manishearth]
1341647 P1 stylo: need to port HTMLBodyElement::WalkContentStyleRules to stylo Manish Goregaokar [:manishearth]
1341648 P1 stylo: need to port HTMLTableCellElement::WalkContentStyleRules to stylo Manish Goregaokar [:manishearth]
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]
1341775 P1 stylo: need to do the right thing with "font-family: monospace" in terms of font size 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
1339703 P1 stylo: iter_declarations is slow Simon Sapin (:SimonSapin)
1321754 P1 stylo: UA style sheets parsed with author features should be added at the UA level Ting-Yu Lin [:TYLin] (UTC+8)
1321769 P1 stylo: scrollbars don't work Ting-Yu Lin [:TYLin] (UTC+8)
1322570 P1 stylo: assert against calling GetParent for stylo-backed style contexts Ting-Yu Lin [:TYLin] (UTC+8)
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)

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

Fixed Recently Bugs

ID Priority Summary Keywords Assigned to
1347399 P1 stylo: Assertion failure: NS_IsMainThread(), at nsCSSValue.cpp:2823 Bobby Holley (:bholley) (busy with Stylo)
1347719 -- stylo: Rearrange PropertyDeclaration to save a word Bobby Holley (:bholley) (busy with Stylo)
1348602 P1 stylo: nsStyleContext::PeekStyleEffects and friends mutate the style context Bobby Holley (:bholley) (busy with Stylo)
1339704 P1 stylo: Filter out the CascadeLevel which doesn't need to be styled in GetServoAnimationRule Boris Chiou [:boris]
1347053 P1 stylo: division by zero in set_transition_delay when share profile from gecko profiler Boris Chiou [:boris]
1333310 P3 stylo: Refactor AnimationRule Boris Chiou [:boris]
1343153 P3 stylo: use servo css-parser for ParseEasing Boris Chiou [:boris]
1347411 -- stylo: Fix dynamic style recomputation for various simple enough anon boxes Boris Zbarsky [:bz] (still a bit busy) (if a patch has no decent message, automatic r-)
1338461 P1 stylo: use eRestyle_StyleAttribute rather than converting it to eRestyle_Self/Subtree Cameron McCormack (:heycam)
1341739 P1 stylo: need support for :valid/:invalid/:-moz-ui-valid pseudo-classes Nazım Can Altınova [:canaltinova]
1341642 P1 stylo: Need support for the various -moz stuff used for alt text Nazım Can Altınova [:canaltinova]
1331529 P1 stylo: Implement glue for flex-basis Nazım Can Altınova [:canaltinova]
1348873 P1 Stylo: Change ServoType to uint64_t instead of uint16_t in EventStates Nazım Can Altınova [:canaltinova]
1342139 P1 stylo: Need will-change support Nazım Can Altınova [:canaltinova]
1339674 P1 stylo: update glue to set transform-box as a StyleGeometryBox. C.J. Ku[:cjku](UTC+8)
1347273 -- stylo: Media query parsing is bogus. Emilio Cobos Álvarez [:emilio]
1347381 -- stylo: Restyle is not triggered properly when changing condition text of media rule Emilio Cobos Álvarez [:emilio]
1345950 P1 stylo: slow selector flag handling is broken Emilio Cobos Álvarez [:emilio]
1347806 -- stylo: Confusion about nsIAtom for ::before and ::after pseudo Hiroyuki Ikezoe (:hiro)
1340958 P1 stylo: Gecko_GetAnimationRule mutates the effect set during the parallel traversal Hiroyuki Ikezoe (:hiro)
1348615 -- stylo: implement/parse -{moz,webkit}-text-size-adjust and its gecko glue Jeremy Chen [:jeremychen] UTC+8
1340696 P1 stylo: need to support system colors Manish Goregaokar [:manishearth]
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]
1340683 P1 stylo: need to support -moz-any Matt Brubeck (:mbrubeck)
1348487 -- stylo: -moz-any parsing does not fail when combinators are present in the inner selector Matt Brubeck (:mbrubeck)
1337068 P1 stylo: implement support for :-moz-only-whitespace and  :-moz-first-node in rust-selectors Matt Brubeck (:mbrubeck)
1337635 P3 stylo: non-fatal assertion unexpected type: 'Not Reached', file nsComputedDOMStyle.cpp, line 1348
1337693 P4 stylo: Pass the hashtable into Servo_AnimationValues_Uncompute directly
1348493 -- stylo: call ClearServoDataFromSubtree on cloned canvas custom content
1348587 P1 stylo: Consider AtomicRefCell instead of RwLock inside SharedRwLock
1348746 -- stylo: don't eagerly style new children from bindings if the pres shell hasn't been initialized yet
1335941 P1 stylo: RwLock overhead dominates selector matching Simon Sapin (:SimonSapin)
1349130 -- stylo: wrong reference files in reftest-stylo.list Shing Lyu [:shinglyu]
1348210 -- Bug Filer should auto-block the stylo-bustage metabug on stylo failures Wes Kocher (:KWierso)
1340439 P5 stylo: Update mochitest expectation Xidorn Quan [:xidorn] (UTC+10)

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