The Virtual Card Read-Punch

Select a function. (A card stack must be loaded and parsed first, before executing.)


About This Project

The Virtual Card Read-Punch is meant to convey the joys of punch card processing to a modern audience. You may edit, produce and download a stack of virtual punch cards (PNG images of the respective cards), read a stack back in, and, should it represent source code for one of the supported runtimes, execute it. All processing is is done exclusively in the browser and no resources or data are uploaded to a server or transmitted otherwise.

Supported runtimes are for the time being Python, Perl, and JavaScript. (Some of the more traditional languages, like FORTRAN or COBOL should be supported in the future, as well.) Some special encodings and the type of runtime automatically selected depend on the chosen type of card. For modern languages, the source code is punched in a meaningful upper-case representation in order to conform to the limitations of traditional punch cards, but is recovered in its original form by the card reader. More traditional type of cards, however, are confined to the restrictions of the character sets used in traditional punch card processing. — Please refer to the respective notes provided in the punch section.

For a quick test, here’s a stack for an interactive game of Tic Tac Toe (ZIP-archive, 146 cards) written in Python 2. (And here’s another, smaller one, a simple Mandelbrot set renderer in Perl and in JS.) Simply go to the reader section, drop the downloaded ZIP-file onto the marked drop-zone and watch the cards being fed through the reader. Once the extracted text appears below, you’re ready to execute the program.

illustration of punch card data processing

Resources & Credits

The Virtual Card Read-Punch is based on the Virtual Keypunch and the Virtual Card Reader and cards should be mostly compatible. Third party resources used are the Skulpt in-browser runtime for Python, the Perl.js Microperl environment (here slightly adapted as “em-Perl”), JSZip, as well as the “FileSaver.js” utility by Eli Grey, which comes bundled with JSZip. Further, fonts provided by Google Fonts are utilized by the project.

Images representing the various functional sections are from IBM promotional material and reference manual for the IBM 1401, International Business Machines Corporation, 1959, 1960/62. (Mind that the character sets actually used for the punch cards are those of the IBM 029, which was introduced in 1964 for the IBM System/360 series, asking for a bit of artistic license, regarding the imagery.)

Code grid and punch codes of the IBM 029 key punch.
Code grid, punch codes and card-print encodings of the IBM 029 key punch, E’L character set.
(Image: IBM Field Engineering Maintenance Manual, 29 Card Punch; Apr. 1969; p. 4-39, annotations by me, N.L.)

GDPR Notice

No cookie or person related data is processed or stored at However, advertising may be embedded via Google Adsense (personalization option: off).
For Google settings and compliances, please refer to Google’s privacy statement.


card sample
Loading resources. Please stand by…



Drop a virtual card stack (zip or images) here or select them by the file dialog:


    Card Data:


    Nothing to see. An executable card stack must be loaded first.
    Cartoon by Peter v. Tresckow for IBM Germany, 1976
    Illustration: Peter v. Tresckow for IBM Germany, 1976.
    In: Wie erklären Sie jemand, der Sie fragt, wie ein Computer funktioniert, wie ein Computer funktioniert?

    Generate ZIP Archive

    Any remarks to be included in the associated README file?
    (Leave blank to omit.)

    (This may take a moment for bigger stacks.)

    Never to be seen.

    Make Reader Output Editable?

    I underestand that this is not in the true spirit of punch card programming. — However, make this editable anyway and allow me to rapidly edit and test run my code!