New in Seaside 3.0

Seaside 3.0 is the current stable version, also see the announcement.


The monolithic Seaside package has been split into several independent modules. We expect this to have several advantages:

  • Ports to existing and future platforms should be easier. The new platform layer is called Grease and independent of Seaside.
  • It allows for smaller Seaside installations. For example you can have Seaside without the tests or without Kom and use Swazoo 2 instead.
  • Hardened environments can run without any development tools like the toolbar, halos, inspector, walkback and friends. This reduces the chance that setup flaws result in users being able to exploit the application.


Internally Seaside now uses its own method for string conversion (#seasideString) instead of a very brittle and confusing combination of #asString and #displayString. We also introduced a GRObject class for objects that should receive #initialize upon creation. This should not affect users.

First class mime types and locales

Seaside now has first class objects (WAMimeType and WALocale) instead of Strings. This should leave most users unaffected because they can get away using Strings just the same as for WAUrl. Except one place though and that is WAFile >> #contentType which now returns an instance of WAMimeType.

Request Context

  • WARequestContext provides a lot of functionality that earlier WASession did provide. It also provides new functionality that earlier was not available at all.
  • #application, #session, and (new) #requestContext have been implemented on GRObject, which means they are accessible from any Seaside object. Note that they will signal a WARequestContextNotFound error if there is no current request context available.
  • Moved rendering and redirecting methods from WASession to WARequestContext- The code entry paths for request handlers changed so that they all expect a WARequestContext instead of a WARequest. WASession was changed so that its #responseForContext: method sets a value for WACurrentRequestContext. All methods from then on in your application can access the request context through that process variable by calling self requestContext from most Seaside objects.

Rewrites and major refactorings

  • Mostly rewritten configuration system (with tests!)
  • Pluggable WACache removes the need for WALRUCache and WAExpiringHandler and should give much more flexibility in caching policies
  • The Render Loop was refactored to remove WARenderLoop and re-implement the two continuations to prevent entering each one twice and hopefully make the flow clearer. There is now one continuation for the action phase and one for the render phase.
  • Rewritten exception handling


  • Generation of continuation and session keys is roughly 30 times faster (on Squeak).
  • Session keys are now 96 bit, continuation keys 48 bit.

Major New Features

  • Filters for WARequestHandlers.


  • Generic Javascript related things of the Scriptaculous package have been moved to a new Javascript package. This makes it much easier to integrate new Javascript libraries.
  • Together with this change some of the class prefixes changed, such as SUStream and SUScript are now called JSStream and JSScript.
  • The Javascript package comes with a full-fledged JSON parser.
  • Scriptaculous-Components is a collection of widgets built using the Javascript library.
  • Seaside features now an officially supported integration of JQuery and JQuery-UI.


  • The server adapter infrastructure on Squeak has been reworked. This allows the Kom and Swazoo 2 adapter to share code.
  • Support for Exupery.
  • Configuration attributes now have comments as tooltip.
  • Down level-revealed Conditional Comments with #revealedIf
  • added WACollectionAttribute and refactored libraries to use the new configuration attribute.
  • fixed a nasty bug when backtracking an OrderedCollection.
  • Added a convenience method #cacheForever to WAResponse. A session can now tell a response to cacheForever. This would only apply to that individual response. (Ramon Leon).
  • WAStandardScripts removed, WAStandardStyles removed, use WAStandardFiles instead.
  • Continuation renamed to WAContinuation.
  • The usual round of small bug fixes.
  • Configurable root decorations.
  • Better eCompletion support.
  • WARequestHandlers can be decorated and are on a request processing stack.
  • #with: in WATextInput and WASubmitButton as a synonym to #text:, what is much more consistent.
  • WARequestCookies is a Collection of instances of WARequestCookie instead of a Dictionary.
  • WACookie supports many more features.
  • The session cookie key is now _s.
  • The mime type and character set are configured in the application instead of the session.
  • Support for non-ASII URLs (and parameters).
  • WARequest>>fields contains both GET and POST fields (important for action url of <form>s)
  • Remote address now part of WARequest, you don’t need to access the native request anymore.
  • Experimental upload streaming on Squeak and Kom.
  • Lightweight mime document class that implementors can use.
  • Dialogs should no longer produce invalid HTML.
  • WARequest>>url now returns a WAUrl object.
  • Callbacks are no longer executed while traversing the component tree. This means that components and decorations no longer have the opportunity to affect the execution of components and decorations below them on the tree. #processCallbackStream: and #processChildCallbacks: no longer exist and are not called.
  • Tons of new tests.
  • Sessions no longer (re-)register themselves with the Application. This may change some weird edge-case behaviour if users were expecting to be able to render their components after unregistering a session. This should not be possible as the session is unavailable by the time the render request arrives.
  • The session cookie value is no longer added by the Application to the GET parameters in the incoming request. This means that the incoming request reflects the actual parameters passed in by the user.
  • New ANSI based valuable protocol.
  • the /seaside has been removed from the URL

Note that some of these improvements have been backported to Seaside 2.8.