Concurrency that reads like your intent.
Actors, channels, and structured scopes are built into the language from the start.
Safe and simple by default. Siyo is a compiled language with actors, channels, and native Java interop. Familiar enough to start today. Different enough to enjoy it.
actor Store { data: map } impl Store {fn new() -> Store {Store { data: map() }} fn set(self, key: string,value: string) -> string {self.data.set(key, value)"OK"}} mut store = spawn Store.new()println(store.set("lang", "siyo"))Siyo is an experimental programming language that compiles directly to Java Virtual Machine bytecode. Its concurrency model combines actors, buffered and unbuffered channels, and structured scope blocks that join spawned work automatically. Siyo programs can also call Java constructors, methods, and libraries through native interoperability.
The compiler shares one frontend from lexing through lowering, then runs code through an ASM bytecode emitter or a tree-walking interpreter. Parity tests compare both execution paths. Siyo 0.6.0 adds sum types, exhaustive pattern matching, checked function signatures, collection helpers, and shared mutable closure captures. It targets Java 21 virtual threads and ships with project tooling, Maven dependency resolution, and a bundled runtime. The project is source available and experimental.
Designed around the way software is built now: concurrent by default, connected to an enormous ecosystem, and pleasant to read six months later.
Actors, channels, and structured scopes are built into the language from the start.
Siyo emits standard JVM bytecode and runs beside Java and Kotlin with access to the full ecosystem.
Sum types, exhaustive pattern matching, closures, and checked function types in one compact syntax.
From module reliability to checked sum types, Siyo moved forward quickly without giving up bytecode and interpreter parity.
Imported types, impl methods, arrays, lambdas, and Java signatures now preserve their identity across module boundaries.
A 3,000-line HTTP library exposed 32 defects. Namespaced modules, located diagnostics, and a safer Java boundary followed.
Exhaustive variant matching, checked function types, collection helpers, indexed maps, and shared mutable captures landed together.
Siyo keeps the syntax compact while giving you real tools for real systems. Model results with sum types, transform collections, coordinate work, or call Java when you need to.
type Result = Ok(int) | Err(string)
fn describe(result: Result) -> string {
match result {
Ok(value) => "value: " + toString(value),
Err(message) => "error: " + message,
}
}
fn main() {
println(describe(Ok(42)))
}The compiler and interpreter share the same analysis pipeline, so compiled programs and debug runs keep identical semantics.
Install Siyo with its bundled runtime, then create your first project.
curl -fsSL siyolang.org/install | shsiyoc new my-app02cd my-app03siyoc runSiyo already ships with the pieces to explore real applications.
Siyo is young, public, and ready for curious builders.