Although subsequent improvement of state handling in web browser
JavaScript engines have meant this aspect is less important today, Seaside's method of handling of browser state (via
continuations) was an initial point of interest in the first years following its 2002 release. This mechanism provides for rollback and resumption, resolving many common issues then occurring with running web applications, adequately sustaining the state on the server-side even when the web browser's 'back' and 'forward' or 'refresh' buttons are used. Continuation based servers give the developer the ability to maintain state on the server in a scalable manner. A distinctive feature of Seaside is its integrated development environment, providing access to development tools and debugging support within an application. In development-mode, unhandled errors are reported to the web page; developers can access and alter the program code and state directly from the web page, allowing bug identifying and fixing processes to occur within an
integrated development environment (IDE). A Seaside application is a set of interacting components. Each one stores state across page views and can
render itself to the
HTML stream. Thus, it is straightforward to write a component once and then reuse it elsewhere in an application. Seaside also supports the notion of tasks, which allow a programmer to describe the high-level logic of component interaction. Seaside is not template-oriented, and does not offer generating or using HTML templates; HTML
markup is generated programmatically. (The Seaside-based
Pier content-management framework does offer wiki-markup syntax for templating.) Seaside uses
callbacks on
closures to specify actions to be taken when clicking on a link or submitting a form. The developers and users of Seaside argue that this helps enforce separation of structure (markup) from content and presentation (
Cascading Style Sheets (CSS)). Seaside's combination of components, callbacks, and closures can significantly reduce the semantic gap between a complex workflow and its representation in code. Seaside supports
Ajax through integration with
script.aculo.us and
jQuery. Seaside also supports
Comet-style server-push technology. Seaside can work with either Smalltalk-based web server implementations or other non-Smalltalk ones (Nginx, Apache). ==Philosophy==