OABuilder & OACodeGen

Overview of OA’s intermediate code generation

Model Specification in OABuilder

OABuilder is a visual modeling environment used to define the application model. It captures domain structure, metadata, and runtime behavior, that includes:

The model is persisted in a structured format, and consumed by other generators and tools.

Intermediate Representation (IR) in OACodeGen

OACodeGen transforms the model into an Intermediate Representation (IR) that serves as a normalized, enriched view of the application model.

This process is similar to how modern compilers work: OACodeGen takes the high-level model (analogous to source code) and compiles it into a normalized, semantically rich IR. This IR is then used as the foundation for generating software artifacts.

This IR decouples the domain model from any specific technology or output format, making it reusable for multiple generators.

OACodeGen as Meta Code Generator

OACodeGen is architected as a meta-generator: a system for creating and executing custom code generators based on the IR.

This meta-generative approach enables organizations to define domain-specific output formats and enforce architectural patterns consistently across projects.

Generate Code for Any Framework

OACodeGen is a "code generator for code generators", that can transform your high-level OA Model into fully working software for any framework, backend, or frontend platform.

This enables seamless integration with your existing stack and allows you to explore new ones without rewriting your business logic. The OA Model becomes a true abstraction layer — portable, maintainable, and framework-agnostic.

There’s something uniquely powerful about designing a model in OABuilder and instantly seeing it come to life as working software — tailored to your chosen language or framework. With a single source of truth, you can watch your domain model generate and then run your model — all without writing repetitive boilerplate. It's software that is building itself, adapting to your stack while preserving the integrity of your design.

OA, OABuilder & OACodeGen make building a new generator a feasible task with high reuse and high reward. A single code generator can automate > 90% of development time and be the central control point. It's more than a 10x productivity improvement.

OABuilder’s current Code Generators

OABuilder includes a suite of built-in generators that consume the IR and output structured code across the stack:

These generators target core OA runtime components such as:

This integration ensures that generated applications can operate as real-time object graphs — observing changes, resolving relationships, persisting state, and synchronizing across distributed environments.

The UI Code Generation IR

A noted capability of OACodeGen is its ability to generate full-featured, commercial-grade UIs directly from the model — without relying on manual layout tools or drag-and-drop builders.

The IR for UI generation is organized in a two-stage process:

This approach allows UI generation to adapt easily across different platforms while ensuring that UI behavior and logic remain tightly coupled with the model. This is what allows OA to target any third party UI framework and component set. Examples include: React, Vue, Angular, Material UI, and others.

Full Project Adaptation Using OATemplate project files

OACodeGen can take a full generic application project — such as OATemplate — and adapt it to any modeled domain. OATemplate includes prebuilt code, services, components, and configuration files.

OACodeGen analyzes the model and uses the IR to dynamically insert, customize, and adjust the template project to align with the target domain. This includes renaming classes, injecting model-specific logic, and configuring sync, services, and UI bindings automatically.

This enables rapid application assembly by reusing and customizing proven, production-ready project structures.

Iterative Code Generation

OACodeGen is designed to support iterative development. As the model evolves, developers can rerun the code generators to regenerate application code layers without affecting custom modifications.

The generated code follows a modular pattern where base classes and generated files are separated from developer-authored logic. This separation allows repeated regeneration after model changes — ensuring model-to-code alignment while preserving any custom business logic or extensions.