Post

From Reliable Builds to Web Applications: The Latest OnixOS and O Language Changes

From Reliable Builds to Web Applications: The Latest OnixOS and O Language Changes

The last few days have been about turning two ambitious projects into more dependable systems.

On the OnixOS side, the focus has been on making builds predictable: the selected architecture must be explicit, repository failures must be visible, and the build environment must have the tools it needs. At the same time, O Language has taken a significant step toward becoming a practical platform for web applications, with a dedicated project CLI, route scaffolding, request context, and a much more organized documentation structure.

These changes look separate when viewed as individual commits. Together, they form a single direction: reduce hidden assumptions, make the common workflow easier, and move more of the project from experimentation toward repeatable use.

OnixOS: making the build pipeline safer

The most important change in the Onix build system is a small but meaningful safety rule. Targeted commands such as iso, sync, repos, upload, and repository signing now default to x86_64 when no architecture is supplied.

Previously, a missing architecture value could allow a command to expand to every supported architecture. That is an especially dangerous default in CI: a stale job definition or a missing environment variable can quietly turn a focused build into a much larger operation. The new behavior keeps the command bounded and reports the selected default in the build output.

The Jenkins pipeline also became stricter. It now refuses to continue when the architecture parameter is empty instead of silently assuming a value. This gives us two complementary protections:

  • CI jobs must declare their target architecture.
  • Direct CLI usage remains safe when an architecture flag is omitted.

The Docker build path was tightened as well. The build system now checks whether either the standalone docker-compose command or the Docker Compose plugin is actually usable. If neither is available, it stops with a useful error before attempting a non-native build.

Repository synchronization and failure handling received similar attention. Repository errors now fail faster, each repository can be synchronized as part of the build flow, and upload behavior has been aligned with the new synchronization model. The result is less ambiguity in long-running jobs and a clearer boundary between a successful build and a partially completed one.

The base package set also grew to include three projects that are increasingly central to the OnixOS ecosystem:

  • olf-deployment-manager
  • onixos-isolated-vm
  • odesk

This is more than a package list update. It connects the distribution build to the tools being developed around it: deployment, isolated environments, and the desktop experience.

ODesk: stabilizing the desktop experience

Recent ODesk work concentrated on the details that make a desktop feel reliable rather than merely functional.

The X11 backend now keeps shell windows inside the display boundaries, and the repaint path for shell surfaces has been made more reliable. Icons, popups, compositor behavior, and the taskbar received several fixes aimed at eliminating flicker and inconsistent redraws.

The window manager also gained tiling-related behavior and more structured repaint handling. A desktop session installer was added for Arch Linux, including X11 and Wayland session entries, installation and uninstall scripts, and a clearer way to launch ODesk from a normal desktop installation.

These changes are deliberately practical. A shell can have all the right features and still feel broken if a popup flickers, an icon is not repainted, or a window escapes the visible display. Stabilizing these interactions is an important part of making OnixOS usable every day.

O Language: a real web project workflow

The biggest O Language change is the new web project command group. Instead of manually cloning a framework, creating directories, wiring the boot file, and preparing library metadata, a project can now be managed through commands such as:

1
2
3
4
5
6
7
olang web init my-project
olang web run
olang web create controller home
olang web create model user
olang web install
olang web update
olang web artifact build/project

The web manager can initialize a project from the default framework or from a custom remote, run its proc.ops entry point, create controllers, models, connections, and routes, manage libraries, and package the project as a ZIP artifact.

The scaffolding is convention-based. A new project gets the expected directories for controllers, configuration, models, connections, routes, templates, public assets, libraries, and database-related code. Generated files are intentionally small and editable, so the CLI gives developers a starting point without hiding the application structure.

Typed routes and request-aware handlers

Route generation became more useful in the same iteration. Routes can now be generated with an HTTP method, a path, and a controller:

1
2
olang web create route get /users users
olang web create route post /users users

The route scaffolder validates methods, requires paths to begin with /, produces predictable filenames, and keeps compatibility with the older Go API form.

On the runtime side, web handlers now receive a request-scoped server value. It exposes the request, query parameters, form data, route parameters, headers, and response state. A handler can therefore change the response body, status, or headers without relying on global mutable state.

Route parameters can also be declared directly as handler arguments. This makes a route such as /users/:id feel like a normal function call while preserving the older request-hash representation for existing applications.

The request environment is enclosed for each request, which is important for concurrent web applications: one request should never overwrite another request’s state.

A more predictable runtime

The interpreter, compiler, and virtual machine were also hardened against nil values crossing the boundary between Go and O Language.

Values are normalized before they reach object methods, builtin functions, or the VM stack. Empty values now become language-level null values, and attempts to call an empty value produce a language error instead of a nil-pointer panic. Tests were added around builtins, compiler behavior, and normalization.

This kind of work rarely appears in a demo, but it changes the quality of the whole language. Runtime errors should explain what went wrong in the program; they should not expose an implementation panic from the host language.

Documentation moved closer to the source

The O Language documentation was reorganized into a central MediaWiki-based structure. Getting started material, language basics, project files, API references, runtime topics, web development, routing, and database usage now have clearer categories and navigation.

The old framework-specific documentation site was retired in favor of the central wiki. The web framework guide now documents the CLI workflow, debug output, centralized loading, project layout, and database setup in the same place as the language reference.

This matters because documentation is part of the developer experience. A feature is not finished when the code works; it is finished when a new developer can discover it, understand the intended workflow, and use it without reconstructing the design from source code.

What this adds up to

OnixOS is becoming more disciplined at the system level: builds declare their targets, fail clearly, synchronize consistently, and include the surrounding ecosystem tools. O Language is becoming more approachable at the application level: web projects can be initialized, generated, run, tested, and packaged through a coherent workflow.

The common theme is reducing accidental complexity. Explicit architectures protect the build system. Request-scoped state protects web applications. Nil normalization protects the runtime. Centralized documentation protects the time of anyone trying to learn the platform.

There is still a lot to build, but the direction is now clearer. OnixOS is gaining a stronger foundation, and O Language is gaining the tools needed to build on top of it.

Happy hacking.

This post is licensed under CC BY 4.0 by the author.