Skip to content

OTA parsers & REST API

Both Nyora SDKs share a single parser engine that updates itself over the air, and both expose the same REST API so other Nyora apps can attach to a running instance. This page documents the OTA feed and the helper-compatible API surface.

The OTA parser feed

Parsers ship out-of-band from the SDK release. Each SDK embeds a copy of the bundle and checks the feed for newer versions, verifying every download with a sha256 hash before swapping it in. The feed is served as static files from https://Hasan72341.github.io/nyora-ota-parsers.

EndpointDescription
GET /manifest.jsonVersion pointer + hashes for the current bundle and source list.
GET /parsers.bundle.jsThe parser extensions (~450 KB).
GET /sources.jsonThe source catalogue (~235 sources).

manifest.json shape

{
  "version": 42,
  "bundle":  { "url": "...", "sha256": "...", "bytes": 461824 },
  "sources": { "url": "...", "sha256": "...", "bytes": 240128 }
}

version is a monotonically increasing integer. When the feed's version is higher than the embedded copy, the SDK fetches the referenced urls, verifies each against its sha256, and only then promotes the new bundle. A hash mismatch aborts the update and the existing bundle keeps working.

Self-update

The OtaManager in each SDK performs this check automatically. You can also force a refresh from the CLI:

nyora-cli update

Helper-compatible REST API

Run a local server with nyora-cli serve. It starts NyoraServer and writes a helper.port file so other Nyora apps can discover and attach to it. The endpoints below are identical across the Python and JavaScript SDKs.

EndpointQueryReturns
GET /healthLiveness check.
GET /sourcesThe available sources.
GET /sources/popularid, page{entries, hasNextPage}
GET /sources/latestid, page{entries, hasNextPage}
GET /sources/searchid, q, page{entries, hasNextPage}
GET /manga/detailsid, url{manga, chapters}
GET /manga/pagesid, url{pages}

helper.port discovery

On start, NyoraServer binds a port and writes it to a helper.port file. Companion apps read that file to learn where the server is listening, then make plain HTTP requests against the endpoints above — no handshake required.

Worked example

Start a server, then attach from another shell:

# terminal 1 — start the helper-compatible server
nyora-cli serve

# terminal 2 — read the port it published and query it
PORT=$(cat helper.port)
curl "http://127.0.0.1:$PORT/health"
curl "http://127.0.0.1:$PORT/sources/popular?id=mangadex&page=1"
curl "http://127.0.0.1:$PORT/manga/details?id=mangadex&url=/title/abc"

Language guides

For end-to-end server setup in each SDK, see the dedicated guides: