Build your intranet in Groovy

Typed DSLs for Grails: no HTML, no JavaScript

HTML PDF CSV Mail

Describe, don’t template

new UiFormSpecifier().ui user, {
    section "User", {
        field user.username_
        field user.firstName_
        field user.lastName_
        ajaxField user.manager_,
            this.&selectUser
    }
    formAction this.&saveUser
}
slideshow crew form

Checked at compile time

  • field_ symbols generated from your classes

  • Rename a field, the compiler finds every screen

  • Validation errors localized, for free

slideshow crew form validation

Tables, filters, pagination

slideshow crew users

Charts in a few lines

diag dsl bar diag dsl line diag dsl pie diag dsl whiskers

Same DSL, printed to PDF

new UiPrintableSpecifier().ui {
    printableHeader '2.5cm', {
        show userHeader, Width.THIRD
    }
    printableBody {
        show userShow, Width.MAX
        table userTable, Width.MAX
        diagram barChart, Width.MAX
    }
}
slideshow pdf sample

Batteries included


Full-text search


File previews


JDBC on your model


SSH & SFTP

Try it live

Every DSL page of the documentation opens its samples in a modal

Docs › DSLs ▶ Try it live

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.

Install

Set up Java, Grails and your first Taack server.

First app

Step by step: a table, a form, a filter, a menu.

Try the DSLs

Every DSL page opens its samples live, in a modal.

Latest: version 0.7.11 (with 0.7.10): new themes, selectable from the settings menu, and a reworked save that avoids binding. All news →

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
            })
        }
    })
}
Form with validation errors

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.

One DSL, every output

The same description renders to HTML, PDF, Mails and CSV.

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

Crew

Crew: users, roles and hierarchy.

FreeCAD PLM

FreeCAD PLM: FreeCAD model sharing and linear versioning.

Intercom

Intercom: SSH and Git server, Asciidoc documentation pushed via Git.

Viewers

Viewers: convert and preview files, such as STEP models.

Collabora Editor

Collabora Editor: edit office attachments online with Collabora.

SSH & SFTP

screenshot ssh
Figure 1. Ssh server session
screenshot sftp
Figure 2. Sftp file browser