A bilingual (Kiswahili/English), security-first programming language that compiles to native code. Every keyword has a Swahili word and an English alias — write real software in the language you think in.
Website ·
Playground ·
Docs ·
Download ·
Examples
# Swahili+
A **bilingual, statically-typed, security-first** programming language. Every
keyword, type, builtin and module has a **Kiswahili word and an English alias
that lex to the same token** — so a program can be written entirely in Kiswahili,
entirely in English, or mixed, and it means exactly the same thing. There is a
test holding two such programs to byte-identical output.
```swahili
tumia njia
kazi salimu(jina: Maandishi) -> Maandishi {
rudisha "Habari, {jina}!"
}
kazi kuu() {
andika(salimu("dunia"))
andika(njia.jina_msingi("hati/ripoti.sw"))
}
```
The exact same program, written in English
```swahili
import path
function greet(name: Text) -> Text {
return "Habari, {name}!"
}
function main() {
print(greet("dunia"))
print(path.basename("hati/ripoti.sw"))
}
```
> **Status: 0.9.0 beta.** The language, toolchain and standard library are
> complete and tested. Project status
> is deliberately blunt about what is *not* finished. Not for production use until
> 1.0.0 — some Kiswahili keywords are still being reviewed and may change.
File extension `.sw` · toolchain binary `swahiliplus`.
---
## Contents
- Why Swahili+ exists
- Highlights
- Try it online
- Install
- Using it
- The language, briefly
- Standard library & GUI
- Editor support
- Project status — where it actually stands
- Documentation
- Contributing
- Community
- License
## Why Swahili+ exists
Three commitments, in order.
**1. Bilingual, not "translated keywords".** The AST is language-neutral, the
converter round-trips either spelling losslessly (`tafsiri`), and diagnostics are
bilingual with a stable code you can look up offline (`eleza E040`). Learn in the
language you think in, then pick up the industry's English vocabulary for free.
**2. Security is a type-system feature, not a library.** Two ideas live in the
checker itself:
- **Taint.** Anything from outside the program — a file's contents, an
environment variable, …