DocsQuick start6 min read

Quick start

From an empty account to an Arabic UI in about ten minutes. You write three lines; everything else is a decision about where the string appears.

1 · Get a key

  1. 1Sign up, then open Projects and create one. A project is a namespace: its glossary, its strings and its keys never mix with another app.
  2. 2Open API Keys and create a key for that project. The full string is shown once, and only its first characters are kept for display — copy it now or generate another.
  3. 3Choose test for the first run. A test key behaves identically but never bills real characters and refuses live traffic.

2 · Install

terminal
npm install ./siyak-js-0.1.0.tgz        # the file from the download above
# or, if you cloned the source:
npm install ../siyak/packages/siyak_js
# pnpm, yarn and bun take the same tarball path

Flutter takes the same archive: unpack it and point pubspec.yaml at the folder. See the Flutter page.

3 · Three lines

app.js
import { init } from 'siyak-js';

const { t } = init({
  apiKey: process.env.SIYAK_KEY,   // sk_live_… or sk_test_…
  endpoint: process.env.SIYAK_URL, // printed on your API keys screen
  target: 'ar',                    // or 'ar-EG', 'he', 'ur'…
  source: 'en',                    // optional; the project's default is used when omitted
});

t('Your card expires soon', 'screen:checkout');
// first call → the source string, and a request queued in the background
// every call after that → بطاقتك تنتهي قريبًا

4 · Wait for the network, or do not

main.js
// Node.js, a CLI, or a server render: await the work.
const text = await siyak.translate('Continue', 'screen:checkout');

// A browser app usually wants neither await nor a spinner:
siyak.t('Continue');                 // instant, maybe source text
await siyak.flush();                 // then re-render once the batch lands

translate() also never rejects — on any failure it resolves with your source string. Use onError if you want to know why.

5 · See what your app asked for

  1. 1Open the Inbox. Every string the service had never seen is filed there as pending review, with its context.
  2. 2Approve the ones that read right. An approved string is served to every device from then on, with no model call and no charge.
  3. 3Pin a term in Glossary whenever a word must never change — «Account → حساب» once, and no run overrides it again.

Where the numbers live

PlanCharacters / monthProjectsRequests / minutePrice
free15K160—
pro250K21000250 EGP
agency1M51000950 EGP

Read live from this deployment. The operator can move any of these numbers without a release.