Skip to content
Clojure library for Google Closure Templates
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


A library for using Google's Closure Templates in Clojure. For information on Closure Templates, see Google's project page


To get started, just reference the clj-soy artifact in the dependencies section of your project.clj file: [clj-soy/clj-soy "0.3.0"]
Then, you can write a template in a *.soy file. For documentation on Soy templates, see Google's documentation. They look like this:

{namespace clj_soy.example}

* Says hello
* @param? greeting A word to use for greeting
* @param name A name
{template .helloWorld}
  {if not $greeting}
    Hello, {$name}!
    {$greeting}, {$name}!

Note that the namespace and documenting comment are both required.

Then, you can easily use your template in Clojure using the functions in the clj-soy/template namspace.


build compiles a template from *.soy files. You can pass it as single *.soy file, a seq of files, or a directory containing *.soy files (which will be recursively loaded). Files can be provided either as strings or objects.


render combines a compiled template and data, and returns it. Data can be either be a pre-built data structure genarated by prepare-data, or a simple Clojure map. Using pre-built data is faster. Keywords as map keys are automatically converted to strings before calling the template rendering engine.


prepare-data pre-parses a Clojure map into Closure Template's native format. It's called automatically if you pass a map to render, but can also be called independently to pre-position data that will be used multiple times. Converts keyword keys into string keys.

An example:

(ns clj-soy.example
  (:require [clj-soy.template :as soy]))

(defn example []
  (let [tpl (soy/build "")]
    (soy/render tpl
            {:name "Luke"
             :greeting "Bonjour"})))


  • Add some higher-order convenience functions
  • Provide Clojure-level support for internationalization
  • Provide Clojure-level support for precompiled javascript template generation


Copyright (C) 2011 Luke VanderHart

Distributed under the Eclipse Public License, the same as Clojure.

Something went wrong with that request. Please try again.