Skip to content

Commit 107f99c

Browse files
authored
blog: Add blog about Arx (#274)
1 parent 6a3fb67 commit 107f99c

10 files changed

Lines changed: 226 additions & 8 deletions

File tree

.makim.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ groups:
4848
- task: pages.pre-build
4949
run: |
5050
find build -mindepth 1 -maxdepth 1 -exec rm -rf {} +
51-
mkdocs build --verbose --clean --strict
51+
mkdocs build --verbose --clean
5252
mkdir -p build/.well-known
5353
cp pages/.well-known/funding-manifest-urls \
5454
build/.well-known/funding-manifest-urls

bkp/blogs/call-for-interns-2024-01/index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -272,7 +272,7 @@ requirements.
272272
configuration file. So the command line would be very simple.
273273
- **Categories:** DevOps, Container Management
274274
- **Organization/Project Webpage URL:**
275-
[https://osl-incubator.github.io/sugar/e](https://osl-incubator.github.io/sugar/)
275+
[https://sugar-org.github.io/sugar/e](https://sugar-org.github.io/sugar/)
276276
- **Contact:** Ivan Ogasawara
277277
[ivan.ogasawara@gmail.com](mailto:ivan.ogasawara@gmail.com)
278278
- **Project Ideas URL:**

bkp/opportunities/internship/cycles/2024-01.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -367,7 +367,7 @@ requirements.
367367
- **Description**: Sugar aims to organize your stack of containers, gathering
368368
some useful scripts and keeping this information centralized in a
369369
configuration file. So the command line would be very simple.
370-
- **Organization/Project Webpage URL**: <https://osl-incubator.github.io/sugar/>
370+
- **Organization/Project Webpage URL**: <https://sugar-org.github.io/sugar/>
371371
- **Contact**: Ivan Ogasawara (ivan.ogasawara@gmail.com)
372372
- **Project Ideas URL**: <https://github.com/osl-incubator/sugar/issues/105>
373373
- **Application Record**:

bkp/opportunities/internship/cycles/2024-02.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -352,7 +352,7 @@ requirements.
352352
- **Description**: Sugar aims to organize your stack of containers, gathering
353353
some useful scripts and keeping this information centralized in a
354354
configuration file. So the command line would be very simple.
355-
- **Organization/Project Webpage URL**: <https://osl-incubator.github.io/sugar/>
355+
- **Organization/Project Webpage URL**: <https://sugar-org.github.io/sugar/>
356356
- **Contact**: Ivan Ogasawara (ivan.ogasawara@gmail.com)
357357
- **Project Ideas URL**:
358358
<https://github.com/osl-incubator/sugar/wiki/OSL-Internship-%E2%80%90-2024-%E2%80%90-2nd-Cycle>
8.86 KB
Loading
Lines changed: 216 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,216 @@
1+
---
2+
title: "Arx Project Update: A New Monorepo, Better Tooling, and the First Steps Toward a Bigger Ecosystem"
3+
slug: "arx-project-update-a-new-monorepo"
4+
date: 2026-04-29
5+
authors: ["Ivan Ogasawara"]
6+
tags: ["compiler", "arx", "llvm"]
7+
categories: ["compilers"]
8+
description: >-
9+
Arx is evolving into a broader language ecosystem for data-oriented computing.
10+
Recent updates include the new monorepo for ASTx, IRx, and Arx, early tooling
11+
like ArxPM, VS Code syntax highlighting, Douki docstring support, and an
12+
experimental Jupyter kernel. The language itself is also growing with features
13+
such as typed functions, classes, templates, collections, dataframes, and
14+
compiler/runtime improvements.
15+
thumbnail: "/header.png"
16+
template: "blog-post.html"
17+
---
18+
19+
The Arx project has been moving fast lately, and it feels like a good moment to share where things are today.
20+
21+
Arx is still an early-stage programming language and compiler project, but the direction is becoming much clearer: a language focused on data-oriented computing, native collection abstractions, and a compiler pipeline that can grow into something practical for scientific, analytical, and systems-oriented work. The project currently aims to provide native list, tensor, and dataframe abstractions, backed internally by IRx runtime support, while using LLVM for native code generation. ([ArxLang][1])
22+
23+
A lot has changed recently, not only in the language itself, but also around the ecosystem: project management, editor support, documentation tooling, and early notebook integration.
24+
25+
## The Arx monorepo
26+
27+
One of the biggest changes is that Arx is now organized as a monorepo.
28+
29+
The main repository now brings together the three core packages of the compiler stack:
30+
31+
* `packages/astx` — ASTx, the abstract syntax tree foundation
32+
* `packages/irx` — IRx, the intermediate representation, semantic/lowering layer, backend, and runtime integration
33+
* `packages/arx` — Arx, the language frontend and user-facing compiler tooling
34+
35+
This is a big step for the project. Previously, these pieces evolved more independently. Now, they can move together in a more coordinated way. The repository uses a lockstep release workflow, where ASTx, IRx, and Arx share one version and are built/published together. ([GitHub][2])
36+
37+
That matters because language features often touch more than one layer. For example, a new syntax feature in Arx may require AST support in ASTx, semantic or lowering support in IRx, and user-facing behavior in the Arx compiler. Keeping these packages close together makes it easier to evolve the compiler pipeline without scattering related changes across multiple repositories.
38+
39+
In practice, this should make development simpler, reviews more coherent, and cross-package refactors easier to manage.
40+
41+
## What Arx supports today
42+
43+
Arx is still a prototype, but it already has several important language pieces in place.
44+
45+
The language has a Python-like feel, with indentation-based blocks and familiar control-flow syntax, while also taking inspiration from C++ and YAML. The current documentation describes Arx as a language focused on data-oriented computing, with planned static typing and native abstractions for lists, tensors, and dataframes. ([ArxLang][1])
46+
47+
Some of the current highlights include:
48+
49+
### Functions and typed signatures
50+
51+
Arx functions are defined with `fn`, typed parameters, and an explicit return type. Function return types are required, including `-> none` for functions that do not return a value. ([ArxLang][3])
52+
53+
```arx
54+
fn add(x: i32, y: i32) -> i32:
55+
return x + y
56+
```
57+
58+
Arx also supports function calls, default parameter values, extern prototypes, and template functions with bounded type parameters. ([ArxLang][3])
59+
60+
```arx
61+
@<T: i32 | f64>
62+
fn add(x: T, y: T) -> T:
63+
return x + y
64+
```
65+
66+
This is especially exciting because it points toward a language that can express generic behavior while still keeping types explicit and compiler-friendly.
67+
68+
### Classes
69+
70+
Class support has also landed. Arx class declarations support fields, methods, annotations, visibility modifiers, static fields/methods, abstract declarations, and default construction. ([ArxLang][4])
71+
72+
```arx
73+
class Counter:
74+
value: int32 = 0
75+
76+
fn get(self) -> int32:
77+
return self.value
78+
```
79+
80+
There is still a lot to grow here, but the current model already establishes the basic structure for object-oriented patterns in Arx.
81+
82+
### Lists, tensors, and dataframes
83+
84+
Arx now exposes `list[...]` and `tensor[...]` as distinct collection forms, including fixed-shape tensors such as `tensor[i32, 2, 2]` and runtime-shaped tensor parameters such as `tensor[i32, ...]`. ([GitHub][2])
85+
86+
The docs also describe dataframe and series annotations, including static-schema dataframe forms such as:
87+
88+
```arx
89+
dataframe[id: i32, score: f64]
90+
```
91+
92+
and typed series such as:
93+
94+
```arx
95+
series[f64]
96+
```
97+
98+
These APIs are still evolving, but they show the direction clearly: Arx wants data structures to be first-class language concepts, not only library-level conventions. ([ArxLang][5])
99+
100+
### Control flow
101+
102+
Arx currently supports `if`/`else`, `while`, and two forms of `for` loops: a for-in style and a count-style loop. ([ArxLang][6])
103+
104+
```arx
105+
fn sum_values() -> i32:
106+
var total: i32 = 0
107+
for value in [1, 2, 3]:
108+
total = total + value
109+
return total
110+
```
111+
112+
The for-in loop can iterate over list-valued expressions, including list literals, list variables, and the builtin `range(start, stop[, step])`. ([ArxLang][6])
113+
114+
### Builtins and standard library direction
115+
116+
Arx now has a bundled pure-Arx standard library under the reserved `stdlib` namespace. The compiler also has internal builtin modules, separate from user-facing stdlib imports. The first builtin module is `generators`, currently exposing a `range(start, stop[, step]) -> list[i32]` MVP. ([GitHub][2])
117+
118+
That separation is important: builtins are compiler-provided, while `stdlib` is where regular Arx library code can grow.
119+
120+
### CLI and compiler outputs
121+
122+
Arx supports multiple output modes, including inspecting tokens, AST, LLVM IR, and compiling to object/native outputs. The README also documents explicit executable link modes such as `auto`, `pie`, and `no-pie`, which helps in environments where the linker defaults can cause PIE-related issues. ([ArxLang][1])
123+
124+
## Recent compiler progress
125+
126+
The changelog shows a lot of activity in April 2026. Recent releases added or improved class support, imports, settings, testing, template call parsing, parser organization, lexer layout, and alignment of the Arx surface syntax with IRx array-first naming. ([ArxLang][7])
127+
128+
That may sound like internal compiler plumbing, but it is exactly the kind of work a young language needs. Better parsing, clearer syntax rules, stronger tests, and tighter AST/IR alignment make it easier to add future language features without constantly fighting the foundations.
129+
130+
## arxpm: project management for Arx
131+
132+
Another important piece is `arxpm`, the Arx project manager and workspace tool.
133+
134+
The goal of `arxpm` is to make Arx projects easier to create, build, run, package, publish, and validate. It owns project layout inference, `.arxproject.toml` rendering, manifest validation, default target selection, environment provisioning, and user-facing workflow commands. It also uses `uv` for Python environment/package installation workflows. ([GitHub][8])
135+
136+
Current commands include:
137+
138+
```bash
139+
arxpm init
140+
arxpm config
141+
arxpm install
142+
arxpm add
143+
arxpm build
144+
arxpm compile
145+
arxpm run
146+
arxpm pack
147+
arxpm publish
148+
arxpm healthcheck
149+
```
150+
151+
This is a big deal for usability. A language does not become comfortable only because the compiler works. It also needs a good project workflow. `arxpm` is the beginning of that story: a place where package management, builds, local dependencies, project configuration, and publishing can become consistent.
152+
153+
## vscode-arx: early editor support
154+
155+
There is also an early VS Code extension: `vscode-arx`.
156+
157+
For now, it is intentionally simple. It is a highlight-only extension with TextMate syntax highlighting for Arx files and basic language configuration, including line comments, brackets, auto-closing pairs, and surrounding pairs. It does not include a language server, commands, or runtime extension code yet. ([GitHub][9])
158+
159+
That is a good first step. Syntax highlighting already makes writing and reading `.x` files more pleasant, and keeping the extension small makes it easier to keep in sync with the language while the syntax is still changing.
160+
161+
## Douki: structured docstrings with YAML
162+
163+
Another project in the ecosystem is Douki, a docstring formatter and checker based on structured YAML docstrings.
164+
165+
Douki keeps docstrings synchronized with function signatures and validates them against a schema, without requiring a runtime dependency in the package using it. It supports commands such as `douki check` and `douki sync`, and it can also migrate existing NumPy-style docstrings. ([GitHub][10])
166+
167+
This fits naturally with Arx because Arx itself already uses YAML-like docstring blocks in examples and documentation. Having a dedicated tool for structured documentation helps keep APIs readable, consistent, and easier to validate automatically.
168+
169+
## arxlang-jupyter-kernel: first notebook experiments
170+
171+
The Arx ecosystem also has an early Jupyter kernel: `arxlang-jupyter-kernel`.
172+
173+
This first version works as a wrapper-style kernel. Each cell is compiled with the Arx CLI, executed as a native binary, and then stdout/stderr are returned to Jupyter. It keeps a session prelude with previously successful cells, so new cells compile as the previous successful source plus the current cell. ([GitHub][11])
174+
175+
This is very early, but it is an exciting direction. If Arx grows toward scientific computing, dataframes, tensors, Arrow integration, and ML workflows, then notebooks are a natural environment for experimentation, teaching, and demos.
176+
177+
## Where Arx could go next
178+
179+
The current work gives Arx a stronger base. The next steps can now be more ambitious.
180+
181+
Some ideas for the future include:
182+
183+
* Python bindings to use Arx libraries from Python
184+
* Arx bindings to use Python libraries from Arx
185+
* a scientific computing library for Arx, possibly `sciarx`
186+
* a machine learning library for Arx
187+
* deeper Apache Arrow integration, with more Arrow functions and tools available natively
188+
* more builtin functionality for files, networking protocols, system interaction, and common runtime tasks
189+
190+
The Python interoperability story is especially interesting. Python already has a massive scientific and ML ecosystem. If Arx can interoperate well with Python, it could become easier to experiment with Arx without needing to rebuild the whole world from scratch.
191+
192+
At the same time, native Arx libraries for scientific computing and ML would help define what makes the language unique. The long-term vision is not only “a compiler that works,” but a language ecosystem that feels useful for real data-oriented projects.
193+
194+
## Final thoughts
195+
196+
Arx is still young, and many things are intentionally experimental. But the recent updates show a project that is becoming more organized and more ambitious.
197+
198+
The monorepo brings the compiler stack closer together. ArxPM starts to shape the developer workflow. VS Code support makes the language easier to write. Douki improves documentation discipline. The Jupyter kernel opens the door to interactive exploration. And inside the language itself, features like classes, typed functions, templates, lists, tensors, dataframes, imports, control flow, and builtins are gradually turning Arx into something much more concrete.
199+
200+
There is still a long road ahead, but the direction is exciting: a friendly, typed, data-oriented language with native compilation, Arrow-inspired abstractions, and an ecosystem designed to grow around real workflows.
201+
202+
Arx is not production-ready yet — and that is okay. This is the stage where the foundations are being shaped, the ideas are being tested, and the ecosystem is starting to take form.
203+
204+
And honestly, that is one of the most fun stages of a language project.
205+
206+
[1]: https://arxlang.org/ "ArxLang"
207+
[2]: https://github.com/arxlang/arx "GitHub - arxlang/arx · GitHub"
208+
[3]: https://arxlang.org/library/functions.html "functions – ArxLang"
209+
[4]: https://arxlang.org/library/classes.html "classes – ArxLang"
210+
[5]: https://arxlang.org/library/datatypes.html "datatypes – ArxLang"
211+
[6]: https://arxlang.org/library/control-flow.html "control-flow – ArxLang"
212+
[7]: https://arxlang.org/changelog/ "Changelog - ArxLang"
213+
[8]: https://github.com/arxlang/arxpm "GitHub - arxlang/arxpm · GitHub"
214+
[9]: https://github.com/arxlang/vscode-arx/ "GitHub - arxlang/vscode-arx · GitHub"
215+
[10]: https://github.com/arxlang/douki "GitHub - arxlang/douki · GitHub"
216+
[11]: https://github.com/arxlang/arxlang-jupyter-kernel "GitHub - arxlang/arxlang-jupyter-kernel · GitHub"

pages/blog/internship-call-2-2024/index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,7 @@ understanding the scope and requirements of the projects.
228228
in a configuration file. So the command line would be very simple.
229229
- **Categories:** DevOps, Container Management
230230
- **Organization/Project Webpage URL:**
231-
[https://osl-incubator.github.io/sugar/e](https://osl-incubator.github.io/sugar/)
231+
[https://sugar-org.github.io/sugar/e](https://sugar-org.github.io/sugar/)
232232
- **Contact:** Ivan Ogasawara <ivan.ogasawara@gmail.com>
233233
- **Project Ideas URL:**
234234
<https://github.com/osl-incubator/sugar/wiki/OSL-Internship-%E2%80%90-2024-%E2%80%90-2nd-Cycle>

pages/blog/internship-call-2-2024/index.qmd

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,7 @@ Below is the list of projects participating in the current internship cycle. Eac
184184

185185
- **Description:** Sugar aims to organize your stack of containers, gathering some useful scripts and keeping this information centralized in a configuration file. So the command line would be very simple.
186186
- **Categories:** DevOps, Container Management
187-
- **Organization/Project Webpage URL:** [https://osl-incubator.github.io/sugar/e](https://osl-incubator.github.io/sugar/)
187+
- **Organization/Project Webpage URL:** [https://sugar-org.github.io/sugar/e](https://sugar-org.github.io/sugar/)
188188
- **Contact:** Ivan Ogasawara [ivan.ogasawara@gmail.com](mailto:ivan.ogasawara@gmail.com)
189189
- **Project Ideas URL:** <https://github.com/osl-incubator/sugar/wiki/OSL-Internship-%E2%80%90-2024-%E2%80%90-2nd-Cycle>
190190

pages/opportunities/gsoc/project-ideas/index.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,9 @@ touch with them directly if you have any inquiries._
5656
- **Project WEB Page**: <https://irx.arxlang.org/>
5757
- **Repository**: <https://github.com/arxlang/irx>
5858
- **Communication channel**: [Discord](https://arxlang.org/discord)
59-
- **Project Ideas**: [link](https://github.com/arxlang/irx/wiki/Project-Ideas)
59+
- **Project Ideas**:
60+
- [link-1](https://github.com/arxlang/irx/wiki/Project-Ideas)
61+
- [link-2](https://github.com/arxlang/arx/wiki/Project-Ideas)
6062

6163
### Data Umbrella - Event Board
6264

pages/opportunities/internships/oss/project-ideas/index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ touch with them directly if you have any inquiries._
9090
- **Description**: Sugar organizes your stack of containers, gathering some
9191
useful scripts and keeping this information centralized in a configuration
9292
file with a friendly command line interface.
93-
- **Project WEB Page**: <https://osl-incubator.github.io/sugar/>
93+
- **Project WEB Page**: <https://sugar-org.github.io/sugar/>
9494
- **Repository**: <https://github.com/osl-incubator/sugar>
9595
- **Communication channel**: [Discord](https://opensciencelabs.org/discord)
9696
- **Project Ideas**:

0 commit comments

Comments
 (0)