pip
+pip install interscript
+
+ diff --git a/src/pages/api.astro b/src/pages/api.astro
index e9dfb74..6c0795f 100644
--- a/src/pages/api.astro
+++ b/src/pages/api.astro
@@ -19,20 +19,20 @@ const playgroundSystems = [
API & playground
- The Interscript REST API runs at Try it. Copy the snippet. Ship.
+ Try the API.
https://interscript.org/api/ — open to all, no auth,
- no rate limits (yet). Three endpoints: /api/transliterate, /api/systems, /api/detect. Or run the same engine locally in JS, TypeScript, Ruby, or your
- terminal.
+ 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.
+ class="hero-curl">
npm install interscript
-
+ pip install interscript
+
+ npm install interscript
-# or: https://esm.sh/interscript-ts
+ No build step. Import from a CDN:
+)
+// → "Anton Olehovych"`} />
CLI & CI
- The interscript-ts CLI runs anywhere Node does — your laptop, a build pipeline,
- a GitHub Action. Same engine, same maps, same byte-for-byte output.
+ 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.
npm install -g interscript-ts
-# or use without installing:
-npx interscript-ts --help
+ npm install -g interscript
+# or run it once without installing:
+npx interscript --help
romanized.csv
# Or: list every BGN/PCGN Cyrillic system
-interscript-ts list --authority bgnpcgn \\
+interscript list --authority bgnpcgn \\
--source-script Cyrl --maps-dir ./maps`} />
@@ -202,7 +233,7 @@ jobs:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with: { node-version: '20' }
- - run: npx interscript-ts@latest \\
+ - run: npx interscript@latest \\
b bgnpcgn-ukr-Cyrl-Latn-2019 \\
names.txt --csv \\
--http https://interscript.org/maps \\
diff --git a/src/pages/index.astro b/src/pages/index.astro
index 5d0d734..7e2b86f 100644
--- a/src/pages/index.astro
+++ b/src/pages/index.astro
@@ -255,7 +255,7 @@ for (const code of systemCodes) {
The neural layer
-Some conversions have no authority document: restoring the diacritics a scribe left out, reading Thai or Urdu as phonemes. Those ship as checksummed neural artifacts under the @@ -321,10 +321,10 @@ for (const code of systemCodes) { gem install interscript # TypeScript / JavaScript -npm install interscript-ts +npm install interscript -# Or load a single map's IR directly -curl interscript.org/maps/<system-code>.json +# Or fetch a single map's source directly +curl interscript.org/maps/<system-code>.isc
The neural layer
The 289 authority-backed maps cover romanization systems that a committee has published. @@ -134,7 +134,7 @@ const clientModels = [
The catalogue
-
The index resolves 23 models across five languages. No model is published without a
measured metric next to its teacher's, on the same harness, in the open. Students are
@@ -211,8 +211,8 @@ const clientModels = [
The frontier, measured Measurements
SadeedDiac-25 — all 1,200 paragraphs, Misraj's own evaluator, windowed zero-skip
protocol, one instrument for every row. Our dedicated 580M teacher is the best
@@ -364,7 +364,7 @@ const clientModels = [
The instrument
Measurement discipline isn't ceremony — each of these rules exists because the naive
version produced a wrong number we nearly shipped. They are why a number on this page
@@ -468,6 +468,13 @@ model.translate("สวัสดี")
>SECRYST_CACHE. Both are read at call time in all three runtimes.
+ Without installing anything: the same models answer the REST endpoint
+ Provenance
Teachers are frozen before distillation and never LLM-generated — language-model teachers
hallucinate diacritics. Every number in the ledger links to a protocol in the open results
diff --git a/src/scripts/api-playground.ts b/src/scripts/api-playground.ts
index 1f51a5f..db34018 100644
--- a/src/scripts/api-playground.ts
+++ b/src/scripts/api-playground.ts
@@ -42,9 +42,13 @@ const state: State = {
}
function snippetJs(s: State): string {
- return `import { transliterate } from "interscript"
+ return `import { configure, iscStrategy, transliterateAsync } from "interscript"
-const result = transliterate(
+configure({
+ strategies: [iscStrategy({ baseUrl: "https://interscript.org/maps" })],
+})
+
+const result = await transliterateAsync(
"${s.system}",
${JSON.stringify(s.input)}
)
@@ -64,15 +68,10 @@ puts result
}
function snippetCurl(s: State): string {
- return `# GET request — easy to test in any terminal
-curl -G 'https://interscript.org/api/transliterate' \\
- --data-urlencode 'system=${s.system}' \\
- --data-urlencode 'input=${s.input}'
-
-# Or POST a JSON body:
-curl -X POST 'https://interscript.org/api/transliterate' \\
+ return `curl -X POST 'https://api.interscript.org/v1/transliterate' \\
-H 'Content-Type: application/json' \\
- -d '{"system": "${s.system}", "input": ${JSON.stringify(s.input)}}'`
+ -d '{"system": "${s.system}", "input": ${JSON.stringify(s.input)}}'
+# → {"system":"${s.system}","input":${JSON.stringify(s.input)},"output":${JSON.stringify(s.output)}}`
}
function render() {
580M parameters against the frontier.
+ Our results against the frontier.
Every trap we fell into, now a rule.
+ How we measure.
POST https://api.interscript.org/v1/infer (open CORS, no key), and run in the
+ browser at the demo page. In a script with no build step, the map
+ layer loads from esm.sh — full recipe in the
+ package's docs/CDN.md.
+ Measured, or it doesn't ship.
+ Every number is measured.