Kareadita/Kavita
Kavita is a fast, feature rich, cross platform reading server. Built with the goal of being a full solution for all your reading needs. Setup your own server and share your reading collection with your friends and family.
Mixed signals — read the receipts
worst of 4 axescopyleft 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
- ✓5 active contributors
- ✓GPL-3.0 licensed
Show 4 more →Show less
- ✓CI configured
- ✓Tests present
- ⚠Concentrated ownership — top contributor handles 53% of recent commits
- ⚠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 "Forkable" badge
Paste into your README — live-updates from the latest cached analysis.
[](https://repopilot.app/r/kareadita/kavita)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/kareadita/kavita on X, Slack, or LinkedIn.
Onboarding doc
Onboarding: Kareadita/Kavita
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/Kareadita/Kavita 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 — Mixed signals — read the receipts
- Last commit 1d ago
- 5 active contributors
- GPL-3.0 licensed
- CI configured
- Tests present
- ⚠ Concentrated ownership — top contributor handles 53% of recent commits
- ⚠ 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 Kareadita/Kavita
repo on your machine still matches what RepoPilot saw. If any fail,
the artifact is stale — regenerate it at
repopilot.app/r/Kareadita/Kavita.
What it runs against: a local clone of Kareadita/Kavita — 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 Kareadita/Kavita | 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 develop 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 Kareadita/Kavita. If you don't
# have one yet, run these first:
#
# git clone https://github.com/Kareadita/Kavita.git
# cd Kavita
#
# 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 Kareadita/Kavita and re-run."
exit 2
fi
# 1. Repo identity
git remote get-url origin 2>/dev/null | grep -qE "Kareadita/Kavita(\\.git)?\\b" \\
&& ok "origin remote is Kareadita/Kavita" \\
|| miss "origin remote is not Kareadita/Kavita (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 develop >/dev/null 2>&1 \\
&& ok "default branch develop exists" \\
|| miss "default branch develop no longer exists"
# 4. Critical files exist
test -f "Kavita.API/Kavita.API.csproj" \\
&& ok "Kavita.API/Kavita.API.csproj" \\
|| miss "missing critical file: Kavita.API/Kavita.API.csproj"
test -f "Kavita.API/Database/IUnitOfWork.cs" \\
&& ok "Kavita.API/Database/IUnitOfWork.cs" \\
|| miss "missing critical file: Kavita.API/Database/IUnitOfWork.cs"
test -f "Kavita.API/Services/IAccountService.cs" \\
&& ok "Kavita.API/Services/IAccountService.cs" \\
|| miss "missing critical file: Kavita.API/Services/IAccountService.cs"
test -f "Kavita.API/Services/ISeriesService.cs" \\
&& ok "Kavita.API/Services/ISeriesService.cs" \\
|| miss "missing critical file: Kavita.API/Services/ISeriesService.cs"
test -f ".github/workflows/build-and-test.yml" \\
&& ok ".github/workflows/build-and-test.yml" \\
|| miss "missing critical file: .github/workflows/build-and-test.yml"
# 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/Kareadita/Kavita"
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
Kavita is a self-hosted reading server written in C# (ASP.NET Core backend) with TypeScript/Angular frontend that serves manga, comics, webtoons (CBR/CBZ/7Z/RAR/images), and books (EPUB/PDF) with responsive readers optimized for mobile/tablet/desktop. It provides metadata integration, user role management, reading lists, collections, and scrobbling capabilities—essentially a Plex or Jellyfin for digital reading collections. Monorepo structure: Kavita.API/ contains the C# ASP.NET Core backend with layered architecture (Repositories/, Database/, Attributes/, Errors/); frontend (TypeScript/Angular/SCSS) sits separately in the root consuming the API. Database abstraction via IDataContext and IUnitOfWork patterns. Repositories pattern for data access (IAnnotationRepository, IChapterRepository, etc.) suggests DDD-influenced design.
👥Who it's for
Self-hosting enthusiasts and comic/manga/book collectors who want to organize and share their digital library across devices; developers contributing to the project are C# backend engineers, TypeScript/Angular frontend devs, and DevOps engineers (given the Dockerfile and GitHub Actions workflows).
🌱Maturity & risk
Production-ready and actively developed. The project has significant C# codebase (5.8M LOC), established CI/CD via GitHub Actions (.github/workflows contains build-and-test.yml, release-workflow.yml, canary-workflow.yml), Docker support, and clear release versioning. Multiple active workflows and discussion templates indicate ongoing maintenance and community engagement.
Low-to-moderate risk: single primary maintainer (Kareadita org suggests individual-led project), but CI/CD is well-structured with CodeQL scanning. Monolithic C# backend could make refactoring difficult at scale. The 5.8M LOC C# codebase and heavy TypeScript frontend (2.3M LOC) mean breaking changes in architecture could require coordinated effort across both layers.
Active areas of work
Active development tracked via GitHub Actions workflows: build-ui.yml and build-and-test.yml run on commits, canary-workflow.yml and release-workflow.yml manage releases. Recent workflow files (pr-check.yml, openapi-gen.yml) suggest OpenAPI schema generation and PR validation. Discussion and issue templates indicate community engagement is prioritized.
🚀Get running
git clone https://github.com/Kareadita/Kavita.git
cd Kavita
# Backend: requires .NET SDK (check global.json or .csproj)
dotnet restore Kavita.API/Kavita.API.csproj
dotnet build Kavita.API/Kavita.API.csproj
# Frontend: npm install && npm run build (exact commands inferred from presence of TypeScript/Angular)
cd UI && npm install && npm start
Exact dev startup commands should be in Dockerfile, INSTALL.txt, or README (check INSTALL.txt for system-specific setup).
Daily commands:
# Backend (ASP.NET Core)
dotnet run --project Kavita.API/Kavita.API.csproj
# Frontend (Angular/TypeScript) — runs on separate dev server
cd UI && npm start
# Or via Docker
docker build -t kavita .
docker run -p 5000:5000 kavita
Exact ports and config should be in Dockerfile and appsettings.json (not listed but standard for ASP.NET).
🗺️Map of the codebase
Kavita.API/Kavita.API.csproj— Core API project definition; defines all backend dependencies, build targets, and project structure that the entire server relies on.Kavita.API/Database/IUnitOfWork.cs— Central data access abstraction; all repository interactions flow through this interface, making it load-bearing for persistence logic.Kavita.API/Services/IAccountService.cs— Authentication and user account core service interface; fundamental to access control and user session management throughout the server.Kavita.API/Services/ISeriesService.cs— Primary business logic for reading content (series/manga); handles the core reading collection workflow that defines the app's value..github/workflows/build-and-test.yml— CI/CD pipeline definition; controls automated testing and deployment, critical for maintaining code quality across contributors.Dockerfile— Container image definition; enables cross-platform deployment and reproducible environments that the project emphasizes..github/copilot-instructions.md— Developer guidance and coding standards; helps new contributors understand the project's conventions and architectural decisions.
🛠️How to make changes
Add a new API endpoint for reading content
- Create or modify a Controller in the Kavita.API project (follows ASP.NET conventions) (
Kavita.API (look for Controllers directory, not in file list but standard structure)) - Inject the appropriate service interface (e.g., ISeriesService, IReadingItemService) into the controller constructor (
Kavita.API/Services/ISeriesService.cs) - Call the service method to fetch/process data, then return an HTTP response (
Kavita.API/Errors/ApiException.cs (for error handling pattern)) - If new data persistence is needed, add repository methods to the appropriate IRepository interface (
Kavita.API/Repositories/ISeriesRepository.cs (example)) - Ensure unit of work transaction scope is honored via the service layer (
Kavita.API/Database/IUnitOfWork.cs)
Integrate a new external service (e.g., metadata provider, auth system)
- Define a new service interface following the naming pattern INewService (
Kavita.API/Services/IOidcService.cs (reference implementation)) - Implement the service in a concrete class in the Services folder (
Kavita.API/Services/Metadata/ICoverDbService.cs (similar pattern)) - Register the service in the dependency injection container (Startup/Program.cs, not in file list) (
Kavita.API/Services/IAccountService.cs (shows how services are typically structured)) - Inject and use the service in controllers or other services as needed (
Kavita.API/Services/ISeriesService.cs (consumer pattern)) - Add error handling using ApiException or service-specific exceptions (
Kavita.API/Errors/ApiException.cs)
Add a new data entity and repository
- Create a new entity class in Kavita.API/Entities (not in file list, but standard location) (
Kavita.API/Database/IDataContext.cs (references all entities)) - Create a new repository interface following the pattern IEntityRepository (
Kavita.API/Repositories/ISeriesRepository.cs (reference pattern)) - Implement the repository interface with concrete EF Core or LINQ logic (
Kavita.API/Database/IUnitOfWork.cs (coordinator for all repos)) - Add the repository to IUnitOfWork so it coordinates with other repositories (
Kavita.API/Database/IUnitOfWork.cs) - Create a service to orchestrate the repository logic and expose to controllers (
Kavita.API/Services/ISeriesService.cs (business logic pattern))
Add a new code quality check or CI/CD step
- Modify the SonarCloud configuration to add new rules or exclusions (
.sonarcloud.properties) - Update the build and test workflow to include the new analysis step (
.github/workflows/build-and-test.yml) - Add PR validation rules to block merges on quality failures (
.github/workflows/pr-check.yml) - Document the new requirement and rationale for developers (
.github/copilot-instructions.md) - Ensure code style is enforced via EditorConfig (
.editorconfig)
🔧Why these technologies
- ASP.NET Core C# — Fast, cross-platform backend; enables Windows/Linux/macOS deployment; strong type safety for robust reading server
- Entity Framework Core / LINQ — Type-safe ORM for database abstraction; aligns with C# ecosystem; supports multiple database backends
- Docker containerization — Achieves stated 'cross-platform' goal; simplifies deployment across user devices; reproducible environments
- Repository + Unit of Work pattern — Decouples data access
🪤Traps & gotchas
- File format handling is custom: MangaFileRepository and related code likely contains proprietary parsing logic for CBR/CBZ/7Z/RAR—understand this before adding file type support. 2) OPDS server mode: OpdsException.cs indicates OPDS (Open Publication Distribution System) compatibility—some endpoints may behave differently when OPDS mode is active. 3) Device tracking: SkipDeviceTrackingAttribute.cs suggests device fingerprinting is implemented—be aware of privacy implications when modifying user tracking. 4) Metadata external sources: IExternalSeriesMetadataRepository and AppUserExternalSourceRepository indicate third-party metadata sync (likely Kavita+ feature)—API keys or external service dependencies may be required. 5) Reading profiles and smart filters: IAppUserSmartFilterRepository and IAppUserReadingProfileRepository suggest complex user-specific filtering logic that may not be obvious from schema alone. Check CONTRIBUTING.md for exact setup requirements (database migrations, seed data, etc.).
🏗️Architecture
💡Concepts to learn
- Repository Pattern — Kavita extensively uses repository interfaces (IChapterRepository, ILibraryRepository, etc.) to abstract data access—understanding this pattern is essential for adding features and modifying data layers.
- Unit of Work Pattern — IUnitOfWork.cs is the central coordinator for transactions and repository instances; you must understand this to make consistent multi-entity changes.
- OPDS (Open Publication Distribution System) — Kavita implements OPDS server mode (OpdsException.cs) for library catalog syndication—knowing OPDS is critical for understanding how the server exposes content to e-readers and aggregators.
- Role-Based Access Control (RBAC) — The codebase has explicit RBAC for user permissions and age restrictions; understanding role hierarchies is necessary for any user management or permission-related feature work.
- Virtual Pagination / Virtual Scrolling — Mentioned in README as a feature for EPUB readers; this is a performance optimization for rendering large lists—relevant if working on frontend reader components.
- OIDC (OpenID Connect) — Kavita supports OIDC for authentication; understanding this OAuth2 extension is necessary for integrating with enterprise auth systems or implementing SSO features.
- Multi-format File Parsing (CBR/CBZ/7Z/RAR/EPUB/PDF) — Core to Kavita's value—the MangaFileRepository and related code handle multiple archive and document formats; you'll need to know these formats to add support for new file types or debug parsing issues.
🔗Related repos
jellyfin/jellyfin— Comparable open-source media server (for video) with similar architecture goals—useful reference for multi-user, role-based access, and media library management patterns.Komga/komga— Direct competitor: another self-hosted manga/comic server written in Kotlin/Spring Boot; study its architecture for feature parity and alternative implementation approaches.Kareadita/Themes— Official companion repo containing community themes for Kavita; essential for understanding the theming system and CSS/SCSS architecture.docker-library/official-images— Reference for Docker best practices; Kavita's Dockerfile should follow these conventions for multi-platform builds and security hardening.Kareadita/Kavita-mobile-app— Likely companion mobile app repo (if it exists as a separate project) for iOS/Android clients; understanding the mobile consumer helps design API backwards-compatibility.
🪄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 Repository interfaces and implementations
The repo contains 20+ repository interfaces (IAnnotationRepository, ISeriesRepository, IUserRepository, etc.) in Kavita.API/Repositories/ but no visible test files in the file structure. Given this is a data-heavy reading server with complex filtering and progress tracking, adding unit tests for repository methods would catch data access bugs early and improve maintainability.
- [ ] Create Kavita.API.Tests/Repositories/ directory structure
- [ ] Add unit tests for ISeriesRepository (series fetching, filtering by library)
- [ ] Add unit tests for IAppUserProgressRepository (reading progress tracking edge cases)
- [ ] Add unit tests for IReadingListRepository (reading list creation and remapping)
- [ ] Wire tests into build-and-test.yml GitHub workflow
Add GitHub Action workflow for API documentation generation and validation
The repo has openapi-gen.yml workflow but no visible integration validation step. With 20+ Service interfaces (IAccountService, IAnnotationService, IBookService, etc.) in Kavita.API/Services/, adding a workflow to validate OpenAPI spec matches actual API contracts would prevent documentation drift and improve API reliability.
- [ ] Extend .github/workflows/openapi-gen.yml to run spectacle/swagger validation
- [ ] Add validation step to ensure all Kavita.API/Services/* controllers are documented
- [ ] Add check to fail PR if OpenAPI spec is out of sync with controllers
- [ ] Document API versioning strategy in CONTRIBUTING.md
Extract and test device tracking logic from SkipDeviceTrackingAttribute
Kavita.API/Attributes/SkipDeviceTrackingAttribute.cs suggests device tracking is a cross-cutting concern, but there's no visible dedicated service or tests for device tracking logic. Given the IClientDeviceRepository and IActiveUserTrackerService interfaces exist, consolidating this logic would improve testability and reduce attribute-based logic scatter.
- [ ] Review SkipDeviceTrackingAttribute.cs implementation
- [ ] Create IDeviceTrackingService to centralize device tracking logic
- [ ] Add unit tests for device tracking in various scenarios (new device, returning user, etc.)
- [ ] Refactor attribute to use the new service and add integration tests with IClientDeviceRepository
🌿Good first issues
- Add unit tests for IAnnotationRepository implementations—currently no test files visible in the repo structure. Start by creating Kavita.API.Tests/Repositories/AnnotationRepositoryTests.cs following existing test patterns and mocking IDataContext.: Annotations are user-facing features (bookmarks, notes) but test coverage is likely incomplete; this is high-impact and teaches the test infrastructure.
- Document the IUnitOfWork pattern and repository initialization in CONTRIBUTING.md—the file exists but specifics on how to add a new repository are missing. Add a step-by-step guide with a concrete example (e.g., 'How to add INewFeatureRepository').: New contributors will immediately hit this when trying to add features; documentation ROI is high and helps onboarding.
- Add OpenAPI/Swagger documentation comments to Kavita.API repository interfaces (IChapterRepository, ILibraryRepository, etc.)—the openapi-gen.yml workflow exists but interfaces lack XML doc comments. Add /// <summary> and /// <param> comments to enable auto-generated API docs.: The CI workflow is already set up (openapi-gen.yml) but likely fails or produces incomplete schema; fixing this unblocks API documentation generation and teaches the doc generation pipeline.
⭐Top contributors
Click to expand
Top contributors
- @majora2007 — 53 commits
- @actions-user — 28 commits
- @Fesaa — 11 commits
- @weblate — 7 commits
- @amara-vo — 1 commits
📝Recent commits
Click to expand
Recent commits
fa485d3— [skip ci] Weblate Changes (#4660) (weblate)008417d— Update OpenAPI documentation (actions-user)55f649d— Bump versions by dotnet-bump-version. (majora2007)5d6182b— OIDC Network Validation Changes and a Host of Bugfixes (#4688) (Fesaa)d8f6f0b— Update OpenAPI documentation (actions-user)b7ebf49— v0.9.0 - Reading List Overhaul and Spring Cleaning (#4654) (majora2007)e8a327c— [skip ci] Weblate Changes (#4655) (weblate)0f6993e— [skip ci] Fixed swagger stuff (#4653) (majora2007)81ad2a5— Bump versions by dotnet-bump-version. (majora2007)fca1585— Release Polish: Part 3 (#4651) (majora2007)
🔒Security observations
- High · Ubuntu Base Image Uses Outdated Version —
Dockerfile (lines 5 and 25). The Dockerfile uses 'ubuntu:noble' without specifying a specific patch version tag. This can lead to inconsistent builds and potential security vulnerabilities if the base image is updated with unpatched software. Using a floating tag like 'noble' means the image can change between builds. Fix: Pin to a specific Ubuntu Noble version with patch number (e.g., 'ubuntu:noble-20240122' or use a specific date-based tag) to ensure reproducible and consistent builds. - High · Missing Security Headers in Configuration —
Kavita.API/Services (no visible ISecurityHeaderService). The exposed Kavita.API services lack explicit security header configuration visible in the provided file structure. The application exposes port 5000 and serves content but no evidence of HSTS, CSP, X-Frame-Options, or other critical security headers is shown. Fix: Implement middleware to set security headers: Content-Security-Policy, X-Frame-Options: DENY, X-Content-Type-Options: nosniff, Strict-Transport-Security, and X-XSS-Protection. - High · Incomplete Docker Healthcheck Configuration —
Dockerfile (HEALTHCHECK line). The Dockerfile's HEALTHCHECK command is truncated ('http://localh' - incomplete). This prevents proper health monitoring and could mask container failures in production orchestration environments. Fix: Complete the healthcheck URL to a valid endpoint: 'HEALTHCHECK --interval=30s --timeout=15s --start-period=30s --retries=3 CMD curl -fsS http://localhost:5000/api/health || exit 1' - Medium · Potential Path Traversal in File Operations —
Kavita.API/Services/IArchiveService, Kavita.API/Services/IFileService, Kavita.API/Repositories/IMangaFileRepository. The file structure indicates services like IArchiveService, IFileService, IMediaConversionService, and IMangaFileRepository that handle file operations. Without visible input validation in these service interfaces, there may be path traversal vulnerabilities when processing user-provided file paths or archive contents. Fix: Implement strict path validation: sanitize all file paths, use Path.GetFullPath() to resolve paths, validate that resolved paths stay within designated directories, reject paths with '..' sequences, and use allowlists for permitted directories. - Medium · Missing CORS Configuration Visibility —
Kavita.API (missing ICorsPolicyService or appsettings.json shown). As a reading server with client-server architecture (UI/Web/dist/browser), CORS policy configuration is critical. No visible CORS configuration file or service is found in the provided structure, risking either over-permissive or misconfigured cross-origin requests. Fix: Explicitly configure CORS in appsettings.json with specific allowed origins, methods, and headers. Avoid using '*' for AllowAnyOrigin. Use AllowCredentials only when necessary. Implement CORS validation at API layer. - Medium · Unencrypted Configuration File in Docker Build —
Dockerfile (COPY Kavita.Server/config/appsettings.json line). The Dockerfile copies 'appsettings.json' to '/tmp/config' without encryption or secrets management. If this file contains sensitive configuration (API keys, database credentials, JWT secrets), it could be exposed in the Docker image layers. Fix: Use Docker secrets management (Docker Swarm secrets or Kubernetes Secrets), environment variable injection, or secret management systems (Vault, etc.). Never copy sensitive config into Docker images. Use build-time secrets or runtime injection patterns. - Medium · No Visible Input Validation Framework —
Kavita.API/Services and Kavita.API/Repositories. The extensive repository and service interfaces (ISeriesRepository, IChapterRepository, IUserRepository, etc.) suggest complex data operations, but no obvious input validation service or data annotation patterns are visible in the provided structure. Fix: Implement comprehensive input validation using FluentValidation, Data Annotations, or similar frameworks. Validate all user inputs before database operations. Implement custom validation attributes for domain-specific validation rules. - Medium · Dependency Management Not Visible —
undefined. undefined Fix: undefined
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.