Soplang 3.6.0 is available. The compiled Somali language can now read files, communicate over a network, serve HTTP, use databases, and coordinate tasks. Its official packages also carry the tools needed to build native executables without a separate Rust or Clang installation.
Download the release or start with the installation guide. This article explains what arrived after 3.0.1, where the boundaries still are, and which parts of the release were checked on real platforms.
What changes in 3.6
Soplang 3.0 replaced the Python interpreter with a Rust compiler. Running a source file uses Cranelift JIT; building a standalone executable uses LLVM. The 3.0 release article covers that transition and the Python, Soplang 2, and Soplang 3 benchmark. Those measurements describe 3.0, not a new 3.6 benchmark.
The 3.6 release gathers the 3.1 through 3.6 implementation milestones. It keeps the Somali syntax and existing 3.0 aliases while adding the facilities needed for programs that interact with their environment. Both execution paths use the same language frontend and runtime.
| Area | Available in 3.6 |
|---|---|
| Language | String interpolation, default and named arguments, direct iteration, tuples, sets, byte arrays, and richer type annotations |
| Runtime | Structured errors, cleanup blocks, tracing garbage collection, and source locations in stack traces |
| System access | Files, paths, directories, environment variables, child processes, JSON, CSV, and regular expressions |
| Applications | Network clients, HTTP servers, a bundled web module, and generated data clients |
| Tooling | Projects, Git dependencies, formatting, tests, debugging, profiling, coverage, and language-server support |
Programs can use the system
The standard library now provides text and binary file operations, directories and paths, timestamps, environment variables, process arguments, and child processes. It also includes HTTP and HTTPS clients, DNS, TCP, UDP, and WebSocket clients. These are runtime APIs in Soplang programs; they do not require a Python host.
Collections and functions grew alongside those APIs. A function can return another function, accept named or default arguments, and work with direct iteration. Tuples, sets, byte arrays, and optional or union annotations give programs more ways to represent data. See the 3.6 language reference for the exact names and contracts.
Web applications and data
The bundled `web` module covers routes, middleware, request parsing, responses, templates, static files, cookies, sessions, TLS, and an in-memory application test client. Lower-level HTTP server APIs remain available when an application needs direct control over a listener. The asynchronous server path can overlap requests, bound concurrent exchanges, stream bodies, and drain active work at shutdown.
A project can define its models in `schema.sop` and generate a data client. Supported backends are SQLite, PostgreSQL, CockroachDB, MySQL, MariaDB, MongoDB, and SQL Server. The API includes validation, typed filters, connection pools, transactions, and additive migrations. It does not yet provide joins, relations, arbitrary SQL, destructive migrations, or schema drift repair. Applications still need their database servers and credentials.
The HTTP server API and data reference document the exact behavior and current limits.
Tasks and errors
Soplang uses task handles rather than adding `async` and `await` keywords. `shaqo(...)` starts a child task; `sug(task)` waits for its result. Channels provide bounded communication, while timers and asynchronous I/O return task handles. A task that is cancelled exits through the usual error path so its `dhammee` cleanup can run.
Errors can carry a message, code, and cause. tuur raises one, qabo catches one, and dhammee runs cleanup when a protected block exits. Diagnostics and stack traces point back to source locations. The execution model explains task ownership, cancellation, and what the scheduler can run concurrently.
Projects and editor tools
`soplang init` creates a starter project with `soplang.toml`. Dependencies can come from Git repositories or local paths and are pinned in a root lock file; there is no required package host. The CLI accepts paired English and Somali commands such as `run`/`fuli`, `build`/`dhis`, `check`/`hubi`, `fmt`/`habee`, and `test`/`tijaabi`. A bare `soplang` opens the terminal command browser.
The compiler includes a language server, and the VS Code extension offers editing support. The extension runs on the editor's host, so a remote workspace needs Soplang installed on that remote host. Compiler execution remains separate from read-only editor analysis.
Build without installing Rust
The 3.6 native packages include the LLVM object generator, platform linker, and matching Soplang runtime. An installed package can build a Soplang program without installing Rust, Cargo, Clang, or another system linker. Building the Soplang compiler itself from source still needs Rust and its native build dependencies.
soplang init salaan cd salaan soplang fuli main.sop soplang dhis main.sop
The built executable runs without the Soplang CLI or its source files beside it. It targets the operating system and architecture of the package that built it, and still relies on that platform's ordinary system libraries. Keep the installed compiler's `lib/soplang` directory alongside the compiler when moving the package.
What we tested
The release workflow passed native package checks on Linux, Windows, and macOS, a container package check, and package checks without an installed build toolchain on all three platforms. The five downloadable packages matched the release's `SHA256SUMS`. An extracted Linux package ran a program and built a working native executable without Rust installed. The compiler repository's editor CI passed on all three operating systems.
The verification record records the checks and distribution limits. Docker Hub serves the public Linux amd64 image. AUR publishing was skipped because credentials were not configured; anonymous access to the GHCR image has not been established.
Install and try it
Choose the Linux x86_64, Windows x64, or macOS Apple Silicon package. Download SHA256SUMS with it and check the package hash. The Windows installer is unsigned, and the macOS archive is not notarized. Docker users can run soplang/soplang:3.6.0 on Linux amd64.
hawl salaan(magac) {
celi "Salaan, " + magac
}
qor(salaan("Ayaan"))Save that program as salaan.sop, then run soplang fuli salaan.sop. To build a standalone executable, run soplang dhis salaan.sop. Source, documentation, examples, and issue tracking are available in the Soplang repository.
Writing about Somali language technology, data, and AI from the team in Mogadishu.