Mainframe Commander

Design sketch — Total Commander-style dual pane for z/OS in VS Code, powered by Zowe.

1 · The main view editor webview, full width

Left pane: PDS members on LPAR1. Right pane: USS directory on LPAR2. Selected files are yellow as in Total Commander. F5 copies from the active pane to the other one — across Zowe profiles as well.

mc — Mainframe Commander
🗎
🗎 IEFBR14.jcl
⇄ Mainframe Commander ×
🖧 LPAR1 DSUSSJES
IBMUSER.PROD.JCL(PO-E) EDIT
MemberVV.MM ChangedSizeID
..<UP ONE LEVEL>
🗎ALLOCDB01.042026/07/02 09:11142IBMUSER
🗎BACKUP0102.112026/08/12 14:033 208SANJ
🗎BACKUP0202.032026/08/12 14:072 940SANJ
🗎COMPILE05.282026/08/18 07:44611SANJ
🗎DB2LOAD01.002026/06/30 16:2088OPS01
🗎IEFBR1401.012025/11/04 10:0214IBMUSER
🗎NIGHTRUN07.552026/08/19 23:581 204OPS01
🗎PURGELOG03.122026/05/21 11:36377SANJ
🗎UNLOAD01.092026/08/01 08:15905SANJ
3 of 24 members selected — 6,236 lines 3390 · VOL=PRD001
🖧 LPAR2 DSUSSJES
/u/sanj/deploy IBM-277
NameSize ModifiedPermOwner
..<UP ONE LEVEL>
📁archive<DIR>2026/08/11 22:00drwxr-x---sanj
📁logs<DIR>2026/08/20 06:30drwxrwx---sanj
🗎build.sh2 1122026/08/19 15:41-rwxr-x---sanj
🗎deploy.env4182026/08/20 07:02-rw-r-----sanj
🗎manifest.yaml6 7302026/08/18 12:19-rw-r-----sanj
🗎payload.tar.gz18 442 1002026/08/20 06:58-rw-------sanj
🗎README.md1 0442026/07/29 09:00-rw-r--r--sanj
current→ v142026/08/20 06:59lrwxrwxrwxsanj
0 of 8 selected 18.4 MB in directory
SANJ@LPAR1:IBMUSER.PROD.JCL> submit BACKUP01
F3View
F4Edit
F5Copy
F6Rename
F7Allocate
F8Delete
F9Submit
F10Compare
⇄ Zowe: LPAR1 ✓ · LPAR2 ✓ z/OSMF 2.5 Queue: 2 transfers EBCDIC IBM-277

2 · The same pane, JES mode the job queue as a "file system"

Switch to JES in the same pane: jobs become folders, spool DDs become files. F3 (view), F5 (copy spool out to USS or locally) and F8 (purge) then work exactly as everywhere else.

🖧 LPAR1 DSUSSJES
JES2 / owner=SANJ / prefix=*
JobJobIDStatus RCSubmitted
..<ALL OWNERS>
📁SANJBKUPJOB04412OUTPUTCC 00002026/08/20 07:11
📁SANJLOADJOB04409ACTIVE2026/08/20 07:04
📁NIGHTRUNJOB04388OUTPUTABEND S8062026/08/19 23:58
📁SANJCOMPJOB04370OUTPUTCC 00042026/08/19 15:42
1 of 4 jobsauto-refresh 10 s
🖧 LPAR1 DSUSSJES
JOB04412 · SANJBKUP · spool
IDDDNAME StepnameRecordsClass
..<JOB LIST>
2JESMSGLGJES228A
3JESJCLJES241A
4JESYSMSGJES2116A
102SYSPRINTBACKSTEP4 902A
103SYSOUTBACKSTEP61A
1 selected — 4,902 linesF5 → save in /u/sanj/logs
F3View spool
F5Save output
F6Hold/Release
F8Purge
F9Resubmit
F10Filter

3 · Local pane ↔ mainframe the upload/download variant

Here the left pane is the local disk — same list, same keys. F5 opens the transfer dialog, which is the one place mainframe reality is allowed to show its head: text versus binary, codepage, and which RECFM/LRECL the file lands in. Everything else can be guessed correctly, so the dialog is pre-filled and can be skipped with Shift+F5.

4 · Architecture webview ↔ extension host ↔ Zowe

VS CODE Webview (UI) Dual pane, keyboard, selection, F-keys Virtual list (10k+ rows) Extension host Command router Transfer queue + progress FileSystemProvider postMessage Zowe Explorer API + Zowe SDK Reuses the user's existing ~/.zowe profiles and team config Kerberos / MFA / certificate handling comes for free REST / TLS z/OS z/OSMF REST API /zosmf/restfiles · /zosmf/restjobs · /zosmf/restconsoles MVS Datasets PS/PO Members Catalog / VTOC Migrated (HSM) USS Paths and files Permissions Symlinks Tagging / codepage JES Job queue Spool DDs Submit / purge Return codes

5 · The load-bearing ideas what makes it better than Zowe Explorer

One pane, three worlds

DS / USS / JES are just "file systems" behind the same list. Same keys everywhere — you learn it once.

F5 across LPARs

Left pane LPAR1, right LPAR2. Copy PDS member → USS file, spool → USS, with automatic EBCDIC↔ASCII conversion.

The command line at the bottom

submit, tso, console, cd — typed straight in, starting from the pane's own context.

Background queue

Transfers run in a queue with progress in the status bar. The UI never freezes, even while you fetch an 18 MB tarball.

Virtual list

A PDS with 20,000 members has to scroll as smoothly as one with 20. Only visible rows are rendered.

Quick filter

Just start typing: the list filters live. Ctrl+S as in Total Commander, plus * patterns for dataset names.

6 · Key map starting point

KeyActionZowe call
TabSwitch active pane
Insert / SpaceSelect / deselect
EnterOpen member, step into PDS/directory/joblistMembers, listFiles, getSpoolFiles
F3View read-onlygetContents
F4Edit in the VS Code editorgetContents → uploadFile on save
F5Copy to the other panedownloadDataSet + uploadFile
F6Rename / moverenameDataSet, hMove
F7Allocate dataset / create directorycreateDataSet, createUssFile
F8 / DeleteDelete (with confirmation)deleteDataSet, deleteJob
F9Submit JCLsubmitJcl → jump to the JES pane
Ctrl+USwap panes
Ctrl+DFavourites / jump to a saved path
Alt+F7Search members/filessearchDataSets