Jandapress was originally named JCE (Janda Cheerio Express (legacy name)) and now runs on Bun + Hono.
The motivation behind this project is to provide developers with accessible and actionable data from various doujinshi sources, with a focus on aggregation and ease of integration for applications and services.
Many developers consume doujin websites as a source of data when building web applications. However, most of these sites — such as pururin, simply-hentai, and others — do not provide official APIs or public resources that can be easily integrated into applications.
As a result, developers often need to implement their own scraping logic, build multiple abstractions, and manually maintain integrations for each site.
Jandapress aims to simplify this process by providing a unified interface for accessing data across multiple doujin sites. Instead of maintaining separate implementations, developers can rely on Jandapress to reduce complexity and development overhead.
The current state of the service is free to use, meaning anonymous usage is allowed. No authentication is required, and CORS is enabled to support browser-based applications.
Some tests may fail in CI environments because certain doujin websites restrict or block automated requests originating from CI infrastructure and shared IP ranges.
| Site | Status | Get | Search | Random |
|---|---|---|---|---|
nhentai |
✅ | ✅ | ✅ | |
pururin |
✅ | ✅ | ✅ | |
hentaifox |
✅ | ✅ | ✅ | |
hentai2read |
✅ | ✅ | ❌ | |
simply-hentai |
✅ | ❌ | ❌ | |
asmhentai |
✅ | ✅ | ✅ | |
3hentai |
✅ | ✅ | ✅ |
- Aggregates data from multiple doujin sites.
- Provides a consistent and structured response format across all sources.
- Extracted objects are normalized and reassembled to support extensibility.
- Unified interface supporting get, search, and random methods.
- Planned support for optional JWT authentication in future releases.
- Primarily based on pure scraping techniques (with limited exceptions where required).
| NOTE: Bun 1.3.13 or higher / or simply just use docker |
To handle several requests from each web, You will also need Redis for persistent caching, free tier is available on Redis Labs, You can also choose another provider as we using keyv Key-value storage with support for multiple backends. All data must be stored in <Buffer> here.
Rename .env.schema to .env and fill the value with your own
# railway, fly.dev, heroku, vercel or any free service
RAILWAY = sinkaroid
# default port
PORT = 3000
# backend storage, default is redis, if not set it will consume memory storage
REDIS_URL = redis://default:somenicepassword@redis-666.c10.us-east-6-6.ec666.cloud.redislabs.com:1337
# ttl expire cache (in X hour)
EXPIRE_CACHE = 1
# optional: API key for nhentai official API
NHENTAI_API_KEY = ""
# optional custom user agent for upstream requests
USER_AGENT = "jandapress/10.0.1-alpha Bun/1.3.13"docker pull ghcr.io/sinkaroid/jandapress:latest
docker run -p 3000:3000 -d ghcr.io/sinkaroid/jandapress:latest
docker run -d \
--name=jandapress \
-p 3025:3000 \
-e REDIS_URL='redis://default:somenicepassword@redis-666.c10.us-east-6-6.ec666.cloud.redislabs.com:1337' \
-e EXPIRE_CACHE='1' \
-e NHENTAI_API_KEY='' \
-e USER_AGENT='jandapress/10.0.1-alpha Bun/1.3.13' \
ghcr.io/sinkaroid/jandapress:latestgit clone https://github.com/sinkaroid/jandapress.git
- Install dependencies
bun install
- Jandapress production
bun run start:prod
- Jandapress testing and hot reload
bun run start:dev
Jandapress now targets the nhentai official API endpoints (/api/v2) for search, related, and random ID discovery.
- set
NHENTAI_API_KEYin.env(optional but recommended) - set
USER_AGENTin.envif you need a custom upstream identifier - validate upstream with
bun run testorbun run test:nhentai - if you want to adjust nhentai contracts/mapping, read
docs/nhentai-api-contract.mdfirst
Run the following commands to execute tests for each supported source:
# Check whether all supported sites are available for scraping
bun run test:scrape
# Run tests for individual sources
bun run test:nhentai
bun run test:pururin
bun run test:hentaifox
bun run test:asmhentai
bun run test:hentai2read
bun run test:simply-hentai
bun run test:3hentaibun run start:prod
bun run start:dev
bun run build then open /doc or /playground
To running other tests, you can see object scripts in file
package.json
https://sinkaroid.github.io/jandapress
March 11, 2026: We have discontinued providing public APIs and playground services due to ongoing abuse and excessive usage. To continue using Jandapress, please deploy and run your own self-hosted instance.
-
These
parameter?: means is optional -
/: index page
The missing piece of nhentai - https://sinkaroid.github.io/jandapress/#GET/nhentai
/nhentai: nhentai api- get, takes parameters :
book - search, takes parameters :
key,?page,?sort - related, takes parameters :
book - random
- sort parameters on search
- "date", "popular", "popular-today", "popular-week", "popular-month"
- Example
- get, takes parameters :
The missing piece of pururin - https://sinkaroid.github.io/jandapress/#GET/pururin
/pururin: pururin api- get, takes parameters :
book - search, takes parameters :
key,?page - random
- Example
- get, takes parameters :
The missing piece of hentaifox - https://sinkaroid.github.io/jandapress/#GET/hentaifox
/hentaifox: hentaifox api- get, takes parameters :
book - search, takes parameters :
key,?page,?sort - random
- sort parameters on search
- "latest", "popular"
- Example
- get, takes parameters :
The missing piece of asmhentai - https://sinkaroid.github.io/jandapress/#GET/asmhentai
/asmhentai: asmhentai api- get, takes parameters :
book - search, takes parameters :
key,?page - random
- sort parameters on search
- None
- Example
- get, takes parameters :
The missing piece of hentai2read - https://sinkaroid.github.io/jandapress/#GET/hentai2read
/hentai2read: hentai2read api- get, takes parameters :
book - search, takes parameters :
key - sort parameters on search
- TBA
- Example
- get, takes parameters :
The missing piece of simply-hentai - https://sinkaroid.github.io/jandapress/#GET/simply-hentai
/simply-hentai: simply-hentai api- get, takes parameters :
book - sort parameters on search
- TBA
- Example
- get, takes parameters :
The missing piece of 3hentai - https://sinkaroid.github.io/jandapress/#GET/3hentai
/3hentai: 3hentai api- get, takes parameters :
book - search, takes parameters :
key,?page,?sort - random
- sort parameters on search
- "recent", "popular-24h", "popular-7d", "popular"
- Example
- get, takes parameters :
"success": true, or "success": false,
HTTP/1.1 200 OK
HTTP/1.1 400 Bad Request
HTTP/1.1 500 Fail to get data
Q: The website response is slow
That's unfortunate, this repository was opensource already, You can host and deploy Jandapress with your own instance. Any fixes and improvements will updating to this repo.
March 11, 2026: We have discontinued providing public APIs and playground services due to ongoing abuse and excessive usage. To continue using Jandapress, please deploy and run your own self-hosted instance.
id_ID • /jan·da/ — Dewasa dan mengikat; (?) /press/ shorthand for expressjs (legacy name); (?)
Seamlessly integrate with the languages you love, simplified the usage, and intelisense definitions on your IDEs
- janda Python wrapper by sinkaroid
- Or create your own
This tool can be freely copied, modified, altered, distributed without any attribution whatsoever. However, if you feel like this tool deserves an attribution, mention it. It won't hurt anybody.
Licence: WTF.

