new UiFormSpecifier().ui user, {
section "User", {
field user.username_
field user.firstName_
field user.lastName_
ajaxField user.manager_,
this.&selectUser
}
formAction this.&saveUser
}Build Your Own Intranet using DSL (no HTML or JavaScript)
Taack-UI is a Grails plugin that extends Grails by describing user interfaces with a Groovy DSL (Domain Specific Language), statically typed.
From Code to Screen
A form is a few lines of Groovy. Fields are symbols generated from your class (username_), so the compiler checks them; constraints become localized error messages.
def form() {
DslSampleUser u = new DslSampleUser()
taackUiService.show(new UiBlockSpecifier().ui {
modal {
form createForm(u, {
row {
col {
section 'User', {
field u.username_
field u.firstName_
field u.lastName_
}
}
col {
section 'Details', {
field u.age_
field u.birthday_
field u.city_
field u.status_
field u.enabled_
}
}
}
formAction this.&saveForm as MC
})
}
})
}
Features
Security per field
Objects are displayed and edited according to user rights on each field. Links and form actions the user cannot run are hidden automatically.
Localized, validated
Labels come from i18n files, validation errors are localized with no extra code.
Filter, sort, paginate
Tables and filters without writing queries nor keeping session data.
Full-text search
Solr indexing of statically typed domain objects, with faceting and ranking. File previews can be extended.
JDBC on your model
Query domain objects with TQL (Taack Query Language) from IntelliJ, DBeaver or LibreOffice Base.
SSH & SFTP
A shell UI running inside the server process, and a virtual file system per user, with credentials checked (taack-ui-ssh module).
Git server
The Intercom app serves Git over SSH: documentation written in Asciidoc is pushed, then rendered.
Why Taack?
| Taack | Grails with GSP | JavaScript front-end | |
|---|---|---|---|
UI written in |
Groovy DSL, statically typed |
GSP templates, HTML, CSS |
JavaScript or TypeScript, plus a REST API |
Field names checked |
At compile time |
At runtime |
Depends on the API contract |
Rights per field and action |
Built in, links hidden automatically |
Hand written |
Hand written, on both sides |
PDF, CSV, Mails |
Same DSL as the screen |
Separate code |
Separate code |
Languages to know |
Groovy |
Groovy, HTML, CSS, JavaScript |
Groovy or Java, JavaScript, HTML, CSS |
Built with Taack
SSH & SFTP







