Skip to content

blog: This month in Servo (July 2025) #244

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 8 commits into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 28 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -315,19 +315,41 @@ centsPerMonth += $$("table tbody tr")
```
- After running it on every page, the result is USD cents/month

LFX:

- Go to <https://crowdfunding.lfx.linuxfoundation.org/projects/e98e012f-479e-45d0-8781-4d7f616baa9d/financial>
- You may need to open it in private browsing to avoid getting a 404, not sure why
- Manually add up the amounts for one month, stopping when you see the same donor repeated

thanks.dev:

- Go to <https://thanks.dev/>
- Click **Sign in with GitHub** and follow the instructions (if any)
- Go to <https://thanks.dev/dashboard>
- Click **For maintainers**
- The number of donors is in “You currently have X donors.”
- If possible, make a payout: click **payouts**, click **withdraw**, click **withdraw**
- Click **income**, make sure the &lt;select> is set to **gh/servo**
- Run this code in devtools, changing `Jul 25` to the **date** column text for last month:
```js
monthText = "Jul 25";
columnHeadings = [...document.querySelectorAll("div")]
.filter(div => div.textContent == "amount")
.flatMap(div => [...div.parentNode.childNodes]);
if (new Set(columnHeadings.map(th => th.parentNode)).size != 1)
throw new Error("Unexpected columnHeadings values");
headingRow = columnHeadings[0].parentNode;
// The parent is actually the whole page content area, not just the table >:(
contentArea = headingRow.parentNode;
dataRowStart = [...contentArea.childNodes].indexOf(headingRow) + 1;
dataRowEnd = [...contentArea.childNodes].length - 1; // Total row (fragile?)
dataRows = [...contentArea.childNodes].slice(dataRowStart, dataRowEnd);
if (!dataRows.every(tr => tr.childNodes.length == columnHeadings.length))
throw new Error("Unexpected table structure");
columnIndices = new Map(columnHeadings.map((th,i) => [th.textContent, i]));
getValue = (tr,columnName) => tr.childNodes[columnIndices.get(columnName)].textContent;
dataRows
.filter(tr => getValue(tr, "date").endsWith(` ${monthText}`))
.map(tr => getValue(tr, "amount"))
.filter(amount => amount != "< $0.01")
.map(amount => parseInt(amount.match(/^[$]([0-9]+[.][0-9][0-9])$/)[1].replace(".","")))
.reduce((p, q) => p + q)
```
- The result is USD cents/month

## Triaging commits in nightlies for monthly updates

Expand Down
75 changes: 75 additions & 0 deletions _posts/2025-08-15-this-month-in-servo.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
---
layout: post
tags: blog
title: "This month in Servo: and more!"
date: 2025-08-15
summary: ao!! wrrrrao!!
categories:
---

<!--
- 4691/month donations (4523/month without thanks.dev)
- 1980.23/month opencollective
- 2543.00/month github
- 22 donors 168.55/month thanks.dev
- benchmarking runners
- windowing
- [WebDriver Task] Window Size related commands gives inaccurate result servo#37804
- ScreenY and outerHeight ignores the title bar height servo#37824
- window.screen.availWidth and availHeight is inaccurate servo#37878
- servoshell: Tab bar dissapears when resizing the window servo#38255
- Resizing the window may reveal extra space that can’t be scrolled servo#38089
- --device-pixel-ratio breaks hit testing servo#38090
- rect for webview.rs and compositor: webview_renderer.rs is heavily mix-used servo#37978
- WebDriver: documents loaded with Navigate To have incorrect scrollable area servo#38093
- vello
- Investigate other 2D canvas renderers in a post-Pathfinder world servo#30636
- Tracking issue of Vello canvas backends servo#38345
- canvas
- Move canvas state handling from CanvasData (canvas paint thread) into CanvasState (script) servo#38022
- “We want our 2d canvas abstractions to become more general, for potential rendering of all content”
- webdriver
- [WebDriver] PointerMove does not consider Global position servo#38042 <https://w3c.github.io/webdriver/#dfn-perform-a-pointer-move>
- [webdriver] Moving webdriver to servoshell servo#37370
- geometry
- Create universal utility function for conversion between Physical & Logical unit servo#37937
-->

## Donations

Thanks again for your generous support!
We are now receiving **4691 USD/month** (+5.0% <!-- (+1.3% without thanks.dev) --> over June) in recurring donations.
This helps cover the cost of our [self-hosted](https://ci0.servo.org) [CI](https://ci1.servo.org) [runners](https://ci2.servo.org) and one of our [latest Outreachy interns](https://www.outreachy.org/alums/2025-06/#:~:text=Servo)!

Keep an eye out for [further improvements to our CI system](https://github.com/servo/servo/issues/38141) in the coming months, including [**ten-minute WPT builds**](https://github.com/servo/ci-runners/issues/21) and our new proposal for [**dedicated benchmarking runners**](https://github.com/servo/project/issues/160), all thanks to your support.

Servo is also on [thanks.dev](https://thanks.dev), and already **22 GitHub users** (−3 from June) that depend on Servo are sponsoring us there.
If you use Servo libraries like [url](https://crates.io/crates/url/reverse_dependencies), [html5ever](https://crates.io/crates/html5ever/reverse_dependencies), [selectors](https://crates.io/crates/selectors/reverse_dependencies), or [cssparser](https://crates.io/crates/cssparser/reverse_dependencies), signing up for [thanks.dev](https://thanks.dev) could be a good way for you (or your employer) to give back to the community.

<figure class="_fig" style="width: 100%; margin: 1em 0;"><div class="_flex" style="height: calc(1lh + 3em); flex-flow: column nowrap; text-align: left;">
<div style="position: relative; text-align: right;">
<div style="position: absolute; margin-left: calc(100% * 4691 / 10000); padding-left: 0.5em;"><strong>4691</strong> USD/month</div>
<div style="position: absolute; margin-left: calc(100% * 4691 / 10000); height: calc(1lh + 1.5em); border-left: 1px solid;"></div>
<div style="position: absolute; margin-left: calc(100% - 0.5em); height: calc(1lh + 1.5em); border-left: 1px solid;"></div>
<div style="padding-right: 1em;"><strong>10000</strong><!-- USD/month --></div>
</div>
<progress value="4691" max="10000" style="transform: scale(3); transform-origin: top left; width: calc(100% / 3);"></progress>
</div></figure>

As always, use of these funds will be decided transparently in the Technical Steering Committee.
For more details, head to our [Sponsorship page]({{ '/sponsorship/' | url }}).

<style>
._correction {
max-width: 33em;
margin: 1em auto;
border-bottom: 1px solid;
padding-bottom: 1em;
}
._note {
margin: 1em 1em;
border-left: 1px solid;
padding-left: 1em;
opacity: 0.75;
}
</style>
Loading