STEPLIB is the load library search path for a single JCL step. In Easytrieve work, it is the DD statement that lets z/OS find the compiler module, product runtime modules, and application load modules that execute your report. A beginner may think of STEPLIB as “where the program lives,” but it is more precise than that: it is an ordered list of load libraries searched by the system loader for executable members needed by this step.
Easytrieve is not just a source language. It has compiler modules, runtime modules, report writer routines, sort interfaces, optional SQL or environment support, and application programs produced by the binder. z/OS must find those executable pieces before source logic can run. STEPLIB controls that lookup for one step. When STEPLIB is wrong, the step may fail before Easytrieve reads SYSIN, opens a business file, or writes a single line to a report.
This makes STEPLIB one of the first places to check when a job fails with module-not-found messages, unexpected release behavior, or differences between test and production. It is also a promotion control point. A scheduler can run the same JCL skeleton against test or production modules by changing which libraries appear in STEPLIB.
A compile step usually runs PGM=EZTPA00, the Easytrieve processor. The loader must find EZTPA00 and any supporting product modules. Some sites place these modules in a product library named with Broadcom’s installed high-level qualifier; others copy or alias them into site-standard load libraries. The DD name is still STEPLIB if the step defines a step-specific search path.
12345//COMPILE EXEC PGM=EZTPA00 //STEPLIB DD DSN=TEST.EASYTRIEVE.CBAALOAD,DISP=SHR // DD DSN=TEST.APP.LOADLIB,DISP=SHR //SYSPRINT DD SYSOUT=* //SYSIN DD DSN=TEST.EZT.SOURCE(SALESRPT),DISP=SHR
The first STEPLIB line points to the Easytrieve product load library in this example. The second line extends the same STEPLIB concatenation to an application load library. During compile, the most important module is EZTPA00. During link or compile-and-go, other runtime routines may also be needed.
A production runtime step usually runs PGM=your program name, not PGM=EZTPA00. That program name must exist in an application load library. After it is found, its references to Easytrieve runtime routines must resolve through the same STEPLIB chain or the system link list. That is why application libraries and product runtime libraries often appear together.
123456//RUNRPT EXEC PGM=SALESRPT //STEPLIB DD DSN=PROD.APP.EZT.LOADLIB,DISP=SHR // DD DSN=PROD.EASYTRIEVE.CBAALOAD,DISP=SHR //SALESIN DD DSN=PROD.SALES.DAILY,DISP=SHR //SYSPRINT DD SYSOUT=* //REPORT DD SYSOUT=A
Here, z/OS searches PROD.APP.EZT.LOADLIB first for SALESRPT. If SALESRPT needs product services not built into the module, the loader can continue into PROD.EASYTRIEVE.CBAALOAD to resolve them. If the application library is omitted, PGM=SALESRPT may fail. If the product library is omitted, the program may start loading but fail when a runtime service cannot be found.
STEPLIB concatenation is ordered. The first DD statement under STEPLIB is searched first, then the second, and so on. This order matters whenever the same module name appears in more than one library. A common test setup places a developer or QA library first, then shared production libraries. That lets one changed module override production for a controlled test without copying every module.
| Order choice | Effect |
|---|---|
| TEST before PROD | Test module overrides production module with the same member name |
| PROD before TEST | Production module is used first, which can hide a test change |
| Application before product | Program module is found before runtime support libraries are searched |
| Old product before new product | Step may run against an outdated Easytrieve maintenance level |
STEPLIB applies to one job step. JOBLIB applies to the job as a whole for steps that do not have their own STEPLIB. The system link list is a system-managed search path for commonly available modules. Easytrieve jobs can use any combination depending on site standards. Many production JCL procedures use STEPLIB because it makes the exact release and application load library visible in the step output.
| Name | Scope and use |
|---|---|
| STEPLIB | Step-level search path; most explicit for Easytrieve jobs |
| JOBLIB | Job-level search path; applies unless a step has STEPLIB |
| LNKLST | System-level search path maintained by systems programmers |
Some load libraries are APF-authorized because they contain privileged modules. If a program requires authorized services, every library in the STEPLIB concatenation may need to meet site authorization rules. Easytrieve report jobs usually do not require you to understand APF deeply, but you should recognize authorization messages as environment issues. Do not “fix” them by moving libraries around without systems programming review.
Troubleshooting STEPLIB is systematic. First identify the exact module named in the error. Then identify each load library in the step. Confirm the module exists where you expect, that the dataset is cataloged, that the running user has access, and that the order places the intended module before alternatives. Compare with a recent successful job rather than guessing.
Keep STEPLIB small and intentional. Broad concatenations slow diagnosis and increase the chance of picking up the wrong member. Use symbolic variables in procedures when moving between DEV, QA, and PROD, but make the resolved dataset names visible in job output. Document which Easytrieve product library belongs to each application release. Avoid mixing test and production libraries unless a controlled test plan requires it.
STEPLIB does not read Easytrieve source. SYSIN, source management tools, or compile procedures handle source. STEPLIB is only about load modules. This distinction prevents a common beginner mistake: changing SYSIN source and expecting a runtime step to pick it up. A runtime step using PGM=SALESRPT reads the load module from STEPLIB; it does not recompile source unless the job is explicitly a compile-and-go flow.
STEPLIB is like telling a teacher which cupboard holds the class toys for today. If the teacher looks in the wrong cupboard, the toy is missing. If two cupboards have a toy with the same name, the teacher takes the first one. Easytrieve jobs need the right cupboard order so they use the right program and the right Easytrieve tools.
1. STEPLIB tells z/OS where to search for:
2. If two STEPLIB datasets contain the same module name, z/OS normally uses:
3. JOBLIB differs from STEPLIB because:
4. A missing Easytrieve runtime module usually points to:
5. STEPLIB should be managed carefully because it can: