API & playground

Try the API.

The REST API runs at https://api.interscript.org/v1. No account, no API key. Send a POST request with a JSON body. Endpoints: /transliterate (one conversion), /transliterate/batch (many), /systems (the 289-system catalogue), /detect (which system explains a source–target pair), and /infer (neural models — diacritization and grapheme-to-phoneme). Responses allow cross-origin requests, so browser scripts can call the API directly.

curl -X POST 'https://api.interscript.org/v1/transliterate' \
  -H 'Content-Type: application/json' \
  -d '{"system": "bgnpcgn-ukr-Cyrl-Latn-2019", "input": "Антон"}'
# → {"system":"bgnpcgn-ukr-Cyrl-Latn-2019","input":"Антон","output":"Anton"}

Install

One line per runtime.

TypeScript / JavaScript

npm

npm install interscript
import {
  configure,
  iscStrategy,
  transliterateAsync
} from "interscript"

configure({
  strategies: [
    iscStrategy({ baseUrl: "https://interscript.org/maps" })
  ]
})

const out = await transliterateAsync(
  "bgnpcgn-ukr-Cyrl-Latn-2019",
  "Антон"
)
// → "Anton"
Ruby

gem

gem install interscript
require "interscript"

out = Interscript.transliterate(
  "bgnpcgn-ukr-Cyrl-Latn-2019",
  "Антон"
)
# → "Anton"
Python

pip

pip install interscript
import os, interscript

# Point at a checkout of github.com/interscript/maps
# (the pip package ships the engine, not the corpus):
interscript.add_load_path(
  os.environ["INTERSCRIPT_MAPS_PATH"]
)

print(interscript.transliterate(
  "bgnpcgn-ukr-Cyrl-Latn-2019", "Антон"
))
# → Anton
Browser

CDN

No build step. Import from a CDN:
import {
  configure,
  iscStrategy,
  transliterateAsync
} from "https://esm.sh/interscript@5.3.1"

configure({
  strategies: [
    iscStrategy({ baseUrl: "https://interscript.org/maps" })
  ]
})

const out = await transliterateAsync(
  "bgnpcgn-ukr-Cyrl-Latn-2019",
  "Антон"
)
// → "Anton Olehovych"

Embed widget

Drop-in transliteration for any site.

One iframe. No build step. Visitors get a live transliteration field; you keep your stack.

<iframe
  src="https://interscript.org/embed?system=bgnpcgn-ukr-Cyrl-Latn-2019"
  width="100%" height="220"
  style="border:1px solid #d8d0bc"
></iframe>

CLI & CI

Transliterate from the terminal.

The interscript CLI runs anywhere Node does — a laptop, a build pipeline, a GitHub Action. Maps load from interscript.org; no local checkout needed (npm package 5.3.1 or later). Same engine and same output as every other runtime.

CLI

Install

npm install -g interscript
# or run it once without installing:
npx interscript --help
CLI

Single call

# Transliterate from stdin
echo "Антон" | interscript t bgnpcgn-ukr-Cyrl-Latn-2019
# → Anton

# Or from a file
interscript t bgnpcgn-ukr-Cyrl-Latn-2019 \
  -i input.txt -o output.txt
CLI

Batch (CSV)

# names.txt has one name per line
interscript b bgnpcgn-ukr-Cyrl-Latn-2019 \
  names.txt --csv > romanized.csv

# Or: list every BGN/PCGN Cyrillic system
interscript list --authority bgnpcgn \
  --source-script Cyrl --maps-dir ./maps
GitHub Action

CI step

# .github/workflows/romanize.yml
name: Romanize names
on: { push: { paths: ['names.txt'] } }
jobs:
  romanize:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with: { node-version: '20' }
      - run: npx interscript@latest \
            b bgnpcgn-ukr-Cyrl-Latn-2019 \
            names.txt --csv \
            --http https://interscript.org/maps \
            > romanized.csv
      - uses: actions/upload-artifact@v4
        with: { name: romanized, path: romanized.csv }