This release is a pre-release and may not be stable for production use.
Aura
Aura is a gradually-typed programming language that transpiles to Python. It pairs a clean, unambiguous syntax with the entire Python ecosystem: first-class PyPI interop, a standard library, native threads and coroutines, and post-quantum cryptography.
Status: alpha (
0.1.0a13). The syntax is standardized and frozen for the alpha series; see the grammar and the changelog.
Table of contents
- Installation
- Quick start
- The language
- Classes
- Concurrency
- Cryptography
- Python interop
- Aura Patterns (AUP)
- CLI
- Projects and dependencies
- REPL
- Documentation
- Development
- License
Installation
pip install aura-language # from PyPI
Or from a checkout:
git clone https://github.com/JoaoValentimTheo/aura-lang.git
cd aura-lang
pip install .
aura run examples/hello.aura
Optional post-quantum backend (recommended for real secrets):
pip install "aura-language[pqc]" # adds cryptography>=44 (ML-KEM/ML-DSA)
Requires Python 3.10+. The runtime has no mandatory third-party dependencies
(on 3.10, tomli is installed automatically for reading aura.toml).
Quick start
aura init myapp
aura run myapp/src/main.aura
From a source checkout without installing:
python3 main.py run examples/hello.aura
The smallest Aura program:
def main() {
print("Hello, Aura!")
}
The language
Aura has exactly one spelling per construct — no synonyms. The full grammar lives in docs/GRAMMAR.md.
// Bindings. `let` is immutable; `mut` opts in.
let name = "Aura"
let mut count = 0
// Functions and generics.
def max[T](a: T, b: T) -> T {
return a > b ? a : b
}
// Pattern matching with guards.
match command {
case "quit" { return }
case n if n > 100 { print("big") }
case _ { print("other") }
}
Key rules:
let/constare immutable;let mut(ormut) is required to reassign.- Types are optional and checked before execution by
aura check. noneis the null literal,not/and/orare the logical operators.- Only
defdeclares functions, onlynewdeclares constructors, and onlyextendsdeclares inheritance.
Classes
Fields can be declared in the class header, which builds the constructor and generates accessors:
class User(private name: str, mut age: int = 0, public id: int = 0) {
public def greet() -> str {
return "hi " + self.get_name()
}
}
let u = User("ana", 30)
print(u.get_name()) // ana
u.set_age(31) // setter exists because `age` is `mut`
print(u.id) // 0 — public field, direct access
Inheritance uses extends, and a subclass header declares only its own fields:
class Admin extends User(email: str) { }
let a = Admin(email: "a@x.com", name: "bob")
print(a.get_email())
Concurrency
import stdlib.threading as threading
def main() {
let results = threading.map_concurrent(
(n) => n * n,
[1, 2, 3, 4],
)
print(results)
}
Async is native too, including file and HTTP helpers that do not block the loop:
import stdlib.io as io
import stdlib.http as http
async def main() {
await io.write_async("out.txt", "hello\n")
let text = await io.read_async("out.txt")
let response = await http.aget("https://example.com")
print(text.trim())
print(response.status)
}
Cryptography
stdlib.crypto provides hashing, HMAC, HKDF, and post-quantum primitives
(ML-KEM / ML-DSA). Install the [pqc] extra for the production backend.
import stdlib.crypto as crypto
def main() {
let key = crypto.random_bytes(32)
let tag = crypto.hmac_sha3_256(key, "authenticated")
let kp = crypto.kem_keypair()
let envelope = crypto.kem_encapsulate(kp.public_key)
let shared = crypto.kem_decapsulate(kp.secret_key, envelope.ciphertext)
print(shared == envelope.shared_secret)
}
The pure-Python reference backend is not cryptographically secure and reports
production = false. Use the[pqc]extra for real secrets.
See examples/crypto.aura.
Python interop
Any PyPI package is one import away, and the python bridge reaches anything
else.
import os
import math
import json as json
import python
def main() {
print(math.sqrt(144.0))
let payload = json.dumps({"name": "aura", "ok": true})
print(payload)
print(python.is_instance(payload, str))
}
Aura Patterns (AUP)
AUP is a
catalog of idiomatic solutions, each with a runnable example in
examples/aup/:
| Pattern | Example |
|---|---|
Optional results (T | none) |
option.aura |
| Typed error handling | error_handling.aura |
| Builder | builder.aura |
| Strategy | strategy.aura |
| Pipeline | pipeline.aura |
| Memoize / cache | memoize.aura |
| Observer | observer.aura |
| Resource management | resource.aura |
| Worker pool | worker_pool.aura |
| Hybrid post-quantum crypto | hybrid_crypto.aura |
CLI
| Command | Purpose |
|---|---|
aura run <file> |
Transpile and execute an Aura file |
aura check <file> |
Type-check and rule-check without running |
aura transpile <file> |
Print the generated Python |
aura format <file> |
Reformat source; -i writes in place, -o <file> writes to a file |
aura lint <file> |
Style warnings (--allow-warnings to exit 0) |
aura test [dir] |
Run .aura test files |
aura repl |
Interactive REPL |
aura init [name] |
Scaffold a project (--venv to set up .venv) |
aura venv [action] |
Manage .venv: init, info, shell, remove |
aura add <pkg> |
Add a dependency (-D for dev, --no-install) |
aura remove <pkg> |
Remove a dependency (--uninstall too) |
aura install |
Install everything declared in aura.toml |
aura deps |
List dependencies (--lock writes aura.lock) |
aura doctor |
Check Python, venv, and installed dependencies |
aura debug <file> |
Trace execution / inspect a crash |
aura lsp |
Language server (stdio) |
aura version |
Print or bump the version |
Run aura --help or aura <command> --help for details.
Projects and dependencies
Aura projects are self-contained: aura init writes an aura.toml, aura venv
creates the environment, and aura add records and installs dependencies.
aura init myapp --venv # aura.toml + src/main.aura + .venv
cd myapp
aura add "requests>=2.28" # runtime dependency
aura add -D pytest # development dependency
aura deps --lock # write aura.lock with exact versions
aura doctor # verify the environment
aura.toml:
[project]
name = "myapp"
version = "0.1.0"
[dependencies]
requests = ">=2.28"
[dependencies.dev]
pytest = ">=8"
Dependencies install into the project's .venv when it exists, and into the
current interpreter otherwise. aura venv shell prints the activation command.
REPL
aura repl shares the real parser and every checker (types, structural rules,
and mutability), so what you type is validated the way aura check validates
it. State persists across lines:
$ aura repl
Aura REPL v0.4 (type ':help' for help, ':q' to quit)
aura> let mut x = 1
aura> x = x + 1
aura> x
2
aura> let y: int = "text"
[E101] Variable 'y': expected Int, got String
aura> :type x
int
Commands: :help, :vars, :type <expr>, :ast <expr>, :load <file>,
:run <file>, :py <code>, :history, :reset, :q.
Documentation
Everything lives under docs/.
Start with the index or jump straight in:
| Document | What it covers |
|---|---|
| docs/README.md | Documentation index and recommended reading order |
| GRAMMAR.md | Canonical EBNF grammar (the source of truth for syntax) |
| LANGUAGE.md | Complete language reference (English) |
| LANGUAGE_PT.md | Referência completa da linguagem (Português) |
| TYPES.md | Type system (English) |
| TYPES_PT.md | Sistema de tipos (Português) |
| ERRORS.md | Every diagnostic code (E##/W##) |
| AUP.md | Aura Patterns catalog |
| DESIGN.md | Compiler architecture |
| COMPLETENESS.md | Language coverage and remaining gaps |
| CHANGELOG.md | Release history |
| examples/ | Runnable example programs |
Development
git clone https://github.com/JoaoValentimTheo/aura-lang.git
cd aura-lang
pip install -e ".[dev]"
pytest # full test suite (coverage floor: 90%)
ruff check aura/ # lint
mypy aura/ # type-check the compiler
See CONTRIBUTING.md for the contribution workflow and SECURITY.md to report a vulnerability.
License
MIT — see LICENSE.
Release files for aura-language 0.1.0a18
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| aura_language-0.1.0a18.tar.gz | 280.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| aura_language-0.1.0a18-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 485.4 kB
Release files / aura_language-0.1.0a18.tar.gz
| Download URL | aura_language-0.1.0a18.tar.gz |
|---|---|
| Size | 280.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
9d86ae8b65fa616c94a6f097b617958fc0da60ad1e73fdded3e5c0d2d800573a
|
|
BLAKE2b-256 checksum How to use checksums |
1c4063b866d9e8adf6a5dea6f93d47bf7d648a9dc331b3637e597e29ec64b575
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 18, 2026.
Transparency logRelease files / aura_language-0.1.0a18-py3-none-any.whl
| Download URL | aura_language-0.1.0a18-py3-none-any.whl |
|---|---|
| Size | 205.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
87990d3b13803fae8e433927f1a9fb67beaafe00e04402560ca980f1be230770
|
|
BLAKE2b-256 checksum How to use checksums |
3d2dac20c9e050ef0b2e45c2148c8edc49e708aa24d21fe9dcdee401ae890f5a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 18, 2026.
Transparency log