duckduckgo / duckduckgo/Android
[repo-status] Daily Repo Status β May 21, 2026
Nobody has claimed this yet.
- Dominant language
- Kotlin
- Stars
- 4.8k
- Forks
- 1.4k
- Avg merge
- 2d 17h
- Merged PRs (30d)
- 170
Description
π¦ DuckDuckGo Android β Daily Status Report
Thursday, May 21, 2026 | Reporting window: late May 20 β mid-day May 21
π Headline: 5.280.1 hotfix in the wild, native input refactor lands its closing chapter β¨
Yesterday afternoon 5.280.1 cut and shipped β a tidy follow-up to Monday's 5.280.0, keeping the weekly release cadence on rails. π Behind the scenes, the long native-input refactor stack is converging: @malmstein's #8627 (Options plugin β per-tab state) merged yesterday evening, and the closing #8647 ("Remove getPromptContribution from native input plugins") sits ready as the final PR in a multi-week effort to switch from pull-based plugin contributions to a per-tab state provider. Reactive state plumbing, fewer surface APIs, cleaner test seams. A really satisfying refactor to watch land. π
Meanwhile, the day was full of well-scoped polish: two attachment-UI consistency PRs from @joshliebe, an in-memory tracker-entity cache from @anikiki behind a feature flag, and Part 1 of the AI reasoning-effort subscription gating from @YoussefKeyrouz. Quiet, productive day. πΏ
π¦ Release Pulse
| Version | Released | Status |
|---|---|---|
| 5.280.1 | 2026-05-20 (14:44 UTC) | π hotfix β currently rolling out |
| 5.280.0 | 2026-05-18 | rolling out |
| 5.279.1 | 2026-05-14 | hotfix |
| 5.279.0 | 2026-05-11 | |
| 5.278.1 | 2026-05-06 | hotfix |
6 releases in 16 days. Three of them hotfixes β the safety net is being used, and that's good news, not bad. The post-release window is tight and the rollback path is well-rehearsed. π
β Just landed (last ~24h)
Today (May 21)
| # | PR | Author | Notes |
|---|---|---|---|
#8654 |
Add .kotlin to gitignore | @CDRussell |
π§Ή Tiny housekeeping. Ignores the .kotlin folder anywhere in the project to stop accidentally committing JetBrains-generated metadata ([upstream YouTrack issue]((youtrack.jetbrains.com/redacted) |
#8652 |
Update file attachment UI (native input) | @joshliebe |
π Replaces the card-based file chip with a clickable horizontal chip matching the image-attachment + Web Search chip language. Note: removal is now triggered by tapping the whole chip β reviewers, watch field telemetry for accidental-deletion signal once 5.281 hits. |
#8636 |
Return empty JSON response rather than null when page context not available | @aitorvs |
π§ JS-bridge contract tweak for getAIChatPageContext. Instead of resolving with null, the bridge now resolves with {pageContext: null} so the JS promise actually completes and downstream code can fall back to the subscription path. Subtle but unblocks a contextual-sheet timeout edge case. |
#8650 |
Update content scope scripts to 14.11.0 | @daxmobile |
π€ Automated bump. Privacy CI green. Adds support for setterValue / value overrides (not just getterValue), stricter descriptor validation, and identity-preserving function masking on DOM overrides. Worth a note for anyone debugging WebView shims. |
Late yesterday (after the May 20 report)
| # | PR | Author | Notes |
|---|---|---|---|
#8625 |
Add reasoning effort access to the AI chat model (Part 1/2) | @YoussefKeyrouz |
π§ Schema + domain support for per-reasoning-effort subscription gating. No UI yet β Part 2 will wire the upsell trigger so tapping a gated reasoning effort routes into the existing purchase/upgrade flows. Forward-compatible: missing field β today's behaviour. Tier-resolution refactored into a shared lowestRequiredTier() helper. |
#8627 |
Migrate Options plugin to per-tab NativeInputStateProvider | @malmstein |
𧬠Moves tool selection (Web Search / Image Generation) onto the typed NativeInputHost.toolSelected push API and per-tab state flows. Tool selection now persists per tab and survives switches. Part of the larger native input refactor stack. |
#8633 |
Smooth widget transitions | @aibrahim- |
ποΈ Killing the two-step "jank" on native-input launch/close in both top and bottom omnibar modes. IME-aware enter previews and symmetric cancel/complete cleanup. Worth a look in 5.281 dogfood. |
#8638 |
Update image attachment UI (native input) | @joshliebe |
πΌοΈ Sibling to today's #8652 β same chip-style unification, image variant. |
#8613 |
In-memory entity lookup cache | @anikiki |
β‘ Opt-in cached tracker-entity lookup behind androidBrowserConfig.cachedEntityLookup (default INTERNAL). Replaces per-label DB walks with a single in-memory snapshot keyed by domain β entity, refreshed on TDS reload. Includes parity tests + an @Ignored on-device microbenchmark for manual perf comparison. Flag-off = identical behaviour to develop. |
π― Open PRs worth a look
𧬠Native input refactor β closing the stack
#8647β RemovegetPromptContributionfrom native input plugins (@malmstein, assigned@YoussefKeyrouz)- The final PR in the multi-PR native-input refactor. With every plugin now migrated off the pull-based contribution path (StartChat
#8570, Options#8627, Attachment#8644, ReasoningModePicker#8645, ModelPicker#8646), this one deletes the entirePromptContributionsealed class andgetPromptContribution()interface method. - Pure deletion of unused surface β no behaviour change expected, just the satisfying compile-clean diff. Quick sanity sweep documented in the test plan (model id propagation, reasoning effort, per-tab tool selection).
- The final PR in the multi-PR native-input refactor. With every plugin now migrated off the pull-based contribution path (StartChat
π¨ Onboarding Brand Design Update β pre-ship polish
#8639β Onboarding Brand Design Update: Ship review fixes (@mikescamell, assigned@LukasPaczos)- Ship-review polish across the brand-design onboarding. AVD reset for comparison-chart green ticks, RMF deferral until subscription dialog is shown, widow-word prevention, line-height fix, tail-collapse when wing animations don't fit, bobbing-Dax space checks, and pre-loading toggle icons before measurement. Detailed test plan with most boxes already checked.
#8630β Onboarding Brand Design Update: Add Dax, wing, and bubble tail animations (@mikescamell, assigned@malmstein)- The big Lottie animation pass: waving Dax on visit-site / site-suggestions / subscription bubbles, wing on trackers-blocked + no-trackers CTAs, animatable bubble-tail depth as a design-system primitive, form-factor-aware anchoring (tablet anchors to card start, phone landscape strips decorations entirely). Stacked on the same onboarding base branch as
#8639and#8653.
- The big Lottie animation pass: waving Dax on visit-site / site-suggestions / subscription bubbles, wing on trackers-blocked + no-trackers CTAs, animatable bubble-tail depth as a design-system primitive, form-factor-aware anchoring (tablet anchors to card start, phone landscape strips decorations entirely). Stacked on the same onboarding base branch as
#8653β Fix Dax persisting in NTP onboarding bubble after rotating to landscape (@LukasPaczos, draft, opened today)- Drops Dax + bubble arrow on rotation from portrait β landscape. Side-by-side rotation videos in the PR. Small but visible UX fix.
π Duck.ai sync expansion
#8640β Add native sync queue for Duck.ai chat updates (@GerardPaligot, draft)- Wires the rename and pin/unpin actions on the Duck.ai chat history screen into the existing native sync pipeline. Title is encrypted via
SyncCrypto. Mirrors the deletion-side pattern already shipping single-chat deletes. Offline / process-death persistence tests in the plan.
- Wires the rename and pin/unpin actions on the Duck.ai chat history screen into the existing native sync pipeline. Title is encrypted via
π§± Ad-blocking pipeline (still open, still important)
#8557β Implement scriptlet download and storage (@CrisBarreiro, assigned@cmonfortep, opened May 14)#8622β Add core ad blocking capabilities (@CrisBarreiro, assigned@cmonfortep, opened May 19)- Same two-PR pairing that's been in the queue since last week. Reviewers β the longer they sit, the more they accrue rebase risk against the native-input + onboarding work landing around them. πΏ
π Long-tail bug fix worth not forgetting
#8520β Fix WSJ Custom Tab redirect loop (@kzar, draft, opened May 11)- Mirrors Chromium's behaviour: blocks HTTP App Link hand-off unless the user initiated the navigation, with a "trusted caller" carve-out for OAuth flows. The PR description does a great job of explaining the Chromium parity rationale and the testing methodology β would be a shame to let this go cold. π₯Ά
π‘ Recommendations for the day
- π₯ Land
#8647β the final native-input refactor cleanup. It's a pure deletion, fully covered by the upstream PRs being merged, and shrinks the API surface. Easy approve, satisfying close on a multi-week refactor. - π§± Page
@cmonfortepon#8557+#8622β the ad-blocking pair has now been open for a full week (download) and the runtime-injector sibling for ~2 days. Both come with explicit logcat-state test plans; the longer they wait, the more rebase pain. Reviewing them as a pair makes the FF lifecycle obvious. - π¨ Onboarding train review β
#8630,#8639,#8653are all stacked on the onboarding feature branch. Worth a coordinated review pass so they merge in the right order without rebase churn.#8630is the load-bearing animation work;#8639polishes on top of it;#8653is the rotation edge case. - π 5.280.1 telemetry watch (Day 1) β hotfix released 14:44 UTC yesterday. Still well within the field-signal window. If anything spiky shows up in crash/ANR dashboards, it'll surface today.
- β οΈ Reviewer reminder for
#8622β the PR body includes a deliberatePRIVACY_REMOTE_CONFIG_URLpatch pointing atduckduckgo.github.io/.../pr-5175/...for staging. Confirm that patch isn't in the diff being merged. Same warning applies to#8557. Easy mistake, expensive in prod. - π±
#8652↾field watch β both PRs changed attachment removal so tapping the whole chip removes it (was previously the dedicated remove icon only). Worth keeping an eye on accidental-deletion telemetry once 5.281 starts rolling out, in case the new affordance is too eager. - π
#8613perf measurement β@anikiki's in-memory entity cache ships flag-off by default. The on-device microbenchmark inCachedTdsEntityLookupPerfAndroidTestis@Ignored β somebody should actually run it on a representative device and post numbers so we know whether to flip the flag.
π Shoutouts
- π§¬
@malmsteinβ landing#8627and queuing#8647brings a clean multi-PR native-input refactor across the finish line. Disciplined, well-scoped, test-covered each step - π¨
@joshliebeβ back-to-back attachment UI unification PRs (#8638+#8652) with crisp before/after screenshots and consistent design-token usage - π§
@YoussefKeyrouzβ#8625ships forward-compatible schema support before the UI lands, and refactors duplicated tier-resolution logic into a shared helper while at it. Textbook Part 1 - β‘
@anikikiβ#8613ships a perf optimization with parity tests + an on-device benchmark + flag-gated rollout. The right shape for a perf change - ποΈ
@aibrahim-β#8633(smooth widget transitions) is the kind of polish that's invisible when it works and obvious when it doesn't. Before/after GIFs in the PR sell it - π€
@daxmobileβ daily content-scope-scripts bump landed clean again, privacy CI green - π¦
@CDRussellβ one-line.gitignorewin on#8654. Boring, useful, exactly the kind of micro-PR that keeps the dev environment friction-free - π‘οΈ
@CrisBarreiro&@cmonfortepβ the ad-blocking-extension pipeline keeps shaping up across#8557+#8622. Detailed test plans and gating-aware logcat filters in both PRs
Thursday energy: hotfix shipped, refactor stack closing out, polish PRs flowing. 5.281 is shaping up nicely. π¦π
[!NOTE]
π Integrity filter blocked 21 items
The following items were blocked because they don't meet the GitHub integrity level.
- duckduckgo/Android#8586
list_issues: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".- duckduckgo/Android#8365
list_issues: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".- duckduckgo/Android#8245
list_issues: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".- duckduckgo/Android#8244
list_issues: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".- duckduckgo/Android#8144
list_issues: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".- duckduckgo/Android#7844
list_issues: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".- duckduckgo/Android#7805
list_issues: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".- duckduckgo/Android#5383
list_issues: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".- duckduckgo/Android#6062
list_issues: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".- duckduckgo/Android#2799
list_issues: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".- https://github.com/duckduckgo/Android/commit/20e514d22755f6fd93cbfb5d5632eed8d7468a1e
list_commits: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".- https://github.com/duckduckgo/Android/commit/680782b8a17cfb12a038d55f55dc6e2feefff045
list_commits: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".- https://github.com/duckduckgo/Android/commit/038ccd1610704d50ec11a205c7eaf67d8b03bcd4
list_commits: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".- https://github.com/duckduckgo/Android/commit/f6a2a8812c52b1416f0e907dcf860009c318c84f
list_commits: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".- https://github.com/duckduckgo/Android/commit/46a97e44a117ba55492bb57f37ba4d7bb6e2f9c4
list_commits: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".- https://github.com/duckduckgo/Android/commit/0c0bdcf9d0372060eb9e3f9af57457d38de51c99
list_commits: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".- ... and 5 more items
To allow these resources, lower
min-integrityin your GitHub frontmatter:tools: github: min-integrity: approved # merged | approved | unapproved | none
Generated by Daily Repo Status Β· β·
To install this agentic workflow, run
gh aw add githubnext/agentics/workflows/daily-repo-status.md@b466f28f0f65b68d6f2b10b15b44f51d787b93be
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up β it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
This issue is a daily status report rather than a code task; start by reading the May 21 report and its referenced pull request summaries. Done would mean a complete, accurate status update, but no file, test, or implementation entry point is identified in the payload.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- android, kotlin
- Domain
- documentation
- Issue type
- Documentation
- Difficulty
- 1/5
- Estimated time
- Under an hour
- Activity status
- Quiet
- Clarity
- Needs clarification
- Newbie friendliness
- 25/100