To get started download the executables from the release page or follow the instructions for your device below:
- Download the binary:
curl -O -L https://github.com/NuruProgramming/Nuru/releases/download/v0.5.18/nuru_Linux_amd64.tar.gz
- Extract the file to make global available:
sudo tar -C /usr/local/bin -xzvf nuru_Linux_amd64.tar.gz
- Confirm installation with:
nuru -v
-
Download the binary:
-
For apple silicon mac use:
curl -O -L https://github.com/NuruProgramming/Nuru/releases/download/v0.5.18/nuru_Darwin_arm64.tar.gz -
For apple intel mac use:
curl -O -L https://github.com/NuruProgramming/Nuru/releases/download/v0.5.18/nuru_Darwin_amd64.tar.gz
-
-
Extract the file to make global available:
-
For apple silicon mac use:
sudo tar -C /usr/local/bin -xzvf nuru_Darwin_arm64.tar.gz -
For apple intel mac use:
sudo tar -C /usr/local/bin -xzvf nuru_Darwin_amd64.tar.gz
-
-
Confirm installation with:
nuru -v
To install Nuru on your Android device using Termux, follow these steps:
-
Ensure Termux is installed:
- You can download and install Termux.
-
Create the target directory:
mkdir -p /data/data/com.termux/files/usr/share/nuru
-
Download the Nuru package:
curl -O -L https://github.com/NuruProgramming/Nuru/releases/download/v0.5.18/nuru_Android_arm64.tar.gz
-
Extract the files to the target directory:
tar -xzvf nuru_Android_arm64.tar.gz -C /data/data/com.termux/files/usr/share/nuru
-
Set up an alias for easy access:
echo "alias nuru='/data/data/com.termux/files/usr/share/nuru/nuru'" >> ~/.bashrc
-
Reload the .bashrc file to apply the alias:
source ~/.bashrc
-
Verify the installation:
nuru -v
For a more streamlined installation, you can use the following one-liner:
curl -O -L https://github.com/NuruProgramming/Nuru/releases/download/v0.5.18/nuru_Android_arm64.tar.gz && mkdir -p /data/data/com.termux/files/usr/share/nuru && tar -xzvf nuru_Android_arm64.tar.gz -C /data/data/com.termux/files/usr/share/nuru && echo "alias nuru='/data/data/com.termux/files/usr/share/nuru/nuru'" >> ~/.bashrc && source ~/.bashrc && echo "Installation complete.."-
Executable:
- Download the Nuru zip file Here
- Unzip to get the executable
- Double click the executable
-
Nuru Installer
Coming Soon
- Make sure you have golang installed (atleast 1.19.0 and above)
- Run the following command:
go build -o nuru .
- Copy nuru binary to path destination ~/go/bin
cp nuru ~/go/bin
- Confirm installtion with:
nuru -v
NOTE
There is a more detailed documentation of the language here.
Nuru, although still in its early stage, intends to be a fully functional programming language, and thus it has been baked with many features.
You can define variables like this:
x = 2;
y = 3;
andika(x*y) // output is 6
You can also use the fanya keyword to define a variabe:
fanya x = 3
Note that fanya keyword is OPTIONAL
Nuru supports both single line and multiple line comments as shown below:
// Single line comment
/*
Multiple
Line
Comment
*/
For now Nuru supports +, -, /, * and %. Nuru also provides precedence of operations using the BODMAS rule:
2 + 2 * 3 // output = 8
2 * (2 + 3) // output = 10
Nuru has the following types:
| Type | Syntax | Comments |
|---|---|---|
| BOOL | kweli sikweli |
kweli == true, sikweli == false |
| INT | 1, 100, 342, -4 |
These are signed 64 bit integers |
| FLOAT | 2.3, 4.5. 100.8094 |
Signed 64 bit floats |
| STRING | "" "mambo" "habari yako" |
They can be in double " or single ' quotes |
| ARRAY | [] [1, 2, 3] [1, "moja", kweli] |
Arrays can hold any types |
| DICT | {} {"a": 3, 1: "moja", kweli: 2} |
Keys can be int, string or bool. Values can be anything |
| NULL | tupu |
These are nil objects |
This is how you define a function in Nuru:
jumlisha = unda(x, y) {
rudisha x + y
}
andika(jumlisha(3,4))
Nuru also supports recursion:
fibo = unda(x) {
kama (x == 0) {
rudisha 0;
} au kama (x == 1) {
rudisha 1;
} sivyo {
rudisha fibo(x - 1) + fibo(x - 2);
}
}
Nuru supports if, elif and else statements with keywords kama, au kama and sivyo respectively:
kama (2<1) {
andika("Mbili ni ndogo kuliko moja")
} au kama (3 < 1) {
andika ("Tatu ni ndogo kuliko moja")
} sivyo {
andika("Moja ni ndogo")
}
Nuru's while loop syntax is as follows:
i = 10
wakati (i > 0) {
andika(i)
i--
}
This is how you initiliaze and perform other array operations in Nuru:
arr = []
// To add elements
sukuma(arr, 2)
andika(arr) // output = [2]
// Add two Arrays
arr2 = [1,2,3,4]
arr3 = arr1 + arr2
andika(arr3) // output = [2,1,2,3,4]
// reassign value
arr3[0] = 0
andika[arr3] // output = [0,1,2,3,4]
// get specific item
andika(arr[3]) // output = 3
Nuru also supports dictionaries and you can do a lot with them as follows:
mtu = {"jina": "Mojo", "kabila": "Mnyakusa"}
// get value from key
andika(mtu["jina"]) // output = Mojo
andika(mtu["kabila"]); // output = Mnyakusa
// You can reassign values
mtu["jina"] = "Avicenna"
andika(mtu["jina"]) // output = Avicenna
// You can also add new values like this:
mtu["anapoishi"] = "Dar Es Salaam"
andika(mtu) // output = {"jina": "Avicenna", "kabila": "Mnyakusa", "anapoishi": "Dar Es Salaam"}
// You can also add two Dictionaries
kazi = {"kazi": "jambazi"}
mtu = mtu + kazi
andika(mtu) // output = {"jina": "Avicenna", "kabila": "Mnyakusa", "anapoishi": "Dar Es Salaam", "kazi": "jambazi"}
These can iterate over strings, arrays and dictionaries (and iterators from .kitanzi()). You can also use a C-style for loop: kwa var = start ; condition ; update { ... }.
kwa i ktk "habari" {
andika(i)
}
/* //output
h
a
b
a
r
i
*/
kwa i = 0; i < 3; i = i + 1 { andika(i) } // 0, 1, 2
In Nuru you can get input from users using the jaza() keyword as follows:
jina = jaza("Unaitwa nani? ") // will prompt for input
andika("Habari yako " + jina)
You can enter the intepreter by simply running the nuru command:
nuru
>>> andika("karibu")
karibu
>>> 2 + 2
4
Kindly Note that everything should be placed in a single line. Here's an example:
>>> kama (x > y) {andika("X ni kubwa")} sivyo {andika("Y ni kubwa")}
To run a Nuru script, write the nuru command followed by the name of the file with a .nr or .sw extension:
nuru myFile.nr
Nuru now supports script-relative path variables for improved portability and developer experience:
__FILE__: The absolute path to the currently executing script file.__DIR__: The absolute directory containing the currently executing script file.
These variables are injected automatically when running a script file (not in the REPL). They are useful for loading resources, configuration, or data files relative to the script location.
Example:
andika("Script absolute path: " + __FILE__)
andika("Script directory: " + __DIR__)
ita njia kutoka "njia"
sibling = njia.unganisha(__DIR__, "sibling.txt")
andika("Sibling file path: " + sibling)
See examples/script_relative_path_example.nr for a full example.
Kindly open an Issue to make suggestions and anything else.
We welcome contributions. See CONTRIBUTING.md for how to contribute (code, docs, bugs, features) and docs/POLICY.md for where new features go (builtins, modules, methods). Code of conduct: CODE_OF_CONDUCT.md.
Nuru has a passionate community, join us on Telegram
Nuru Programming Language has been authored and being actively maintained by Avicenna