v0.1.3 · npm & PyPI

Code in
Gujarati.

kemlang-py is a programming language with real Gujarati keywords. Write kem bhai, run everywhere.

13

keywords

3

install methods

3.10+

Python

jsk
kem bhai // read the user's name aa naam che bapu tame bolo bhai bol "kem cho, " + naam + "!" // count from 1 to 5 aa i che 1 farvu { bhai bol i i che i + 1 } jya sudhi i < 6 aavjo bhai
install:
$npm install -g kemlang-py
$pip install kemlang-py

Translation

If you know Python,
you already get it.

kemlang-py follows the same logic as Python — just with Gujarati words in place of English ones. Every concept maps one-to-one.

python
kemlang-py
Print
print("Hello!")
bhai bol "Hello!"
Variable
x = 42
aa x che 42
If / Else
if age >= 18:
    print("adult")
else:
    print("minor")
jo age >= 18 {
  bhai bol "adult"
} nahi to {
  bhai bol "minor"
}
While
while i < 5:
    print(i)
    i += 1
farvu {
  bhai bol i
  i che i + 1
} jya sudhi i < 5
Input
name = input()
aa name che bapu tame bolo

Learn by building

Write your first program,
one line at a time.

Every concept introduced step by step — from the bare skeleton to a full interactive program with input, conditionals, and loops.

step 01

Start every program

Every kemlang-py program opens with kem bhai and closes with aavjo bhai. Think of it as saying "hello, brother" and "goodbye, brother".

jsk
kem bhai aavjo bhai
step 02

Print something

bhai bol means "brother, say" — it prints whatever comes after it. Strings go in double or single quotes.

output

kem cho, duniya!
jsk
kem bhai bhai bol "kem cho, duniya!" aavjo bhai
step 03

Declare a variable

aa means "this", che means "is". So aa naam che "Sanket" reads: this naam is "Sanket".

output

kem cho, Sanket!
jsk
kem bhai aa naam che "Sanket" bhai bol "kem cho, " + naam + "!" aavjo bhai
step 04

Read user input

bapu tame bolo means "father, you say" — it waits for the user to type something and returns it as a string.

output

What is your name?
> Riya
kem cho, Riya!
jsk
kem bhai bhai bol "What is your name?" aa naam che bapu tame bolo bhai bol "kem cho, " + naam + "!" aavjo bhai
step 05

Add a conditional

jo means "if", nahi to means "otherwise". Braces wrap the block — no colons, no indentation rules.

output

B grade — thik che
jsk
kem bhai aa score che 88 jo score >= 90 { bhai bol "A grade — saras!" } nahi to { jo score >= 75 { bhai bol "B grade — thik che" } nahi to { bhai bol "Keep practising" } } aavjo bhai
step 06

Loop with farvu

farvu means "to do", jya sudhi means "as long as". The condition goes at the end, checked after each iteration.

output

1
2
3
4
5
jsk
kem bhai aa i che 1 farvu { bhai bol i i che i + 1 jo i > 5 { tame jao } } jya sudhi bhai chhe aavjo bhai

Language reference

13 keywords.
That's the whole language.

kemlang-py is intentionally small. Every keyword has a clear Gujarati meaning — no guessing, no arbitrary symbols to memorise.

keywordmeaningetymology
kem bhaiprogram startaa = this · che = is
aavjo bhaiprogram endaavjo = goodbye
aa x che valdeclarebhai = brother · bol = say
x che valreassignsame, without aa
bhai bol exprprintbapu = father · bolo = say
bapu tame boloread inputreturns a string
jo cond { }ifjo = if
nahi to { }elsenahi to = otherwise
farvu { } jya sudhi condwhile loopjya sudhi = while/until
tame jaobreaktame = you · jao = go
aagal vadocontinueaagal = forward · vado = move
bhai chhe / bhai nathitrue / falsealso: true / false

Architecture

How it works.

kemlang-py is a tree-walking interpreter written in Python. Your source code goes through three stages before producing output.

01

Lexer

kemlang/lexer.py

Source code is scanned into a stream of typed tokens. Multi-word keywords like kem bhai are matched first, then single keywords, literals, and operators.

// source kem bhai bhai bol 42 aavjo bhai // tokens KEM_BHAI BHAI_BOL INTEGER(42) AAVJO_BHAI

02

Parser

kemlang/parser.py

The token stream feeds a recursive-descent parser that produces an Abstract Syntax Tree of typed statement and expression nodes.

// tokens → AST Program └── Print └── Literal value: 42 type: INTEGER

03

Interpreter

kemlang/interpreter.py

A tree-walking interpreter visits each node and executes it. Variables live in an Environment dict. Errors carry line and column info.

// AST → output $ kem run hello.jsk 42 // Exit code: 0

CLI

One binary.
Five commands.

The kem CLI covers running, formatting, inspecting tokens, and visualising the AST — all out of the box.

$kem run hello.jsk
kem cho, Sanket!
1
2
3
4
5
$kem repl
KemLang REPL v0.1.3
>>> bhai bol 1 + 1
2
>>> 
$kem fmt hello.jsk
Formatted hello.jsk
$kem tokens hello.jsk
KEM_BHAI        'kem bhai'   1:0
BHAI_BOL        'bhai bol'   2:2
STRING          '"Hello!"'   2:10
AAVJO_BHAI      'aavjo bhai' 3:0
$kem ast hello.jsk
Program
└── Print
    └── Literal: "Hello!"

Installation

Running in under a minute.

Pick npm or pip — both install the same kem binary. Works on macOS, Linux, and Windows.

install

$npm install -g kemlang-py

verify

$kem version

Requires Node.js 14+ and Python 3.10+

Features

Everything included.

A complete language environment — interpreter, formatter, REPL, and token inspector — all in one install.

Gujarati keywords

Real Gujarati words mapped to real programming concepts — kem bhai, bhai bol, jo, nahi to, farvu.

Zero config

One install command, one run command. No runtimes to configure, no project files to create.

npm & PyPI

Install via npm or pip. The same kem CLI on macOS, Linux, and Windows.

Full CLI toolkit

kem run · kem repl · kem fmt · kem tokens · kem ast. Everything in one binary.

Open source

MIT licensed, built in Python with Typer and Rich. Small, readable codebase.

Community first

Built for Gujarati speakers learning to code — and programmers curious about language design.

Roadmap

What's coming next.

kemlang-py is under active development. These features are planned for upcoming releases. Contribute on GitHub.

Functionskaam add(a, b) { aapo a + b }
= assignmentaa x = 10
String interpolationbhai bol f"kem cho, {naam}!"
Arraysaa nums che [1, 2, 3]
Mapsaa p che {"name": "Sanket"}
bhai sambhalaa inp che bhai sambhal
all planned

Want to help? The codebase is small and well-documented. Read the docs then open a PR.

Get started

kem cho,
developer.

Start writing Gujarati code today. Install in under a minute, run your first program in five.

quick start
# installnpm install -g kemlang-py
# writeprintf 'kem bhai\nbhai bol "kem cho!"\naavjo bhai' > hello.jsk
# runkem run hello.jsk
# outputkem cho!