Skip to main content

aura

tests Python License Stars

A programming language with a serious name and no seriousness whatsoever.

Written in Python from scratch — lexer, parser, tree-walking interpreter, zero dependencies. It has closures, dictionaries, string interpolation, error handling and a 42-function standard library.

It also does not contain a single normal keyword.

chore label(n) ong
    fr n % 15 == 0 ong
        yeet "fizzbuzz"
    orfr n % 3 == 0 ong
        yeet "fizz"
    orfr n % 5 == 0 ong
        yeet "buzz"
    bet
    yeet yapify(n)
bet

grind i = 1 til 16 ong
    cook(label(i))
bet

ong opens a block and bet closes it. chore defines a function, yeet returns, stash declares, cook prints. That is the entire joke, and it is load-bearing.


Try it in thirty seconds

Python 3.9 or newer. Nothing else to install.

pip install auralang
aura

Or straight from the source, with nothing installed at all:

git clone https://github.com/iam-kira/what-did-i-do
cd what-did-i-do
python aura.py

That opens the REPL, and it reads multi-line blocks:

shell :> stash xs = [1, 2, 3]
[1, 2, 3]

shell :> xs[-1] * 10
30

shell :> chore sq(n) ong
   ...  >     yeet n ^ 2
   ...  > bet
<chore sq>

shell :> sq(9)
81

Or run a file:

python aura.py example.aura        # a tour of the language
python aura.py prog.aura a b       # a and b arrive in handed()
python aura.py --ast prog.aura     # show the parse tree
python aura.py --help

What it can actually do

Not a calculator with silly words. A real small language:

# closures, and state that outlives the call
chore counter() ong
    stash n = 0
    chore tick() ong
        n += 1
        yeet n
    bet
    yeet tick
bet

stash next = counter()
cook("{next()} then {next()}")

# bags, dot access, and yap holes
stash player = {"name": "ana", "score": 0}
player.score += 10
cook("{player.name} is on {player.score}")

# errors you can catch and branch on
sus ong
    stash text = slurp("notes.txt")
whoops e ong
    fr e.kind == "file" ong
        cook("no notes yet, carrying on")
    bet
bet
Types numbers (math), strings (yap), lists (pile), dicts (bag), first-class functions (chore)
Control flow fr/orfr/whatever, keep, grind ... til, grind ... among, bail, skip, yeet
Scoping lexical, with real closures and outer-variable mutation
Yap holes "hi {name}, {1 + 2} points"
Destructuring stash a, b = [1, 2], grind k, v among bag
Errors sus / whoops / oops, a kind on every error, tracebacks, and a caret under the offending code
Higher-order eachof, keepif, smoosh, sortof with a key chore
Scriptable handed() for arguments, slurp/spill for files, rummage for folders, bounce(code) for exit status
Imports summon("lib.aura"), with cycle detection

When something breaks, it tells you exactly where:

Runtime Error: 'nope' is not defined
File prog.aura, line 3, col 14
      total += nope
               ^^^^

Read it

docs/BOOK.md The book — the whole language, then the whole interpreter, in the order you would learn them. Start here.
docs/LANGUAGE.md Quick reference — vocabulary, operators, builtins, errors
docs/ARCHITECTURE.md How the interpreter works, and where to add things
CONTRIBUTING.md Setup, workflow, and what needs doing
editors/ VS Code syntax highlighting for .aura files

Programs written in aura: example.aura tours the language, examples/calc.aura is a calculator with its own tokeniser and precedence-climbing parser, examples/wc.aura is a word counter that walks folders, and examples/json.aura is a JSON parser — closures hold the read position, sus handles bad input, and JSON null arrives as ghosted.


Why "aura"

Every keyword in the language is a joke. The name is the straight man — it lets the contents be the punchline, and it will still read fine when the slang has moved on.

The repo is called what-did-i-do for the same reason.


Under the hood

One file, 3,600 lines, no dependencies. LexerParserInterpreter, readable top to bottom.

Errors are values, never exceptions: every stage returns a (result, error) pair carrying a source position, which is why a runtime failure can print the line it happened on.

500 tests, including a fuzz sweep asserting no input ever escapes as a Python traceback, a checker that executes every code snippet in these docs, and a test that diffs the syntax highlighting against the real keyword list.

python -m venv .venv
.venv/Scripts/activate       # Windows; use source .venv/bin/activate elsewhere
pip install pytest
python -m pytest -q

Running aura needs nothing installed. The venv is only for pytest.


Status

Works. Not finished — no type system, and no concern for speed. Rough edges are listed at the end of docs/LANGUAGE.md and in CONTRIBUTING.md.


Credit and licence

aura was created by Vijay Biradar (iam-kira).

Released under the MIT Licence, which lets anyone use, modify and sell it — including inside closed-source products — on one condition:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

So if you ship aura, or anything substantially built from it, the copyright notice comes with it. That is not optional, and it applies to commercial use too.

Contributions are accepted under the same licence.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

auralang-0.1.1.tar.gz (60.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

auralang-0.1.1-py3-none-any.whl (28.2 kB view details)

Uploaded Python 3

File details

Details for the file auralang-0.1.1.tar.gz.

File metadata

  • Download URL: auralang-0.1.1.tar.gz
  • Upload date:
  • Size: 60.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.14.7

File hashes

Hashes for auralang-0.1.1.tar.gz
Algorithm Hash digest
SHA256 390a876019e65c8163ed64eefd6e2de54e15bf37ed8b055cd7538e08153e8589
MD5 f6157e73b92b037719cb9e0f5de0ccac
BLAKE2b-256 1b91b7a3c905ce3053035747038422d7af5c4cc3a09ab22397a5a61a2019d8ae

See more details on using hashes here.

File details

Details for the file auralang-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: auralang-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 28.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.14.7

File hashes

Hashes for auralang-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 a1f8968606e66ab03e5fb4c92bc8a04ad02d24dcbb21701082087a326998357d
MD5 ee842ccf7e394da5bcf2a8b4993aeb24
BLAKE2b-256 6b88183485f65e9b0cdc330848a7d4ebcae6626de6076dfed61f802aae6093c5

See more details on using hashes here.

Release history Release notifications | RSS feed

0.1.2

2 files

This release

0.1.1 This release

2 files

0.1.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page