+0.18 The web at maximum FPS: How WebRender gets rid of jank (hacks.mozilla.org S:+0.27 )
853 points by bpierre 3062 days ago | 207 comments on HN | Mild positive Editorial · v3.7 · 2026-02-28 09:50:38
Summary Knowledge Access & Technical Empowerment Advocates
This technical article from Mozilla Hacks advances knowledge about WebRender browser rendering optimization. While not explicitly engaged with human rights provisions, the article implicitly champions open access to educational content (Article 26), supports freedom of expression through knowledge-sharing (Article 19), and demonstrates Mozilla's commitment to advancing scientific understanding of web technology (Article 27). The domain's structural support for open access and non-profit mission strengthens positive scores across education, expression, and scientific collaboration dimensions.
Article Heatmap
Preamble: ND — Preamble Preamble: No Data — Preamble P Article 1: ND — Freedom, Equality, Brotherhood Article 1: No Data — Freedom, Equality, Brotherhood 1 Article 2: ND — Non-Discrimination Article 2: No Data — Non-Discrimination 2 Article 3: ND — Life, Liberty, Security Article 3: No Data — Life, Liberty, Security 3 Article 4: ND — No Slavery Article 4: No Data — No Slavery 4 Article 5: ND — No Torture Article 5: No Data — No Torture 5 Article 6: ND — Legal Personhood Article 6: No Data — Legal Personhood 6 Article 7: ND — Equality Before Law Article 7: No Data — Equality Before Law 7 Article 8: ND — Right to Remedy Article 8: No Data — Right to Remedy 8 Article 9: ND — No Arbitrary Detention Article 9: No Data — No Arbitrary Detention 9 Article 10: ND — Fair Hearing Article 10: No Data — Fair Hearing 10 Article 11: ND — Presumption of Innocence Article 11: No Data — Presumption of Innocence 11 Article 12: ND — Privacy Article 12: No Data — Privacy 12 Article 13: ND — Freedom of Movement Article 13: No Data — Freedom of Movement 13 Article 14: ND — Asylum Article 14: No Data — Asylum 14 Article 15: ND — Nationality Article 15: No Data — Nationality 15 Article 16: ND — Marriage & Family Article 16: No Data — Marriage & Family 16 Article 17: ND — Property Article 17: No Data — Property 17 Article 18: ND — Freedom of Thought Article 18: No Data — Freedom of Thought 18 Article 19: +0.38 — Freedom of Expression 19 Article 20: ND — Assembly & Association Article 20: No Data — Assembly & Association 20 Article 21: ND — Political Participation Article 21: No Data — Political Participation 21 Article 22: ND — Social Security Article 22: No Data — Social Security 22 Article 23: +0.10 — Work & Equal Pay 23 Article 24: ND — Rest & Leisure Article 24: No Data — Rest & Leisure 24 Article 25: ND — Standard of Living Article 25: No Data — Standard of Living 25 Article 26: +0.24 — Education 26 Article 27: +0.26 — Cultural Participation 27 Article 28: +0.10 — Social & International Order 28 Article 29: +0.13 — Duties to Community 29 Article 30: ND — No Destruction of Rights Article 30: No Data — No Destruction of Rights 30
Negative Neutral Positive No Data
Aggregates
Editorial Mean +0.18 Structural Mean +0.27
Weighted Mean +0.23 Unweighted Mean +0.20
Max +0.38 Article 19 Min +0.10 Article 23
Signal 6 No Data 25
Confidence 12% Volatility 0.10 (Low)
Negative 0 Channels E: 0.6 S: 0.4
SETL -0.13 Structural-dominant
FW Ratio 55% 17 facts · 14 inferences
Evidence: High: 1 Medium: 4 Low: 3 No Data: 23
Theme Radar
Foundation Security Legal Privacy & Movement Personal Expression Economic & Social Cultural Order & Duties Foundation: 0.00 (0 articles) Security: 0.00 (0 articles) Legal: 0.00 (0 articles) Privacy & Movement: 0.00 (0 articles) Personal: 0.00 (0 articles) Expression: 0.38 (1 articles) Economic & Social: 0.10 (1 articles) Cultural: 0.25 (2 articles) Order & Duties: 0.12 (2 articles)
HN Discussion 20 top-level · 30 replies
vvanders 2017-10-10 16:41 UTC link
Good stuff.

Speaking of rendering text glyphs on the GPU, there's a really clever trick(commonly called loop-blinn, from the two authors): https://developer.nvidia.com/gpugems/GPUGems3/gpugems3_ch25....

You can pretty much just use the existing bezier control points from TTF as-is which is really nice.

frostwhale 2017-10-10 16:42 UTC link
I was already extremely pleased with the Firefox Quantum beta, they really are stepping their game up. If this is truly as clean as they say it is, web browsing on cheap computers just got much smoother.
kidfiji 2017-10-10 16:45 UTC link
I just love how they simplify something that's seemingly esoteric to me. I work with the web and I still have a lot to learn.
fritzy 2017-10-10 16:51 UTC link
I imagine the render task tree also has to determine which intermediate textures to keep in the texture cache, and which ones will likely need to be redone in the next frame. That kind of optimization has to be tricky.
stevenhubertron 2017-10-10 16:58 UTC link
I really appreciate the time they are taking to describe the changes in an easy to understand way. The sketches and graphics really help explain a pretty complex subject.
kevindqc 2017-10-10 17:00 UTC link
>For a typical desktop PC, you want to have 100 draw calls or fewer per frame

Don't PC games use thousands of draw calls per frame?

pohl 2017-10-10 17:12 UTC link
Now that this is closer to shipping, I'm curious what impact this would have on battery life. On the one hand, this is lighting up more silicon; on the other hand: a faster race to sleep, perhaps?

Have there been any measurements on what the end result is on a typical modern laptop?

azinman2 2017-10-10 17:25 UTC link
Won’t this cause a lot of work to be done for a blinking cursor? Curious about battery drain, I/O overhead, General CPU usage, etc.
jacob019 2017-10-10 17:29 UTC link
Love the little stick figure representations of the threads/cores.
djhworld 2017-10-10 17:57 UTC link
This is fantastic (for me)

I'd largely forgotten what pixel shaders actually were, so it was nice to get a high level understanding through this article, especially with the drawings!

pacaro 2017-10-10 18:37 UTC link
Humourously enough, when I worked on a team that was writing a graphical web browser for mobile in the late 90's [1], they used a display list for rendering.

The reasoning was somewhat different, web pages were essentially static (we didn't do "DHTML"), if the page rendering process could generate an efficient display list, then the page source could be discarded, and only the display list needed to be held in memory, this rendering could then be pipelined with reading the page over the network, so the entire page was never in memory.

Full Disclosure: while I later wrote significant components of this browser (EcmaScript, WmlScript, SSL, WTLS, JPEG, PNG), the work I'm describing was entirely done by other people!

[1] - I joined in 97, the first public demo was at GSM World Congress Feb 98

shmerl 2017-10-10 18:40 UTC link
Is it going to use Vulkan? Sounds like a good fit for proper parallelized rendering.

UPDATE: Ah, I see it's mentioned in the future work: https://github.com/servo/webrender/wiki#future-work

    Vulkan?
    This could possibly make some of the serial
    steps above able to be parallelized further.
So it will be using OpenGL then?
JepZ 2017-10-10 19:28 UTC link
While I would consider myself more a Golang fan than a Rust fan, I am impressed by the speed by which the Mozilla team is changing fundamental parts of their browser and somehow I believe rust has something to do with that speed.
markdog12 2017-10-10 20:10 UTC link
Is WebRender working on Android Firefox Nightly yet?

Update: about:support says not ready for Android

amelius 2017-10-10 20:33 UTC link
> What if we stopped trying to guess what layers we need? What if we removed this boundary between painting and compositing and just went back to painting every pixel on every frame?

This feels a bit like cheating. Not all devices have a GPU. Would Firefox be slow on those devices?

Also, pages can become arbitrarily complicated. This means that an approach where compositing is used can still be faster in certain circumstances.

bsimpson 2017-10-10 20:42 UTC link
Great write-up - thanks for sharing.

The name "WebRender" is unfortunate though. Things with a "Web" prefix - "Web Animations", "WebAssembly", "WebVR" - are typically cross-browser standards. This is just a new approach Firefox is using for rendering. It doesn't appear to be part of any standard.

madez 2017-10-10 20:44 UTC link
Why are they so obsessed with 60 fps? 120 fps looks considerably better, and there are other effects like smear and judder that significantly decrease even with significantly higher frame rates, say 480 fps [1].

[1] http://blogs.valvesoftware.com/abrash/down-the-vr-rabbit-hol...

esaym 2017-10-10 22:34 UTC link
Will there finally be a unified use of the GPU on all platforms (win, mac, linux, etc) or will WebRender just be a Windows only feature for quite some time?
anon1253 2017-10-10 22:58 UTC link
Just tried it with the Nightly by setting gfx.webrender.enabled to true in about:config. Wow, that thing flies. It's seriously amazing. And so far no bugs or visual inconsistencies I could detect. Firefox is really making great progress on this front!
poizan42 2017-10-11 00:22 UTC link
I tried testing it out on a ThinkPad T61 to see how well it works with an older embedded GPU (Intel 965 Express), but I can't enable it (on Windows 10) because D3D11 compositing is disabled, it says D3D11_COMPOSITING: Blocklisted; failure code BLOCKLIST_

So does that mean that it is known not to work with that GPU? Can you override the blocklist to see what happens?

Edit: It also says:

> Direct2D: Blocked for your graphics driver version mismatch between registry and DLL.

and

> CP+[GFX1-]: Mismatched driver versions between the registry 8.15.10.2697 and DLL(s) 8.14.10.2697, reported.

Indeed that is correct, the driver is marked as version 8.15.10.2697 but the fileversion of the dlls are 8.14.10.2697, this seems to be intentional by Microsoft or Intel, note that the build numbers are still the same. Firefox is quite naive if it thinks it can just try to match those.

winter_blue 2017-10-10 16:54 UTC link
A lot of credit for that goes towards Lin Clark, who's done some amazing expository articles like this before.
pcwalton 2017-10-10 16:58 UTC link
If only it were as simple as just using Loop-Blinn. :) The technique described there will produce unacceptably bad antialiasing for body text. Loop-Blinn is fine if you want fast rendering with medium quality antialiasing, though. (Incidentally, it's better to just use supersampling or MLAA-style antialiasing with Loop-Blinn and not try to do the fancy shader-based AA described in that article.)

Additionally, the original Loop-Blinn technique uses a constrained Delaunay triangulation to produce the mesh, which is too expensive (O(n^3) IIRC) to compute in real time. You need a faster technique, which is really tricky because it has to preserve curves (splitting when convex hulls intersect) and deal with self-intersection. Most of the work in Pathfinder 2 has gone into optimizing this step. In practice people usually use the stencil buffer to compute the fill rule, which hurts performance as it effectively computes the winding number from scratch for each pixel.

The good news is that it's quite possible to render glyphs quickly and with excellent antialiasing on the GPU using other techniques. There's lots of miscellaneous engineering work to do, but I'm pretty confident in Pathfinder's approach these days.

pcwalton 2017-10-10 16:59 UTC link
Yeah, it's one of the two hard problems in computer science after all :)

In practice LRU caches work pretty well.

simlevesque 2017-10-10 17:01 UTC link
Desktop PCs don't play games.
pcwalton 2017-10-10 17:05 UTC link
They do, but we're targeting Intel HD quality graphics, not gaming-oriented NVIDIA and AMD GPUs.

That said, even Intel GPUs can often deal with large numbers of draw calls just fine. It's mobile where they become a real issue.

Aggressive batching is still important to take maximum advantage of parallelism. If you're switching shaders for every rect you draw, then you frequently lose to the CPU.

pcwalton 2017-10-10 17:30 UTC link
With a compositor you're already drawing every pixel every frame on the GPU, whether it's just a cursor blinking or not. The WR approach basically only adds a negligible amount of vertex shading time.
Animats 2017-10-10 17:40 UTC link
Do they generate those triangles for each instance of each glyph, or only once for each character in the font?
kibwen 2017-10-10 17:43 UTC link
Despite the huge fans and heatsinks on modern desktop GPUs, I presume that a GPU would still use less energy than a CPU for the same workload, yes? Do mobile GPUs have a sleep mode comparable to mobile CPUs? Completely agreed that some measurements would be nice.
lwansbrough 2017-10-10 17:52 UTC link
I know it’s not officially released, so I’m hoping it gets fixed, but FF57 rips through my Mac’s battery life and runs insanely hot on simple JS apps. I still use it daily because it generally works, but there are a few apps I just have to go to Chrome for.
Vinnl 2017-10-10 18:01 UTC link
That's to Lin Clark's credit.
nonsince 2017-10-10 18:01 UTC link
Your browser is doing ~60fps rendering on the GPU already, it's just doing it much less efficiently. This does less work on the CPU _and_ less work on the GPU, for the same result.
larsberg 2017-10-10 18:49 UTC link
The awesome folks at Szeged University have been working with our team on both Vulkan and native DX11 backends!
AceJohnny2 2017-10-10 19:27 UTC link
Opera?
deafcalculus 2017-10-10 19:34 UTC link
Games eat a lot of power by rendering this way. So, definitely a concern, and I'd want to see benchmarks before switching from Safari on my macbook.

That said, GPUs are pretty clever about this. A big chunk of power consumption comes from IO. i.e., moving data from the GPU to the off-chip DRAM. Mobile GPUs optimize for static scenes where nothing is changing by keeping hashes of small blocks (say 32x32 pixels) of the frambuffer in on-chip memory. If the hash of a block hasn't changed, they don't bother re-writing that block into the framebuffer. But the GPU is still ends up running the shaders every frame.

pimeys 2017-10-10 19:38 UTC link
I've been working professionally with Rust for a year now. When I got over the first wall, it has become the best tool I've had for creating backend applications. I have history with at least nine different languages during my professional career, but nothing comes close giving the confidence and ergonomics than the tools Rust ecosystem provides.

Firefox, especially the new Quantum version is awesome. But Rust as a side product might be the best thing Mozilla brought us. I'm truly thankful for that.

Const-me 2017-10-10 20:18 UTC link
Don’t know about measures. But eventually, after a couple stable FF versions are released with that new renderer, I’d expect positive impact.

GPUs are much more power efficient per FLOP. E.g. in my desktop PC, theoretical limit for the CPU is 32 FLOP/cycle * 4 cores * 3.2 GHz = 400 GFLOPS, for the GPU the theoretical limit is 2.3 TFLOPS. TDP for them is 84W CPU, 120W GPU.

A GPU has vast majority of transistors actually doing math, while in a CPU core, large percentage of these transistors are doing something else. Cache synchronization/invalidation, instructions reordering, branch prediction, indirect branch prediction (GPU has none of that), instruction fetch and decode (for GPU that’s shared between a group of cores who execute same instructions in lockstep).

aneutron 2017-10-10 20:36 UTC link
Actually, virtually every device the average grade consumer uses, has a GPU. For instance, even Atom processors have GPUs. Granted, they don't have as much cores as a full-fledged nVidia GPU, nor as much dedicated memory, but they are still GPU with several tens of cores and specialized APIs that were designed specifically for the tasks at hand. Plus, they offload (ish) the CPU.
aneutron 2017-10-10 20:44 UTC link
On nightly, the flag is available in about:config and I alreay enabled it.
aneutron 2017-10-10 20:48 UTC link
Not an expert, but I feel that that was more of an analogy/image to give what they were aiming for. The real objective is not 60fps, the real objective is to use the GPU to do tasks that it was designed for. Plain and simple. This however, gives the user a smoother experience, and 60 fps generally gives a noticeable difference.
Brakenshire 2017-10-10 21:15 UTC link
I asked this on a thread a few weeks back, if I recall they're targeting 59 for Android.
sturmen 2017-10-10 21:17 UTC link
As everyone said, 60fps is not the destination but merely a waypoint. It's a good goal, considering 99% of screens that are in use today refresh at 60 Hz or their regional equivalent. Higher refresh rates are next.
rileyphone 2017-10-10 21:23 UTC link
If Webkit did it, why can't they?
kibwen 2017-10-10 21:42 UTC link
The WebRender folks are well aware that higher framerates are the future. Here's a tweet from Jack Moffitt today, a Servo engineer (and Servo's technical lead, I believe): https://twitter.com/metajack/status/917784559143522306

"People talk about 60fps like it's the end game, but VR needs 90fps, and Apple is at 120. Resolution also increasing. GPUs are the only way. Servo can't just speed up today's web for today's machines. We have to build scalable solutions that can solve tomorrow's problems."

metajack 2017-10-10 21:49 UTC link
To address your second point, you seem to be saying that missing the frame budget once and then compositing the rest of the time would be better than missing the frame budget every time.

That is certainly true, but a) the cases where you can do everything as a compositor optimization are very few (transform and opacity mostly) so aside from a few fast paths you'd miss your frame budget all the time there too, and b) we have a lot of examples of web pages that are slow on CPU renderers and very fast on WebRender and very few examples of the opposite aside from constructed edge case benchmarks. Those we have found had solutions and I suspect the other cases will too.

As resolution and framerate scale, CPUs cannot keep up. GPUs are the only practical path forward.

482794793792894 2017-10-10 21:58 UTC link
I remember reading at some point that WebRender could actually be isolated relatively easily and then applied to basically any browser. That sort of already took place, going from Servo over into Gecko.

So, it might actually turn into somewhat of a pseudo-standard.

metajack 2017-10-10 22:02 UTC link
We're not as other people have said in other comments. On normal content you can often see WebRender hit 200+ fps if you don't lock it to the frame rate. To see this for yourself, run Servo on something with -Z wr-stats which will show you a performance overlay.
482794793792894 2017-10-10 22:25 UTC link
I don't think, they are obsessed with 60 FPS, that's just what for most people is synonymous to a smooth experience and is often not met by browsers at this point in time.

Here's for example an early demo showing Wikipedia at ridiculous frames per second (starts at 0:26:00): https://air.mozilla.org/bay-area-rust-meetup-february-2016/

In the video, he says 500 FPS, but assuming there's no more complicated formula behind this, I think it would actually be 2174 FPS. (0.46 ms GPU time per frame -> 1/0.00046s = 2173.913 FPS)

482794793792894 2017-10-10 22:43 UTC link
Vulkan has been a consideration from the earliest architecturing steps done in WebRender. So, the internal pipelines are all set up to be mapped to Vulkan's pipelines.

It's actually OpenGL which fits less into the architecture, but it's still easier to just bundle WebRender's pipelines all together and then throw that into OpenGL.

hexane360 2017-10-11 00:51 UTC link
I have WebRender working on Linux with Intel 5500 integrated graphics. Hardware acceleration is still a bit glitchy though I'm afraid (with or without WebRender).

To enable, toggle 'layers.acceleration.force-enabled' as well as 'gfx.webrender.enabled'

edit: It's also working through my Nvidia 950m (through bumblebee), although subjectively it seems to have a little more lag this way.

MrRadar 2017-10-11 02:09 UTC link
Take it from a Thinkpad X60 owner, the Intel GPUs from that era are absolute trash. They don't support OpenGL 3.0 on any platform (in fact, they didn't gain 3.0+ support until Sandy Bridge in 2011(!)) so don't expect any of this recent GPU-centric work (which seems to be targeting OpenGL 3.0+) to work on these GPUs. It would probably work just fine on the contemporary Radeon and GeForce cards since they support OpenGL 3.3.
Editorial Channel
What the content says
+0.30
Article 19 Freedom of Expression
High Advocacy Framing Coverage
Editorial
+0.30
SETL
-0.32

Article educates developers about web rendering through transparent explanation, clear framing, and accessible reasoning. Supports knowledge-sharing and technical literacy as dimensions of freedom of expression.

+0.20
Article 26 Education
Medium Advocacy Coverage
Editorial
+0.20
SETL
-0.17

Article provides comprehensive technical education about web rendering, GPU parallelism, and graphics programming, removing barriers to technical knowledge access.

+0.20
Article 27 Cultural Participation
Medium Advocacy Coverage
Editorial
+0.20
SETL
-0.23

Article advances scientific understanding of web rendering technology and contributes to technical knowledge base of global developer community.

+0.15
Article 29 Duties to Community
Medium Advocacy Coverage
Editorial
+0.15
SETL
+0.09

Article fulfills Mozilla's duty to the developer community by providing free technical education and knowledge-sharing.

+0.10
Article 23 Work & Equal Pay
Low Advocacy
Editorial
+0.10
SETL
ND

Article provides detailed technical education about WebRender and browser rendering, indirectly supporting developer empowerment and capability to engage in skilled technical work.

+0.10
Article 28 Social & International Order
Low Advocacy
Editorial
+0.10
SETL
0.00

Article promotes open web standards and cross-browser interoperability principles, supporting development of favorable international order for web technology.

ND
Preamble Preamble

Article does not address preamble's themes of human dignity, freedom, justice, or peace.

ND
Article 1 Freedom, Equality, Brotherhood

Article does not address equal rights or dignity.

ND
Article 2 Non-Discrimination
Low Practice

Article does not address non-discrimination or equality.

ND
Article 3 Life, Liberty, Security

Article does not address right to life, liberty, or security.

ND
Article 4 No Slavery

Article does not address freedom from slavery.

ND
Article 5 No Torture

Article does not address torture or cruel treatment.

ND
Article 6 Legal Personhood

Article does not address right to recognition as a person.

ND
Article 7 Equality Before Law

Article does not address equal protection of law.

ND
Article 8 Right to Remedy

Article does not address right to remedy.

ND
Article 9 No Arbitrary Detention

Article does not address freedom from arbitrary arrest.

ND
Article 10 Fair Hearing

Article does not address right to fair trial.

ND
Article 11 Presumption of Innocence

Article does not address presumption of innocence.

ND
Article 12 Privacy
Medium Practice

Article does not address privacy.

ND
Article 13 Freedom of Movement

Article does not address freedom of movement.

ND
Article 14 Asylum

Article does not address right to asylum.

ND
Article 15 Nationality

Article does not address right to nationality.

ND
Article 16 Marriage & Family

Article does not address marriage and family rights.

ND
Article 17 Property

Article does not address property rights.

ND
Article 18 Freedom of Thought

Article does not address freedom of thought, conscience, or religion.

ND
Article 20 Assembly & Association

Article does not address freedom of association.

ND
Article 21 Political Participation

Article does not address democratic participation.

ND
Article 22 Social Security

Article does not address social security.

ND
Article 24 Rest & Leisure

Article does not address rest and leisure.

ND
Article 25 Standard of Living

Article does not address adequate standard of living or health.

ND
Article 30 No Destruction of Rights

Article does not address prevention of destruction or limitation of rights.

Structural Channel
What the site does
Element Modifier Affects Note
Privacy +0.15
Article 12
Site implements Google Analytics and GTM tracking with UTM parameter removal utility, indicating awareness of privacy concerns but continued analytics deployment.
Terms of Service
Terms of service not observable in provided content.
Accessibility +0.10
Article 2 Article 19
Standard WordPress accessibility CSS classes present (wp-block structure), indicating baseline accessibility standards.
Mission +0.20
Article 19 Article 27
Mozilla's stated mission around open web and developer empowerment aligns with knowledge-sharing and technical security education.
Editorial Code +0.05
Article 19
Technical blog format with clear author attribution and date stamps supports editorial transparency.
Ownership +0.10
Article 19
Mozilla Foundation ownership as non-profit organization supports commitment to public interest over profit-driven content.
Access Model +0.15
Article 26
Open access technical content published without paywall or registration barrier.
Ad/Tracking -0.10
Article 12
Google Analytics and GTM tracking present on page reduces privacy score despite Mozilla's privacy advocacy.
+0.50
Article 19 Freedom of Expression
High Advocacy Framing Coverage
Structural
+0.50
Context Modifier
ND
SETL
-0.32

Domain publishes without paywall (access_model +0.15 DCP). Mozilla non-profit mission supports public interest expression (mission +0.2 DCP). Clear author attribution and editorial standards present (editorial_code +0.05 DCP). Accessibility infrastructure supports diverse access (accessibility +0.1 DCP). Combined DCP: +0.30 (capped).

+0.35
Article 27 Cultural Participation
Medium Advocacy Coverage
Structural
+0.35
Context Modifier
ND
SETL
-0.23

Domain mission supports developer empowerment and open-source contribution (mission +0.2 DCP). Combined with URL-level scientific contribution: final S = 0.35.

+0.30
Article 26 Education
Medium Advocacy Coverage
Structural
+0.30
Context Modifier
ND
SETL
-0.17

Content published without barriers (access_model +0.15 DCP). Combined with URL-level open access structure: final S = 0.3.

+0.10
Article 28 Social & International Order
Low Advocacy
Structural
+0.10
Context Modifier
ND
SETL
0.00

Mozilla Foundation mission supports international web interoperability.

+0.10
Article 29 Duties to Community
Medium Advocacy Coverage
Structural
+0.10
Context Modifier
ND
SETL
+0.09

Open publication platform supports Mozilla's duty to share knowledge with developer community.

ND
Preamble Preamble

Structural signals are domain-inherited; article is technical content.

ND
Article 1 Freedom, Equality, Brotherhood

No observable structural engagement.

ND
Article 2 Non-Discrimination
Low Practice

Page uses standard WordPress accessibility CSS classes (wp-block structure), indicating baseline accessibility infrastructure supporting non-discriminatory access.

ND
Article 3 Life, Liberty, Security

No observable structural engagement.

ND
Article 4 No Slavery

No observable structural engagement.

ND
Article 5 No Torture

No observable structural engagement.

ND
Article 6 Legal Personhood

No observable structural engagement.

ND
Article 7 Equality Before Law

No observable structural engagement.

ND
Article 8 Right to Remedy

No observable structural engagement.

ND
Article 9 No Arbitrary Detention

No observable structural engagement.

ND
Article 10 Fair Hearing

No observable structural engagement.

ND
Article 11 Presumption of Innocence

No observable structural engagement.

ND
Article 12 Privacy
Medium Practice

Page includes Google Analytics and Google Tag Manager tracking codes. DCP privacy modifier (+0.15) reflects UTM parameter removal utility, partially mitigating impact of continued tracking.

ND
Article 13 Freedom of Movement

No observable structural engagement.

ND
Article 14 Asylum

No observable structural engagement.

ND
Article 15 Nationality

No observable structural engagement.

ND
Article 16 Marriage & Family

No observable structural engagement.

ND
Article 17 Property

No observable structural engagement.

ND
Article 18 Freedom of Thought

No observable structural engagement.

ND
Article 20 Assembly & Association

No observable structural engagement.

ND
Article 21 Political Participation

No observable structural engagement.

ND
Article 22 Social Security

No observable structural engagement.

ND
Article 23 Work & Equal Pay
Low Advocacy

No article-specific structural engagement beyond domain access model.

ND
Article 24 Rest & Leisure

No observable structural engagement.

ND
Article 25 Standard of Living

No observable structural engagement.

ND
Article 30 No Destruction of Rights

No observable structural engagement.

Supplementary Signals
How this content communicates, beyond directional lean. Learn more
Epistemic Quality
How well-sourced and evidence-based is this content?
0.76 low claims
Sources
0.6
Evidence
0.8
Uncertainty
0.7
Purpose
0.9
Propaganda Flags
No manipulative rhetoric detected
0 techniques detected
Emotional Tone
Emotional character: positive/negative, intensity, authority
measured
Valence
+0.3
Arousal
0.2
Dominance
0.6
Transparency
Does the content identify its author and disclose interests?
0.70
✓ Author
More signals: context, framing & audience
Solution Orientation
Does this content offer solutions or only describe problems?
0.44 mixed
Reader Agency
0.4
Stakeholder Voice
Whose perspectives are represented in this content?
0.20 2 perspectives
Speaks: institution
About: institutionindividuals
Temporal Framing
Is this content looking backward, at the present, or forward?
present short term
Geographic Scope
What geographic area does this content cover?
global
Complexity
How accessible is this content to a general audience?
technical high jargon domain specific
Audit Trail 1 entries
2026-02-28 09:50 eval Evaluated by claude-haiku-4-5-20251001: +0.23 (Mild positive)