TM Your flash drive is now a web 2.0 server.

Why airWRX?
How it WRX
Prototype Guide
SVG Terminal
Network Improv
Email Us

The SVG Terminal

1 March 2006: Second release, with text highlighting!
Follow the Web 2.5 Blog to stay informed.

The SVG Terminal is a javascript module for Firefox 1.5 that enables apps to deliver rich views on network screens and fine-grained interactivity with users. It directs all user input from the browser to the app, which sends updates as SVG fragments to the browser. For more on how it works, see the draft SVGT/0.2 protocol spec.

It's designed for apps running on a mobile device which need to present a sophisticated UI on nearby screens via wi-fi, and apps which need to drive multiple network screens with graphical scenes in near-real-time.

The SVG Terminal package includes a simple demonstration app, and source licensed under the GPL. (Contact us for alternative licensing terms.) The demo app has only been tested on Windows to date, but should compile on Linux & MacOS X with minor changes. The javascript code requires Firefox 1.5. (download Firefox)

Getting started: download and unpack the .zip file, then start svgtermdemo.exe. Open a Firefox window, and drag-drop svgterm.xml onto it. The browser will ask you to authorize this file. The Firefox SVG engine currently eats memory slowly but steadily, so you may need to restart Firefox occasionally. When working with Firefox SVG a lot, we suggest creating a separate Firefox profile and launching it with MOZ_NO_REMOTE=1.

What's next: we're working on text wrapping, text highlighting, and flowing text around inset objects. We're also plotting to allow OLE objects onto SVG Terminal views, so apps can surface non-SVG content as neccesary.

The SVG Terminal fits under the AJAX (asynchronous javascript and XML) umbrella, but differs from most AJAX code in a few ways: The UI is described entirely in SVG, instead of HTML. Almost no input processing is done by the browser. The browser maintains a connection to the server, rather than performing discrete XML-HTTP transactions.

SVG Scene/Canvas Library

February 2006 update: The SVG Scene Lib is no longer being maintained outside of airWRX, and now uses the SVG Terminal protocol to specify drawing instead of rendering via cairo. Our final cairo-based release remains available on this page for the time being.

Our SVG Scene toolkit enables applications to create interactive views by constructing and editing an SVG content model, or scene (also known as a canvas). The scene may be presented simultaneously in multiple windows, possibly on separate clients. The scene may be manipulated by multiple processes, enabling compound documents. The SVG Scene library supports ownership of content model elements by widgets of high-level application frameworks, but is not tied in to such frameworks. Rendering of the scene is done via cairo and Pango, which in turn support diverse environments, e.g. Windows, MacOS, Postscript, Xlib, etc.

airWRX is based on this library, and offers a sophisticated demo of it. The library comes with example code, but it's simplistic for the sake of clarity.

The current release is a prototype that requires Windows 2000 or later. It uses cairo for drawing and Win32 GDI for text and images. Full source code is included, licensed under GNU LGPL. Feedback requested!


Provide a multi-screen drawing toolkit for applications and frameworks
Provide functionality & performance suited to drawing full screen/page
Enable multi-client/collaborative applications
Enable remote-screen applications on mobile platforms
Enable presentation of compound documents

Key Features

SVG object model defines a scene
Model methods for insert/delete/get/set/z-move
Model method to identify SVG object & group at xy, i.e. hit-testing
Model methods for text editing UI
Out-of-process model access, i.e. for compound documents
Multiple clients/viewers of a scene on host or network
Client-specific model objects, and properties, e.g. text selection
Rendering via cairo; any cairo backend
Text layout via Pango
Incremental rendering, i.e. limit drawing to affected area
Out-of-band regions (non-SVG), e.g. video/3D
Higher-level widgets/applets may tag model objects
Lightweight; less than 4000 lines of C++
Supports diverse environments C++/.NET/Python/Java/Cocoa


See svgscene.h for an overview of the API, and svgscene-example.cpp for a simple example application. An executable version of the example app is included in the download.


23 Jun 05 - incremental rendering
15 Jun 05 - renders via cairo (GDI for text); add z-move, shapes, paths
01 Jun 05 - prototype release; renders via Win32 GDI


text layout via pango
deepen svg support
out-of-band regions
wrappers for languages
port to Linux, etc.