Arivna Shield

How Shield decides what never loads.

Arivna Shield is the ad and tracker blocker built into Arivna. It is a native engine written in Rust, it reads the same filter language as uBlock Origin, and it checks every request a page makes before the request is sent.

Step by step

From filter list to a quiet page.

  1. Lists ship with the app

    All 13 lists are inside the APK, so Shield works offline from the first launch.

  2. The engine compiles them

    The Rust engine turns roughly a quarter of a million lines of rules into a compact matcher and saves it to a binary cache file.

  3. Every request is checked

    Android WebView asks Arivna about each request. Shield looks at the address, the page, the request type and the method.

  4. Blocked, redirected or allowed

    Blocked requests get an empty answer. Some get a harmless stand-in script so the page keeps working. The rest load normally.

  5. Leftovers are hidden

    A small script at page start runs cosmetic rules and scriptlets to hide empty ad boxes and neutralise ad scripts.

What "before it loads" means

Android's WebView calls shouldInterceptRequest for every image, script, frame, stylesheet, font and data request a page makes. Arivna answers that call with Shield's decision. When a request is blocked, nothing is sent to that server: no connection, no cookies, no data about you.

Navigations are checked too. Pop-ups that match a filter are stopped, and tracking parameters (such as campaign tags) are removed from links you open when a $removeparam rule matches.

Why a native engine

The engine is written in Rust and compiled separately for each CPU type, then called from the app through JNI. It starts from its cache in tens of milliseconds and adds a few milliseconds per page. It does not run as JavaScript inside the page.

Where it stops

Shield blocks what the lists describe. No list catches every ad, and some sites change their ads often. When something slips through, the element picker and My filters let you fix it yourself, and the daily update brings fixes from the list maintainers.

Request lognews.example.org 3 blocked2 allowed
  • blockedhttps://ads.example-network.com/serve/banner.js||example-network.com^$third-party
  • allowedhttps://news.example.org/assets/app.cssno filter matched
  • redirectedhttps://cdn.example-ads.com/tag/adsbygoogle.js$script,redirect=noop.js
  • blockedhttps://pixel.example-social.com/tr?ev=PageView||example-social.com/tr?$image
  • allowedhttps://news.example.org/img/hero.webpno filter matched
  • blockedhttps://metrics.example-stats.com/v1/collect||example-stats.com^$xhr

Illustration with made-up addresses. In the app, the log lists the real requests of the tab you are on.

Filter syntax

Speaks the language of uBlock Origin.

Shield reads the uBlock Origin and Adblock Plus filter syntax, so the big public lists work as their authors wrote them.

Network rules

Block or allow by address, with options for request type, first or third party, domain and method.

||ads.example.com^$third-party

Cosmetic rules

Hide elements on a page with CSS selectors, generic or per site.

example.org##.ad-banner

Procedural cosmetics

Hide elements by what they contain, not just their class name.

##div:has-text(Sponsored)

Scriptlets

Small scripts, named by the lists, that run at page start to neutralise ad and anti-adblock code.

example.org##+js(set-constant, ...)

$redirect

Replace a blocked script with a harmless stand-in so the page does not break.

$script,redirect=noop.js

$removeparam

Strip tracking parameters from addresses.

$removeparam=utm_source

$important and $badfilter

Rules that win over exceptions, and rules that switch off another rule.

||example.com^$important

Not supported on purpose

$csp, $replace and $header rules are dropped. They need to rewrite responses, which Arivna does not do.

The lists

13 public lists, credited.

Written and maintained by their own communities. Arivna downloads them from their official addresses and uses them under their own licences. Eleven are on by default; the two cookie-notice lists are added in Strict mode.

Filter lists used by Arivna Shield
ListWhat it coversMaintainerLicenceMode
uBlock filtersAds and anti-adblockuBlock OriginGPLv3Standard
uBlock filters: PrivacyTrackersuBlock OriginGPLv3Standard
uBlock filters: Badware risksScam and risky sitesuBlock OriginGPLv3Standard
uBlock filters: Quick fixesFast fixes for broken sitesuBlock OriginGPLv3Standard
uBlock filters: UnbreakExceptions that keep sites workinguBlock OriginGPLv3Standard
EasyListAdsEasyListGPLv3 or CC BY-SA 3.0Standard
EasyPrivacyTrackersEasyListGPLv3 or CC BY-SA 3.0Standard
Peter Lowe's listAd and tracking serversPeter LoweTerms on the list's siteStandard
Online Malicious URL BlocklistMalware addresses from URLhausmalware-filterSee projectStandard
AdGuard Mobile AdsAds in mobile sitesAdGuardGPLv3Standard
AdGuard URL TrackingTracking parameters in linksAdGuardGPLv3Standard
uBlock filters: Cookie noticesCookie bannersuBlock OriginGPLv3Strict
EasyList Cookie ListCookie bannersEasyListCC BY 3.0Strict

Licences as stated in each list's header or project page. Arivna also compiles a short list of its own built-in rules and your own rules from My filters. uBlock Origin's lists, Arivna's rules and your rules are trusted for uBlock Origin's trusted- scriptlets; other lists are not.

Auto-update

Fresh lists every day, without the waste.

Lists change all the time. Arivna keeps up without downloading the same thing twice.

  1. Once a day

    When you open the app, or come back to it, and the lists are older than 24 hours.

  2. Four at a time, conditionally

    Lists download in parallel. Each request carries the list's last ETag or date, so an unchanged list costs a tiny "not modified" answer.

  3. Rebuild only on change

    If nothing changed, the engine stays as it is. If something did, a new engine is built in the background and swapped in.

  4. You can see it

    Settings shows the last update, an Update now button, and the result, for example "Updated just now · 2 of 13 lists changed". If no server can be reached, the existing protection is kept.

Your tools

See it, fix it, switch it off.

When a page misbehaves, you can see exactly what Shield did and change it.

Network request log

Every tab keeps its own log. Each entry shows the address, the request type, whether it was allowed, blocked or redirected, and the exact filter that decided. Filter the log by result, or search by address, type or filter text.

Request log in Arivna listing requests with their filters

Block element

Choose Block element from the menu and tap anything on the page. Edit the CSS selector to hide more or less, then save it as your own rule for that site.

My filters

Every rule you created, in one list. Delete one to undo it.

Per-site switch

If a site does not work with Shield, turn Shield off for that site from its site info sheet. Your exceptions are listed in settings.

YouTube ad cleanup

An extra layer for YouTube in the browser: it hides ad slots and skips any ad that still reaches the player.

Standard or Strict

Strict adds the two cookie-notice lists for stronger filtering. If a site needs it, switch back to Standard.

Measured numbers

How fast, and how we know.

Phone figures: vivo I2217, Android 16, release build, October 2026. Desktop figures: single thread, same 12 lists for both engines. The benchmark harness is in the app's source repository.

58msEngine loaded from cacheOn the phone. From process start to engine ready is about 4 s, most of it WebView start.
33msShield time, first pageAll Shield work for one page load, first page of a session (BBC, about 75 requests). Worst single request 6.5 ms.
16–22msShield time, later pagesNDTV and CNN page loads on the phone.
2MBEngine size per CPUAbout 2 MB of native code for one CPU type.

Same verdicts as uBlock Origin

We ran 83,631 requests (9 request types, 8 page origins) through Arivna Shield and through uBlock Origin's own network engine (@gorhill/ubo-core 0.1.30), with the same lists.

Verdict agreement between Arivna Shield and ubo-core
Both block76,492
Both allow7,135
Only uBlock Origin blocks0
Only Arivna blocks4
Agreement99.995%

Three of the four differences are reason=malicious rules that ubo-core 0.1.30 is too old to read; one is a URLhaus rule ubo-core misses when all lists are loaded. $removeparam gave identical results on all 3,291 test addresses. Cosmetic filters and scriptlets were not part of this comparison, because ubo-core has no cosmetic engine.

Speed against the same engine

Desktop, best of five runs, uBlock Origin's engine warmed up.

Speed of Arivna Shield and ubo-core
TaskArivnaubo-core
Build from lists234 ms1,151 ms
Check one request3.2 µs2.9 µs
$removeparam per address26.7 µs27.4 µs
Memory after build33 MB37 MB
Load from cache15 ms142 ms
Cache size10.7 MB14.3 MB

uBlock Origin's engine is about 10% faster per request. Arivna is about 5× faster to build and about 9× faster to restore from cache.

What we did not measure. Whole-page load times: they are dominated by the network and WebView and varied by more than half a second between identical runs. Arivna against other browsers on the same phone. Cosmetic filtering against the real uBlock Origin extension.

Read the code behind it.

Shield, the benchmark and the app are open source.