Versions Compared


  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migrated to Confluence 4.0

Contribution Overview

GFreeMarker is


an integration of the FreeMarker template engine for Groovy

. It allows adding plugins written in Groovy for content rendering, making FreeMarker+Groovy just as easy as Smarty. This way of doing avoids security issues related to allowing direct Groovy scripting in templates. With GFreeMarker, you create plugins, and make it available to customers.

Team Members

Cedric Champeau <cedric dot champeau at lingway dot com>



GFreeMarker 0.2

GFreeMarker 0.2 (javadoc)

GFreeMarker 0.2 (sources)






How does it work ?

Imagine your customer requires an URL Encoding text transform, and that FreeMarker does not offer this transformation. Then, you would just need to :

  • Create a plugin named urlencoder that implements the IGroovyFreeMarkerPlugin interface
  • Copy this plugin into the Groovy FreeMarker template engine plugins directory

That's all ! Now your customer can access it quite directly in the template. For example :

Code Block
<@groovy plugin="urlencoder">this is an expression that will be converted to its URL Encoding form</@groovy>

Writing a plugin

Here's a sample plugin which converts a string through URL encoder :

Code Block
import org.codehaus.groovy.gfreemarker.IGroovyFreeMarkerPlugin

class urlencoder implements IGroovyFreeMarkerPlugin {
        String transform(Map params, String content) {

Using the template engine

Here's a sample code which shows how easy it is to embed FreeMarker as a template engine for Groovy.

Code Block
import org.codehaus.groovy.gfreemarker.FreeMarkerTemplateEngine

def tpl = '''
Hello, ${}
<@groovy plugin="urlencoder" mode=user>this is a test ${}</@groovy>'''
def engine = new FreeMarkerTemplateEngine("plugins")
def binding = ["user" : ["name":"cedric"]]
println engine.createTemplate(tpl).make(binding)

This code assumes a directory called plugins is in the working directory. The template engine will dynamically load the ''urlencoder'' class.


Source Control


GFreeMarker uses Maven2 as its build tool. Follow the instructions at or install an IDE which has Maven 2 support (I personally use IntelliJ IDEA 7).


Feel free to contribute, as I don't have much time to spend on this project.


Mailing List(s)

Issue tracker