Skip to content
Makes working with URLs in Clojure and ClojureScript easy
Clojure JavaScript
Find file
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


This is a library that makes working with URLs in Clojure a little more pleasant.

The cemerick.url/url function returns an instance of the cemerick.url.URL record type that allows you to easily work with each datum within the provided URL:

=> (use 'cemerick.url)
=> (-> (url "")
     (assoc :username "vtUQeOtUnYr7PGCLQ96Ul4zqpDUO4sOE")

url will also accept additional paths to be resolved against the path in the base URL:

=> (url "")
#cemerick.url.URL{:protocol "https", :username nil, :password nil,
                  :host "", :port -1, :path nil, :query nil,
                  :anchor nil}
=> (url "" "1" "users" "profile_image" "cemerick")
#cemerick.url.URL{:protocol "https", :username nil, :password nil,
                  :host "", :port -1,
                  :path "/1/users/profile_image/cemerick", :query nil, :anchor nil}
=> (str *1)
=> (str (url "" "../../lookup.json"))

Note that url does not perform any url-encoding of paths. Use cemerick.url/url-encode to url-encode any paths/path components prior to passing them to url. e.g.:

=> (def download-root "")
=> (str (url download-root "/"))
=> (str (url download-root (url-encode "/")))
=> (str (url download-root (url-encode "/logical/file/path")))

The :query slot can be a string or a map of params:

=> (str (assoc *2 :query {:a 5 :b 6}))


url is available in Clojars. Add this :dependency to your Leiningen project.clj:

[com.cemerick/url "0.0.6"]

Or, add this to your Maven project's pom.xml:



url is compatible with Clojure 1.2.0 - 1.4.0.

Need Help?

Ping cemerick on freenode irc or twitter if you have questions or would like to contribute patches.


Copyright ©2012 Chas Emerick

Distributed under the Eclipse Public License, the same as Clojure. Please see the epl-v10.html file at the top level of this repo.

Something went wrong with that request. Please try again.