Object Oriented Web Templating and Interaction Framework with high modularity and flexibility but limited editing capabilities on its own. Intended for small starts and dynamically growing web applications using Java, Apache Velocity, Groovy, and Gradle
Clone or download
Failed to load latest commit information.
buildSrc Missed to update the version number for the plugin Jan 13, 2018
coma First steps towards next release iteration Oct 16, 2017
core Give additional test case a try on CI server Dec 31, 2017
dinistiq Use mockito core reference for later update to mockito 2.x Oct 12, 2016
ebean First steps towards next release iteration Oct 16, 2017
editor Update download task dependency Sep 14, 2017
ftp Check if command handler was null in test case.ee Oct 18, 2016
gradle/wrapper Stick with gradle 3.5.1 for now Aug 1, 2017
guicy Remove CDI test notes in code Dec 31, 2017
jdo Class list cache prefilling is no option anymore for JDO Dec 31, 2017
jpa First steps towards next release iteration Oct 16, 2017
morphia First steps towards next release iteration Oct 16, 2017
mutable Add change listene to the test suite Jan 2, 2018
nucleus Class list cache prefilling is no option anymore for JDO Dec 31, 2017
servlet Update commons fileupload dependency as security fix Jun 26, 2017
spring Class list cache prefilling is no option anymore for JDO Dec 31, 2017
.gitignore TrackDown git ignores Dec 30, 2016
.gitlab-ci.yml Use custom docker build image for gitlabci runner Jan 13, 2017
.travis.yml Use gradle wrapper also for post processing Dec 30, 2017
COPYING.LESSER First commit to initialize repository Sep 26, 2011
README.md Update mockito and PMD dependencies May 25, 2017
bintrayPublication.sh Add bintray publication script currently still in use for releases May 6, 2016
build.gradle Update versioneye plugin Jul 31, 2017
commons.gradle First steps towards next release iteration Oct 16, 2017
gradle.properties Use versioneye plugin to discover outdated dependencies Mar 31, 2016
gradlew Move to gradle 4.0 Jun 26, 2017
gradlew.bat Add gradle wrapper for travis ci May 12, 2017
lib.gradle Remove useless lines May 25, 2017
pmd.xml Update PMD Jul 22, 2017
publication-build.sh Update jdk version note Aug 30, 2017
settings.gradle Cosmetics Oct 16, 2017
webapp.gradle Move to gradle 4.0 Jun 26, 2017


Tangram Dynamic Extendable Web Applications

Latest Release Build Status Coverage Status Coverage Status

Tangram is a framework comprised of an assembly of proven Java library modules to form a basis for web applications which need the following core elements:

  • Data driven through models expressed in Java
  • Easy mapping of URLs to action implementations
  • Dynamic extendability along the way (without deployments)
  • Present reasonable defaults for any aspect
  • Quick path to get something running
  • Long path to keep it alive and let the application grow

A growing set of documentation items can be found in the wiki of this project:


with the current open ideas and issues collection and roadmap.

While the core forms a stable plattform basis for web applications to provide long time maintainable applications, anything from CSS, JavaScript, URL Scheme, Business Logic, Actions, to even the Model can be changed at runtime.

It comes with limited CMS functionality by using Java Data Object (JDO), Java Persistence API (JPA) implementations, or even EBean as data sources and presenting a more or less generic editor for that situation. JDO can be used in conjunction with Google App Engine while JDO and JPA are tested with relational database systems and MongoDB stand alone or on the OpenShift plattform. Additionally the use of CoreMedia CMS repositories as data source is possible.

The emphasis of the latest work and releases is towards dynamic templating and continous enhancement of web applications. As a result Object Oriented Templating can not only be used with static JSP Files but also with Apache Velocity code placed in the repository. Additionally the base bean classes can be dynamically extended by Groovy codes in the repository.

Tangram not only allows for the convenient presentation of content but also the implementation of actions to be called via URLs like e.g. for AJAX or RESTful services by use of custom annotations in Java or again Groovy extensions.

Two german short articles about that can be found here:



The tangram components can be glued together with several dependency injection frameworks. Springframework, dinistiq, and Google Guice work out of the box.

Examples are presented for JDO with RDBMS (hsqldb is used for the example contents), JDO on Google App Engine, JPA, EBean (with h2), and CoreMedia CMS's most simple example application.


To make things easier for applications using this framework we provide a Gradle plugin now.

This plugin can be used separately independent of the rest of the framework - which very much makes sense for applications using JPA, JDO, or EBean, needing some WAR file overlay ("underlying") mechanism, or simply want to have automatic minification of CSS and JavaScript resources in their webapps folder.


Maven Repositories






To make all this work you need

  • Java 8
  • Gradle 3.4 or later (gradle wrapper included)

For all the rest simply type




which again automatically expands to

gradle clean publishToMavenLocal

and then you can build and use your projects using tangram or the examples.

If you need to set a runtime library to e.g. compile with Java 8 for target systems with Java 7 you can provide a JDK pointer (e.g. for releases up to version 1.1):

gradle -Pjdk=/opt/jdk1.7.0_80 clean build publishToMavenLocal

Packaging source code and API documentation is triggered by the "release" switch.

gradle -Prelease clean build publishToMavenLocal

Test coverage is checked with the Jacoco plugin. To obtain a combined view of the test coverage of all modules, you need to call the jacocoCominbedReport task at the root level. The jacocoTestReport task only works for the individual modules.

gradle -Prelease clean build jacocoCombinedReport publishToMavenLocal

Optionally you might need Google App Engine but just if you want to use it for your target systems (Yes, you will want to install ths Java AND python version)

Eclipse preparation:

gradle eclipse

(output folders are set to .../build/classes/main not to .../bin)

(We don't recommend using eclipse anymore)