Visual Studio Code, RPG and IBM i

Visual Studio Code 1.35 iconVisual Studio Code is an IDE and platform for developers to write backend, progressive web apps, frontend, and everything on the spectrum of development. I have created an extension for VS Code, called Code for IBM i, that allows users to work on and maintain their IBM i code. VS Code is the best IDE for extensibility, which is why I wanted to take on such a task.

While Visual Studio Code was built to work with all languages, in my opinion it didn’t have much support for RPGLE or COBOL on IBM i until this point. We’re streamlining RPGLE development in terms of tools and speed for our users. We want to make developing RPGLE and COBOL easy for everyone in the most efficient way possible.

Since 2017, I have been building extensions and standalone IDEs, like IBMiCmd, ILEditor 1, and ILEditor 2. I firmly believe that Code for IBM i is the best iteration of my work, and it makes me so happy that I can share it with everyone.

As of 2021, Code for IBM i has been available for free on the Visual Studio Code Marketplace. It is also open source and relies heavily on user feedback and input (as well as the occasional PR.) Code for IBM i has a ton of functionality… too much for a single article. This post will run you through the setup of VS Code and Code for IBM i.


Visual Studio Code is available for most operating systems, including Windows and Mac. The very first thing is to download it from the VS Code website. Following that, you can install the extension from the Marketplace.

  1. Open the extensions view
  2. Search ‘ibmi’ and find Code for IBM i
  3. Hit install

Connecting to your IBM i

Now it’s time to connect to your IBM i server. Note that your IBM i will need its SSH daemon started. Usually a simple STRTCPSVR *SSHD  will get that started for you, but you can check out Getting Started with SSH on IBM i if you need more assistance.

After Code for IBM i is installed, you will see a new icon appear on the left. That is the Code for IBM i extension! You can click that, select ‘Connect to an IBM i’, fill out the information, and then hit connect. Code for IBM i will store that connection info for later so you don’t have to type all that in again.

You’ll see a nice info message appear when you are connected successfully.

Editing members

You can find members by using the Object Browser. Start by creating a new filter, which will show a new window.

Create New filter

You can provide a filter name, library, types, source file filters and more. You can see in the image, I am specifying a library and using ‘*srcpf’ as the type, which will then only show source files.

new filter dialog

Clicking save and then opening the filter will show the source files in the chosen library and expanding them will show the members inside. You can click on a source member to open it to edit/view.

Compiling code

Of course, the second most important thing other than editing is compiling your source code. In this case, we have an SQLRPGLE program called DEPTS_WEB. Code for IBM i adds a new shortcut to compile the source code you’re currently working with. To show what compile options you have, you can use the Control + E shortcut (or Command + E on Mac). This will show a dropdown with the available Actions (another topic worth its own blog post). Each Action has a different command that it will run.

In our case, we want to run CRTSQLRPGI to compile our program and there is a default action for that.

After the compile runs, Code for IBM i will display the errors from the compile in line with the source code (as you would expect). It looks like, in this case, the pre-compiler couldn’t find a file definition. That usually indicates that there is a library list issue / the library with that table is missing from the library list.

Editing the library list

The connection to Code for IBM i has its own library list. That means any time a command is sent to the server, it uses the library list from the settings rather than the library list from the user. It’s very easy to change this library list. In the Code for IBM i extension there is a User Library List view. In that view you can:

  • Change your current library
  • Edit your user library list for any future commands
  • Re-order your user library list

For our DEPTS_WEB program to compile, we need to add the missing library with the DEPARTMENT table. That just so happens to be in the SAMPLE library/schema. You can click the add button in the User Library List view to add a library.

Now that SAMPLE has been added, the next time we try to compile our program there should be no issues. Code for IBM i will tell you that the command ran successfully with an informational message.


These are just the very basics of Code for IBM i. There is so much to it. For example, some of the other functionality in Code for IBM i includes:

  • Editing and compiling sources from the IFS (RPG, PHP, Python, JavaScript, etc.)
  • Searching through the contents of source files and IFS directories
  • Browsing and maintaining objects in libraries
  • Running SQL statements and viewing results visually
  • Content assist for free-format RPGLE and fixed-format RPGLE

There are also extensions to Code for IBM i which add:

  • Source date support
  • Integrated unit testing for RPGLE
  • Code Coverage for IBM i

Check out the:

For additional information on Code for i, see Visual Studio Code for IBM i: A Resource Guide.

For training on this or any other IBM i development technology—including APIs or open source on IBM i—contact us.

31 replies
  1. Peter
    Peter says:

    Hi, I am able to access source files in the libraries on *SYSBAS but having some issues on adding libraries/source files located on the iASP. I have added the ASP name on the “Source ASP” settings entry, but it still not working. Any help is appreciated. Thanks.

  2. Anuradha
    Anuradha says:

    How can I compile ILE C++ program using this extension. I read the doc and it says hit Ctrl+E. I did it and nothing happened. Can someone please help me?


  3. Anuradha
    Anuradha says:

    IBM native code editor limits to 80 characters per line. But in the VS code, you don’t have that. How this extension handles it?


    • Alan Seiden
      Alan Seiden says:

      The number of characters per line is determined by the record length of the source file, whether it is 80 or another length. Prompt on CRTSRCPF to define a different length. Then, VS Code will warn if you edit longer than the record length, and truncate if you save longer than the record length.

      • Jayanthi Arya
        Jayanthi Arya says:

        The record length for my source file creation is set to 92 but when I run my script it looks the line is getting truncated at 80 chars.. how do I fix this?


  4. Nisha
    Nisha says:

    After creating the object filter, I am not able to see the members. The filter tab is not expanding. I noticed that I dont have authority for command strtcpsvr. I am not sure if that is the reason behind this ? If anyone is aware of this issue, please help me. I am trying all possible ways to bring the code from green screen to VS code. Any help is appreciated.

  5. Matt Shea
    Matt Shea says:

    Attempting to open source code in VS Code, nothing happens. Click, double-click, the code does not open in the editor.

  6. Gayan
    Gayan says:

    When try to -> connect to an IBM i
    it gives me below error. can anyone give me an answer for this

    ”Cannot activate the ‘Code for IBM i’ extension because it depends on an unknown ‘barrettotte.ibmi-languages’ extension.”

  7. Ramon Sandoval
    Ramon Sandoval says:

    Liam/Alan this is great! I’ve been watching Liam’s YouTube video on using VSC + Github and it is amazing.

    Alan, I met you when I was working at American First Finance, you were working with Jeff C.

    I’d love to continue learning from you and your updates to make use of newer technologies that interact with the iseries. To me using VSC + Github is way better, faster learning curve and easier than MDCMS and RDi.

    Ramon S.

  8. Frank
    Frank says:

    Each time I connect to our IBM i and open a src-pf (ccsid=37) I sooner or later see all my members as undefined.undefined. These members can not be opened. CPFA0A9: OJBECT NOT FOUND. I can’t get rid of this problem.

  9. Michael Wisolmerski
    Michael Wisolmerski says:

    Hi –

    I don’t know what happened to my last post, but I asked if CCSID 64K would be supported. Nearly all of out many source files are CCSID 65535.

    Mike W.

    • Alan Seiden
      Alan Seiden says:

      Mike, CCSID 65535 means you have to manually say what kind of encoding to use. You could specify a CCSID in the Code for i plugin settings. Could you try that? Maybe 37, unless you need to use another one?

      • Michael Wisolmerski
        Michael Wisolmerski says:

        Alan –

        When I try to open a source member, I get:
        CPD0085: Range of parameter DBFCCSID does not include 65535. CPF0006: Errors occurred in command.

      • Michael Wisolmerski
        Michael Wisolmerski says:

        Alan –
        I just tried to open a CCSID 37 source file and I got the same error – I don’t see a setting for CCSID – could you let me know where that is?

  10. Michael Wisolmerski
    Michael Wisolmerski says:

    Hi Liam –

    Our source files are all CCSID 64K – I think this is due to I18N requirements. Can Code for IBM i. be made to work CCSID 64K?


      • Michael Wisolmerski
        Michael Wisolmerski says:

        Hi Alan –

        They are all CCSID 64K – 65535 and there are MANY – changing them is not possible – and we have a couple at CCSID 37

        And nice to talk to you again – you and I talked several years ago about PHP – I was working for Mayors Jewelers.

        • Alan Seiden
          Alan Seiden says:

          Hi, Michael, look at configuring it here:

          Additional settings

          Source file CCSID
          The CCSID of source files on your system. You should only change this setting from *FILE if you have a source file that is 65535 – otherwise use *FILE. Note that this config is used to fetch all members.

  11. Dylan Hague
    Dylan Hague says:

    Been looking for something like this for quite some time! Will be watching this repo closely, cheers!

  12. Richard Nemerovsky
    Richard Nemerovsky says:

    Nice! We’ve been exploring possibly going the GitHub route with all of our RPGLE, etc. code and were planning on going the RDi route along with EGit. Any thoughts on how approach like that would work in relation to this? Thanks.


Leave a Reply

Want to join the discussion?
Feel free to contribute!

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.