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.

News

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)

Client changes:

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.

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.

06/05/13 - Move to GitHub

The SiteFusion source code is from now on hosted on GitHub, at https://github.com/sitefusion. 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 XULTextBoxand 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.

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 SiteFusion.org 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.

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.

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).

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.

Changelog:

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 SiteFusion.org branding, that installs itself in an unpacked manner in the profiles directory, allowing you to overwrite the default SiteFusion icon with a branding extension.

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.

Compatibility

Server
5.2.0

Server
5.2.1

Server
5.2.2

Server
5.2.3

Client 1.2.0

Yes

Yes

Yes

No

Client 1.2.1

No

Yes

Yes

Yes

Client 1.2.2

No

Yes

Yes

Yes

Client 1.2.3

No

Yes

Yes

Yes

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 1.9.2.8, 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.

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

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 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()

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 - SiteFusion.org on Twitter!

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

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.

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

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.

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):

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:

Client

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

Server

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

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 http://forum.sitefusion.org.

17/09/09 - Tutorial: 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 http://sourceforge.net/projects/sitefusion/