The QDL Programming Language

The QDL Programming Language (QDL is pronounced "quiddle") is a general purpose scripting language that is designed to work on aggregate objects. Specifically, it is an aggregate-oriented functional programming language with static rank polymorphism. It also includes the usual constructs for a language such as looping, conditionals, switch statements and encapsulation because frankly, you need them sometimes. To use QDL on a project is referred to as "quiddling".

One of the main ways of interacting with QDL is to use its workspace and issue commands interactively, allowing real time processing. The origin of QDL was as a notation to abstractly write algorithms in various languages before implementing them. It works admirably in this capacity with its workspace model and can be used as a very rapid prototyping system or just an "algorithmic calculator." Most people that dabble with it find it extremely useful and keep a copy running for all sorts of oddball things. True to its original purpose, many functions can be replaced with single (unicode) operators, potentially giving QDL a very sleek, terse appearance if desired.

It eventually found a home as the scripting language for OA4MP, NCSA's Open Authorization server, where it is heavily used, especially in the NCSA's CILogon service, and it is largely responsible for the customized identity management magic there. If you've ever logged in with CILogon, there is an excellent chance you've already run into QDL on the sly.


  • QDL Reference Manual THE reference manual. This is large and aims to be quite complete.
  • A basic tutorial to QDL A much smaller, gentler introduction to QDL. Suitable for a first foray.
  • QDL Configuration Reference Manual How to configure QDL's workspace.
  • General introduction to writing scripts with QDL QDL functions quite well as another scripting language (like bash) on your system and there are any number of cases where it works astonishingly better than other solutions.
  • QDL's ini file A user friendly way to create a stem. This format is intended to allow non-programmers to write configurations easily that can be used to bootstrap or configure systems.
  • Writing your own extensions to QDL If you really want to extend QDL using the Java interface, this is where to look. Note that since you can write modules in QDL, this would be for something much more exotic. Unless you have an articulated need for this, you probably don't need it.
  • Running QDL Scripts on your server It is possible to use QDL to execute scripts on a server (such as OA4MP). This describes the syntax that is needed to specify scripts and blocks of code.
  • Old module documentation Modules have gotten an overhaul but the old machinery still works. The documentation has been moved fom the main refernce to here if you need it. Generally you should use the module machinery that is current. (So load, import, use etc., not module_load, module_import, etc.)

User Interfaces to QDL

  • QDL Workspace Reference Manual The basic command line way to quiddle.
  • How to use the ISO 6429 terminal support. Java has terrible command line support. This adds an agnostic way to get basic command line functionality (such as cursor keys, history, special characters) in a purely Java setting. There are a few oddities such as clipboard support so do read this.
  • Reference Manual for the Swing GUI A Swing-based GUI for quiddling. It includes syntax highlighting, a wide array of use shortcuts (such as ctrl+i to paste input form, ctrl+x to copy a line or selected area), special characters and a bevy of other things.

Standard Extensions

These extensions are the building blocks for applications. For instance, the database extension is not a full-featured client, but has a small handful of commands and a framework so you can write your database access easily. In Java, this would be the equivalent of the JDBC or in Python an adapter.

Javadoc for QDL