Changelog
Unreleased
Section titled “Unreleased”- A documentation site at oxie.bkymz.net, generated from
docs/: every example shows the Rust thatoxie emitproduces for it and its output, kept current by the tests. - Panics point at the
.oxisource:oxie runandoxie testrewrite the location of a panic, backtrace frames and failed assertions in tests from the generated Rust to the.oxiline they came from. - Errors only a bug in Oxie can cause (inside the support module, or a Rust syntax error in generated code) are reported as “Oxie generated Rust that doesn’t compile”, with rustc’s message and the generated line, instead of as an error in your code.
- A
{ ... }statement, which is a lambda that never runs, is an error that suggestsrun { ... }; before, it compiled with only rustc’s “unused closure” warning, and the statements in it were skipped. oxie emit --annotateputs a// file.oxi:linecomment above each statement of the generated Rust. Golden tests intests/emitkeep the generated Rust from changing unnoticed.- Errors caused by what Oxie decided say why: a value moved into a function that keeps its
StringorVecparameter points at the line where the function keeps it (“it returnsv”), and a borrow that ends too early because Oxie tied a function’s result to all its reference parameters shows the signature with a narrower lifetime. - A VS Code extension in
editors/vscode-oxie: highlighting, the language server, ▶ run and test buttons, the generated Rust beside the source, tasks and snippets. - Language server: files opened through a symlinked directory (on macOS, anything under
/tmp) get their diagnostics, and definitions point at the open file instead of a second copy. A script opened while another script’scargo checkruns is checked next; before, its rustc errors appeared only after saving it. - Clearer errors: a borrow conflict on
selfsaysthis, and a loop over a field whose body changesthisoffers to loop over a copy; ashared classhandle sent to another thread (or held across anawaitin a spawned task) offers to declare the class@sync. fun city(u: &User): String = u.address?.city ?: "unknown"used to fail with a bare “expectedString, found&str”. The chain readscitythrough a reference, so the result is borrowed text; Oxie still doesn’t copy the field silently, but the error now explains this and offers the fixu.address?.city.clone() ?: "unknown".- Borrowed parameters: a
StringorVec<T>parameter of a top-level non-pubfunction that the body only reads becomes&stror&[T], sogreet(name)no longer uses upname. Arguments for&strand&[T]parameters are lent whatever they are (greet(name.to_uppercase())used to be a type error). When a function keeps the value, the move error no longer suggests borrowing it. - Capture lists:
{ [counter, tx] -> ... }gives a lambda its own clones ofcounterandtx(and[n = expr]a computed value) and makes itmove, replacing Rust’slet tx = tx.clone(); move || ...before every thread or callback. for (x in xs)no longer uses upxswhen the list is used after the loop (or by the next round of an outer loop): the loop borrows it (for x in &xs, orfor &n in &numsforCopyelements). Loops over a class’s collection fields borrow them too. Before, both were errors.- A method reading through a new iterator (
input.chars().next()) is no longer inferred to take&mut self. - Classes, structs and enums whose fields hold references get their lifetime parameter
automatically:
class Parser(input: &str)used to produce Rust that didn’t compile and now becomesstruct Parser<'a> { input: &'a str }. Functions taking or returning such types get their lifetimes filled in as for references, anddata classes holding&strderiveCopy,EqandHashwhen their other fields allow. - Windows: scripts and projects whose paths Oxie resolves no longer get the
\\?\prefix written intoCargo.tomland build scripts, which Cargo rejected (“invalid path url”). oxie initin a crate that already has[build-dependencies]addsoxie-buildto that table instead of writing a second one, which Cargo rejected as a duplicate key.- The repository moved to github.com/oxie-lang/oxie; links to the old address redirect.
- The crates declare
rust-version = "1.82", the oldest Rust that builds Oxie and its generated code, so an older Rust gets a clear error instead of a failed build.
0.1.0 - 2026-10-23
Section titled “0.1.0 - 2026-10-23”The first release of Oxie, a programming language for the Rust ecosystem: a concise syntax that Kotlin and TypeScript developers already know, compiled to plain Rust. An Oxie project is a Cargo crate, every crate on crates.io works, and programs run exactly as fast as hand-written Rust.
Install
Section titled “Install”cargo install oxiePrebuilt binaries for macOS, Linux and Windows are attached below, and cargo binstall oxie
downloads them instead of compiling.
The language
Section titled “The language”val/var,funwith expression bodies, string templates ("$name ${x + 1}"), default and named arguments.data classwith derives worked out for you,classwith inferred&self,&mut selfand static receivers, interfaces, extension functions, operator overloading,shared classfor shared mutable objects.- Null safety over
Option:T?,null,?.,?:,!!and smart checks. - Error handling over
Result:throws,throw,try/catch,error enumwith messages, and?added for you on calls that can fail. when, Kotlin-style ranges (until,downTo,step), lambdas ({ it * 2 },x => x * 2or Rust closures), collection operations (filter,map,sum_of, …).- Arguments borrowed for you at call sites, trait bounds and lifetimes inferred.
- Rust is always available: any Rust type or crate,
rust { ... }blocks, macros, and.rsand.oxifiles mixed in one crate.
oxie new,init,run,build,check,test,fmt,emitandclean; single.oxifiles run as scripts, with dependencies declared in a header comment.- Compiler errors and rustc errors point at
.oxilines; common borrow errors are explained in Oxie terms, with fixes. oxie from-rusttranslates Rust code into Oxie.oxie lsp: a language server with diagnostics, completion, hover showing the generated Rust, go to definition, references, rename, signature help, formatting, symbols, inlay hints and quick fixes.- Editor support for Kuana and a tree-sitter grammar.
Crates
Section titled “Crates”oxie, oxie-compiler,
oxie-build and
oxie-from-rust, licensed under MIT or Apache-2.0.