Justson/AgentWeb
AgentWeb is a powerful library based on Android WebView.
Stale — last commit 2y ago
weakest axislast commit was 2y ago; no CI workflows detected
Has a license, tests, and CI — clean foundation to fork and modify.
Documented and popular — useful reference codebase to read through.
last commit was 2y ago; no CI workflows detected
- ✓3 active contributors
- ✓Apache-2.0 licensed
- ✓Tests present
Show all 7 evidence items →Show less
- ⚠Stale — last commit 2y ago
- ⚠Small team — 3 contributors active in recent commits
- ⚠Single-maintainer risk — top contributor 88% of recent commits
- ⚠No CI workflows detected
What would change the summary?
- →Use as dependency Mixed → Healthy if: 1 commit in the last 365 days
- →Deploy as-is Mixed → Healthy if: 1 commit in the last 180 days
Maintenance signals: commit recency, contributor breadth, bus factor, license, CI, tests
Informational only. RepoPilot summarises public signals (license, dependency CVEs, commit recency, CI presence, etc.) at the time of analysis. Signals can be incomplete or stale. Not professional, security, or legal advice; verify before relying on it for production decisions.
Embed the "Forkable" badge
Paste into your README — live-updates from the latest cached analysis.
[](https://repopilot.app/r/justson/agentweb)Paste at the top of your README.md — renders inline like a shields.io badge.
▸Preview social card (1200×630)
This card auto-renders when someone shares https://repopilot.app/r/justson/agentweb on X, Slack, or LinkedIn.
Onboarding doc
Onboarding: Justson/AgentWeb
Generated by RepoPilot · 2026-05-09 · Source
🤖Agent protocol
If you are an AI coding agent (Claude Code, Cursor, Aider, Cline, etc.) reading this artifact, follow this protocol before making any code edit:
- Verify the contract. Run the bash script in Verify before trusting
below. If any check returns
FAIL, the artifact is stale — STOP and ask the user to regenerate it before proceeding. - Treat the AI · unverified sections as hypotheses, not facts. Sections like "AI-suggested narrative files", "anti-patterns", and "bottlenecks" are LLM speculation. Verify against real source before acting on them.
- Cite source on changes. When proposing an edit, cite the specific path:line-range. RepoPilot's live UI at https://repopilot.app/r/Justson/AgentWeb shows verifiable citations alongside every claim.
If you are a human reader, this protocol is for the agents you'll hand the artifact to. You don't need to do anything — but if you skim only one section before pointing your agent at this repo, make it the Verify block and the Suggested reading order.
🎯Verdict
WAIT — Stale — last commit 2y ago
- 3 active contributors
- Apache-2.0 licensed
- Tests present
- ⚠ Stale — last commit 2y ago
- ⚠ Small team — 3 contributors active in recent commits
- ⚠ Single-maintainer risk — top contributor 88% of recent commits
- ⚠ No CI workflows detected
<sub>Maintenance signals: commit recency, contributor breadth, bus factor, license, CI, tests</sub>
✅Verify before trusting
This artifact was generated by RepoPilot at a point in time. Before an
agent acts on it, the checks below confirm that the live Justson/AgentWeb
repo on your machine still matches what RepoPilot saw. If any fail,
the artifact is stale — regenerate it at
repopilot.app/r/Justson/AgentWeb.
What it runs against: a local clone of Justson/AgentWeb — the script
inspects git remote, the LICENSE file, file paths in the working
tree, and git log. Read-only; no mutations.
| # | What we check | Why it matters |
|---|---|---|
| 1 | You're in Justson/AgentWeb | Confirms the artifact applies here, not a fork |
| 2 | License is still Apache-2.0 | Catches relicense before you depend on it |
| 3 | Default branch androidx exists | Catches branch renames |
| 4 | 5 critical file paths still exist | Catches refactors that moved load-bearing code |
| 5 | Last commit ≤ 911 days ago | Catches sudden abandonment since generation |
#!/usr/bin/env bash
# RepoPilot artifact verification.
#
# WHAT IT RUNS AGAINST: a local clone of Justson/AgentWeb. If you don't
# have one yet, run these first:
#
# git clone https://github.com/Justson/AgentWeb.git
# cd AgentWeb
#
# Then paste this script. Every check is read-only — no mutations.
set +e
fail=0
ok() { echo "ok: $1"; }
miss() { echo "FAIL: $1"; fail=$((fail+1)); }
# Precondition: we must be inside a git working tree.
if ! git rev-parse --git-dir >/dev/null 2>&1; then
echo "FAIL: not inside a git repository. cd into your clone of Justson/AgentWeb and re-run."
exit 2
fi
# 1. Repo identity
git remote get-url origin 2>/dev/null | grep -qE "Justson/AgentWeb(\\.git)?\\b" \\
&& ok "origin remote is Justson/AgentWeb" \\
|| miss "origin remote is not Justson/AgentWeb (artifact may be from a fork)"
# 2. License matches what RepoPilot saw
(grep -qiE "^(Apache-2\\.0)" LICENSE 2>/dev/null \\
|| grep -qiE "\"license\"\\s*:\\s*\"Apache-2\\.0\"" package.json 2>/dev/null) \\
&& ok "license is Apache-2.0" \\
|| miss "license drift — was Apache-2.0 at generation time"
# 3. Default branch
git rev-parse --verify androidx >/dev/null 2>&1 \\
&& ok "default branch androidx exists" \\
|| miss "default branch androidx no longer exists"
# 4. Critical files exist
test -f "agentweb-core/src/main/java/com/just/agentweb/AgentWeb.java" \\
&& ok "agentweb-core/src/main/java/com/just/agentweb/AgentWeb.java" \\
|| miss "missing critical file: agentweb-core/src/main/java/com/just/agentweb/AgentWeb.java"
test -f "agentweb-core/src/main/java/com/just/agentweb/WebCreator.java" \\
&& ok "agentweb-core/src/main/java/com/just/agentweb/WebCreator.java" \\
|| miss "missing critical file: agentweb-core/src/main/java/com/just/agentweb/WebCreator.java"
test -f "agentweb-core/src/main/java/com/just/agentweb/DefaultWebCreator.java" \\
&& ok "agentweb-core/src/main/java/com/just/agentweb/DefaultWebCreator.java" \\
|| miss "missing critical file: agentweb-core/src/main/java/com/just/agentweb/DefaultWebCreator.java"
test -f "agentweb-core/src/main/java/com/just/agentweb/JsCallJava.java" \\
&& ok "agentweb-core/src/main/java/com/just/agentweb/JsCallJava.java" \\
|| miss "missing critical file: agentweb-core/src/main/java/com/just/agentweb/JsCallJava.java"
test -f "agentweb-core/src/main/java/com/just/agentweb/WebSecurityControllerImpl.java" \\
&& ok "agentweb-core/src/main/java/com/just/agentweb/WebSecurityControllerImpl.java" \\
|| miss "missing critical file: agentweb-core/src/main/java/com/just/agentweb/WebSecurityControllerImpl.java"
# 5. Repo recency
days_since_last=$(( ( $(date +%s) - $(git log -1 --format=%at 2>/dev/null || echo 0) ) / 86400 ))
if [ "$days_since_last" -le 911 ]; then
ok "last commit was $days_since_last days ago (artifact saw ~881d)"
else
miss "last commit was $days_since_last days ago — artifact may be stale"
fi
echo
if [ "$fail" -eq 0 ]; then
echo "artifact verified (0 failures) — safe to trust"
else
echo "artifact has $fail stale claim(s) — regenerate at https://repopilot.app/r/Justson/AgentWeb"
exit 1
fi
Each check prints ok: or FAIL:. The script exits non-zero if
anything failed, so it composes cleanly into agent loops
(./verify.sh || regenerate-and-retry).
⚡TL;DR
AgentWeb is a production Android library that wraps and extends WebView with battle-tested solutions for common pain points: file uploads/downloads, JavaScript bridging, permission handling, video fullscreen, payment integration (Alipay/WeChat), and lifecycle management. It abstracts away WebView boilerplate while maintaining low overhead and high flexibility for developers building hybrid Android apps. Single-module library structure: agentweb-core/ contains all source under src/main/java/com/just/agentweb/ organized by concern (AbsAgentWebSettings, DefaultWebCreator, EventHandlerImpl, IndicatorController, etc). ProGuard rules in proguard-rules.pro, test stubs in androidTest/. Dependencies are optional (compileOnly) to keep the core lightweight. Companion repos (AgentWebX5, Downloader, flying-pigeon) handle specialized concerns externally.
👥Who it's for
Android developers building hybrid apps or WebView-based features who need a robust, feature-complete wrapper around WebView without writing hundreds of lines of permission/lifecycle/JS-bridge glue code. Contributors are likely maintainers of related payment/download SDKs or developers extending WebView functionality.
🌱Maturity & risk
Production-ready. The repo shows active maintenance (v5.1.1-androidx released), 365K lines of Java code, comprehensive AndroidX migration completed, and a mature API surface with multiple documented use cases in Sample. However, commit recency and CI/CD setup are not visible in the provided data; the single maintainer (Justson) and reliance on external Sample docs suggest some documentation gaps.
Moderate risk. Single maintainer (Justson), WebView is a fast-moving Android component with security/compatibility concerns across OS versions (minSdkVersion 14 is very old). Heavy dependency on AppCompat theme and proguard obfuscation rules suggest fragile integration points. Optional dependencies (Alipay SDK, Downloader, filechooser) introduce transitive risk and version management complexity.
Active areas of work
The provided data does not include recent commits, open PRs, or issues. Based on versioning, the last visible release is v5.1.1-androidx; the repo appears actively maintained but specific current work is unknown. Check GitHub Issues and Releases for real-time activity.
🚀Get running
Clone and open in Android Studio: git clone https://github.com/Justson/AgentWeb.git && cd AgentWeb && open agentweb-core/build.gradle (gradle sync will download dependencies). For a working example, examine the Sample app referenced in README (not visible in file list but mentioned as 'recommended' starting point).
Daily commands:
This is a library, not an app. Build with ./gradlew agentweb-core:build or ./gradlew agentweb-core:assembleRelease. Integration: add to Android project via Maven (io.github.justson:agentweb-core:v5.1.1-androidx) or Gradle module dependency. Run Sample app (not provided in file list) to test live WebView behavior.
🗺️Map of the codebase
agentweb-core/src/main/java/com/just/agentweb/AgentWeb.java— Main entry point and facade for AgentWeb library; all WebView interactions route through this classagentweb-core/src/main/java/com/just/agentweb/WebCreator.java— Abstract factory interface for creating WebView and client instances; core abstraction for customizationagentweb-core/src/main/java/com/just/agentweb/DefaultWebCreator.java— Default implementation of WebCreator; instantiates WebView, WebViewClient, and WebChromeClientagentweb-core/src/main/java/com/just/agentweb/JsCallJava.java— Bridges JavaScript-to-Java communication; critical for security and API surface controlagentweb-core/src/main/java/com/just/agentweb/WebSecurityControllerImpl.java— Implements security checks and content validation; prevents XSS and malicious URL loadsagentweb-core/src/main/java/com/just/agentweb/DefaultWebClient.java— Default WebViewClient implementation handling navigation, errors, and URL interceptionagentweb-core/src/main/java/com/just/agentweb/DefaultChromeClient.java— Default WebChromeClient implementation for file uploads, dialogs, and JavaScript callbacks
🛠️How to make changes
Add a custom WebViewClient behavior
- Create a new class extending MiddlewareWebClientBase (
agentweb-core/src/main/java/com/just/agentweb/MiddlewareWebClientBase.java) - Override shouldOverrideUrlLoading or shouldInterceptRequest for custom logic (
your-new-file.java) - Pass instance to AgentWeb builder via .setWebViewClient(yourClient) (
agentweb-core/src/main/java/com/just/agentweb/AgentWeb.java)
Expose a new Java object to JavaScript
- Create a POJO with public methods annotated with @JavascriptInterface (
your-interface-class.java) - Call agentWeb.getJsInterfaceHolder().addJsInterface(objectInstance, 'jsName') (
agentweb-core/src/main/java/com/just/agentweb/JsInterfaceHolderImpl.java) - In JavaScript, call window.jsName.methodName() to invoke the Java method (
your-web-content.html)
Add custom security validation logic
- Create a class implementing WebSecurityCheckLogic (
agentweb-core/src/main/java/com/just/agentweb/WebSecurityCheckLogic.java) - Implement check() method to validate URLs/content against custom rules (
your-security-class.java) - Register via WebSecurityController.addSecurityCheckLogic(yourLogic) before page load (
agentweb-core/src/main/java/com/just/agentweb/WebSecurityControllerImpl.java)
Customize WebView UI (error pages, dialogs, progress)
- Create a class extending AbsAgentWebUIController (
agentweb-core/src/main/java/com/just/agentweb/AbsAgentWebUIController.java) - Override onShowErrorPage(), onJsAlert(), onJsConfirm() to customize UI (
your-ui-controller.java)
🪤Traps & gotchas
- AppCompat theme required: AgentWeb uses AlertDialog internally; your Activity must inherit from AppCompat theme or dialogs will crash. 2. setAgentWebParent() incompatibility: Do not use ConstraintLayout as the parent container; use FrameLayout or RelativeLayout. 3. minSdkVersion 14 JavaScript safety: If targeting SDK 14-16, custom WebView JS bridge requires explicit security review (no automatic @JavascriptInterface annotation safety). 4. Alipay integration: Alipay SDK is in providedLibs/ (alipaySdk-20180601.jar) but NOT auto-included; you must add it to your app's dependencies separately. WeChat Pay works out-of-box. 5. Web lifecycle global:
mAgentWeb.getWebLifeCycle().onPause()pauses ALL WebViews in the app, not just the current one—risky in multi-WebView scenarios. 6. ProGuard required for release: Library's proguard-rules.pro uses -keep rules; if you disable ProGuard in your app's build.gradle, JS interface methods may be obfuscated and fail. 7. FileProvider conflict: AgentWebFileProvider is declared in manifest; if your app also declares a FileProvider with the same authority, manifest merge will fail.
💡Concepts to learn
- WebViewClient & WebChromeClient interception — AgentWeb's core pattern: DefaultWebClient and DefaultChromeClient override key lifecycle methods to intercept page loads, dialogs, and file choosers. Understanding when each is called is critical for customizing behavior.
- JavaScript bridge (@JavascriptInterface) & method binding — AgentWebJsInterfaceCompat handles the complex task of safely exposing Java methods to JavaScript across Android versions; misunderstanding this can lead to security holes or method-not-found runtime errors.
- Android lifecycle integration (onPause/onResume/onDestroy) — AgentWeb wraps WebView lifecycle management in DefaultWebLifeCycleImpl; improper lifecycle handling causes memory leaks and zombie WebView processes. The global pause behavior is a footgun documented in hidden traps.
- ProGuard obfuscation and method name preservation — AgentWeb uses -keep rules to prevent JavaScript-called method names from being obfuscated. Without proper ProGuard config, JS-to-Java bridge calls fail silently at runtime.
- Android file provider (ContentProvider) & URI sharing — AgentWebFileProvider enables safe file access for WebView file uploads and downloads; misconfigurations cause 'permission denied' errors or manifest merge conflicts.
- Hook pattern and event interception (HookManager) — HookManager allows plugins and extensions to inject behavior without modifying core; understanding the observer pattern here is key to extending AgentWeb without forking.
- Android AppCompat theme and dialog styling — AgentWeb creates AlertDialogs internally; these only render correctly if your Activity uses AppCompat theme. This is a hidden compile-time trap that causes runtime crashes.
🔗Related repos
Justson/AgentWebX5— Official variant of AgentWeb that swaps system WebView for Tencent's X5 WebView, useful for apps requiring consistent rendering across devicesJustson/flying-pigeon— Cross-process IPC component built by same author; complements AgentWeb for multi-process WebView architecturesJustson/Downloader— Lightweight file downloader module referenced as optional dependency; handles parallel downloads and progress tracking for AgentWeb file downloadsJustson/CoolIndicator— Standalone WebView progress bar library by same author; used by AgentWeb's IndicatorController for loading progress UIchromium/android-webview— Google's official Android WebView source; AgentWeb wraps and patches its APIs, so understanding WebView internals is essential for debugging
🪄PR ideas
To work on one of these in Claude Code or Cursor, paste:
Implement the "<title>" PR idea from CLAUDE.md, working through the checklist as the task list.
Add comprehensive unit tests for JsInterfaceHolderImpl and JsCallJava JavaScript bridge
The JavaScript-to-Java interface is critical for AgentWeb functionality, but there are no visible unit tests for JsInterfaceHolderImpl.java or JsCallJava.java. These classes handle bidirectional JS-Java communication and deserve robust test coverage for edge cases like null callbacks, method reflection errors, and concurrent JS calls.
- [ ] Create agentweb-core/src/test/java/com/just/agentweb/JsInterfaceHolderImplTest.java with tests for interface registration, method invocation, and callback handling
- [ ] Create agentweb-core/src/test/java/com/just/agentweb/JsCallJavaTest.java with tests for JS method call parsing and execution
- [ ] Add test cases for permission validation through PermissionInterceptor.java during JS calls
- [ ] Update build.gradle with testImplementation dependencies for Mockito/PowerMock if needed
Add GitHub Actions workflow for automated testing and ProGuard verification
The repo has .github/FUNDING.yml but no CI/CD workflows. Given that agentweb-core/proguard-rules.pro exists and minifyEnabled is true in release builds, there should be automated validation that ProGuard rules don't break the library and that tests pass before merges.
- [ ] Create .github/workflows/android-test.yml to run: gradlew build connectedAndroidTest on Android API levels 21, 28, 29+
- [ ] Add verification step to ensure ProGuard rules in proguard-rules.pro don't obfuscate critical classes like JsInterfaceHolderImpl, DefaultChromeClient, and PermissionInterceptor
- [ ] Add lint checks to catch common Android WebView security issues (add lintOptions configuration for security warnings)
- [ ] Verify that agentweb-core/providedLibs/alipaySdk-20180601.jar doesn't conflict with transitive dependencies
Add integration tests for PermissionInterceptor and file picker flow with DefaultDownloadImpl
AgentWeb handles sensitive operations like file downloads (DefaultDownloadImpl.java), camera/microphone permissions (AgentWebPermissions.java), and file selection. The androidTest directory only contains ExampleInstrumentedTest.java. Comprehensive integration tests are missing for the permission request flow and file chooser integration.
- [ ] Create agentweb-core/src/androidTest/java/com/just/agentweb/PermissionInterceptorTest.java to test camera, microphone, location, and storage permission flows
- [ ] Create agentweb-core/src/androidTest/java/com/just/agentweb/FileDownloadIntegrationTest.java to verify DefaultDownloadImpl interacts correctly with system file picker
- [ ] Add test for DefaultChromeClient.onPermissionRequest() handling across different Android API levels (21+)
- [ ] Add test for AgentWebFileProvider.java to ensure file URIs are properly exposed for file choosers
🌿Good first issues
- Add missing unit tests for AgentWebSettings security configurations: agentweb-core/src/main/java/com/just/agentweb/AgentWebSettingsImpl.java has no corresponding test in androidTest/. Create tests validating that setMixedContentMode(), setDomStorageEnabled(), and cookie-clearing logic work correctly on API 14-31.
- Document the DefaultDownloadImpl class and download lifecycle: DefaultDownloadImpl.java exists but is barely referenced in README. Write a wiki page or code comments explaining how to customize download behavior, where files are stored (via Downloader module), and how to listen for completion via HookManager.
- Add JavaDoc comments to public API methods in AgentWeb.java: AgentWeb.java builder methods (build(), setAgentWebParent(), setWebCreator(), etc.) lack JavaDoc. Add concise documentation including parameter descriptions, return values, and common pitfalls (e.g., 'parent must not be ConstraintLayout').
- Create a Proguard configuration guide for app developers: The proguard-rules.pro file is complex but undocumented. Write a guide explaining which classes must be kept (-keep) for JS interop, how to add custom JavaScript interfaces, and how to debug ProGuard-related JS method not found errors.
- Add instrumented tests for JavaScript bridge security: AgentWebJsInterfaceCompat.java handles JS-to-native calls but has minimal androidTest coverage. Add tests validating @JavascriptInterface method filtering, XSS prevention (if any), and version-specific quirks (SDK 14 vs. 28+).
⭐Top contributors
Click to expand
Top contributors
- @Justson — 88 commits
- @cenxiaozhong — 11 commits
- @kong.nannan — 1 commits
📝Recent commits
Click to expand
Recent commits
95d48cd— chore(agentweb): update readme (Justson)fd7e7ae— chore(agentweb): update readme (Justson)e529c1e— chore(agentweb): update readme (Justson)ba3f354— chore(agentweb): publihs v5.1.1 (Justson)c46e87b— chore(agentweb): upgradle project jdk version (Justson)66715aa— chore(agentweb): publish v5.1.0 (Justson)2ec5fbe— chore(agentweb): publish v5.0.8 (Justson)04b716c— feat(agentweb): Compatible with Android 14 (Justson)62b346b— feat(agentweb): upgrade gradle version to 8.0 (Justson)7e77aac— opt(download): download remove permission request, default cache path (Justson)
🔒Security observations
- High · WebView JavaScript Interface Injection Risk —
agentweb-core/src/main/java/com/just/agentweb/JsCallJava.java, JsInterfaceHolder.java, JsAccessEntrace.java. The codebase implements JavaScript-to-Java bridge functionality (JsCallJava, JsInterfaceHolder, JsAccessEntrace classes) which is inherently vulnerable to XSS attacks. If untrusted JavaScript is executed in the WebView, attackers can invoke Java methods through the JavaScript interface, potentially leading to privilege escalation or data theft. Fix: 1. Implement strict input validation on all JS interface methods. 2. Use @JavascriptInterface annotation only on safe methods. 3. Implement Content Security Policy (CSP) headers. 4. Validate and sanitize all data passed from JavaScript. 5. Consider using isolated execution contexts or sandboxing for untrusted content. - High · WebView Security Configuration Issues —
agentweb-core/src/main/java/com/just/agentweb/AbsAgentWebSettings.java, AgentWebSettingsImpl.java. The library provides AbsAgentWebSettings and AgentWebSettingsImpl that configure WebView behavior. Without explicit security hardening, WebViews may be configured with dangerous defaults such as: JavaScript enabled, file access enabled, mixed content allowed, or insecure DOM storage. Fix: 1. Disable JavaScript if not required. 2. Disable file:// access with setAllowFileAccess(false). 3. Disable content:// access if not needed. 4. Enable mixed content blocking with setMixedContentMode(MIXED_CONTENT_NEVER_ALLOW). 5. Disable DOM storage, database, and local storage for untrusted content. 6. Set appropriate cache modes. - High · Potential URL Spoofing/Injection via Custom URL Loader —
agentweb-core/src/main/java/com/just/agentweb/UrlLoaderImpl.java, IUrlLoader.java. The UrlLoaderImpl and IUrlLoader interface allows custom URL loading logic. If URL validation is insufficient, attackers could perform open redirect attacks, load malicious content, or bypass security restrictions through crafted URLs. Fix: 1. Implement strict URL validation using a whitelist of allowed domains/schemes. 2. Validate all user-supplied URLs before loading. 3. Only allow http:// and https:// schemes. 4. Reject javascript:, file://, data:, and other dangerous schemes. 5. Use URL parsing libraries to prevent bypasses. - Medium · Deprecated Android API Usage (minSdkVersion 14) —
agentweb-core/build.gradle. The library supports minSdkVersion 14 (Android 4.0), which is extremely outdated and lacks security patches. Many security vulnerabilities in older Android versions cannot be fixed. Fix: Increase minSdkVersion to at least 24 (Android 7.0) or higher to benefit from modern security features and patches. This eliminates support for devices with unpatched vulnerabilities. - Medium · Alipay SDK in providedLibs Directory —
agentweb-core/providedLibs/alipaySdk-20180601.jar. The Alipay SDK (alipaySdk-20180601.jar) in providedLibs is from June 2018 and likely contains known vulnerabilities. Third-party payment SDKs are high-value targets for attackers. Fix: 1. Update Alipay SDK to the latest version. 2. Verify SDK integrity and authenticity. 3. Regularly scan for vulnerabilities in payment SDKs. 4. Consider using official Maven repositories instead of local JAR files. - Medium · Insufficient File Download Security —
agentweb-core/src/main/java/com/just/agentweb/DefaultDownloadImpl.java. The DefaultDownloadImpl class handles file downloads. Without proper validation, this could lead to arbitrary file downloads, directory traversal attacks, or overwriting of system files. Fix: 1. Validate download URLs and file names. 2. Implement directory traversal prevention. 3. Use restricted download directories (not root or system paths). 4. Verify MIME types of downloaded files. 5. Implement file integrity checks (hashing). 6. Request WRITE_EXTERNAL
LLM-derived; treat as a starting point, not a security audit.
👉Where to read next
- Open issues — current backlog
- Recent PRs — what's actively shipping
- Source on GitHub
Generated by RepoPilot. Verdict based on maintenance signals — see the live page for receipts. Re-run on a new commit to refresh.