Skip to content


Subversion checkout URL

You can clone with
Download ZIP
A Windows Azure cloud services library for Common Lisp
Common Lisp
Branch: master
Failed to load latest commit information.
LICENSE.txt Initial version Experimental support Media Services
account.lisp Major refactoring. Add support for Management API.
acs.lisp Early support for dequeue
blobs.lisp Major refactoring. Add support for Management API.
cl-azure.asd Experimental support Media Services
datetime.lisp Major refactoring. Add support for Management API.
edm.lisp Major refactoring. Add support for Management API.
handlers.lisp Missing files .. oops
http.lisp Experimental support Media Services
manage.lisp Missing files .. oops
media.lisp Experimental support Media Services
package.lisp Experimental support Media Services
request.lisp Early, experimental support for Service Bus and ACS
servicebus.lisp Early support for dequeue
tables.lisp Fix for ASDF3 / cl-testgrid compatibility - removed ref to undeclared…
tests.lisp Missing files .. oops
util.lisp Major refactoring. Add support for Management API.
xml.lisp Fixed a problem with reading empty table fields


Access Microsoft Windows Azure cloud services from Common Lisp.


Windows Azure is Microsoft's cloud hosting platform. This project is an incomplete, proof-of-concept implementation of a Common Lisp library for accessing the various features including:

Blobs, tables and queues; Access Control Service (ACS); Service Bus brokered messsaging; Media Services.


Use Quicklisp to load cl-azure

> (ql:quickload "cl-azure")

You then need to specify your account details. One way to do this is to create a LISP file, say myaccount.lisp like this.

 (in-package #:cl-azure)

 (setf *storage-account* (list :account-name "YOUR_ACCOUNT_NAME"
            :account-key "YOUR_ACCOUNT_KEY"

From there you're ready to explore

 WA> (list-containers)
 ("$root" "azurerunme" "azurerunme-files" "certs" "drives" "dump" "old"
  "oldpackages" "packages" "printer" "public" "test" "wad-control-container")

 WA> (list-blobs "packages")
 ("AzureRunMe.cspkg" "AzureRunMe.cspkg.sun" "AzureRunMe.cspkg.xxxx"
 "AzureRunMe.cspkg.yyy" "" "RobBlackwell.cscfg" ""
 "" ""
 "" "dictionarybk" "" ""
 "" "" "robblackwell.bat" ""

 WA> (list-queues)
 ("foo" "wibble" "worker-queue")

Management API

If you want to use the Windows Azure Management API, then you'll need a pfx certificate.

You'll need to convert it to PEM format like this:

   % openssl pkcs12 -in your.pfx -out your.pfx.pem

Then you can set it up like this:

 (setf *subscription-id* "YOUR_SUBSCRIPTION_ID")

 (setf *management-certificate* (list
            :certificate "/Users/foo/YOUR.pfx.pem"
            :key "/users/foo/YOUR.pfx.pem"
            :pass-phrase "YOUR_PASSWORD"))

Then you can use it like this:

 WA> (list-hosted-services)
 ("azurerunme" "catalina" "claptrap")   

Service Bus

Experimental support for Service Bus Brokered Messaging. N.B. It seems like the relay features are still proprietary and therefore .NET / WCF only.

 WA > (setf *servicebus-credentials* (make-servicebus-credentials "namespace" "owner" "key"))
 WA > (setf (getf *servicebus-credentials* :token) (get-token)) 
 WA> (servicebus-send-message "test" "hello world")
 WA> (servicebus-read-and-delete-queue-message "test" )
 "hello world"

Media Services

Experimental support for Media Services.

CL-USER> (ql:quickload "cl-azure")
CL-USER> (setf cl-azure::*media-account* 
         (cl-azure:make-media-account "MY ACCOUNT"
    CL-USER> (cl-azure:get-media-processors)
    CL-USER> (cl-azure:get-media-assets)
    CL-USER> (cl-azure:get-media-jobs)


This code was the result of some Christmas holiday hacking (2010/2011) inspired by the Land of Lisp book, the recent availability of Quicklisp and Zach Beane's open source code for Amazon Web Services.

I hope it demonstrates that Windows Azure is an open, cross platform cloud storage system that isn't tied to Windows or .NET.

It certainly shows that Common Lisp is still suitable for modern application development.

It's helped me to understand the Windows Azure API mechanisms, but more than that, it turns out to be a useful debugging and experimentation tool.

I always get a buzz out of standing up in front of a bunch of C# developers and demo'ing it ;-)

Any comments, feedback, constructive criticism or code contributions welcome!

Rob Blackwell

January 2012

Something went wrong with that request. Please try again.