
Security News
Lovable’s OJ Rewrites Vite’s Dev Server in Rust as AI Lowers the Cost of Forking Open Source
Lovable’s OJ rewrites Vite’s dev server in Rust, reducing memory use and preview times as AI lowers the cost of open source reimplementation.
jav-manager
Advanced tools
A lightweight GUI + CLI tool for automated JAV content management with fast repeat searches, torrent search, and optional qBittorrent integration.
# GUI
npx jav-manager --gui
# CLI (interactive)
npx jav-manager
# CLI (non-interactive)
npx jav-manager STARS-001
# Help / version
npx jav-manager help
npx jav-manager version
Notes:
npx jav-manager with jav-manager if you installed it globally (npm install -g jav-manager).flowchart TD
A[Input JAV ID] --> B{Data available?}
B -->|Yes| C[Use existing metadata]
B -->|No| D[Fetch from JavDB]
C --> E[Rank torrents]
D --> E
E --> F{Local file exists?}
F -->|Yes| G[Show options]
F -->|No| H[Add to downloader]
G --> H
H --> I[Done]
classDef primary fill:#2563eb,stroke:#1d4ed8,color:#ffffff;
classDef decision fill:#f59e0b,stroke:#d97706,color:#111827;
classDef neutral fill:#ffffff,stroke:#e5e7eb,color:#1f2937;
class A,H,I primary;
class B,F decision;
class C,D,E,G neutral;
| Service | Required | Purpose | Link |
|---|---|---|---|
| JavDB | Yes | Metadata & magnet links | javdb.com |
| Everything | No (optional) | Local file search | voidtools.com (HTTP plugin) |
| qBittorrent | No (optional) | Torrent download | qBittorrent |
If JavDB returns HTTP 403, it's likely due to a Cloudflare challenge. JavManager uses curl-impersonate by default to mimic a real browser TLS/HTTP2 fingerprint (no browser automation). If you still see 403, try a different mirror URL or check if your IP is blocked (see doc/CloudflareBypass.md).
The Cloudflare Worker provides an API endpoint to get the latest JavDB domain from the official site:
Endpoint: GET /api/javdb-domain
Example Request:
curl https://your-worker-url/api/javdb-domain
Example Response:
{
"success": true,
"domains": ["javdb565.com"]
}
Error Response:
{
"success": false,
"error": "Failed to fetch domain from javdb.com",
"message": "Could not extract latest domain from javdb.com"
}
This API fetches the latest JavDB domain from https://javdb.com/ in real-time. The API includes a 10-second timeout and proper error handling.
If Telemetry:Enabled is true, JavManager can post:
POST /api/telemetryPOST /api/javinfo (used by the worker UI; repeated reports increment the per-ID search counter)The worker also serves a small UI:
/ overview/jav "Jav Trends" (recent JavInfo records + search counts)Settings are configured via appsettings.json (and optional appsettings.Development.json).
Config file location:
JAVMANAGER_CONFIG_DIR is set and exists, config is read from there.appsettings.json in the executable directory first, then the current working directory.cfg set ... write appsettings.json to the selected config directory (see lookup rules above).Configuration reference:
| Section | Key | Required | Default | Description |
|---|---|---|---|---|
| Everything | BaseUrl | No (optional) | (empty) | Everything HTTP server base URL (include scheme and host). If unavailable, local dedup is skipped. |
| Everything | UserName | No (optional) | (empty) | Basic auth user name. |
| Everything | Password | No (optional) | (empty) | Basic auth password. |
| QBittorrent | BaseUrl | No (optional) | (empty) | qBittorrent WebUI base URL (include port if needed). If unavailable/auth fails, JavManager prints magnet links without adding to download queue. |
| QBittorrent | UserName | No (optional) | (empty) | WebUI user name. |
| QBittorrent | Password | No (optional) | (empty) | WebUI password. |
| JavDb | BaseUrl | Yes | https://javdb.com | Primary JavDB base URL. |
| JavDb | MirrorUrls | No (optional) | [] | Additional mirror URLs (array). |
| JavDb | RequestTimeout | No (optional) | 30000 | Request timeout in milliseconds. |
| JavDb | UserAgent | No (optional) | (empty) | Custom User-Agent string (used only in HttpClient fallback mode). |
| JavDb | CurlImpersonate:Enabled | No (optional) | true | Enable curl-impersonate for JavDB requests (recommended). |
| JavDb | CurlImpersonate:Target | No (optional) | chrome116 | Impersonation target name for curl_easy_impersonate() (e.g. chrome116). |
| JavDb | CurlImpersonate:LibraryPath | No (optional) | (empty) | Optional explicit path to libcurl.dll (otherwise auto-detected). |
| JavDb | CurlImpersonate:CaBundlePath | No (optional) | (empty) | Optional path to cacert.pem (otherwise auto-detected). |
| JavDb | CurlImpersonate:DefaultHeaders | No (optional) | true | Use curl-impersonate built-in default HTTP headers. |
| Download | DefaultSavePath | No (optional) | (empty) | Default download path when adding torrents to qBittorrent. |
| Download | DefaultCategory | No (optional) | jav | Default category in qBittorrent. |
| Download | DefaultTags | No (optional) | jav-manager | Default tags for created downloads. |
| LocalCache | Enabled | No (optional) | true | Enable or disable local cache storage. |
| LocalCache | DatabasePath | No (optional) | (empty) | JSON cache file path (leave empty for default jav_cache.json next to executable). |
| LocalCache | CacheExpirationDays | No (optional) | 0 | Cache TTL in days (0 disables expiration). |
| Console | Language | No (optional) | en | UI language (en or zh). |
| Console | HideOtherTorrents | No (optional) | true | Hide non-matching torrents in list. |
| Telemetry | Enabled | No (optional) | true | Enable or disable anonymous telemetry. |
| Telemetry | Endpoint | No (optional) | https://jav-manager.techfetch.dev | Base endpoint (the app posts to /api/telemetry and /api/javinfo). |
| Update | Enabled | No (optional) | true | Enable or disable update checks. |
| Update | AutoCheckOnStartup | No (optional) | true | Auto-check for updates on startup (GUI). |
| Update | GitHubRepo | No (optional) | jqknono/jav-manager | GitHub repo used for update checks. |
Notes:
JavInfoSync:* is a legacy section name; newer builds use Telemetry:* (the app still reads the legacy keys for backward compatibility).JAVMANAGER_ prefix (nested keys use __), but file-based config is the primary supported method.# Install deps
npm install
# Build
npm run build
# Run (GUI / CLI)
npm run gui
npm run cli
# Run (compiled default entry)
npm run start
# Tests
npm test
FAQs
TypeScript rewrite of JavManager
We found that jav-manager demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.

Security News
Lovable’s OJ rewrites Vite’s dev server in Rust, reducing memory use and preview times as AI lowers the cost of open source reimplementation.

Security News
It has been one year since Shai-Hulud made its first appearance on npm.

Research
/Security News
Operators behind PolinRider used a compromised GitHub account to plant malware in four development versions of a Packagist package with 700,000+ downloads.