Skip to content

Developers

Everything Nyora reads is powered by one cloud catalog — and you can use it directly. Two SDKs, Python and JavaScript, are thin clients over the Nyora cloud helper at api.nyora.xyz (the kotatsu-parsers engine, ~960 sources) and expose an identical, helper-compatible REST API. Nothing to bundle, nothing to keep fresh — Nyora() points at the cloud by default, in the language you already work in. Read like the world can wait.

Quick start

Install once, then pull popular manga and download a chapter as a .cbz.

Python

pip3 install nyora

# launch the TUI
nyora-cli

# or use the library
python -c "import nyora; print(nyora.sources())"

JavaScript

npm install nyora-sdk     # or: npm i -g nyora-sdk

# launch the TUI
nyora-cli

# download a chapter as .cbz
nyora-cli download

What you can build

  • Library scripts & bots — search sources, fetch details and page images programmatically.
  • Bulk downloadersnyora-cli download writes ready-to-read .cbz archives.
  • Synced companion apps — sign in with NyoraSync and read or write the same cloud library the native apps use.
  • Custom front-ends — point any UI at the cloud helper REST API (api.nyora.xyz) that both SDKs wrap.

Nyora Sync

Both SDKs ship Nyora SyncNyoraSync in Python (nyora.sync.NyoraSync) and JavaScript (NyoraSync from nyora-sdk). Register or sign in with OAuth2 + JWT against sync.nyora.xyz, then upsert() and select() your manga, favourites, history and bookmarks with last-write-wins merges. Tokens persist to ~/.config/nyora/sync.json, so a session survives restarts.

It is one account across the whole ecosystem: the same login works in the iOS app, the Python and JavaScript SDK TUIs, and the SDKs themselves. In the TUIs, type sync for the account menu, lib for your synced library, and answer the “Favourite to library?” prompt in a title's details — favourites you add anywhere show up everywhere you sign in.

Python

from nyora.sync import NyoraSync

sync = NyoraSync()
sync.sign_in("you@example.com", "password")
sync.upsert("nyora_favourite", rows)
rows = sync.select("nyora_favourite", since=0)

JavaScript

import { NyoraSync } from 'nyora-sdk';

const sync = new NyoraSync();
await sync.signIn('you@example.com', 'password');
await sync.upsert('nyora_favourite', rows);
const rows = await sync.select('nyora_favourite', 0);

Ready to wire it up? See the cloud helper & REST API reference for the endpoints both SDKs call and the full endpoint table.