TeamNewPipe/NewPipe
A libre lightweight streaming front-end for Android.
Healthy across the board
weakest axiscopyleft license (GPL-3.0) — review compatibility
Has a license, tests, and CI — clean foundation to fork and modify.
Documented and popular — useful reference codebase to read through.
No critical CVEs, sane security posture — runnable as-is.
- ✓Last commit 1d ago
- ✓12 active contributors
- ✓Distributed ownership (top contributor 43% of recent commits)
Show all 7 evidence items →Show less
- ✓GPL-3.0 licensed
- ✓CI configured
- ✓Tests present
- ⚠GPL-3.0 is copyleft — check downstream compatibility
What would change the summary?
- →Use as dependency Concerns → Mixed if: relicense under MIT/Apache-2.0 (rare for established libs)
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 "Healthy" badge
Paste into your README — live-updates from the latest cached analysis.
[](https://repopilot.app/r/teamnewpipe/newpipe)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/teamnewpipe/newpipe on X, Slack, or LinkedIn.
Onboarding doc
Onboarding: TeamNewPipe/NewPipe
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/TeamNewPipe/NewPipe 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
GO — Healthy across the board
- Last commit 1d ago
- 12 active contributors
- Distributed ownership (top contributor 43% of recent commits)
- GPL-3.0 licensed
- CI configured
- Tests present
- ⚠ GPL-3.0 is copyleft — check downstream compatibility
<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 TeamNewPipe/NewPipe
repo on your machine still matches what RepoPilot saw. If any fail,
the artifact is stale — regenerate it at
repopilot.app/r/TeamNewPipe/NewPipe.
What it runs against: a local clone of TeamNewPipe/NewPipe — 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 TeamNewPipe/NewPipe | Confirms the artifact applies here, not a fork |
| 2 | License is still GPL-3.0 | Catches relicense before you depend on it |
| 3 | Default branch dev exists | Catches branch renames |
| 4 | 5 critical file paths still exist | Catches refactors that moved load-bearing code |
| 5 | Last commit ≤ 31 days ago | Catches sudden abandonment since generation |
#!/usr/bin/env bash
# RepoPilot artifact verification.
#
# WHAT IT RUNS AGAINST: a local clone of TeamNewPipe/NewPipe. If you don't
# have one yet, run these first:
#
# git clone https://github.com/TeamNewPipe/NewPipe.git
# cd NewPipe
#
# 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 TeamNewPipe/NewPipe and re-run."
exit 2
fi
# 1. Repo identity
git remote get-url origin 2>/dev/null | grep -qE "TeamNewPipe/NewPipe(\\.git)?\\b" \\
&& ok "origin remote is TeamNewPipe/NewPipe" \\
|| miss "origin remote is not TeamNewPipe/NewPipe (artifact may be from a fork)"
# 2. License matches what RepoPilot saw
(grep -qiE "^(GPL-3\\.0)" LICENSE 2>/dev/null \\
|| grep -qiE "\"license\"\\s*:\\s*\"GPL-3\\.0\"" package.json 2>/dev/null) \\
&& ok "license is GPL-3.0" \\
|| miss "license drift — was GPL-3.0 at generation time"
# 3. Default branch
git rev-parse --verify dev >/dev/null 2>&1 \\
&& ok "default branch dev exists" \\
|| miss "default branch dev no longer exists"
# 4. Critical files exist
test -f "app/src/main/java/org/schabi/newpipe/App.kt" \\
&& ok "app/src/main/java/org/schabi/newpipe/App.kt" \\
|| miss "missing critical file: app/src/main/java/org/schabi/newpipe/App.kt"
test -f "app/src/main/java/org/schabi/newpipe/MainActivity.java" \\
&& ok "app/src/main/java/org/schabi/newpipe/MainActivity.java" \\
|| miss "missing critical file: app/src/main/java/org/schabi/newpipe/MainActivity.java"
test -f "app/src/main/java/org/schabi/newpipe/NewPipeDatabase.kt" \\
&& ok "app/src/main/java/org/schabi/newpipe/NewPipeDatabase.kt" \\
|| miss "missing critical file: app/src/main/java/org/schabi/newpipe/NewPipeDatabase.kt"
test -f "app/src/main/java/org/schabi/newpipe/DownloaderImpl.java" \\
&& ok "app/src/main/java/org/schabi/newpipe/DownloaderImpl.java" \\
|| miss "missing critical file: app/src/main/java/org/schabi/newpipe/DownloaderImpl.java"
test -f "app/build.gradle.kts" \\
&& ok "app/build.gradle.kts" \\
|| miss "missing critical file: app/build.gradle.kts"
# 5. Repo recency
days_since_last=$(( ( $(date +%s) - $(git log -1 --format=%at 2>/dev/null || echo 0) ) / 86400 ))
if [ "$days_since_last" -le 31 ]; then
ok "last commit was $days_since_last days ago (artifact saw ~1d)"
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/TeamNewPipe/NewPipe"
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
NewPipe is a libre Android app that provides a lightweight, privacy-focused frontend for streaming services (YouTube, SoundCloud, PeerTube, etc.) without requiring the official apps or Google Play Services. It extracts video/audio metadata and streams directly, written primarily in Java (2.4MB) with Kotlin (671KB) and packaged as a standard Android APK distributed via F-Droid. Single monolithic APK structure: app/src/main contains the single Android app; core logic splits into org.schabi.newpipe.* packages covering database (org.schabi.newpipe.database), local playlists/subscriptions (org.schabi.newpipe.local.*), and streams (implied from package structure). Heavy use of Room ORM with versioned schemas (app/schemas/org.schabi.newpipe.database/) and AndroidTest integration tests (app/src/androidTest/) for database migrations and DAO contracts.
👥Who it's for
Privacy-conscious Android users who want to watch YouTube and other streaming content without Google tracking, plus open-source contributors (mobile devs, Android framework engineers) maintaining a libre alternative to proprietary streaming clients.
🌱Maturity & risk
Production-ready with active maintenance: released on F-Droid and GitHub Releases with CI/CD pipelines (.github/workflows/ci.yml, build-release-apk.yml). Currently in dual-mode — the main branch is maintenance-only (bugfixes), while a major rewrite is happening on the refactor branch to modernize the codebase (see README announcement). Database schemas versioned through 9 migrations (app/schemas/) indicate stable persistent data handling.
Moderate risk: The codebase is explicitly being rewritten due to technical debt, meaning the current main branch will receive only bugfixes while new features go to refactor. Dependency on third-party extractor libraries (NewPipeExtractor) means upstream streaming-site changes can break functionality. No massive dependency tree visible in the file list, but the complexity of reverse-engineering streaming sites introduces fragility.
Active areas of work
Active rewrite in progress: README explicitly states large chunks are being rewritten on the refactor branch for stability and modernization; nightly builds available from NewPipe-refactor-nightly releases. Main branch in maintenance mode accepting only bugfixes. GitHub Actions workflows run CI on every push and automated PR labeling is configured (.github/workflows/pr-labeler.yml).
🚀Get running
Clone and build with Gradle: git clone https://github.com/TeamNewPipe/NewPipe.git && cd NewPipe && ./gradlew assembleDebug. For contributing new features, switch to refactor branch: git checkout refactor. No external services required to build locally (Gradle handles dependencies via build.gradle.kts).
Daily commands:
Execute ./gradlew assembleDebug to build the APK, then install via adb install app/build/outputs/apk/debug/app-debug.apk. For emulator/device: ensure Android SDK and NDK are installed; Gradle will download dependencies automatically. Run instrumented tests with ./gradlew connectedAndroidTest.
🗺️Map of the codebase
app/src/main/java/org/schabi/newpipe/App.kt— Application entry point and singleton initialization; sets up logging, crash handlers, and global app stateapp/src/main/java/org/schabi/newpipe/MainActivity.java— Main activity hosting fragments and navigation; core UI orchestration for the streaming front-endapp/src/main/java/org/schabi/newpipe/NewPipeDatabase.kt— Room database singleton managing all persistence; subscriptions, playlists, history, and feeds depend on thisapp/src/main/java/org/schabi/newpipe/DownloaderImpl.java— HTTP client wrapper providing all network requests to streaming services; authentication and retry logic lives hereapp/build.gradle.kts— Build configuration for dependencies, target SDK, and release signing; changes affect all buildsapp/src/main/AndroidManifest.xml— Android manifest declaring all activities, services, permissions, and intent filtersapp/src/main/java/org/schabi/newpipe/BaseFragment.java— Base class for all fragments in the app; provides lifecycle, theming, and common UI setup patterns
🛠️How to make changes
Add Support for a New Streaming Service
- Create a new service implementation extending the NewPipe streaming service abstraction in a separate module (not shown in file list, but referenced via ExtractorService) (
app/build.gradle.kts) - Implement URL routing and stream extraction in the new service module (
app/src/main/java/org/schabi/newpipe/DownloaderImpl.java) - Register the service in dependency injection or factory pattern (check MainActivity or App.kt for service registry) (
app/src/main/java/org/schabi/newpipe/App.kt) - Test with RouterActivity to ensure URLs are correctly routed to your service extractor (
app/src/main/java/org/schabi/newpipe/RouterActivity.java)
Add Persistence for a New Feature (e.g., Bookmarks)
- Create new Entity and DAO classes in the database module (entities and DAOs follow Room conventions) (
app/src/main/java/org/schabi/newpipe/NewPipeDatabase.kt) - Update the @Database annotation to include your new entity and increment schema version (
app/src/main/java/org/schabi/newpipe/NewPipeDatabase.kt) - Create a migration class in app/migrations/ to handle schema upgrade (e.g., Migration_9_to_10.kt) (
app/schemas/org.schabi.newpipe.database.AppDatabase) - Write instrumented tests in androidTest to validate migration correctness (
app/src/androidTest/java/org/schabi/newpipe/database/DatabaseMigrationTest.kt) - Expose queries via a manager class (see pattern in SubscriptionManager, HistoryRecordManager) (
app/src/main/java/org/schabi/newpipe/NewPipeDatabase.kt)
Add a New Fragment/Screen to the Main Navigation
- Create a new Fragment class extending BaseFragment with your UI layout (
app/src/main/java/org/schabi/newpipe/BaseFragment.java) - Register the fragment in MainActivity's navigation component or fragment manager (
app/src/main/java/org/schabi/newpipe/MainActivity.java) - Add intent filter or navigation route in AndroidManifest if the fragment should be accessible from external intents (
app/src/main/AndroidManifest.xml) - If your fragment loads data, use DownloaderImpl for network requests and NewPipeDatabase for local data (
app/src/main/java/org/schabi/newpipe/DownloaderImpl.java)
Handle App Lifecycle Event or Add Initialization Logic
- Add initialization code to App.kt onCreate() or create a new Initializer component (
app/src/main/java/org/schabi/newpipe/App.kt) - If you need background work, use NewVersionWorker as a reference for WorkManager setup (
app/src/main/java/org/schabi/newpipe/NewVersionWorker.kt) - Register any services or broadcast receivers in AndroidManifest (
app/src/main/AndroidManifest.xml)
🔧Why these technologies
- Room (SQLite ORM) — Provides type-safe database access with compile-time verification; enables easy migrations and schema versioning for subscriptions, playlists, history, and feeds
- OkHttp + DownloaderImpl — Robust HTTP client with built-in retry, timeout, and connection pooling; abstracted through DownloaderImpl to support multiple streaming services and simplify testing
- Android Fragments + Navigation Component (inferred) — Modular, reusable UI layers with predictable lifecycle; enables smooth transitions between content browsing, playback, and settings
- Kotlin + Java mixed codebase — App.kt, NewPipeDatabase.kt, and other components are Kotlin; legacy Java components (MainActivity, BaseFragment) remain for stability; Kotlin provides null safety and coroutine support for async operations
- ProGuard/R8 code shrinking — Reduces APK size critical for lightweight distribution; preserves reflection-heavy streaming library APIs
⚖️Trade-offs already made
-
Single monolithic APK instead of modular dynamic features
- Why: Simpler distribution via F-Droid and GitHub releases; avoids complexity of feature modules
- Consequence: APK size and download time larger; feature gates harder to implement; all users get all code
-
Direct HTTP requests via OkHttp rather than gRPC or GraphQL
- Why: Services return REST/JSON; simpler integration and lower overhead for mobile
- Consequence: Over-fetching data; no real-time subscriptions; polling for updates required
-
Local-only database (Room/SQLite) rather than cloud sync
- Why: Privacy-preserving; no backend infrastructure required; lightweight
- Consequence: No cross-device sync; user must export/import playlists manually; data loss if phone replaced
-
Maintenance mode on dev branch; active refactor branch
- Why: Current codebase is complex; refactor branch modernizes architecture with DI, modularization, and Kotlin
- Consequence: Contributors split between bugfixes (dev) and new features
🪤Traps & gotchas
- Dual-branch workflow: main branch accepts only bugfixes, refactor branch is for new features — submitting new code to main will be rejected. 2) Database migrations are strictly sequential — Room requires each schema version to be defined; skipping a version number breaks the migration system. 3) The codebase depends on NewPipeExtractor library (not visible in file list) for reverse-engineering streaming sites; upstream changes to site HTML/APIs cause functionality breakage independent of NewPipe code. 4) ProGuard rules are critical for release builds; local development with R8/ProGuard-enabled builds may mask runtime issues.
🏗️Architecture
💡Concepts to learn
- Room ORM with Schema Versioning — NewPipe uses Room for all data persistence (subscriptions, playlists, history); understanding schema migrations (versions 2-9 in app/schemas/) is essential for database changes without data loss
- Android LiveData and ViewModel — Inferred from the database test structure (DatabaseMigrationTest, DAO tests); likely used throughout for reactive UI updates tied to database changes
- APK Obfuscation with ProGuard/R8 — app/proguard-rules.pro is required for release builds to reduce APK size and protect against reverse engineering; critical for publishing to F-Droid
- CI/CD with GitHub Actions — Workflows in .github/workflows/ automate testing, building, and releasing APKs; understanding how to trigger and debug CI is essential for contribution validation
- Content Provider Scraping (Reverse Engineering) — NewPipe's core function — extracting metadata from streaming sites via HTML/API reverse engineering (handled by NewPipeExtractor); critical context for understanding why certain features break or need updates
- Data Access Object (DAO) Pattern — Room heavily uses DAOs (FeedDAOTest, SubscriptionManagerTest visible in tests); decouples database queries from business logic and is essential for testability
- Dual-Branch Maintenance Strategy — main branch is bugfix-only; refactor branch is for new features — this is non-standard but explicitly required by the README; misunderstanding this will lead to rejected PRs
🔗Related repos
TeamNewPipe/NewPipeExtractor— Core library that handles reverse-engineering and metadata extraction from streaming sites; NewPipe app depends on this for all content fetchingTeamNewPipe/NewPipe-refactor-nightly— Nightly builds of the refactor branch; where ongoing rewrite work is released for testing before merging to mainomarismail/Tweakware-OpenSource— Alternative open-source Android streaming frontend; reference for comparison on UI/UX patterns in privacy-focused streaming appsMatrixTM/MusicPipe— Companion project focused on music extraction from streaming services; shares similar architecture and extractor infrastructure with NewPipeyt-dlp/yt-dlp— Command-line equivalent for downloading from 1000+ streaming sites; NewPipe is the Android GUI wrapper around similar extraction logic
🪄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 StreamItemAdapterTest coverage expansion
The repo has app/src/androidTest/java/org/schabi/newpipe/util/StreamItemAdapterTest.kt but lacks corresponding unit tests (in app/src/test/java). Given the critical role of stream item adapters in UI rendering, adding unit tests for data binding, view recycling, and state management would prevent regressions during the ongoing refactor mentioned in the README.
- [ ] Create app/src/test/java/org/schabi/newpipe/util/ directory structure
- [ ] Add StreamItemAdapterTest.kt with unit tests for ViewHolder binding logic, list updates, and click listeners
- [ ] Add tests for edge cases: empty lists, null items, rapid updates
- [ ] Verify tests run in CI by checking .github/workflows/ci.yml includes unit test step
Add migration tests for database schema versions 9+
The repo maintains database schemas in app/schemas/org.schabi.newpipe.database.AppDatabase/ up to version 9, but DatabaseMigrationTest.kt may not cover all migration paths. With the ongoing refactor, ensuring robust migration paths prevents data loss for existing users upgrading from older versions.
- [ ] Review app/src/androidTest/java/org/schabi/newpipe/database/DatabaseMigrationTest.kt for current coverage
- [ ] Add migration tests for each schema version transition (e.g., v2→v3, v3→v4... v8→v9)
- [ ] Test both forward migrations and rollback scenarios if applicable
- [ ] Add test for skipped version migrations (e.g., v5 directly to v9)
Implement missing GitHub Action workflow for Kotlin linting and code quality checks
The repo has .github/workflows/ci.yml but lacks a dedicated Kotlin linter workflow (similar to image-minimizer.yml). Given the large codebase with app/lint.xml configured, adding automated linting in CI would catch code style issues early and enforce consistency across the refactor effort.
- [ ] Create .github/workflows/kotlin-lint.yml workflow file
- [ ] Configure detekt or ktlint as the linting tool based on existing app/lint.xml rules
- [ ] Set workflow to run on pull requests and pushes to refactor branch (as mentioned in README)
- [ ] Add step to comment lint violations on PRs and fail CI if critical issues found
🌿Good first issues
- Add test coverage for org.schabi.newpipe.error.ErrorInfoTest.java (visible but minimal) — expand tests for error serialization/deserialization edge cases used throughout the app.
- Create integration tests for SubscriptionManagerTest.java and LocalPlaylistManagerTest.kt to verify interactions between subscription and playlist DAOs during import/export workflows.
- Document the database schema migration process in CONTRIBUTING.md with a concrete example of adding a new column (versions 2-9 show patterns, but no migration guide is visible in the file list).
⭐Top contributors
Click to expand
Top contributors
- @TobiGr — 43 commits
- @theimpulson — 16 commits
- @Stypox — 11 commits
- @weblate — 9 commits
- @absurdlylongusername — 8 commits
📝Recent commits
Click to expand
Recent commits
cd171da— Merge pull request #13454 from TeamNewPipe/depUpdate (TobiGr)07b4fa7— Merge branch 'master' into dev (TobiGr)6c65949— Merge pull request #13462 from Stypox/release-0.28.6 (Stypox)d4941c4— Release v0.28.6 (1011) (Stypox)9373a6c— Add changelog for v0.28.6 (1011) (Stypox)6e3b858— Merge pull request #13458 from Stypox/minsdk-23-popup (Stypox)6d52522— Add popup for NewPipe dropping support for Android 5 (Stypox)9360d2f— Cleanup KeepAndroidOpen dialog code (Stypox)5698245— Merge pull request #13455 from TeamNewPipe/weblate (TobiGr)ad7f8ba— gradle: Build with JDK 21 (theimpulson)
🔒Security observations
The NewPipe codebase demonstrates a reasonable security posture as a community-driven streaming client. Key observations: (1) No hardcoded credentials or secrets detected in file structure, (2) Proper use of database schema versioning, (3) Test coverage with androidTest suite suggests some security validation, (4) Active refactoring effort indicates attention to code quality. However, risks exist around WebView security, database query construction, debug feature exposure, and bundled third-party code management. The application handles streaming content from various sources, making input validation and injection prevention critical. Recommend prioritizing WebView security hardening, comprehensive code review of database queries, and formalization of dependency vulnerability scanning.
- Medium · Database Schema Versioning Without Migration Validation —
app/schemas/org.schabi.newpipe.database.AppDatabase/. The application maintains multiple database schema versions (2-9) in app/schemas/. While this is normal, without examining the actual migration code, there's a potential risk of SQL injection if migrations use dynamic SQL queries or if schema changes don't properly validate input. Fix: Review all database migration files (DatabaseMigration.kt) to ensure parameterized queries are used exclusively. Validate that schema changes don't introduce type confusion or injection vectors. - Medium · Potential XSS Risk in WebView Content —
app/src/main/assets/. The presence of HTML asset files (apache2.html, epl1.html, gpl_3.html, mit.html, mpl2.html, po_token.html) suggests the application loads local HTML content. If these are loaded into WebViews without proper sanitization or if user data is injected into these pages, XSS attacks are possible. Fix: Ensure WebView configuration disables JavaScript if not required, uses Content Security Policy headers, and all user-controlled data is HTML-escaped before rendering. Review WebViewClient implementations for security best practices. - Low · ProGuard Configuration Missing Critical Rules —
app/proguard-rules.pro. The app/proguard-rules.pro file exists but without content visibility, it's unclear if critical security-sensitive classes are properly obfuscated and retained. Improperly configured ProGuard can expose sensitive class names and logic. Fix: Review ProGuard rules to ensure: (1) Security-sensitive classes are not stripped, (2) Reflection-based code has keep rules, (3) Native method signatures are preserved, (4) Sensitive class names are obfuscated. - Low · Debug Build Configuration Exposed —
app/src/debug/java/org/schabi/newpipe/. The presence of app/src/debug/ directory with DebugApp.kt and DebugSettingsBVDLeakCanary.java suggests debug features may be enabled in development builds. If debug APKs are distributed or debug features leak into production, this could enable code inspection and exploitation. Fix: Ensure debug builds are never distributed via official channels. Implement build-time checks to strip debug features from release builds. Use BuildConfig.DEBUG conditionals to guard sensitive logging and inspection tools. - Low · Third-party Library with Potential Vulnerabilities —
app/src/main/java/org/apache/commons/text/. The codebase includes bundled Apache Commons Text (org/apache/commons/text/) with FuzzyScore.java. Older versions of this library may have known vulnerabilities. The bundling of third-party code makes updates harder. Fix: Verify the version of Apache Commons Text is current and free of CVEs. Prefer using dependency management (Gradle) rather than bundling source code to enable easier security updates. - Low · Custom Material Design Component with Potential Security Implications —
app/src/main/java/com/google/android/material/appbar/FlingBehavior.java. Custom FlingBehavior.java in Material Design library workaround (app/src/main/java/com/google/android/material/appbar/) suggests modifications to standard components. Improper implementation could introduce security issues. Fix: Review the FlingBehavior implementation to ensure it doesn't bypass any security validations from the original Material Design library. Use official library updates instead of custom implementations where possible.
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.