SiteFusion is a server-based development environment. Applications are written in pure object-oriented PHP and work through a thin XUL client. SiteFusion applications look and behave like native system applications but run on a server generating JavaScript commands.


02/04/15 - Release server 6.4.2 and Client 3.0.2

We've just released version 6.4.2 of the SiteFusion server and version 3.0.2 of the client. The most major change in this revision is the removal of all prototype references from the server code and removing the prototype library from the client. The server is backwards compatible with the previous client but it is recommended to upgrade to the latest client as soon as possible.

Below you'll find the most important changes, for the full set of changes see our GitHub page.

Server changes:

  • Added serverside support for custom error messages on login (Only supported in clients with version 3.0.2 and up)
  • Added URLDownloader which is the new recommended way for downloading large files from the server
  • Added XULHTMLAudio (Only supported in clients with version 3.0.2 and up)
  • Added sizemodechanged, activate and deactivate events to XULBasicWindow
  • Added more dragging and dropping based functionality to Node
  • Added crypto functions to the ClientFileService
  • Added event handler closures
  • Added support for PHP 5.5
  • Removed all prototype references in order to support client 3.0.2 which removes prototype
  • Removed the AppleScriptService and replaced it with TerminalCommandService
  • Deprecated venkman, vlcplayer and sfimagelib

Client changes:

  • Added support for custom login messages
  • Upgraded XULRunner to version 32
  • Removed the prototype library

As usual the downloads can be found at the download page.

10/03/14 - Release server 6.0.2 and Client 3.0.0

Just recently, we released version 6 of the the SiteFusion server and version 3 of the client. Because of a new devision-of-labour between the client and possible client brandings, old client-brandings will no longer work, and new client-brandings carry version numbers 2.0 and up.

Downloads at the download page.

New  features:

  • Server: Completely revamped database backend for both the daemon and the frontend. SiteFusion now uses PDO and new installs will default to sqlite. This simplifies the installation process. PDO-mysql is also supported out-of-the-box.
  • The client now offers various features previously offered by client-brandings. This makes the bare client a lot more useable.
  • Rewrite of the server frontend. This should lead to more standardised error reporting  towards to client.
  • The clients now use Xulrunner 25
  • Added a mechanism to prevent error cascades on the client on server-side syntax error.
  • XULCustomTree: Added CustomTree itemClick, itemDoubleClick and itemContextClick events.
  • XULCustomTree: Added the ensureRowIsVisible
  • Implemented 'failed' event for FileDownloader class.
  • ClientBuildKit and client updater: lots of work done here to once again match Mozilla's update system. XULRunners are removed from the buildkit and are replaced by download links.

Bug fixes:

  • CustomTree: Fixed bug that would allow start dragging from no selection.

There's a known bug on the OSX client that will disallow a client to startup after a restart prompt (e.g. after installing an extension). This will be fixed in an upcoming client release.

28/05/13 - Release server 5.5.1

A minor release with a few bugfixes, additions and compatibility with PHP 5.4. Downloads at the download page.

New features:

  • TreeDataSet now allows a custom sorting method per column, through the TreeDataSet::setColumnSortType() method.
  • Node class now supports behaviors, through the Behavior base class and several new behavior related methods on Node. Contributed by extrem2002.
  • Added Wheel event to default client events to detect mouse wheel events on nodes.
  • Added -c option to sfdatabase install script to allow automated installs with values taken from webfrontend.conf.
  • Added unset support for Node context, popup and tooltip settings.

Bug fixes:

  • Fixed int overflow bug in FileDownloader javascript.
  • Fixed bug where lastModifyTimestamp was not correctly set on ClientBaseFile. Credit extrem2002.
  • Fixed inappropriate casting of new value in XULCustomTree updateCell().
  • Fixed bug where daemon would not set restart parameters when receiving SIGHUP. Credit k.joe.
  • Fixed bug in TreeDataSet where deleting rows inside collapsed containers would result in the wrong rows being deleted.
  • Fixed incompatibility with XULRunner 20+ in fileHandling.js. Credit extrem2002.
  • Fixed variable name error in scripting.js. Credit KvanSteijn.

06/05/13 - Move to GitHub

The SiteFusion source code is from now on hosted on GitHub, at We've been on SourceForge for several years now, but the time has come to move on. There are two separate Git repositories now, server and client-buildkit. Downloads are from now on hosted on this website. The SourceForge project and repository will be removed soon to avoid confusion, so please don't rely on its continued service.

03/01/13 - Release 5.5.0 and Client 2.7.1

First off, Happy new year! Now on to the task at hand, the new release. We've made a lot of cool new things to play with such as the client-side validation, autocomplete for the XULTextBox
and the new XULRunner version 17.

With the updating of the server and client, the drag&drop functionality for the XULCustomTree was broken for a short period. This has been fixed and can be used normally again. We've also fixed an error in sfdatabase install script where readline() would fail on systems without the readline extension.

There were also alot of speed improvements as well as some updates in for the controls such as:

  • Scroll event is catchable within the XULScrollBox by default.
  • Radio groups now have a clearSelection() method to deselect everything in the group.
  • For XULMenuList we added the possibility to select an item with the selectItem() method before the control has been attached.

These changes can be found in the changelog, as well as in the API Documentation. As the final remark, if you find anything in the updates the doesn't work as planned please let us know on the forums.

New features:

  • System Type Filters are now available for the XULFilePicker
  • Numeric XULTextBoxes can now be made unsigned via a method instead of the default min/max settings
  • XULMenuList can now manually select item before being attached by using selectItem()
  • XULRadioGroup has a new method called clearSelection() which clears the group off a selection (useful for required fields in form-based application)
  • XULTextBox now has clientside validation and autocomplete options
  • XULScrollBox now has the scroll event as extra event to handle
  • Updated the Memory view to show more detailed data
  • Added the openUriWithNativeProtocolHandler and openFileWithNativeProtocolHandler enabling opening files with local software

Bug fixes:

  • ident is now unique (somewhat like a Session Identifier)
  • Fixed a bug where yielding a XULMenuPopup would result in a crash if it didn't have any childnodes
  • Updated the layout editor
  • Fixed an error where the install script would die if the server doesn't have the readline extension
  • Fixed the codemirror extension
  • Fixed node drag&drop
  • Updated the VLC component
  • Updated the flash component
  • Fixed the cursor bug where starting with the ErrorConsole code-wise would result in the cursor not changing back after loading state was reached.
  • Fixed a small bug in the selection handling for the XULEditor
  • Fixed keyboard control for XULRichList
  • Fixed the preventClose() method for the rootWindow

Server is ready to download here and Client can be downloaded here.

11/05/12 - Upcoming Client 2.6.2 Release

We've found some unfortunate bugs in the recently released 2.6.0 client, causing the webgl login screen not to work in some cases, introducing an unintended never-invalidated cache for SiteFusion base files and also rendering drag&drop broken.

In order to fix this, we will be releasing an updated client combined with a minor server update very soon. For now, you can use the existing 2.6.0 client packages and use the build-in updater and addon-manager to get the most recent version for both the base-client and the client branding.

Furthermore, we've added support for incremental updates in the hosted client-update system. This means very small incremental updates for relatively small updates like this one.

07/05/12 - Client 2.6.0 Release

We've just released a brand new client based on Xulrunner / Gecko 12.0 (changelog). As we skipped 6 'major' Firefox updates, this client update will bring a serious speed increase to your SiteFusion application, especially larger ones with lots of nodes.

Codewise, we didn't change anything. We however did include a slightly updated version of the SiteFusion icon in the various, platform specific icon files. We also fixed the client build-kit to reflect changes made by Mozilla.

Futhermore, we also updated the install mechanism for all platforms, utilizing the new /distribution/extensions install mechanism provided by mozilla for so called 'branded' installs of Firefox/Gecko. This makes sure a client always has the correct branding, even in corporate environments with limitation on roaming profiles and such.

Finally, we spiced up the branding using webgl technology and included a very nice shader made by Inigo Quilez (

In other news: Stay tuned for a SiteFusion extension containing the recently introduced source editor FireFox code module. Since Mozilla decided not to ship this module in the default Xulrunner build, we decided to create a SiteFusion extension containing the FireFox code this specific module relies upon. Since Mozilla and IBM are actively contributing to it's codebase, you can expect a very speedy, quirkless code-editing experience.

09/09/11 - Client 2.5.0 Release

We're releasing a brand new client that's build on the FireFox / Gecko / Xulrunner 6.0.2 sources. As you may have noticed, we skipped the FF 5.0 release as it didn't differ very much from the FF4 release we used for client 2.0.1. You can find the changelogs for FF 5.0 and FF 6.0 here and here.

Note: This client ONLY works and server release 5.4 (and higher), since it's dependant on recent changes in the server side of SiteFusion, that fixes problems in recent (FF4 and greater) JS-JägerMonkey builds.

New features (apart from the updated runtime):
  • A new OSX extension installer mechanism that fixes a glitch that causes OSX Lion to not install the branding extension on install time.
  • The windows group icon has been fixed in the SiteFusion client stub.
  • The buildscript has been updated for recent packaging changes (onmi.jar et al) in xulrunner.
  • A new, fancy Windows Installer theme for the client installation process :).

06/07/11 - Release 5.4.0

Today we've released a minor update to the SiteFusion server that adds a few exciting new features and fixes a few bugs as well. We decided not to release a new client (which would have been based on the Firefox 5.0 release) because there doesn't seem to be many changes in the xulrunner base. We did however fix a server side bug which will require at least server version 5.4 when connecting with a client based on gecko > 2.0 (all future clients).

New features:

  • Added XULHTMLVideo element for displaying ogg/VP8 content in SF apps.
  • Added XULHTMLEmbed element to enable the use of plugins.
  • Added XULFlash: It's now possible to use flash inside your sitefusion application!
  • Added XULFlashProxy: A variation of the XULFlash class that enables you to bypass certain flash security restrictions for local (and chrome://) content.
  • Added PrefService to be able to asynchronously store and retrieve client preferences in a SiteFusion-event fashion.
  • Added transitiond event for use with CSS animations.
  • Updated the codemirror component for v2 of codemirror extension.
  • Added new webfrontend misc folder in order to host various non-code components for use in SiteFusion.


  • Fixed a bug in XULBrowser causing it to not store it's hostWindow element client-side
  • Added a little timer hack to fix a tree-collumn-mirroring bug that occurs on recent clients
  • Fixed bug where empty arguments in ClientFileService::executeFile() would result in empty string argument.
  • Fixed a JS strict issue with restricted identifiers in a few of the sitefusion js files. Future gecko > 2.0 SiteFusion clients will require this!

03/07/11 - New tutorial: Client-side file handling

A brand new tutorial on the intricate details of client-side file handling. Covers reading from and writing to client-side files and directories, launching executables and monitoring files for changes, and using the filepicker dialog.

10/05/11 - Release 5.3.0 and Client 2.0.1

It's been a while since the last update, but we're back with a big one. Following Mozilla's development of the Gecko runtime, we've integrated the new 2.0 version into the SiteFusion client. Since Mozilla removed the nsIExtensionManager from their sourcetree, a major rewrite of both server and client side code had to be conducted in order to support the new, asynchronous nsiAddonManager code. Server 5.3.0 supports both the old 1.* clients (starting with 1.2.1) and the new 2.0 clients. The extensionInfo displayed by SiteFusion Admin (and similarly present in ApplicationProcess::$ExtensionInfo) reflects the information that's made available by either the extensionManager or the AddonManager.

Along with these changes, we also released a new branding, that installs itself in an unpacked manner in the profiles directory, allowing you to overwrite the default SiteFusion icon with a branding extension.

For a complete list of new possibilities on the new gecko platform (Aero glass anyone?), please refer to

For the updaters among us: don't forget to update your webfrontend and daemon configuration files according to the new template!

New features:
  • Better error/warning reporting for XULEditor classes
  • Added configuration option 'databaseName' to allow a custom database name for SiteFusion, updated example configuration files. Also updated database installation script to incorporate this change. Default value is still 'sitefusion'.
  • Bug fixed where daemon would crash if the database connection was broken. Now retries default 5 times (option "databaseFailureRetries") with 1000 ms intervals (option "databaseFailureRetryInterval").
  • Partial implementation of database connection failover in lib/, mainly to allow restarting the mysql daemon while SiteFusion is still running.
  • Added id attribute for editor spans
  • Added yielding of XULMenuList editable inputfield, value accessible through XULMenuList::$inputField. Credits to Francesco Danti.
  • Added missing extra1 and extra2 buttons to XULDialog
  • The daemon now allows ChangeIdentity() to be called after process launch, to allow setuid'ing to any user at the application or service level if the daemon is configured to run as root.
  • Added copyToClipboard method on application
  • Added extended XULFilePicker filter support and method for disabling dialog buttons.
  • Added XULFileSystemImage::$removeAfterTransfer to remove the source file after transfer, defaults to FALSE.
  • Support for the window resize event.
  • Support for icons on the linux platform, stored either in a branding extension or the client itself.
  • Allowed using non-tab elements inside a tab-structure, allowing the use of custom elements such as the XULArrowScrollBox around the tabs elements.
  • The XULTabBox now yields its tabs and panels correctly.
  • Webfrontend now passes serverHost, serverPath and secure to ApplicationProcess.
  • Added $Application->parseImageURL() method to easily create URLs to images stored inside SiteFusion application.
  • Added the default display of client version to the main SiteFusion Admin tree.
  • Added a default icon for the sitefusion-startup window that's displayed before loading the login screen.
  • Fixed listbox selectItem()
  • Fixed bug in updateRow() (XULCustomTree)
  • Fixed browserHistory XBL bug
  • Removed AssertSelf() code from components
  • Removed old nsIExtensionManager code
  • Fixed CodeMirror XULBrowser Bug
  • Fixed system sleep notification
  • Fixed JavaScript Node class disabled() function to use removeAttribute()
  • Added try catch to XULFileSystemImage::transferEnd() remove statement
  • Workaround for a mozilla bug in nsIBinaryInputStream.available() where files bigger than roughly 2.5 GB would cause errors in this call. Now using file.fileSize to determine file size

01/10/10 - New extension: CKEditor

This extension allows directed embedding of CKEditor components in SiteFusion applications. See the how-to page at OracolTech and the forum thread for more info. XPI file and separate serverside component files (place those in your 'components' directory on the server) are available for download at the Extensions repository. Contributed by Francesco Danti.

Little update: A newer version is now available !

09/08/10 - Release 5.2.3

It's been a while since the last release, and we've been stalling a few adjustments that have been available through SVN for a while. Downloads here. This server release adds a number of new features, most notably file drag and drop, taskbar/growl notifications and SVG image support.
Client 1.2.0
Client 1.2.1
Client 1.2.2
Client 1.2.3

The server release as planned breaks compatibility with clients 1.2.0 and below. The client release does not add new features but only removes some legacy code and updates to XULRunner, corresponding to FireFox 3.6.8. See the compatibility map on the right for more details.

Note: the default behavior of XULChildWindow concerning centerscreen positioning has changed; centerscreen is now off by default.

New features:
  • Added venkman and codemirror server side components
  • Update for SFImageLib XPI
  • Added AlertNotification class for taskbar/growl type alert notifications.
  • Added AppleScriptService for executing applescript on MacOSX clients.
  • Added workaround for AlertNotification Growl support on Mac.
  • Added wakeup notification.
  • Added after_wake message handler and after_wake message setter on Application.
  • Added support of file dropping through Node::setDroppable() with the flavors 'text/x-moz-url' and 'application/x-moz-file'.
  • Added file dropping to XULCustomTree, set allow through TreeDataSet::allowFileDrop(), fires 'fileDropped' event on drop. Also allows dropping in empty tree now (targetRow = NULL) however this seems to work only once for every tree.
  • File drops now result in ClientFile and ClientDirectory objects on Nodes and XULCustomTree
  • Added XULImageSvg class for displaying SVG images (credit to Francesco Danti)
  • Updated XULRunners to
  • Fixed bug where XULMenuItem::selectItem() would fail when called with a string value in a menulist containing one or more items without a value set.
  • Added sanity check for SFImageLib on older OSX systems.
  • Fixed bug in XULCustomTree where sorted columns arrows point wrong and not taking XULSplitters into account in tree cols.
  • Fixed documentation of ClientDirectory and ClientFile, several wrong first parameters removed.
  • Fixed registered check for XULSound.
  • Default setting for XULChildWindow is now NOT centerscreen.
  • Bugfixes for XULRichTextEditor.
  • Fixed disabling of RichTextEditor.
  • Fixed crash when interrupting reading of stream from XULDirectImage.
  • Changed parent class of XULTimePicker to Node.
  • Fixed XULEditor and XULRichTextEditor init bug.
  • Fixed XULLayoutEditor documentState bug.
  • Fixed system wake handler to alert only once.
  • Fixed error in Node functions width, height and flex (javascript) where type casting to integer was done wrong in some cases (credit to Francesco Danti).
  • Fixes in editor classes to prevent errors at premature shutdown during construction.
  • Removed legacy 5.2.0 server compatibility code.
  • Removed 1.2.0 client legacy compatibility code.

02/08/10 - Update to examples

The examples section has been updated with a new version of the Advanced TabBox and the new Standard App Menu example, with a class that enables efficient menu bar construction and management.

29/06/10 - Examples section overhauled

Our Examples section is now a little more pleasing to the eye and includes a long overdue new example demonstrating the construction of a new Tab Box class, adding features to the original one. Also new are descriptions and screenshots of several proprietary applications built with SiteFusion.

02/06/10 - CodeMirror extension added

The CodeMirror extension for SiteFusion is now available through the Extensions repository. This extension allows you to integrate a fully fledged code editor with syntax highlighting for multiple languages and find & replace into your application. We're already using it in our CMS WebPerfect, and it works like a charm. Credits to original author Marijn Haverbeke and other contributors.

Note that the serverside component necessary to operate the extension is only available through subversion for now, it will be included in the next server release.

27/04/10 - Release 5.2.2 and client 1.2.2

The latest client release was available as an update through our new updater service for a while, but we waited for the new server package to be completed before making the new full installers. This release also premiers our new client build kit, allowing you to customize the client in an SDK environment, automatically build base clients for all platforms, and brand them with custom vendor and product names. For more information see the README file in the buildkit package. The server release contains many bugfixes and new features, most prominently the ClientFileService class allowing object-oriented access to the client filesystem in a manner reminiscent of the Mozilla nsIFile interface. Downloads here. Full changelog below:

New features:
  • Added the pass-through of client specific details to the daemon process
  • Added AppInfo information Window to SiteFusion Admin
  • Finished XULSound implementation, allowing custom and system sound playback
  • Added progress information to FileDownloader through the events started, cycle, finished and cancelled. FileDownloader now also automatically overwrites existing files and cleans up cancelled or failed downloads.
  • XULSplitter now has a dynamic constructor in accordance with its new heritage
  • Added ClientFileService, ClientFile and ClientDirectory classes
  • Addition of FileFromStringDownloader and FileToStringUploader classes
  • Addition of FileFromStreamDownloader and FileToStreamUploader classes
  • Changed constructor of FileUploader and changed setDestination to setPaths to correspond with FileDownloader logic
  • Replaced old client trunk structure for new build, brand and clear commands and separate client parts
  • Added the ability to set properties for rows, cells and columns in a XULCustomTree through the methods TreeDataSet::setColumnProperties(), TreeDataItem::setRowProperties() and TreeDataItem::setCellProperties()
  • Added several textbox attributes as methods
  • Fixed PromptService::confirmEx() function and added mozilla promptservice constants
  • Fixed obsolete debug message in Editor
  • Fixed seltype() bug in tree implementation
  • Removed obsolete helper file command.js
  • Fixed incompatibility with PHP 5.2.10 stricter policy for function declarations
  • Fixed bug where daemon wrapper would not start from paths containing spaces
  • Fixed bug where failing network connections would cause uncaught exceptions in comm instead of retrying until network becomes reachable again
  • Added return after retry timeout setting
  • Fixed crash on opening app info window for 1.2.0 clients
  • Separation of legacy code for 1.2.0 clients, will be removed in 5.2.3 release
  • Replaced linux startup script with stub executable
  • Fixed linux updater problem where updates are downloaded but then discarded instead of applied by applying updates before restart
  • Fixed JavaScript DragObserver to function in prototype class system
  • Fixed bug in ClientFileService::getDirSeparator()
  • Fixed bug in ClientFileService where prematurely removed FileDownloaders and FileUploaders would cause errors on transfer finish
  • Bugfix for XULDatePicker yielding
  • Bugfix for ClientDirectory::appendDirectory() and ClientDirectory::appendFile()
  • Fixed padding and margin functions on Node, now only accept pixel values (integer)
  • Fixed bug in XULCustomTree where adding a row inside a closed container in a sparse tree would cause a JavaScript error
  • Fixed regression in XULDatePicker control

29/03/10 - Extension Repository is somewhat of a fact

We now have what we'd like to call a very basic extension repository! Here we'll be hosting SiteFusion client extensions which allow you to add any kind of functionality to the client and operate it from the server. Eventually we'll implement direct usage of extensions from the repository, but for now this will have to do.

28/03/10 - on Twitter!

Following web 2.0 trends, we'll now be using twitter to inform SiteFusion users about the latest developments. Follow us at

19/03/10 - New tutorial on Trees and XULCustomTree

This quite extensive topic is now covered in the tutorial Trees and XULCustomTree. It discusses the construction and use of element trees and complex trees based on the XULCustomTree class, including images, checkboxes and progressmeters, editing, sorting and drag & drop.

16/03/10 - Two new tutorials

One on Menus and Popups, and one on the elusive subject of Services.

15/03/10 - Release 5.2.1 and client 1.2.1

Downloads here. It's a fresh new release, the focus here was on increasing stability and adding features in the area of extension management in the client. It is now possible to silently push (binary or scripted) extensions to the client from the server, making it possible to effectively transform the client into anything an application might require, without bothering the end user with installation procedures. Also, we've now structured our version management, which means that this release is the first from which users will be able to update to any future release. Finally, we've separated the branding and the core of the client, making the branding an extension. This enables you to simply adapt our default branding to your liking, or write a new one. The client is now supplied as an installer (MSI for Windows, PKG for Mac OS X) which includes the default branding. Since extensions can update independently from the core client, you can now have the core client update through our central update dispatch, while having your branding (and any other extensions) update through your own servers. We'll also be starting an extension repository soon, eventually allowing extensions to be installed directly from there. Note that server 5.2.1 is backward compatible with client 1.2.0, but client 1.2.1 is not backward compatible with server 5.2.0.

New features:
  • Added BranchNode::getDescendants() method, allows CSS-selector-like recursive collection of nodes with certain properties and classes
  • Added XULRichTextEditor
  • Added Node::mousethrough(), to allow mouse events to pass through nodes.
  • Added implementation of Event Groups through the Application and Service methods joinEventGroup(), partEventGroup() and getEventGroups(). Apps and services join their application group name as an event group by default.
  • Added immediate shutdown by double ctrl-C in the master daemon
  • Added XULSound class for sound playback
  • Added observer for application shutdown to enable the application the end nicely on the server side when the extension manager does a shutdown or restart.
  • Added TreeDataRow::setImage() to set an image for any kind of tree cell type in a XULCustomTree
  • Extended menu in SiteFusion Admin
  • Added secure https and server hostname detection
  • Added XULBasicWindow::fullScreen() method for switching fullscreen mode
  • Added Extension Policies, applications can now force installation or enabling/disabling of extensions in the client through RequireExtension() and DisableExtension().
  • Updated login process to use login objects, webfrontend and daemon are still backward compatible with 1.2.0 clients.
  • Added ApplicationProcess::$AppInfo, ApplicationProcess::$PlatformInfo, ApplicationProcess::$ExtensionInfo and ApplicationProcess::$CommandLineArgs info arrays.
  • Added optional alternate filename for RequireExtension
  • Fixed bug where user inactivity would cause a timeout because revcomm connections were not counted as keepalives
  • Added support for XULTabpanel based KeySets. XULKeySets that are children of inactive tabpanels will auto-toggle to disabled, allowing only the active tabpanel-keysets to fire command events.
  • Fixed regression in tab element
  • Fixed bug where a XULCustomTree in a modal dialog would not register its view on the tree element
  • Fixed bug where timeouts would not function for trees inside modal dialogs
  • Fixed several problems with Services and global events
  • Fixed global event overload read bug
  • Fixed bug where separators would cause errors in XULCustomTree
  • Several bugfixes in XULFileSystemImage, XULCodeEditor, XULLayoutEditor
  • Added event pipe socketpairs for apps and services to fix problem with asynchrony and crashing during global event overflows
  • Fixed possible problem in comm.js regarding comm service continuity
  • Fixed bug where autodisable XULKeySets on tab panel switch would fail due to tab and tabpanel adding asynchrony
  • Fixed heritage of XULSplitter to enable it to contain child elements (thanks to Francesco for pointing this out)
  • Fixed exceptions thrown in XULFileSystemImage
  • Fixed bug in webfrontend filestream.php where rapid creation and destruction of filestreaming nodes would cause memory leaks and performance issues.
  • Fixed a bug in XULCustomTree where successive invalidateTable() calls would fail with trees in windows other than the root window.
  • Updated the documentation of XULPrintBox to refer to the correct content() method.
  • Fixed daemon database updating of process information to be done no more than once per two seconds instead of updating on every comm/revcomm/file command
  • Fixed broken code edtior and simplified paste handler
  • Fixed crashes on uncaught socket_select exceptions
  • Fixed pasting bug in XULCodeEditor
  • Fixed hanging mouse cursor bug
  • Insulated javascript child add and remove functions in try catch statements to handle mysterious exceptions.
  • Fixed error reporting for errors in the global scope or in authorizeLogin or getApplication functions

21/01/10 - Updated Installation Guide

The installation guide was a bit cumbersome and not entirely up to date on the newest release details, so it has been extended. Now also including a troubleshooting section.

07/01/10 - Release 5.2.0 and client 1.2.0, and a happy new year!

It seems hard to keep releasing the small increments, so here again is a major update. Downloads here. Both server and client have been substantially extended. The changes include:
  • Added Zlib compression for both server to client and client to server traffic, improving performance especially over slower network connections.
  • Included the Extension Manager, allowing easy installation of clientside extensions and plugins (accessible through Application::openExtensions()).
  • Included the Error Console (accessible through Application::openErrorConsole()), which now reports both PHP and JavaScript errors. No need to run the daemon in foreground, all errors are collectively managed and displayed including stack trace and file/line references.
  • Included the Updater (accessible through Application::checkForUpdates()). Settings (such as URL's to check, intervals etc.) can be changed in the defaults/preferences/prefs.js file.
  • Reworked event system defaulting to non-blocking events allowing smoother user interaction while still keeping server and client in sync. Only window 'initialized' and 'close' events are now blocking by default. Added Node::setEventBlocking( (string) $event, (bool) $blocking ) to set blocking mode per event.
  • Added XULCodeEditor class, a code editor with line numbering.
  • Included sys/console to allow direct message posting to the Error Console.
  • Resolved all known character-set issues.
  • Included new XULRunner 1.9.2b5
  • Reworked webfrontend files and client error handling to allow for greater diagnosticity.
  • Fixed issues with buggy bindings of menulist element.
  • Fixed issues where having the FileDownloader class send a big file to the client would crash the application.
  • Added XULDialogHeader, XULStatusbar, XULStatusbarPanel, XULRichListBox and XULRichListItem, XULPrefWindow and XULPrefPane classes.
  • Fixed buggy daemon shutdown/restart procedures.
  • Added 'Open Error Console' checkbox to the error alert prompt.
  • Added logging of all errors in all process types. Application errors are only logged when the daemon is running with the debug flag.
  • Fixed many minor bugs.
We also added the serverside parts of the components DOM Inspector, SiteFusion Image Library and VLCPlayer. The clientside components, installable through the Extension Manager, are available here (if somehow the download ends up being called .zip, rename to .xpi):
  • DOM Inspector - Allows deep inspection of the DOM tree and its JavaScript object representation.
  • SiteFusion Image Library - Allows client-side image resizing (will include more image manipulation features in the future)
  • VLC Player - Allows playing streaming and local video and audio content in your applications (we're working on the platform independent version, MacOS X is still bugging us. Download available soon).

18/11/09 - New tutorial, and new release coming up

Tutorial number five on Windows and Dialogs is now available. Also, we'll be releasing a new version of the server package soon, containing more bugfixes and examples.

02/10/09 - Release 5.1.0 and client 1.1.0!

We decided to skip 5.0.6 and work on toward stabilizing SiteFusion and implementing a lot of the features that we intended to implement further down the road. The first open-source releases contained a lot of freshly rewritten parts. This is the result of the decision to drop compatibility on some points between the proprietary version of SiteFusion and the open-source one. Because of this fork, we could implement some changes that were previously stalled. The result however is that the first open-source release was not as thoroughly tested as its predecessor. Now we've had enough time to test everything, and we smoothed the wrinkles. Mind that the old client release is no longer compatible with this server release! This won't happen often, but in this case it was necessary. Downloads here. The changes include:

  • Character set problems are now resolved. Server and client now use fully compliant UTF8
  • Automatically set and hide any of the five input boxes through prefs.js. If all five are set, the client logs in automatically
  • New window opening strategy opens the main window without flickering by setting Application::$centerscreen, Application::$width and Application::$height as part of your application class definion.
  • ClientComponent substrate added to hook binary client extensions in. This makes the XUL/XPCOM extensions available to the server.
  • Fully functional Mac OS X menubar
  • Command-line arguments are now supported
  • XULRunner updated to latest version 1.9.2
  • Several example applications added in app/testapp, including a demonstration of the custom tree class with drag & drop, editable cells and sorting.
  • The server now receives extensive client version and platform info through Application::$client
  • Receives the status of every installed client component in Application::$clientComponents
  • Receives client command-line arguments through Application::$cmdlineArgs
  • Application arguments are no longer passed to the Application::init() function of the Application class, but are stored in Application::$applicationArguments. Instead, the init() function is now actually a default event handler for the root window 'initialized' event, and thus receives the event object as its first parameter.
  • Now compatible with PHP 5.3
The next release will probably include an (optional) client debug component that allows you to use DOM Inspector and Venkman in a SiteFusion application.

23/09/09 - Tutorial: Events

Events are a crucial subject to grasp when writing SiteFusion applications. This tutorial explains the use and functioning of events in applications, and global events that are distributed between processes. Note that this is the first version, and it may be extended since the topic is quite large. Read it here: Events.

21/09/09 - New Forum

Because of constant problems with the SourceForge phpBB forum, we decided to move the SiteFusion support forum to our own server. Therefore we once again welcome all of you on our support forum which can now be found at

17/09/09 - Tutorial: Basic user interface construction

The second tutorial explains the ways in which user interfaces can be constructed in SiteFusion applications. Read it here: Basic user interface construction.

14/09/09 - Hello World!

With the traditional Hello World! example we kick off the Tutorials section, where we'll be introducting all aspects of SiteFusion application programming in an incremental fashion. The installation how-to will head the list, followed by Hello World, and later on, basic user interface construction. Next tutorial after that will be on events.

04/09/09 - Open-source release of SiteFusion 5.0

After several years of development we are proud to present the open-source release of SiteFusion, a web application development client-server framework. Unlike most web application frameworks, SiteFusion does not work through a browser but instead uses a thin XUL client (the same technology Mozilla Firefox is based on). This means that SiteFusion applications are platform-independent, look and behave like native system applications, and are not restricted by browser security to access the local filesystem and execute programs.

SiteFusion is a server-based development platform in which applications are written in pure object-oriented PHP. Clients connect to the SiteFusion daemon through a regular webserver, allowing access even from within very restricted network environments. When logged in, the application remains a separate process on the server. Contrary to regular web applications, a SiteFusion application has a two-way connection with the client, allowing the server process to initiate action on the client side as well as the traditional other way around. This is achieved through a technique called long polling and does not require additional webserver configuration.

Because the Mozilla XUL framework has been completely captured within a PHP class structure, the construction of complex user interfaces requires a minimal amount of code, allowing developers to quickly produce professional applications. This abstraction layer eliminates the division between client and server, keeping both in constant synchrony while maintaining speed and responsiveness. With even the JavaScript libraries being server-based, the client software consists of a mere 200 lines of code, and even dramatic updates to a SiteFusion server will usually not require a client update.

SiteFusion already supports most XUL elements and adds some adaptations like the custom tree object, which unlocks all of the features of the complex Mozilla tree view interface in a highly optimized implementation. Supported features include sorting, even in hierarchical trees, editable cells, drag & drop and support for sparse trees, allowing the fast presentation and operation of very large trees containing over 10000 nodes.

The development of SiteFusion was initiated by the Dutch media company theFrontDoor in 2006, and it has since been the platform of choice for most of the applications produced for their clients. Because theFrontDoor and her employees are strong supporters of the open-source philosophy, and to stimulate further development of this project, the choice was made to release it publicly under the Mozilla Public License 1.1. This includes the SiteFusion platform itself and the SiteFusion Admin server maintenance utility, which is also an excellent example application for developers. Everyone, private and commercial, is invited to use this software and take part in its development. We also encourage both end-users and developers to comment on their experience and to suggest opportunities for improvement of the software. The project is located at