Skip to content
| Marketplace
Sign in
Visual Studio Code>Programming Languages>DDS CanvasNew to Visual Studio Code? Get it now.
DDS Canvas

DDS Canvas

Rabbi Hossain

|
2 installs
| (1) | Free
A beautiful, modern DDS editing experience for IBM i developers. Column awareness, hovers, diagnostics, snippets, keyword completion and display-file preview.
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info

DDS Canvas

A beautiful, modern DDS editing experience for IBM i developers in Visual Studio Code.

DDS is fixed-format: every entry must sit in an exact column, and getting one space wrong means a compile error. RDi helps but is expensive; plain VS Code gives you nothing. DDS Canvas fills that gap.

Stop counting spaces. The extension always tells you where you are, what that column means, and warns you before the compiler does.

Works with Physical Files (PF), Logical Files (LF), Display Files (DSPF) and Printer Files (PRTF).


Quick start — your first 5 minutes

  1. Install the extension and open any DDS source file (.pf, .lf, .dspf, .prtf or .dds).

  2. Look at the status bar (bottom right). You will see something like:

    DDS | Col 21 | Name
    

    Move the cursor around the line — the label updates instantly. You always know which DDS area you are in.

  3. Hover your mouse anywhere on a line. A tooltip explains the column region under the pointer: what it is for, its valid values, and real examples.

  4. Watch the subtle highlight. The column region containing your cursor is gently shaded, so you can see exactly where the area begins and ends. Vertical guide lines mark every DDS column boundary.

  5. Type a snippet. On an empty line type pf-record and press Tab. A complete, column-perfect record format appears. Press Tab to jump between the parts you need to fill in.

  6. Make a deliberate mistake. Type a Q in column 35 (the data type column). A squiggle appears immediately: "'Q' is not a valid DDS data type." That is the compiler error you just avoided.

That's the core loop: read the status bar, hover when unsure, let snippets do the alignment, and trust the squiggles.


The DDS column layout (what the extension knows)

Every feature is driven by one internal map of the DDS layout:

Columns Region What goes there
1–5 Sequence Number Optional; usually blank in stream files
6 Form Type Always A
7 Comment / And-Or * = comment line; A/O chain indicator conditions
8–16 Conditioning Indicators Up to three conditions, e.g. N50 (DSPF/PRTF)
17 Name Type R record, K key, S select, O omit, J join, H help, blank = field
18 Reserved Must be blank
19–28 Name Record/field/key name, left-justified, max 10 chars
29 Reference R = copy definition from a referenced field
30–34 Length Right-justified, digits only
35 Data Type A char, P packed, S zoned, L date, T time, Z timestamp, ...
36–37 Decimal Positions Right-justified, numeric fields only
38 Usage B both, I input, O output, H hidden, ...
39–41 Location: Line Screen/print line (DSPF/PRTF)
42–44 Location: Position Screen/print column (DSPF/PRTF)
45–80 Keywords TEXT('...'), COLHDG(...), EDTCDE(Z), SFL, ...

You never have to memorize this table — it is exactly what the status bar, hovers, highlight and guides show you in place. You can also open it any time with DDS Canvas: Show Column Reference (or by clicking the status bar item).


Features in detail

1. Status bar assistant

The status bar always shows your current column number and the DDS region it belongs to:

DDS | Col 27 | Name
DDS | Col 34 | Length
DDS | Col 52 | Keywords
  • Updates instantly as the cursor moves. Purely textual, so it also works for colorblind users.
  • Click it to open the interactive column reference.
  • The format is configurable — see Settings. Tokens: {column}, {section}, {fileType}.

2. Column reference and jump

Run DDS Canvas: Show Column Reference from the Command Palette (Ctrl+Shift+P), or click the status bar item. You get a searchable list of every DDS region with its columns and purpose. Selecting an entry moves the cursor to that region on the current line — if the line is too short, it is padded with spaces so you land exactly where you need to type.

Typical use: you are on a new line and need to type the field length. Open the reference, pick "Length", start typing.

3. Hover documentation

Two kinds of hovers, zero configuration:

  • Column hovers — hover anywhere on a line and see the region's name, column range, purpose, valid values, examples and IBM notes. Example: hovering column 35 lists every data type letter and what it means.
  • Keyword hovers — hover a keyword such as TEXT, COLHDG, SFLCTL, WINDOW, EDTCDE, REFFLD, CA03 in the keyword area and see its signature, an explanation, and a working example.

4. Column guides

Thin vertical lines mark every DDS column boundary (after columns 5, 6, 16, 18, 28, 29, 34, 35, 37, 38, 41, 44 and 80). They use VS Code's native editor rulers, scoped to DDS files only — your other files are untouched, and there is zero performance cost.

Toggle them with DDS Canvas: Toggle Column Guides.

5. Section highlight

The column region containing your cursor is shaded very subtly (8% opacity by default, never more than 15%). Only the region is highlighted — never the whole line. It follows your theme automatically; you can also set a custom color.

Toggle it with DDS Canvas: Toggle Section Highlight.

6. Diagnostics

The extension validates as you type (debounced, so large files stay fast) and flags the classic DDS mistakes:

Problem Severity
Text past column 80 Error
Invalid data type in column 35 Error
Length is not numeric Error
Decimal positions exceed the field length Error
Packed/zoned fields over 63 digits, character fields over 32766 Error
Decimal positions on a character field Warning
Name too long, invalid characters, or not left-justified Warning
Length not right-justified in column 34 Warning
Length/type specified on record (R) or key (K) lines Warning
Invalid usage or name type letter Warning
Column 6 is not A Warning

Everything appears in the editor as squiggles and in the Problems panel (Ctrl+Shift+M). Comment lines (* in column 7) are always ignored.

7. Keyword completion

Put the cursor in the keyword area (column 45 or beyond) and press Ctrl+Space. You get DDS keywords filtered by file type — a .dspf file offers SFL, SFLCTL, WINDOW, DSPATR...; a .pf file offers COLHDG, UNIQUE, VARLEN.... Each completion shows documentation and inserts a fill-in-the-blanks template, e.g. EDTCDE(Z) with the edit code pre-selected.

8. Snippets

Type a prefix and press Tab. Every snippet is column-perfect — verified by the test suite against the extension's own diagnostics.

Prefix Inserts
pf-record Physical file record format with a text field
lf-record Logical file record with PFILE and a key
dspf-record Display record with a title constant
field-char Character field (type A)
field-packed Packed decimal field (type P)
field-zoned Zoned decimal field (type S)
field-date Date field (type L, ISO)
field-time Time field (type T, ISO)
field-timestamp Timestamp field (type Z)
key-field Key field (K in column 17)
dspf-input Input-capable display field at line/position
dspf-output Output-only display field at line/position
dspf-constant Constant text at line/position
dspf-window Window record format
dspf-subfile Complete subfile + control record pair
dspf-fkey Function key definition (CAnn)
dds-header Commented header block

9. Display preview

Open a display file and run DDS Canvas: Open Display Preview (or click the preview icon in the editor title bar). A side panel renders each record format on a 24×80 screen:

  • constants appear as their text, in green;
  • fields appear as placeholders in blue (_____ for character input, 99999 for numeric, OOOOO for output) — hover one to see its name;
  • the panel updates live as you edit the source.

10. Outline and breadcrumbs

Record formats, fields and keys appear in the Outline view (Explorer sidebar) and in the breadcrumb bar above the editor. Fields show their length/type (7P,0). Click to jump. Ctrl+Shift+O gives you quick symbol navigation inside the file.


Commands

Open the Command Palette with Ctrl+Shift+P and type "DDS":

Command What it does
DDS Canvas: Show Column Reference Searchable column cheat sheet; jumps the cursor to the chosen region
DDS Canvas: Toggle Column Guides Show/hide the vertical column rulers
DDS Canvas: Toggle Section Highlight Enable/disable the cursor section highlight
DDS Canvas: Open Display Preview Live 24×80 preview of display-file records

Settings

Open Settings (Ctrl+,) and search for "DDS Canvas":

Setting Default Description
ddsCanvas.statusBar.enabled true Show the status bar assistant
ddsCanvas.statusBar.format DDS \| Col {column} \| {section} Status bar text; tokens {column}, {section}, {fileType}
ddsCanvas.statusBar.showIcon true Icon before the status bar text
ddsCanvas.hover.enabled true Column and keyword hovers
ddsCanvas.diagnostics.enabled true DDS validation squiggles
ddsCanvas.completion.enabled true Keyword completion in columns 45–80
ddsCanvas.highlight.enabled true Cursor section highlight
ddsCanvas.highlight.color (theme) Custom highlight color as hex, e.g. #61AFEF
ddsCanvas.highlight.opacity 0.08 Highlight opacity, capped at 0.15

File detection

These extensions are recognized automatically: .dds, .pf, .lf, .dspf, .prtf (case-insensitive).

If your sources use different names — for example members downloaded as .MBR or files without extensions — map them to DDS in your settings:

"files.associations": {
  "*.MBR": "dds",
  "*.PFSRC": "dds"
}

You can also click the language indicator in the status bar (bottom right) and choose DDS for the current file.

Note: DDS Canvas is for DDS sources only. RPGLE, SQLRPGLE and CLLE members are not DDS — support for those languages is on the roadmap but a fixed-format RPG file will not activate this extension.


Frequently asked questions

Nothing happens when I open my file. Check the language indicator in the bottom-right of the status bar. It must say DDS. If it says "Plain Text" (or "RPGLE"), the file was not recognized — click the indicator and select DDS, or add a files.associations entry as shown above.

Can I change where the column guides are? The guides are standard VS Code rulers scoped to DDS. Override them per user or workspace under "[dds]": { "editor.rulers": [...] }.

The highlight is too strong / too weak. Adjust ddsCanvas.highlight.opacity (0.02–0.15) or set a custom ddsCanvas.highlight.color.

Does it work with my theme? Yes. All colors default to your theme's own tokens (tested with One Dark Pro, Dark+, GitHub Dark, Catppuccin and Dracula). Nothing is hard-coded or bright.

Is it fast on large sources? Yes. Parsing is line-based and cached, diagnostics are debounced, decorations touch only the active editor, and the status bar updates only when the cursor moves.

Does it compile my DDS? No. DDS Canvas is an editing assistant; it does not replace the IBM i compiler. Pair it with Code for IBM i or your usual deployment workflow to compile.


Roadmap

  • Quick fixes: automatically move a misaligned entry to the correct column
  • IBM keyword parameter validation
  • Printer file preview
  • PF/LF relationship viewer
  • Localization
  • RPGLE / SQLRPGLE / CLLE support in a companion experience

Development

npm install
npm run compile   # build
npm test          # 36 unit tests: parser, columns, rules, snippets, samples, preview
npm run lint

Press F5 in VS Code to launch an Extension Development Host. Sample sources to play with are in samples/.

The core (parser, column map, diagnostic rules, screen model) is pure TypeScript with no VS Code dependencies. The single source of truth for the layout is src/constants/columns.ts; every feature derives from it.

License

MIT

  • Contact us
  • Jobs
  • Privacy
  • Manage cookies
  • Terms of use
  • Trademarks
© 2026 Microsoft