Skip to content
Fast library for rendering HTML in Clojure
Branch: master
Clone or download
Latest commit 8021043 Jan 21, 2019
Type Name Latest commit message Commit time
Failed to load latest commit information.
src Fix combined dot-notation and non-literal classes Apr 30, 2018
test Fix combined dot-notation and non-literal classes Apr 30, 2018
.gitignore Update Codox plugin Mar 29, 2016
.travis.yml Simply .travis.yml file Mar 29, 2016 Release 2.0.0-alpha2 Jan 22, 2019
LICENSE.html Added EPL license Jun 12, 2010 Add License information to README Mar 29, 2016
project.clj Release 2.0.0-alpha2 Jan 22, 2019


Build Status

Hiccup is a library for representing HTML in Clojure. It uses vectors to represent elements, and maps to represent an element's attributes.


Add the following dependency to your project.clj file:

[hiccup "1.0.5"]



Here is a basic example of Hiccup syntax:

user=> (use 'hiccup.core)
user=> (html [:span {:class "foo"} "bar"])
"<span class=\"foo\">bar</span>"

The first element of the vector is used as the element name. The second attribute can optionally be a map, in which case it is used to supply the element's attributes. Every other element is considered part of the tag's body.

Hiccup is intelligent enough to render different HTML elements in different ways, in order to accommodate browser quirks:

user=> (html [:script])
user=> (html [:p])
"<p />"

And provides a CSS-like shortcut for denoting id and class attributes:

user=> (html [ "bang"])
"<div id=\"foo\" class=\"bar baz\">bang</div>"

If the body of the element is a seq, its contents will be expanded out into the element body. This makes working with forms like map and for more convenient:

user=> (html [:ul
               (for [x (range 1 4)]
                 [:li x])])


Copyright © 2016 James Reeves

Distributed under the Eclipse Public License either version 1.0 or (at your option) any later version.

You can’t perform that action at this time.