ox_abl Oxidized_ABL

High-performance tooling for OpenEdge ABL. A complete, experimental toolchain with a lexer, parser, semantic analysis, and linting. Built for codebases still shipping advanced business logic.

Unofficial · no affiliation with Progress Software

WebAssembly demo

Paste ABL. Get signal.

The real Oxabl parser, semantic analyzer, linter, and formatter, compiled to WebAssembly. Nothing leaves your browser.

Loading Oxabl…
Diagnosticssingle file
No diagnostics. Try removing a period or adding an unused variable.
Runs locally in your browser. This demo uses Oxabl’s shared single-file analysis and safe formatter; project includes and schema-backed checks remain CLI/LSP capabilities.

features

The cool parts

Not a thin wrapper around the compiler. A ground-up toolkit that understands ABL.

563 keywords · 93 statements · 54 functions

01

A Lexer that knows all 563 ABL keywords, functions, and statements. Even OO-ABL.

Case-insensitive and abbreviation aware of every keyword. Tilde escape sequences. Preprocessor directives.

02

The Parser that keeps up.

Turn a codebase into a structured AST in seconds. Error recovery on period boundaries so a single bad statement doesn't sink the file.

03

Semantic analysis, too.

Schema-backed field validation. SHARED flags. Lints that fire on real issues. Catch syntax, schema, or logic errors before they reach the compiler.

04

A Preprocessor, because we had to.

Expand includes and preprocessor statements to gain real, authoritative insights, not just guesses.

05

Schema-aware.

To give you the real tightly coupled database and code feeling of ABL, load a .df and table.field just works. Buffers, typed fields. The analyze tool tells you everything it knows about your code and the schema it belongs to.

06

Performance first, always.

Rust, because it's fast and safe, allows us to parse large ABL files in milliseconds, instead of waiting for the compiler to check your work. Benchmarks on every update ensure we catch regressions before they reach users. Check your files on save, why wait.

pipeline

Source in. Signal out.

Every layer is a crate. Compose what you need — or run the full oxabl check / analyze path end to end.

  1. 01 oxabl_preprocessor &IF, includes, defines crates.io ↗
  2. 02 oxabl_lexer tokens, atoms, kinds crates.io ↗
  3. 03 oxabl_ast node types + NodeId crates.io ↗
  4. 04 oxabl_parser source → AST crates.io ↗
  5. 05 oxabl_schema .df tables + fields crates.io ↗
  6. 06 oxabl_semantic declare · resolve · check crates.io ↗
  7. 07 oxabl_lint rules that fire on signal crates.io ↗
  8. 08 oxabl CLI: check · analyze crates.io ↗

why ox_abl

ABL developers deserve modern toolchains.

ox_abl is designed for modern ABL developers and agents. Get instant feedback, resolve preprocessor directives, roll your own lint rules, format code, build programmatic and declarative test suites. Don't take anything for granted. Bring the convenience of JavaScript or Rust to ABL in your terminal or favorite editor. Let agents take the wheel and give them the context they need to work in ABL monoliths.

  • Native speed — no reliance on the JVM/AVM, written in Rust for safety and speed.
  • Real signal — syntax errors and lint failures surface the real cause.
  • A composable library — only use the features you need for building, or use the CLI for development.
  • Open Source — MIT-licensed, no affiliation with Progress.
$ oxabl check ./src --preprocess
 1,284 files parsed
 0 hard errors
~ 3 PREPROC007 warnings
  unresolvable include 'sys/legacy.i'
  — symbols it declares cannot be checked

elapsed 1.8s

get started

Install the CLI

Installation script and distribution channel coming with 1.0.0.

terminal
# install from GitHub (requires Rust)
cargo install --git https://github.com/oxabl-project/oxabl oxabl

# check a tree
oxabl check ./path/to/src --preprocess

# dump the semantic model
oxabl analyze app.p --schema sports.df

contribute to oxabl

Build the toolchain with us

terminal
# get the source
git clone https://github.com/oxabl-project/oxabl.git
cd oxabl

# build + test the whole suite
cargo build
cargo test

# check a real ABL tree
cargo run -p oxabl -- check ./path/to/src --preprocess

# dump the semantic model
cargo run -p oxabl -- analyze app.p --schema sports.df