Servo Baseline Readiness

Dietrich Ayala — dietrich@webtransitions.org — webtransitions.org
Servo is falling behind the web. It completes ~22 features/year at production quality, while the Baseline “Widely Available” set grows at ~52 features/year. At this pace, Servo plateaus around 80% by ~2037 and never catches up. Full velocity parity requires ~44 FTE (€8.8M/yr, €26.3M over 3yr). BWA features vary widely in real-world usage — a phased approach that prioritizes high-usage features first could reduce the initial headcount and cost by up to 40% while building toward full parity. The highest-leverage actions are unstalling 141 blocked features and fixing 51 regressions (features that lost >5 percentage points). This is a work-in-progress analysis focusing on one aspect of web engine development — feature-level readiness — and is not exhaustive. It is designed to orient thinking about cost and timelines. The central question: what would it cost in engineering investment alone to bring Servo to velocity parity within 3 years, excluding non-engineering and operational costs?
19.8% (87/439)
Current BWA Readiness
(measurable features ≥95%)
593 → ~879
BWA Growth
today → by 2031 (~52/yr)
22 vs 52
Web Feature Velocity Gap
Servo completions/yr vs BWA growth/yr
44 FTE
Velocity Parity
€8.8M/yr — €26.3M over 3yr
38–41 FTE
Usage-Prioritized Parity
€7.6–8.2M/yr (skip low-usage)

WPT Score Trajectory

Feature Score Distribution Over Time

Baseline Readiness by Year (Cumulative)

Commits & Contributors

Projection: Features Fully Supported (Static Target)

Moving Target: Servo vs Growing BWA Set

Stalled Features by Platform Area

Top 25 Regressions (Widely Available Features)

Feature Landscape: Score vs Velocity

Interactive Projection & Cost Calculator

113100
Current: ~13 FTE from 115 unique authors (9 core at ≥50% FTE). Measured as commits per author over 7 months, where 1 FTE = ~22 commits/month. Bots excluded.
€50k€200k€400k
0.3 (steep)0.701.0 (linear)
Static milestones below are against today's 439 measurable features. Moving-target milestones account for the growing BWA set (~52 new features/year).

Moving Target: BWA grows ~52 features/year — projected 879 BWA by 2031

Key Insights

Regressions are the #1 problem — 51 features went backward, some by 50–75 percentage points. Fixing regressions is cheaper than new implementation.

Total regression magnitude across all 51 features: 1047 percentage points of lost progress.

Regressions by platform area:

AreaCountAvg Regression
webassembly4-29.7pp
html4-25.6pp
api23-19.3pp
css20-19.1pp

Worst 15 regressions:

FeatureWasNowDelta
base64encodedecode100%25%-75.0pp
object-fit97%26%-70.9pp
webvtt63%6%-56.4pp
empty100%50%-50.0pp
input-submit100%50%-50.0pp
supports-compat100%50%-50.0pp
wasm-multi-value67%22%-44.4pp
wasm-exception-handling54%21%-33.1pp
console55%23%-32.0pp
before-after100%69%-30.6pp
svg54%24%-29.9pp
tab-size33%5%-28.8pp
input-checkbox80%52%-27.9pp
figure100%75%-25.0pp
wasm45%22%-23.6pp

Regressions often indicate code removals, refactors that broke existing functionality, or dependency changes. These are typically cheaper to fix than building new features from scratch — the code existed once and often just needs targeted repairs.

80 features at 80-95% are near-complete. The 20 that are stalled represent the highest-ROI targets.

60 actively improving — on track to reach 95%:

FeatureScoreVelocity
vertical-align94.8%+3.30pp/q
font-size94.6%+0.57pp/q
constraint-validation94.4%+0.21pp/q
trig-functions94.3%+6.10pp/q
url94.1%+0.37pp/q
textarea93.3%+2.01pp/q
webgl93.0%+1.32pp/q
oklab92.9%+9.29pp/q
calc92.6%+1.05pp/q
localstorage91.7%+0.11pp/q
import91.7%+0.29pp/q
text-encoding91.2%+1.00pp/q
...and 48 more

20 stalled — so close yet stuck:

FeatureScore
min-max-clamp93.0%
supports92.7%
unset-value91.7%
dataset91.1%
background-clip90.3%
not90.2%
css-escape90.0%
css-supports88.0%
dirname87.5%
input-date-time86.4%
channel-messaging84.0%
list-elements83.9%
currentcolor83.3%
min-max-width-height83.3%
prefers-color-scheme83.3%
shadow-parts82.0%
gradients81.5%
border-radius80.3%
base80.3%
font-weight80.2%

Near-complete features need only a small number of failing subtests fixed to cross the 95% threshold. The stalled ones are the highest-ROI investment: small effort, large impact on the headline readiness number.

Velocity is accelerating — WPT score doubled from 30% to 62% in 2.5 years. ~13 FTE-equivalent from 115 authors.

Quarterly progress:

QuarterFeatures ImprovedRegressedCrossed 95%
2024-Q193487
2024-Q31125314
2025-Q11106013
2025-Q31274112
2026-Q11534713

Score distribution shift:

Bucket2023-Q32026-Q1Change
0-20%11364-49
20-50%10386-17
50-80%113122+9
80-95%5080+30
95-100%4787+40

No data: 167 → 154

The improving trend is driven by growing contributor engagement and focused work on layout (CSS Grid, Flexbox) and DOM APIs. Recent quarters show more features crossing the 95% threshold, indicating the project is moving from broad partial support to deep per-feature completion.

141 stalled features block 75%+ readiness regardless of investment. Strategic focus matters more than headcount.

Stalled features by area:

AreaCount% of Stalled
api6848%
css5841%
html75%
webassembly54%
unknown21%
http11%

Highest-scoring stalled features (closest to completion):

FeatureScoreArea
min-max-clamp93.0%css
supports92.7%api
unset-value91.7%css
dataset91.1%api
background-clip90.3%css
not90.2%css
css-escape90.0%api
css-supports88.0%api
dirname87.5%api
input-date-time86.4%api
channel-messaging84.0%api
list-elements83.9%api
currentcolor83.3%css
min-max-width-height83.3%css
prefers-color-scheme83.3%css
...and 126 more

Stalled features have zero or negative velocity over the entire 2.5-year measurement period. Adding more contributors to already-improving features won't help here — these need dedicated attention, possibly architectural work or new subsystem implementations. Unblocking even 20-30 of the highest-scoring stalled features would significantly shift the projection curves.

154 features (26%) have no WPT data — 78 JS built-ins, 23 semantic HTML elements, and 53 other features lack WPT test mapping.

No-data features by category:

CategoryCountLikely supported?
JS built-ins (SpiderMonkey)78Yes — tested by test262
Semantic HTML elements23Yes — trivial elements
WebGL extensions20Depends on GPU driver
Basic DOM interfaces11Likely
DOM APIs8Varies
CSS features6Varies
WebAssembly features3Likely
HTTP features3Varies
Other (media types, etc.)2Varies

Why no data?

  • The WPT Feature Manifest doesn't map these features to WPT test paths
  • 78 JS built-ins (Array, Promise, Intl, etc.) are tested by TC39/test262, not WPT. Servo inherits full support via SpiderMonkey
  • 23 semantic HTML elements (<article>, <nav>, <mark>, etc.) have no special behavior to test — any HTML parser supports them
  • 20 WebGL extensions depend on GPU driver support, not engine code
  • The remaining 33 features are basic DOM, CSS, HTTP, and WebAssembly features with varying support

Methodology

Data Sources

Web Features — The web-features package defines 1,129 curated feature groups that map to Browser Compat Data (BCD) keys. Each feature has a Baseline status: Widely Available (high) means the feature has been supported across all core browsers for 30+ months. This analysis focuses on the 593 Widely Available features as the target set.

WPT Feature Manifest — The Web Platform Tests project maintains WEB_FEATURES_MANIFEST.json, which maps 841 web-feature IDs to 53,549 WPT test paths. This is the critical bridge from feature definitions to measurable test outcomes.

WPT Results — Servo runs the full WPT suite daily on wpt.fyi. We use the summary_v2.json format, which records per-test status and subtest counts. Historical snapshots at 6 quarterly intervals (2023-Q3 through 2026-Q1) provide the longitudinal data.

Scoring Model

Each feature's score is the average per-test pass rate across all matched WPT tests. For tests with subtests, the score is passed_subtests / total_subtests. For simple pass/fail tests, the score is 0 or 1. A feature is considered fully supported at ≥95% score.

Features with no WPT manifest mapping (154 of 593) are categorized as “No Data.” These break down into 78 JS built-ins (supported via SpiderMonkey, tested by test262 not WPT), 23 semantic HTML elements (trivial — no special behavior to test), 20 WebGL extensions (GPU-driver-dependent), and 33 other features (basic DOM, CSS, HTTP, WebAssembly). The 78 JS built-ins and 23 semantic HTML elements are supported via SpiderMonkey and the HTML parser respectively; the 20 WebGL extensions depend on GPU driver support; the remaining 33 have unknown status.

FTE-Equivalent Contributors

The contributor count uses full-time equivalents (FTE), not raw headcount. Computed from per-author commit counts over Jul 2025 – Jan 2026 (7 months), excluding bots (dependabot, WPT Sync). Each author's FTE fraction = min(their_commits / 154, 1.0), where 154 = 22 commits/month × 7 months (~1 commit per working day). The sum across all 115 human authors yields ~13 FTE. Of these, 9 core contributors operate at ≥50% FTE, with a long tail of occasional contributors. This FTE figure is what drives the projection and cost models — it represents the effective engineering capacity, which is what matters for funding decisions.

Velocity & Projections

Per-feature velocity is computed as the improvement per quarter from 2023-Q3 to present. We use max(overall_velocity, recent_velocity) where recent velocity covers the last 4 quarters, to account for accelerating progress. Features with velocity ≤0.001 percentage points/quarter are classified as stalled.

Projections extrapolate each feature individually: quarters_to_95% = (0.95 - current_score) / (velocity × scale_factor). The scale factor models additional FTEs using a sublinear power law: scale = (new_fte / current_fte)exponent. The default exponent of 0.7 reflects Brooks's Law — communication overhead means doubling contributors doesn't double output.

Cost Model

Cost is calculated as: additional_FTE × salary × years_to_milestone, where the milestone date is determined by the Nth-percentile feature reaching 95%. This represents the marginal cost of accelerating beyond the current trajectory — not the total program cost. The model assumes FTEs can be allocated to stalled features and that the scaling exponent applies uniformly.

Salary Assumptions

The default salary of €200k/yr is composed of a €150k base (European senior software engineer median total cost to employer) × a 1.33× specialization multiplier for two factors:

Reference rates used to calibrate this figure:

SourceAnnual EquivalentNotes
NLnet grants (up to €65/hr)€117kBelow-market cost-recovery rate
Sovereign Tech Fund (employment + social)€79–101kGerman public-sector TVöD scale
European senior SWE median (total cost)€100–140kVaries by country; incl. employer costs
Mozilla Germany senior SWE (Levels.fyi)€145–164kTop-tier browser-engine employer
Model default (€150k × 1.33)€200kSpecialized + multi-disciplinary premium
Servo grant ($150/hr × 1800)€248kUS contractor rate with overhead

Limitations

Thanks to the people who’ve reviewed the methodology and approach so far. NOTE: AI was used in the making of this draft report. For suggestions for improvement or to report inaccuracies, contact dietrich@webtransitions.org.