POJOs on the Web!

Open-Source food for the Java Platform.

Woko is a Full-Stack, Domain-Driven Web Framework for the Java platform. It builds upon strong foundations and mixes in unique concepts, providing a developer experience that ain't so common in the Java landscape.

We are pragmatic, and we eat our own dog food. We try to make it simple and effective, just as it should be.


Object persistence and full text search services for your POJOs. No more DAO plumbing, all you need to worry about is your Domain Objects. Direct support for Hibernate and Compass.

Users & Roles

First-class support for roles and users. Authentication, user management, GUI profiling... Woko makes it easy, and most importantly, makes it meaningful !

Object Renderer

Woko uses a unique, dynamic and powerful approach for automagically rendering your POJOs. It can render any object by default (read or write), and lets you customize everything at will.


Automatic, zero-code JSON/HTTP services for your POJOs. Woko has endpoints for accessing your POJOs in a RPC fashion. It even has a JavaScript API that eases AJAX stuff.

Modular & Open

JavaBeans, Maven, Servlet, JSP, JPA... Woko relies on Open standards and technologies. Almost everything in Woko can be customized, or even replaced. We don't try to vendor-lock anyone.

Dev Friendly

Works fine in any IDE. Command-line for handling various stuff. IntelliJ IDEA plugin. Hot-deploy of code changes. Forget about your old JEE experiences : web dev on the Java Platform can actually be productive. It can even be funky !


You need good tests in order to ship good apps.

Findr is a simple yet very powerful utility that helps to write Selenium Web Tests in a compact and effective fashion.

  • Thin layer over Selenium WebDriverWait
  • Enforces async-friendly tests (polling)
  • Fluent, easy and enjoyable API
  • Allows for reuse (composition, immutable Findrs...)
  • Pure Java, extensions for Groovy
  • Usable from any testing infrastructure
  • WebDriver builder : easy setup
  • Out-of-the-box support for JUnit
  • Allows for video recording of your tests
// get google

// perform the search
new Findr(driver) // create a Findr
  .elem(By.id("gbqfq")) // wait for the elem located by id "gbqfq"
  .sendKeys("pojos on the web", Keys.ENTER); // type the query

// check the results
new Findr(driver) // create Findr
  .elem(By.id("ires")) // wait for elem by id
  .elemList(By.cssSelector("h3.r")) // wait for a list of elements
  .at(0) // wait for 1st in the list
  .elem(By.tagName("a")) // wait for some <a> tag under the first list elem
  .where(Findrs.textEquals("POJOs on the Web!: Woko")) // wait for the text 
  .eval(); // evaluate the whole stuff ! will block until success, or timeout
def d = webDriver
d.get 'http://www.leboncoin.fr'
d.windowSize = new Dimension(1400, 1000)

// some examples...
findr().elem(By.id('TableContentBottom')) + isDisplayed() >> eval()
$('#TableContentBottom') + isDisplayed() >> eval()

// click
$$('#TableContentBottom a') +
    attrEquals('title', 'Alsace') +
    at(0) >> click()

// selects
$('#search_category') asSelect() selectByVisibleText('Motos')
$('#searcharea').asSelect().selectByVisibleText('Toute la France')

// search


Recursive Java Archive (jar) Tool

rjar is a command-line tool that acts like the regular jar tool, but recursively ! It is very useful when e.g. using ear or war files, or any other "jars of jars"...

Features :

  • list jar entries recursively : all entries are displayed including entries of nested jars if any
  • expand a jar recursively : expand the jar and its nested jars to the specified directory
  • recreate a jar from an expanded rjar : allows to rebuild a jar with nested jars from an expanded directory structure
  • graphical front-end : tree view of your jars, with regexp filtering


The best Web MVC for Java. Hands down.

It's compact, elegant, effective and fun to use. It has everything you need in order to build webapps :

  • Kick-ass Data Binding & Validation
  • Neat Controller model (ActionBeans)
  • HTML Tag library (FORMs)
  • Fully extensible

Because it doesn't have to suck !