Object REXX is a high-level, general-purpose, interpreted, object-oriented (class-based) programming language. Today it is generally referred to as ooRexx (short for Open Object Rexx), which is the maintained and direct open-source software successor to Object REXX.
It is a follow-on and a significant extension of the Rexx programming language (called here classic Rexx), retaining all the features and syntax while adding full object-oriented programming (OOP) abilities and other new enhancements. Following its classic Rexx influence, ooRexx is designed to be easy to learn, use, and maintain. It is essentially compliant with the "Information Technology – Programming Language REXX" American National Standards Institute (ANSI) X3.274-1996 standard and therefore ensures cross-platform interoperability with other compliant Rexx implementations. Therefore, classic Rexx programs typically run under ooRexx without any changes.
There is also Rexx Object Oriented (roo!), which was originally developed by Kilowatt Software and is an unmaintained object-oriented implementation of classic Rexx.
History In 1988, the "Oryx" project at the IBM Scientific Centre in Winchester, under the technical direction of Simon C. Nash, experimented with merging classic Rexx with the object model of Smalltalk. The motivation behind the project was to transfer the advantages of OOP to classic Rexx while remaining compatible and thus transferring the usability of classic Rexx to OOP. Early on, the projects focused on OOP aspect such as treating everything as an object, object-based encapsulation and message passing, object-based concurrency, classes and inheritance.
This initial work later led under the direction of Rick McGuire to the first prototype of Object REXX, which was presented in 1992. In 1994, IBM announced that Object REXX would replace classic Rexx as the standard REXX interpreter in the next version of OS/2. In 1996, Object REXX was released as part of the OS/2 Warp 4 operating system. In 1997, versions for Windows 95, Windows NT and Linux followed. In 1999 an Object REXX version for AIX V4.1.5 or higher was released. In 2000, versions for zLinux and Sun/Solaris followed. For Windows 2000, Windows Me, Windows 98 and Windows NT 4.0, the last major update for Object REXX was released in 2001.
On 12 October 2004, IBM announced the discontinuation of Object REXX and transferred the source code and licensing rights to the non-profit Special Interest Group (SIG), the Rexx Language Association (RexxLA). The code that IBM released to open source did not include the classes for IBM System Object Model (SOM), which is known as the object framework for OS/2's Workplace Shell (WPS).Where did SOM support go in 4.0.0? Although IBM discontinued the development of SOM in 1997, it is still a fundamental framework for OS/2. The OS/2 version of Object REXX includes classes to support SOM and WPS. These are included in OS/2's initial follow-on product, eComStation, and also in its current descendant, ArcaOS, for which IBM's original Object REXX interpreter continues to be available.
In 2005, the RexxLA released ooRexx as a new incarnation of Object REXX as free and open-source software under the Common Public License. This first version of ooRexx 3.0.0 has been heavily refactored compared to the original IBM source code in order to increase readability. Later, the ooRexx kernel was rewritten in pure C++, and a new architecture and native interface were designed and implemented under the technical direction of Rick McGuire. This work enabled the RexxLA to release ooRexx 4.0.0 with support for 64-bit in 2009. To this day, the RexxLA continues to develop, support and maintain ooRexx as well as classic Rexx and NetRexx. Furthermore, the RexxLA organizes international annual symposia.
Releases The following table contains noteworthy features and changes of major Object REXX and ooRexx interpreter versions. All ooRexx releases and the necessary documentation are available freely on SourceForge. For Arch Linux based distributions the current and the development version are available as Arch User Repository. Since version 5.0.0 there are portable versions of the interpreter that can be used without installation, and an unofficial port to OS/2 also exists. The "net-oo-rexx" bundle contains the latest portable version of ooRexx, Netrexx, a Netrexx shell, the Java bridge and associated packages, a shell for ooRexx and various other packages and programs.
For Intellij IDEA, the ooRexxPlugin adds support for syntax highlighting, syntax checking, code completion and documentation support modeled after Javadoc using annotations. Syntax highlighting has been supported in Vim since September 2012, and the Pygments lexer has been available since 2026. RexxCPS is a benchmark that measures the number of Rexx clauses (independent syntax units in a line) per second that an interpreter processes.
Major Releases Release date Notable Features and Changes 1996-09-25 First official release as part of OS/2 Warp 4 Support for object-oriented paradigm Concepts such as SELECT, DO loops, IF-THEN-ELSE branching Support for procedure and function calls, stems and compound variables Provides array handling, arithmetic and built-in functions Includes interfaces to DB2, TCP/IP sockets and C applications 1997-02-28 First releases for Windows Development Edition (1997-05-30) additionally provides a dialogue library and editor as well asa built-in tokeniser 1999-04-09 First release for AIX V4.1.5 Addition of library for file transfer protocol (FTP) 2001-04-21 Support for Windows 98, Windows Me, Windows 2000, and Windows NT Support for Object Linking and Embedding/ActiveX, Windows Script Host (WSH) engine and Unicode functions Addition of RxMath native library 2005-03-30 First release as open-source Supports 28 keyword instructions, four directives, 29 classes with associated methods and 75 built-in functions Includes an extension class for regular expressions and ooDialog 3.0.0 Improved PDF documentation 2006-08-21 Various enhancements Separate documentation for ooDialog 2006-11-23 Support for Linux, Windows, AIX and Solaris Additional methods for various classes and new functions for the RexxUtil library Addition of CircularQueue class 2007-09-17 Support for MacOS Additional methods for the MutableBuffer, String and Object classes Includes interface to Open Office 2008-01-22 Various enhancements 2009-09-30 Support for 64bit versions of Linux, AIX and Windows Drop support for WSH engine Improved C++ application programming interface Addition of Buffer, IdentityTable, Orderable, Package, Pointer, RexxContext, Routine, WeakReference and SocketClass classes New methods for RexxQueue, Object, DateTime, Method, Stem, String, MutableBuffer, OLEObject classes Additional classes and methods for ooDialog Addition of sample programs and separate documentation for the Windows extension library 2011-09-28 Addition of RxUnixSys library and ooSQLite extension Enhancement of TCP/IP socket and ooDialog support Addition of File class and new methods for DateTime class Addition of extension classes for handling the comma-separated values, multipurpose internet mail extensions and simple mail transfer protocol Separate documentation for the Rexx and Unix extension library (RxUnixSys) 2014-02-23 More than 43 enhancements (e.g. tracing) Standalone installer for ooDialog 4.2.3 and several new classes and methods Systemd support and compliance with Linux Standard Base New methods for the Relation, OrderedCollections, Array, String, Mutablebuffer, StackFrame, Queue and OrderedCollection classes Separate documentation for ooSQLite external library 2022-12-22 A total of 86 new features and 76 enhancements Addition of AlarmNotification, Json, MessageNotification, RexxInfo, StringTable and Validate classes New methods for Alarm, Class, Collection, Directory, Message, Method, MutableBuffer, Object, Package, Routine, String and RxFtp classes Separate documentation ooRexxUnit (unit testing framework), orxnCurses (ncurses library), C/C++ APIs and the release and build environment 2025-05-02 A total of 36 enhancements Several improvements to Json class Inclusion of oleinfo scripts to facilitate Windows automation Addition of the TraceObject class to support the tracing of multi-threaded programs 2026-04-18 A total of 23 enhancements Improvements to File, Json and TraceObject classes Addition of Yaml class for YAML support Two additional sub-options for the ::option directive Addition of gc() built-in-function for invoking the garbage collector for debugging Addition of utf8proc unicode library 2026-04-25
Design philosophy ooRexx follows the design philosophy of classic Rexx to create a "human-centered" programming language that is easy to learn, code, remember and maintain. This is achieved, in part, by keeping the language small and following the principle of least astonishment. A readable syntax is enabled by being case-insensitive, free-form, requiring as little punctuation as possible, and using instructions that are straightforward English. In addition, it is a dynamic programming language that offers flexibility and allows to focus on development rather than language constraints.
Following the "documentation before implementation" design principle of classic Rexx, ooRexx offers comprehensive documentation in accordance with the IBM Style Guide that includes syntax diagrams and examples.
Instructions As in classic Rexx, there are assignment instructions, keyword instructions and command instructions. In line with the desire to keep the language small, ooRexx has only thirty keyword instructions. Unlike many other languages, no keywords are reserved, so keyword instructions such as DO, SAY, END and IF for example can be used as variable names during an assignment. This avoids having to memorize a long list of reserved words. An assignment is used to set or change the value of a variable. The equal sign (=) is used to create an assignment instruction which can be used in combination with eleven operators for extended assignment sequences such as +=, -=, *= and others. Keyword instructions such as ARG, PARSE, PULL or USE have the same effect as assignments.
In cases where an instruction is neither an assignment nor a keyword instruction, it must be a valid expression, e.g., a symbol, a string literal, which is considered a command instruction, whose value the interpreter passes to the current command environment, e.g., editor, operating system, for execution; the interpreter sets a variable RC for the return code. In addition, the ADDRESS instruction allows commands to be redirected to specific command environments such as Bourne Shell, Bash, Z-Shell, Command Prompt and others, some editors including ISPF, TSO EDIT, XEDIT and its adaptations, as well as intercepting errors.a = "hello world" /* assignment instruction */ do i = 1 to 2 /* keyword instruction "DO" */ say "round #" i":" a /* keyword instruction "SAY" */ end /* keyword instruction "END" */ "echo Hello World" /* command to operating system */ say "RC:" rc /* command's numeric return code */In addition to the three instruction types of classic Rexx, ooRexx adds directive instructions which need to be placed at the end of the program. After loading and the syntax check, the interpreter executes all defined directives to set up the execution environment for the program before further instructions are executed. Directives can be used to define routines, classes, methods, attributes or execution options like the number of digits to use in arithmetics. To make directive instructions readily recognizable, they are introduced with two consecutive colons (::).