OpenIBM
Syntax highlighting, formatting, IntelliSense, schema explorer, and client code generation for .ibmi schema files.
Features
Syntax Highlighting
Full grammar support for all .ibmi schema constructs — datasource, generator, program, serviceprogram, table, and procedure blocks.
IntelliSense & Completions
- Block keyword snippets at the top level
- Context-aware attribute completions inside each block (
library, transport, system, function, resultSet, …)
- All IBM i types with argument snippets:
PackedDecimal(15, 0), Char(10), VarChar(255), etc.
- Parameter direction directives:
@in, @out, @inout
- Table column directives:
@id, @map("COLNAME")
Format your .ibmi file with Shift+Alt+F (or right-click → Format Document). Aligns columns and attributes for readability.
Click the OpenIBM icon in the Activity Bar to open the Schema Explorer.
- Lists all
.ibmi files in your workspace
- Expands each file into Programs, Service Programs, Tables, and Procedures
- Click any declaration to jump directly to it in the editor
- Refresh button (↺) to rescan the workspace
- Auto-refreshes when
.ibmi files are created, changed, or deleted
Generate Client Code
Generate a fully-typed TypeScript client from your .ibmi schema:
- Click the ▶ Generate Client Code lens at the top of any open
.ibmi file, or
- Click the ▶ play button next to a file node in the Schema Explorer
Output is written to the path set in your generator block, or ./generated/ by default.
generator client {
output = "./src/generated/ibmi"
}
File Icon (Material Icon Theme)
If you use the Material Icon Theme, this extension automatically configures .ibmi files to use the database icon.
If the icon doesn't appear, add this to your settings.json manually:
"material-icon-theme.files.associations": {
"*.ibmi": "database"
}
Example Schema
datasource ibmi {
transport = env("IBMI_TRANSPORT")
system = env("IBMI_SYSTEM")
}
generator client {
output = "./src/generated/ibmi"
}
table Customer @map("MYLIB.CUSTMST") {
id Int @id @map("CUSTID")
name Char(25) @map("CUSTNAME")
balance PackedDecimal(11, 2) @map("BALANCE")
}
program GetCustomer @map("GETCUST") {
library = "MYLIB"
custId Int @in
custName Char(25) @out
}
procedure ListCustomers {
library = "MYLIB"
resultSet = "Customer"
state Char(2) @in
}
Requirements
- VS Code
^1.80.0
- An IBM i system accessible via HTTP, SSH, or ODBC transport
@openibm/client in your project for runtime usage