Snap Together Software

A Programmer's Toybox for network apps

A toy box, a toolkit, a library of components you can take and bolt together, customise and create your own. This includes components for TCP/multicast clients and servers, backplanes, chassis, Dirac video encoding & decoding, Vorbis decoding, pygame & Tk based user interfaces and Tk, visualisation tools, presentation tools, games tools... A networked unix pipe for the 21st century - a way of making general concurrency easy to work with, and fun.

But what is it?

A framework providing the nuts and bolts for building components. A library of components built using that framework. Components are implemented at the lowest level as python generators, and communicate by message passing. Components are composed into systems in a manner similar to Unix pipelines, but with some twists that are relevent to modern computer systems rather than just file-like systems.


To enable programmers of all skill levels with playing with components in a networked environment. Network systems are naturally concurrent, and concurrency is often hard. Kamaelia is trying to make concurrency natural and easy to work with, because we are trying to solve some specific challenges regarding putting (some or all of) the BBC Archive online. Lego, K'Nex and building blocks are great metaphors for systems like unix pipelines that have made concurrency easy (in a constrained way) for 30 years.

Upcoming Events

  • Next IRC Meeting: Thursday 12th June 2008, 4pm UK Time
  • BBC Mashed - 21st/22nd June 2008, London

Current Status

Last updated: Nov 11, 2006, Michael Sparks
Axon - Core Concurrency framework- version 1.5.1 - overview of status
  • API Stable for generator components
  • Beta status API for Thread based components
  • Non-CPU-greedy capable (scheduler can sleep and be awoken by threads)
  • Production ready (>6 months on a running system)
Kamaelia - the toy box - version 0.5.0
  • Full coverage of core aims (introspection, network, graphics & codec capable, graphical systems composer, large examples)
  • API is subject to change (hence 0.5.0 status), but includes:
    • Network - beta production ready (TCP/UDP/Multicast clients/servers)
    • Graphics/GUI capabilities - Pygame, OpenGL, Tkinter (stable)
    • Protocols - HTTP, BitTorrent - beta status
    • Codec support - Dirac (encode/decode), Vorbis(decode), Speex(encode/decode), MP3 (decode - via pymedia)
    • PyMedia based support for some audio codecs & audio capture
    • Devices:
      • Alsa, DVB (digital TV broadcast)
    • Unix Shell outs
      • eg to call transcoding tools
  • Larger scale systems in the distribution
    • Kamaelia Macro (timeshift & transcode what's broadcast for viewing at a more convenient time)
    • P2P Whiteboard (supporting multiple pages, linked whiteboards, audio mixing and retransmission, etc)
    • Compose - a graphical composition tool for creating pipelines
    • Axon Shell - a specialised command line allowing the launch of components as well as programs
    • Axon Visualiser - a pygame based system for visualising what's going on inside a Kamaelia system (uses a physics model (based on a lava lamp(!) )for layout that we've had repeated comments looks fun/attractive :)
    • Show - a presentation tool
  • Examples for many major subsystems
  • Extensive Documentation (at minimum detailed module level docs - ala pydoc)
Ongoing Projects
Developer Console

Mailing lists

General discussion:


Subversion commits: (high traffic)


  • May 2008 - Project revamp - the project has continued under active development since the last news updates. Specifically a new iteration of the website is planned for release which should pull in more dynamic information more obviously. This is to coincide with a new release in June 2008, based on merging work currently sitting in Kamaelia branches.

  • April 2008 - Project Mailing Lists have moved to Google Groups. You can find the Kamaelia group here

  • November 2006 - Website Revamp
    The website is undergoing a revamp at present - mainly to be online edittable rather than just offline. This should start to have some positive effects :-)

  • October 2006 - Kamaelia in December's Linux Format
    Michael has written an article on Kamaelia for this month's Linux Format - on sale October 19th. It covers how to install and use the Whiteboard application as well as basics of how to write components when building systems. The article will appear on this website when the magazine goes off sale!

  • October 2006 - Kamaelia Mega Bundle 1.4 released!
    The Kamaelia Mega Bundle has been updated for Kamaelia 0.5 and Axon 1.5.1. It includes the key dependencies that we've tested the code with, specifically for components that make use of these external libraries. (Kamaelia is usable without these, but they are nice :-)

    Libraries included: Axon, Kamaelia, BitTorrent, dirac, Dirac (python bindings), Imaging, libao, libogg, libvorbis, pyao, pycrypto, pygame, pymedia, PyOpenGL, Pyrex, pySpeex, python-dvb3, speex, vorbissimple

  • October 2006 - Kamaelia 0.5.0 Released!

    Kamaelia 0.5.0 marks a major stepping point for the Kamaelia project. It means we officially have half the capabilities we see ourselves expecting to have when we hit version 1.0, and also marks the first release where the number of external contributors to the release outweighs developers from inside the BBC, meaning this release really does belong to the Google summer of code of code students who worked on it.

    Key highlights of this release:
    Bit Torrent support; Open GL support; Nascent seaside style webserver (sessions controllable by resumable components/coroutines), massively enhanced DVB support, collaborative whiteboarding with audio (via speex) supporting daisychaining of whiteboards (since whiteboards are servers & clients), and enhanced visual system composition (ability to compose arbitrary graphs now). All of these include examples, including an Open GL interface to bit torrent, a bit torrent based simple (non-robust yet) streaming system, and a "record for me" PVR that you give the channel, and programme names to and it figures out the rest.

  • October 2006 - Axon 1.5.1 Released!
    Highlights include:
    Useful changes for a number of threaded components in the Kamaelia 0.5.0 release. Synchronous boxes (size limited) are now supported by threaded components. Furthermore, synchronous boxes can now also pause themselves should the need arise.

  • September 2006 - Meet us at Euro OSCON!
  • Our project admins will be attending EuroOSCON in Brussels. Michael will be giving a presentation entitled "Timeshift Everything, Miss Nothing, Mashup Your PVR with Kamaelia" showing some of the fun things Kamaelia now enables you to do.


  • See COPYING for complete details, but as a guide: Kamaelia is released under the Mozilla trilicense scheme (MPL/GPL/LGPL). This essentially means that if you change any files released you must license them under the same terms, but if you merely use the files, you only have to pass on the files you use. We view inheritance from classes in Axon as usage since this is generally how the component classes are intended to be used. Alternatively licensing may also be granted if appropriate.


Kamaelia is an open source project originated from and guided by BBC Research. For more information browse the site or get in contact.

This is an ongoing community based development site. As a result the contents of this page is the opinions of the contributors of the pages involved not the organisations involved. Specificially, this page may contain personal views which are not the views of the BBC. (the site is powered by a wiki engine)

(C) Copyright 2008 Kamaelia Contributors, including the British Broadcasting Corporation, All Rights Reserved

This web site is powered by the same code created for the bicker manor project. For more details, contact Michael Sparks at BBC Research directly (cf contact)