Want to take your software engineering career to the next level? Join the mailing list for career tips & advice Click here


The framework for developing sophisticated web applications in Smalltalk.

Subscribe to updates I use Seaside

Statistics on Seaside

Number of watchers on Github 119
Number of open issues 144
Average time to close an issue 4 months
Main language Smalltalk
Average time to merge a PR 6 days
Open pull requests 10+
Closed pull requests 8+
Last commit over 2 years ago
Repo Created over 5 years ago
Repo Last Updated over 2 years ago
Size 7.64 MB
Homepage http://www.seasid...
Organization / Authorseasidest
Latest Releasev3.2.4
Page Updated
Do you use Seaside? Leave a review!
View open issues (144)
View Seaside activity
View on github
Book a Mock Interview With Me (Silicon Valley Engineering Leader, 100s of interviews conducted)
Software engineers: It's time to get promoted. Starting NOW! Subscribe to my mailing list and I will equip you with tools, tips and actionable advice to grow in your career.
Evaluating Seaside for your project? Score Explanation
Commits Score (?)
Issues & PR Score (?)

The framework for developing sophisticated web applications in Smalltalk.

master Build Status: master

development Build Status: develop

Seaside provides a layered set of abstractions over HTTP and XHTML that let you build highly interactive web applications quickly, reusably and maintainably. It is based on Smalltalk, a proven and robust language that is implemented by different vendors. Seaside includes:

  • Programmatic XHTML generation. A lot of markup is boilerplate: the same patterns of lists, links, forms and tables show up on page after page. Seaside has a rich API for generating XHTML that lets you abstract these patterns into convenient methods rather than pasting the same sequence of tags into templates every time.

  • Callback-based request handling. Why should you have to come up with a unique name for every link and form input on your page, only to extract them from the URL and request fields later? Seaside automates this process by letting you associate blocks, not names, with inputs and links, so you can think about objects and methods instead of ids and strings.

  • Embedded components. Stop thinking a whole page at a time; Seaside lets you build your UI as a tree of individual, stateful component objects, each encapsulating a small part of a page. Often, these can be used over and over again, within and between applications - nearly every application, for example, needs a way to present a batched list of search results, or a table with sortable columns, and Seaside includes components for these out the box.

  • Modal session management. What if you could express a complex, multi-page workflow in a single method? Unlike servlet models which require a separate handler for each page or request, Seaside models an entire user session as a continuous piece of code, with natural, linear control flow. In Seaside, components can call and return to each other like subroutines; string a few of those calls together in a method, just as if you were using console I/O or opening modal dialog boxes, and you have a workflow. And yes, the back button will still work.

Seaside also has good support for CSS and Javascript, excellent web-based development tools and debugging support, a rich configuration and preferences framework, and more.


Install in Pharo

To install the latest stable version of Seaside in a Pharo image, execute the following code:

Metacello new
  repository: 'http://www.smalltalkhub.com/mc/Seaside/MetacelloConfigurations/main';
  version: #stable;

To install a particular version (e.g. 3.1.3):

Metacello new
 repository: 'http://www.smalltalkhub.com/mc/Seaside/MetacelloConfigurations/main';
 version: '3.1.3';

Starting with version 3.2.0, you can also install Seaside directly from the Github repository:

Metacello new
 repository: 'github://SeasideSt/Seaside:master/repository';

Install in Gemstone

  1. Upgrade to the latest version of Metacello and Grease using GsUpgrader:

    Gofer new
    package: 'GsUpgrader-Core';
    url: 'http://ss3.gemtalksystems.com/ss/gsUpgrader';
    (Smalltalk at: #GsUpgrader) upgradeGrease.
  2. Install Seaside 3.2:

Install the latest commit from the master branch:

  GsDeployer deploy: [
    Metacello new
      baseline: 'Seaside3';
      repository: 'github://SeasideSt/Seaside:master/repository';
      onLock: [:ex | ex honor];
      load ].

Install a particular version, e.g. 3.2.0 (see Releases for a list of possible versions):

  GsDeployer deploy: [
    Metacello new
      baseline: 'Seaside3';
      repository: 'github://SeasideSt/Seaside:v3.2.0/repository';
      onLock: [:ex | ex honor];
      load: #('Development' 'Examples' 'Zinc') ].

Install in Squeak

Make sure you have installed Metacello. From there on, follow the installation instructions for Seaside in Pharo.


If you would like to contribute, please visit the Seaside's contributors page.


Please check the Wiki or www.seaside.st for more information.

Seaside open issues Ask a question     (View All Issues)
  • almost 4 years Improvement of the accessibility.
  • almost 4 years onMouseEnter: and onMouseLeave: missing
  • about 4 years Missing class in Pharo
  • about 4 years Error on Wiki about Rest
  • about 4 years Relative redirects
  • about 4 years Add REST examples from 2014
  • about 4 years `WAExternalFileUploadCallback` logic should be moved to the adaptors
  • about 4 years initializeMemorySettingsProfileSeaside broken on Pharo 5
  • about 4 years MetaRepoForPharo50 needs latest configuration
  • about 4 years Optimize GRSmallDictionary to a single array
  • about 4 years Scriptaculous multi select list broken
  • about 4 years Remove all the deprecated methods
  • about 4 years Introduce greaseStringOn:
  • about 4 years Configuration does not load Grease-Squeak(5)-Core
  • about 4 years Implement the JQuery Deferred layer
  • almost 5 years Seaside-Email: use ZdcSecureSMTPClient in Pharo?
  • about 5 years REST depends on source code which is not available at deployment time in VASt and VW
  • about 5 years notTranlogged feature for GemStone
  • over 5 years REST documentation needs updating
  • over 5 years Rename #map to #imageMap?
  • over 5 years Consider switching from XML to HTML
  • over 5 years #id: and friends should error on overriding
  • over 5 years Build an optimized WriteStream
  • over 5 years Improve support for srcset
  • over 5 years Remove support for X-Forwarded-For
  • over 5 years Seaside-Email does not follow rfc2047 when non-ascii chars are in the header
  • over 5 years seaside image fails to open if port 8080 is in use
  • over 5 years WAAbstractFileLibrary class>>#asSelector: is still incorrect
  • over 5 years look at GRSmallDictionary performance
  • over 5 years Switch from HTTP 302 to HTTP 303
Seaside open pull requests (View All Pulls)
  • change the version # to 3.2.0
  • Fix typo
  • Streaming patch
  • Issue 923
  • issue #924
  • Issue 917
  • issue 916
  • GemStone 3.4.1 does not understand #_sharedCounter:setValue:
  • Adapt baseline to Pharo 7.
  • Multipart emails were not working for GemStone.
Seaside questions on Stackoverflow (View All Questions)
  • Seaside - How do I install Scriptaculous on a clean Seaside install (via Configuration Browser) on Pharo?
  • What image can I use to experiment with Comet and WAListenerAdaptor in Seaside?
  • Web page times out when using Image based persistence and saving with Seaside?
  • Timer callback in Pharo smalltalk + Seaside
  • How to make Bootstrap for Seaside responsive on mobile devices?
  • Seaside: Ajax callback, then append server-rendered element?
  • How to load Magritte Seaside?
  • Anomolies in Seaside in GNU Smalltalk
  • What is the difference between these web servers in Seaside: Zinc, Kom, and Swazoo?
  • Smalltalk Seaside - jQuery Ajax Callback
  • Seaside on Pharo - Why the weird jQuery integration syntax compared to Scriptaculous?
  • Smalltalk - Seaside, Magritte: "object description" giving "MessageNotUnderstood" exception
  • Seaside - What's the point of implementing #children in a WAComponent when a direct call to "html render:" is made in "renderContentOn: html"?
  • Seaside jQuery - Sorting a list with drag and drop and sending it back via Ajax causes OrderedCollection to turn into an Array?
  • Pharo - Image with Seaside in it is stuck, can't click on anything in the UI?
  • Pharo Smalltalk - Is there a way to force deallocation (dealloc) on an Object (instance) (expire sessions etc) during Seaside development?
  • Seaside in Pharo Smalltalk - How do I enable opening the "classic" debugger (error handler) when an exception occurs?
  • What would be the best way to implement REST like URLs in a Seaside application?
  • Smalltalk/seaside REST service return image
  • Error loading Seaside 3.1 onto latest Pharo 3.0 image
  • Serve a seaside page/component without creating a session
  • Seaside calling a component inside javascript
  • Seaside/Smalltalk - how to highlight a row in a table?
  • Seaside - how to get the full url while in a session
  • Seaside: Instantiate and Render a Component via RESTful api
  • Seaside Smalltalk & jQuery UI Accordion - huge height
  • REST service in seaside Smalltalk
  • correctly using a singleton pattern in seaside/smalltalk
  • Seaside - Page formatting
  • Seaside - Reporting with submit buttons
Seaside list of languages used
Seaside latest release notes
v3.2.4 3.2.4

Bugfix release. Especially import for Gemstone users, see issue #932 ! List of fixed issues: https://github.com/SeasideSt/Seaside/milestone/5

v3.2.2 3.2.2

Compatibility for Pharo 6

v3.2.1 3.2.1
  • Fixes to loading Seaside-security package
  • Corrected Seaside version number
Other projects in Smalltalk
Powered by Autocode - Instant Webhooks, Scripts and APIs
Autocode logo wordmark