MCPcopy Index your code
hub / github.com/arialang/aria

github.com/arialang/aria @v0.9.20251222

Chat with this repo
repository ↗ · DeepWiki ↗ · release v0.9.20251222 ↗ · + Follow
1,404 symbols 3,601 edges 247 files 12 documented · 1% 2 cross-repo links updated 3mo agov0.9.20251222 · 2025-12-22★ 33591 open issues
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Aria: A Fresh, Safe, and Flexible Language for High-Level Development

Linux Build Mac Build License Docs Contributors

Welcome to Aria. Aria is a modern, dynamic scripting language. It is meant to be a "sweet spot" language, easy to pick-up and with a good balance between ease of use, safety, and flexibility. Aria's design choices help you build great programs quickly.

Aria has modern, safer error handling: Aria replaces unreliable None pointer checks with a modern, multi-tiered approach to error handling. By emphasizing algebraic data types (e.g. Maybe), Aria makes errors explicit, safer, and easier to manage, with fewer runtime surprises.

null, the billion dollar mistake just does not exist in Aria, making code safer, easier to maintain and error handling more robust.

func main() {
    val x = Int.parse("abc123");
    match x {
        case Ok(val) => {
            println("Parsed value: {0}".format(val));
        },
        case Err(err) => {
            println("Failed to parse integer: {0}".format(err));
        }
    }
}

Aria is memory safe from the start: Aria’s virtual machine, built on the Rust ecosystem, ensures memory safety out of the box, protecting you from common pitfalls like data corruption and security vulnerabilities. This lets you focus on building without worrying about risks you cannot manage.

Memory safety protects your code from issues such as memory corruption and dangling pointers. These issues can be hard to track down in large, complex systems. Aria brings these guarantees right from the start, so you can focus on building, not debugging.

Aria is designed for flexibility: Whether you need (some) type checks, an intuitive module system, or want to avoid the complexity of inheritance while still working with a modern object-based design, Aria adapts to your needs. It provides just enough structure to keep your code clean, without the overhead.

Aria’s object-based design uses composition instead of inheritance, which removes a lot of complexity from the language. This makes Aria easier to learn, your code easier to understand and maintain, and libraries more composable. Many parts of the Aria library adopt mixins to bring code reuse, and you can too.

mixin Double {
    func double() {
        return this + this;
    }
}

extension Int {
    include Double
}

extension Float {
    include Double
}

func main() {
    println(3.double());
    println(3.14.double());
}

Aria has a simple yet usable standard library, with date/time handling, networking, file system access, JSON support and more.

import Instant from aria.date.instant;

func main() {
    val now = Instant.now();

    println("The current date and time is: {0}".format(now));
}
import JsonValue from aria.json.parser;

func main() {
    val json_data = JsonValue.parse('{"name": "Aria", "version": "0.9"}')!!.flatten();
    println("Language: {0}, Version: {1}".format(json_data["name"], json_data["version"]));
}

Aria is currently supported on Linux and macOS. Contributions for other operating systems are welcome and encouraged!

A Taste of Aria

Aria is easy to learn. Here's a quick example that fetches data from a web API and prints the result.

In this example, Aria fetches user data from GitHub’s API and prints the number of public repositories for a given user. This shows how simple it is to interact with external APIs and handle dynamic data in Aria.

# github_user.aria
import Request from aria.network.request;
import JsonValue from aria.json.parser;

val whoami = "egranata";

func main() {
    val request = Request.new("https://api.github.com/users/{0}".format(whoami));
    request.headers["User-Agent"] = "AriaLang/1.0";
    val response = request.get();

    if response.status_code == 200 {
        val user_data = JsonValue.parse(response.content)!!.flatten();
        println("User {1} has {0} public repositories.".format(user_data["public_repos"], whoami));
    } else {
        println("Failed to fetch user data. Status: {0}".format(response.status_code));
    }
}

Running this is as simple as:

$ aria github_user.aria
User egranata has 5 public repositories.

Getting Started

Ready to try Aria? Want to contribute to the language? Great! Whether you’re fixing bugs, adding features, or improving the documentation, we’d love your help!

If it's your first time contributing, check out good starter bugs or help wanted on GitHub.

For all this and more, visit our website!

Extension points exported contracts — how you extend this code

CompileNode (Interface)
(no doc) [51 implementers]
compiler-lib/src/do_compile/mod.rs
BuiltinFunctionImpl (Interface)
(no doc) [89 implementers]
vm-lib/src/runtime_value/function.rs
PrettyPrintable (Interface)
(no doc) [94 implementers]
parser-lib/src/ast/prettyprint/mod.rs
CharFunctionImpl (Interface)
(no doc)
native-libs/unicode/src/lib.rs
ModuleDump (Interface)
(no doc) [3 implementers]
compiler-lib/src/dump/mod.rs
Console (Interface)
SPDX-License-Identifier: Apache-2.0 [2 implementers]
vm-lib/src/console.rs
Derive (Interface)
(no doc) [92 implementers]
parser-lib/src/ast/derive/mod.rs
Numeric (Interface)
(no doc) [2 implementers]
compiler-lib/src/scope.rs

Core symbols most depended-on inside this repo

push
called by 224
vm-lib/src/stack.rs
expect
called by 223
lsp/src/parser.rs
write_opcode_and_source_info
called by 143
compiler-lib/src/func_builder.rs
get_current_block
called by 137
compiler-lib/src/func_builder.rs
raw_value
called by 124
vm-lib/src/runtime_value/builtin_value.rs
next
called by 112
compiler-lib/src/scope.rs
write_u8
called by 93
compiler-lib/src/bc_writer.rs
pointer
called by 74
parser-lib/src/ast/mod.rs

Shape

Method 876
Class 267
Function 199
Enum 54
Interface 8

Languages

Rust100%
TypeScript1%

Modules by API surface

parser-lib/src/ast/mod.rs135 symbols
lsp/src/parser.rs108 symbols
compiler-lib/src/func_builder.rs40 symbols
vm-lib/src/runtime_value/function.rs35 symbols
native-libs/path/src/lib.rs35 symbols
compiler-lib/src/do_compile/mod.rs33 symbols
vm-lib/src/vm.rs31 symbols
compiler-lib/src/scope.rs31 symbols
vm-lib/src/runtime_value/mod.rs27 symbols
test-bin/src/main.rs22 symbols
vm-lib/src/builtins/string.rs20 symbols
aria-bin/src/test.rs20 symbols

Used by 2 indexed graphs manifest dependencies, hub-wide

For agents

$ claude mcp add aria \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page