A phonebook.yl program in Yorlang

The language Yorlang began like many code projects, with a group of programmers contemplating a what-if.

One evening after work, i was scrolling through the messages in a group chat that i'm in and i read a message by someone talking about how cool it will be to have a programming language in yoruba that can process the command "sope 'hello world' ". So, i thought it was cool and i decided to create a very small language.

With that modest intention in mind, Karounwi Anoulowapo (based in Nigeria) created Yorlang, a JS-like language using keywords drawn from Yoruba. As colleagues requested more features, he kept expanding it until it became a full-fledged language. Other Yoruba-speaking programmers contributed, along with some non-speakers who were excited about a programming language created by and for West Africans.

One of the major contributors to the projects is a guy from the Igbo tribe. He documented the architecture of the code, contributed helper functions to the language, and also made small sample programs using yorlang.

From there, Yorlang attracted more attention, eventually being featured on the BBC, alongside media devoted to creative technology, such as the podcast Artists + Hackers [disclosure: I also appear in this episode].

Yorlang was inspired in part by AMMORIA, an Arabic programming language also created in Africa. Yorlang maintains a syntax drawn from JavaScript, but the diacritics of its keywords immediately distinguish it. Yoruba is a tonal language, and it was important to Anoulowapo that the diacritics marking tone be carried over to his programming language. Thus, True and False are òótọ́ and irọ́. The function síLẹ́tàŃlá() converts to upper-case while síLẹ́tàKékeré() converts to lower. These are camel-cased phrases, meaning “to the big letter” and “to the small letter.”

Yorlang is part of a new wave of languages challenging the monoculture of English-keyworded languages. Such languages were once dismissed with the idea that the small number of keywords in a programming language have only a cursory connection with the spoken language they're taken from (e.g. compare the specific programmatic use of the word "while" with the ambiguity and polysemy of the same word in English).

This view has been challenged by the concept of "ethnoprogramming," a term coined by Outi Laiti to describe how languages that break from English bring not only the ease of a familiar vocabulary but also a different set of cultural understandings to code. This is apparent in educational languages like the Hawaiian programming language Anu'u, which have found success in helping young learners come to programming through their native tongue. Anu'u replaces "if/else" with a concept of a flowing river, an idea picked up by Jon Corbett for his Cree-based programming language.

Meanwhile, Ramsey Nasser's language قلب (usually written qalb or 'alb in Western characters) revealed the many issues that arise when trying to work with a non-English language within a system designed only for English. In his "A Personal Computer for Children of All Cultures," Nasser shows that this issue is not only about the small menu of keywords a programming language incorporates, but the error messages, the naming of functions in standard libraries (as Nasser asks, what is the Pashto equivalent of "AbstractSingletonProxyFactoryBean"?), and then, most critically, the entire ecosystem of outside tools necessary to make a language accessible to others, which are often not designed to deal with Arabic text—or the diacritics of Yoruba. The URL for Nasser's github project for the language, for instance, has a series of hyphens in the place of the name of the project in Arabic (for a great discussion of this larger subject, see Mark Marino's FLOW-MATIC chapter from his Critical Code Studies, which traces the history of natural-language meets programming language back to pre-COBOL days).

Speaking with Anoulowapo in 2019, the issue of English-language hegemony was part of the drive to create Yorlang. He described how it is common for local programmers to code for clients in other parts of the world, who they communicate with in English, all while programming using English keywords. After hours, they want to put English aside. Yorlang was created so they could write code in the language they use outside of work. Its name means not only Yoruba lang, but also "Your" lang.


SWAP, a Swahili-based programming language in VIsual Studio Code

Anuoluwapo (who explicitly defines Yorlang as esoteric) intended his language to function as both an art piece and an educational tool, but also to serve as "a proof of concept that local languages can help break the entry barrier in the programming space.”

He was successful in this, as it helped inspire at least two other languages, SWAP and Ibolang. These are educational languages, using keywords from Swahili and Igbo, respectively.

The language SWAP was created by Abdulbasit Rubeiyya as a personal project. Rubeiyya is an educator, teaching children who primarily speak Kiswahili. It borrows syntax from JavaScript and C++. Rubeiyya looked at both قلب and Yorlang when designing his language. Like Yorlang, SWAP has its own syntax highlighter extension in Visual Studio Code.

In Swahili, the word badili means “to change”; the SWAP function badili() converts strings to lower-case; when spelled in all caps as BADILI(), it converts the other direction. dai, meaning request, requests user input. The entire lexicon can be found here.

Ibolang by Chimaobi Okeke is built in Python and incorporates vocabulary from the Igbo language. Okeke describes Igbo as a complex language, made up of many dialects. Traditionally written in Latin characters, it now has an alternate writing system, Ńdébé (although this is not incorporated in Ibolang). As the creator of the first programming language based on Igbo, Okeke had to decide which keyword best corresponds to a concept. Okeke describes selecting deputa as the word for “print” in Ibolang:

"Deputa" in Igbo means to write out, in a conversation you could say "Depụta ihe ha ji esi ofe okro" which translates to "Write out what is used in preparing okro soup.”

The complete list of keywords can be found here.

REN protoype

Mateo Chishinji's HAWKING language, currently in development, takes a different approach from the others. Rather than choosing a single source language, it will be a common framework with dialects that each correspond to a different African language. An early prototype, REN (which means “to learn”) uses keywords from Bemba (a major language in Chishinji's country of Zambia). Like REN, HAWKING is a REPL language from the ground up. 

HAWKING's Version 1.0 will include Bemba along with Lunda, Luvale, and Swahili. While having many ways to write the same thing might sound confusing at first, offering many ways to write code while maintaining the same compiler optimizations is familiar from systems like .NET. For Chishinji, the multiplicity is the heart of the project, as "every language gives you an adventure."

The language is named for Stephen Hawking and invokes a similar sound to “how come," inviting questions of how something can be achieved. It is intended as both a general-use and educational language, and has a syntax modeled on Java and C++, but meant to be somewhat simplified for beginning programmers, using aspects of BASIC to make the REPL usage more straightforward.

Chishinji is founding the project as a nonprofit and is seeking investors (he is contactable via his FB profile here). While starting out has been difficult due to financial constraints, Chishinji sees the project as the beginning of a movement, one that African writers and developers have already shown interest in. HAWKING’s embrace of many different languages reflects shared roots and ideals across African languages.

You can write in any African language because languages are monadic to one another, but different in landing of expression, just like people differ in personalities but all come from one source: the monad [or Universal Mind]. If we can understand the universal mind? Then we can understand anything.