OES is a source-available, cross-platform low-code enterprise application platform written in C++17. It provides a fully integrated environment — compiler, bytecode interpreter, visual form designer, multi-database abstraction layer, and remote debugger — that allows developers to build line-of-business applications using a built-in scripting language with two syntax modes (VBS-style and CES-style), a rich set of 88 built-in functions, and 8 first-class business-object types (Catalog, Document, Enumeration, Constant, InformationRegister, AccumulationRegister, DataProcessor, Report).
- Integrated designer — metadata tree editor, form builder, code editor with syntax highlighting and autocomplete
- Bytecode compiler — two-pass compiler (lexer → parser → bytecode) producing 66-opcode bytecode; supports procedures, functions, modules, regions, and preprocessor directives (
#ifdef/#define) - Visual form system — 22 controls (TableBox, TextBox, ChartBox, GridBox, Notebook, ToolBar, etc.) rendered through wxWidgets; forms are described in metadata and instantiated at runtime
- Multi-database back end — Firebird (primary, embedded shipped with the distribution), PostgreSQL, SQLite, MySQL, ODBC; unified
ibDatabaseLayerAPI across all drivers - Remote TCP debugger — client/server architecture over TCP (default port 1650); supports breakpoints, step-over, step-into, variable inspection, tooltips, and live code patching
- Session management — multi-user sessions tracked in the system database; launcher, daemon, designer, enterprise, and codeRunner modes
- Role-based access control — access rights on objects and operations defined in the metadata configuration
- Source-available under PolyForm Noncommercial 1.0.0 — read it, build it, change it, run it, write configurations for it, teach from it, for any noncommercial purpose. Earning from it — in a business, as a service, inside a product you are paid for — needs a licence from the copyright holders. See LICENSE.md and NOTICE.md
Screenshots will be added here. Contributions welcome.
- Install Visual Studio 2019 or 2022 with the Desktop development with C++ workload.
- Clone the repository and initialise the wxWidgets submodule:
git clone https://github.com/open-enterprise-solutions/enterprise.git cd enterprise git submodule update --init --recursive - Open
enterprise.slnin Visual Studio. - Select configuration
Debug|Win32orRelease|x64. - Build the solution (
Ctrl+Shift+B). Binaries are placed inbin\<Platform>\<Configuration>\. - Run
enterprise.exeordesigner.exefrom that folder.
CMake support is under development. The steps below describe the intended workflow once
CMakeLists.txtis provided.
# Install dependencies
brew install cmake wxwidgets firebird-client postgresql
# Clone and initialise submodules
git clone https://github.com/open-enterprise-solutions/enterprise.git
cd enterprise
git submodule update --init --recursive
# Configure and build
cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build -j$(sysctl -n hw.logicalcpu)CMake support is under development.
# Install dependencies
sudo apt update
sudo apt install -y build-essential cmake libwxgtk3.2-dev \
libfirebird-dev libpq-dev libsqlite3-dev libmysqlclient-dev
# Clone and initialise submodules
git clone https://github.com/open-enterprise-solutions/enterprise.git
cd enterprise
git submodule update --init --recursive
# Configure and build
cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build -j$(nproc)# From a Developer Command Prompt for VS
msbuild enterprise.sln /p:Configuration=Release /p:Platform=x64 /mOutput: bin\Win64\Release\
A top-level CMakeLists.txt needs to be created (tracked in the backlog). Once available:
cmake -B build \
-DCMAKE_BUILD_TYPE=Release \
-DwxWidgets_ROOT_DIR=src/3rdparty/wxWidgets
cmake --build build --parallelwxWidgets 3.3.2 lives at src/3rdparty/wxWidgets as a git submodule. After cloning:
git submodule update --init --recursiveenterprise/
├── enterprise.sln # MSBuild solution (9 projects)
├── Common.props # Shared MSBuild properties (paths, platforms)
├── ConfigurationDefs.props # Preprocessor definitions per configuration
├── LICENSE.md # PolyForm Noncommercial 1.0.0 (source-available)
├── NOTICE.md # third-party licences, the wx fork, the LGPL past
├── docs/
│ ├── ARCHITECTURE.md # Architecture deep-dive
│ ├── BUILD.md # Detailed build instructions
│ ├── devops-playbook/
│ └── engineering-playbook/
└── src/
├── 3rdparty/
│ └── wxWidgets/ # Git submodule — wxWidgets 3.3.2
└── engine/
├── backend/ # Core engine DLL (compiler, DB, metadata, debugger)
│ ├── compiler/ # Lexer, parser, bytecode, interpreter (ibCompileCode, ibProcUnit)
│ ├── databaseLayer/# DB abstraction + 5 drivers (Firebird, PG, SQLite, MySQL, ODBC)
│ ├── debugger/ # TCP debug server/client
│ ├── metaCollection/ # Business object metadata classes
│ │ └── partial/ # Catalog, Document, Enumeration, Constant, Registers, DataProcessor, Report
│ ├── moduleManager/
│ ├── propertyManager/
│ ├── system/ # System manager, built-in functions
│ └── utils/
├── frontend/ # UI DLL (wxWidgets controls, form renderer)
│ ├── visualView/ # ibValueForm, 22 form controls
│ │ └── ctrl/ # Individual control implementations
│ ├── mainFrame/ # Main application window
│ ├── docView/ # Document/view framework wrappers
│ └── win/ # Windows-specific widgets and dialogs
├── enterprise/ # Enterprise runtime executable
├── designer/ # Designer/IDE executable
├── launcher/ # Launcher (connection chooser)
├── daemon/ # Background service
├── codeRunner/ # Script runner
├── classChecker/ # Static metadata checker
└── simplePlugin/ # Example plugin
| Layer | Technology |
|---|---|
| Language | C++17 |
| GUI framework | wxWidgets 3.3.2 |
| Primary database | Firebird (embedded) |
| Optional databases | PostgreSQL, SQLite, MySQL, ODBC |
| Build (Windows) | MSBuild / Visual Studio 2019+ |
| Build (cross-platform) | CMake (planned) |
| License | PolyForm Noncommercial 1.0.0 — source-available, not open source |
- Fork the repository and create a feature branch from
develop. - Follow existing naming conventions:
ibprefix for public classes,m_prefix for member variables,s_for statics. - Match the existing code style (tabs, brace placement).
- For new database queries use
ibPreparedStatementinstead of raw string formatting — this avoids the SQL injection patterns present in legacy code. - Submit a pull request against the
developbranch with a clear description of the change. - The
masterbranch is reserved for release-tagged commits.
Bug reports and feature requests are welcome via GitHub Issues.
OES is source-available, not open source, under the PolyForm Noncommercial License 1.0.0. Copyright is held by Maxim Kornienko and Yurii Bulakh.
Free, and meant to be used: clone it, build it, break it, change it, run it on your own machine, write configurations for it, teach a course from it, write a thesis about it. No notification, no permission, no explanation owed to anyone.
Needs a licence from us: earning from it — running it in a business, providing a service with it, shipping it inside something you are paid for, forking it to ship a rival platform, or lifting a piece of it into a product of your own.
Two things those terms do not cover, both in NOTICE.md: releases up to 2026-08-22 went out under the LGPL 2.1 and stay available under it, and the wxWidgets-derived widget sources remain under the wxWindows Library Licence. Contributions: see CONTRIBUTING.md.
