Domain-Specific Language for Web Applications

Repository moved to github, new pre-installed Eclipse zips, and a webdsl.org update

The source code repositories have been migrated to github:

https://github.com/webdsl/webdsl https://github.com/webdsl/webdsl-editor

Eclipse zips are now maintained again in our buildfarm:


The webdsl.org site’s ancient CSS has been replaced with Bootstrap components.

Migrated WebDSL builds and tests to Jenkins buildfarm

For WebDSL compiler and editor building and testing we are now using Jenkins at http://buildfarm.metaborg.org/.

Latest compiler jar can be downloaded from:


Latest Eclipse updatesite is still at:


Ubuntu Server or VPS installation

I’ve added some more detailed instructions in the manual on installing a WebDSL application and its requirements on an Ubuntu server or VPS.

Lightweight VPS

Nightly Builds

Nightly builds of the WebDSL Eclipse plugin are available through the update site https://webdsl.org/update/nightly. This provides easy access to the latest developments.

WebDSL Eclipse Plugin 1.2.9

WebDSL Eclipse Plugin 1.2.9 has been released:

  • Session entities stored entirely in database
  • New syntax for page and template defines (old syntax still supported):

    page root(){}, template main(){}, ajax template foo(){}

  • Added db=h2 and db=h2mem options for using H2 database engine

  • Added support for File/Image.download() in page/template init block
  • Extended search capabilities see manual
  • Recommendations see manual

WebDSL Roadmap: http://yellowgrass.org/roadmap/WebDSL

WebDSL Eclipse Plugin 1.2.8

WebDSL Eclipse Plugin 1.2.8 has been released, new features:

WebDSL Eclipse Plugin 1.2.7

Version 1.2.7 has been released, noteworthy features:

More information about bugs fixed in this release can be found on the WebDSL Roadmap: http://yellowgrass.org/roadmap/WebDSL

WebDSL Eclipse Plugin 1.2.6

Version 1.2.6 of the WebDSL Eclipse plugin has been released, this update includes the following changes:

generated spans

In previous versions, spans were generated around template calls. The span elements received a class attribute containing the template name. The no-span template modifier disabled this behavior. no-span is now the default, to avoid cluttering page source with spans. Add the span modifier to templates that were previously using it for matching CSS rules. Since no-span is the default, it no longer has any effect, therefore using it will trigger the following warning:

“warning: The ‘no-span’ modifier is obsolete, spans are no longer added by default.”


Arguments (non-ref) and for loop iterators can no longer be assigned to, this reduces the overhead of lifting (reference argument is not necessary), and it is also a common source of errors (e.g. when forgetting “this.” and assigning to argument in a setter method). Assigning to such variables will show an error:

“Assignment to this variable is not allowed.”

built-in templates

table, row, column, group (= fieldset containing a table), groupitem (= row)

Tables no longer automatically generate rows and columns. This behavior was not very reliable, especially when working with ajax. This change also affects group, which uses a table inside. A common pattern was to have a label with input in a groupitem, which automatically generated separate columns for label and input, this can be reconstructed by replacing label with labelcolumns:

labelcolumns("input i: "){ input(i) }
<td><label for="123">input i: </label></td>
<td><input id="123" /></td>


The String argument of the menubar template has been removed. menuitems must be added to applications that were previously using built-in menu templates:

    menuheader{ ... }
--> menuitems{ <---
      menuitem{ ... }
      menuitem{ ... }
--> } <---

WebDSL Tutorial: Event Planner

The Event Planner application tutorial is now available: Tutorials page

WebDSL Eclipse Plugin 1.2.2

We have just released version 1.2.2 of the WebDSL plugin for Eclipse (download here). There have been numerous improvements over the last few months:

  • on-save editor analysis of whole project
  • code completion for variable, function and template names
  • syntax templates in action code and template definitions
  • https support (manual)
  • asynchronous emailing (manual)

We are now more actively using the roadmap feature of Yellowgrass, for keeping track of WebDSL improvements and releases: http://yellowgrass.org/roadmap/WebDSL

Plugin Wizard Improvements

WebDSL Eclipse plugin version 1.1.5 includes improvements to the new project wizard. This wizard will now generate a Tomcat server configuration with settings for increased JVM heapspace and permgenspace, avoiding errors when redeploying. A project build will also automatically start the server and open a browser on the root page when the application is deployed. The new convert project wizard allows converting projects that contain WebDSL code to a proper WebDSL plugin project. It can also be used to repair the project configuration files.

new project convert project servers project servers view

Search WebDSL.org

WebDSL.org now has search.

Example searches: entity ac* con* val* ajax

Plugin v1.1.1

We’ve released a new plugin version 1.1.1. The main features of this release are:

  • an up-to-date WebDSL compiler
  • better hover & reference resolving support
  • many performance improvements
  • database integrity checking, as described in the post below

Update your installation using the Eclipse Update Manager.

Please provide any bugs, issues and feedback on Yellowgrass.

Database Integrity Checking

Manually editing databases, removing database constraints or system crashes can break database integrity. References may break and unique columns may no longer be unique. As of the latest plugin (trunk), WebDSL offers an integrity checker. Targeted at those developers in favor of a little manual database tweaking. Click the ‘Database Integrity Check’ button and you will get a SQL script that prints all database integrity violations. Useful for debugging integrity errors, for reapplying database constraints, or simply for sanitizing your database.

Plugin 1.0.12

Plugin version 1.0.12 is available, main improvement in this version:

‘build automatically’ no longer has to be enabled in Eclipse, the plugin invokes the Eclipse Java compiler instead of relying on automatic build. Another benefit is that Java compilation errors are more visible (no longer hidden under the ‘problems’ view). If you run into java compilation errors, please report an issue on http://yellowgrass.org/project/WebDSL

Plugin Update

The plugin has been updated to version 1.0.10. This update includes recent bug fixes in the WebDSL compiler, and also a new code generation cache optimization implemented by Nathan Bruning.

The plugin (full) build now generates three Ant files with a single task, to make the common build operations more convenient to use:


For more information, go to the plugin page: WebDSLplugin

Issue Tracker

WebDSL now has its own issue tracker on YellowGrass. It can be found at:


If you find any bugs, have suggestions for improvements or have any questions, feel free to post an issue.

WebDSL Eclipse plugin

The WebDSL Eclipse plugin is now available, it includes the WebDSL compiler.

The plugin will be used in the Model-Driven Software Development course for Computer Science MSc students at Delft University of Technology.

installation instructions

If you encounter any issues, or want to give feedback, please use the mailing list:


The Big Scheme of Things: Episode 1

“The Big Scheme of Things” is a series of screencasts that illustrates the use of WebDSL, by building a (to-do list) web application from scratch. In the first episode I keep it really simple and create a single page app that allows us to add and remove tasks. First I show how to get an even simpler “Hello web!” app running.


root() is the new home()

The main entry point of applications used to be the home() page, but has been renamed to root(), which maps to the / URL. E.g. for an application that is deployed to http://localhost:8080/myapp, the URL http://localhost:8080/myapp/ now dispatches the root() page instead of redirecting to the /home page, which it did before.

If your application does not have a page named root, with no arguments defined, it will give an error message.


WebDSL applications now (svn revision 2922) explicitly use Unicode (utf-8) characters instead of relying on defaults (which often resulted in latin-1, e.g. in a Mysql database). A tool is provided to convert old databases:

1 backup your database (in case the script needs a fix) with:

mysqldump -u dbuser -p dbname > file

2 install the new webdsl and run:

webdsl cleanall build convert-to-unicode

3 deploy the webdsl app:

webdsl deploy

Some random characters: Ωжன்其भुῶنَб

New Style

Uploaded a new style for WebDSL.org today. Although WebDSL has some styling abstractions, this was done using a custom CSS. WebDSL templates are automatically surrounded by spans with the template name as class, so it is easy to hook CSS to specific templates.


Released a data migration tool to automatically migrate WebDSL databases along evolving WebDSL applications. Acoda takes two versions of a WebDSL application and a WebDSL database as input and yields a new WebDSL database conforming to the new application.

Acoda web site

New WebDSL.org

Welcome to the new WebDSL.org. This site will be the main source of information about WebDSL, a domain-specific language for developing dynamic web applications with a rich data model.