Skip to content
A community repository for open-source Clojure libraries
Branch: master
Clone or download
Pull request Compare This branch is 4 commits ahead, 97 commits behind clojars:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.

Clojars web interface

Build Status

This is the source code for the Clojars jar repository webapp.

If you're looking for user documentation, try the wiki. There is a also a FAQ.

See release announcements on the mailing list for recent user-facing changes.


Please report bugs or problems with the repository on the bug tracker.

Design discussions occur on the clojars-maintainers list and the #leiningen channel on

If you'd like contribute a change please send a GitHub pull request for a topic branch. Feel free to open a pull request early with a "not ready for merging" note or ask on the mailing list or IRC to get feedback from other contributors. If you are looking for a task to work on, take a look at issues labeled ready.

We try to make releases fairly soon after merging contributions, but post to the mailing list if it's been a week or two and you'd like something pushed to the production website.


Note: Java 8+ is required

Development system

To begin developing, start with a REPL.

lein repl

Run migrate to initialize the database to the latest migration.

user=> (migrate)

or alternatively, from the command line.

$ lein run -m user/migrate

Run go to initiate and start the system.

user=> (go)

By default this creates a running development system at http://localhost:8080.

Note: You may get the following error in the browser when accessing the dev system after running (go) for the first time:

No implementation of method: :-report-error of protocol: #'clojars.errors/ErrorReporter found for class: clojars.errors.StdOutReporter

If so, running (go) a second time should eliminate the error.

When you make changes to your source files, use reset to reload any modified files and reset the server.

user=> (reset)
:reloading (...)

If you'd like to hack on the UI or search it might be useful to have production-like metadata. To create that, use to create test users, import an existing maven repository (your local ~/.m2/repository/ works well), and setup a search index:

cp -r ~/.m2/repository data/dev_repo
lein run -m

If you want to use the actual repo from, you can grab it via rsync.

Note that this setup task isn't perfect - SNAPSHOTS won't have version-specific metadata (which won't matter for the operation of clojars, but may matter if you try to use the resulting repo as a real repo), and versions will be listed out of order on the project pages, but it should be good enough to test with.


Testing is designed to work in a REPL to allow flow.

user=> (test)
user=> (test #'clojars.test.unit.db/added-users-can-be-found)

Tests can also be run through Leiningen for CI.

lein test

Production system with development config

Occasionally it can be useful to start a production system based on the development configuration. This can be done by lein run.


Also see Configuration.

  1. Compile with: lein uberjar
  2. Deploy target/uberjar/clojars-web-*-standalone.jar to the server
  3. Run the migrations java -cp clojars-web-*-standalone.jar clojure.main -m
  4. Run the production system: java -jar clojars-web-*-standalone.jar


The default configuration is loaded from resources/default_config.edn. To override values from the default config, place them in map in an edn file, and specify the path to that file via the clojars.config.file system property.

When running automated tests at the repl, or with lein test, a test environment is used to provide isolation. It can be found in test/clojars/test/test_helper.clj.


Copyright © 2009-2017 Alex Osborne, Phil Hagelberg, Nelson Morris, Toby Crawley, Daniel Compton and contributors.

Distributed under the Eclipse Public License, the same as Clojure. See the file COPYING.

You can’t perform that action at this time.