CIDER has a built-in profiler that can help you identify hot-spots in your application code. It’s built on top of the thunknyc/profile library.

The profiler doesn’t support ClojureScript.


Using CIDER’s profiler is super easy. You’d just identify the vars you’d want to profile and invoke M-x cider-profile-toggle (C-c C-= t). By defaults it operates on the symbol at point, but will prompt for a var if there’s nothing under the point.

There’s also cider-profile-ns-toggle (C-c C-= n) that will profiles all vars in a namespace.

Afterwards you can evaluate some code making use of those vars and their invocations will be automatically profiled.

You can display a report of the collected profiling data with M-x cider-profile-summary (C-c C-= S). If you’d like to limit the displayed data to a particular var you should try M-x cider-profile-var-summary (C-c C-= s).

Understanding the Report Format

A typical profiling report looks something like this:

|          :name | :n | :sum | :q1 | :med | :q3 | :sd | :mad |
|  #'user/my-add |  1 |  2µs | 2µs |  2µs | 2µs | 0µs |  0µs |
| #'user/my-mult |  2 | 11µs | 3µs |  8µs | 3µs | 3µs |  5µs |

Let’s demystify all the column names:

  • :n: Number of samples.

  • :sum: Aggregate time spent in fn.

  • :q1: First quartile i.e. twenty-fifth percentile.

  • :med: Median i.e. fiftieth percentile.

  • :q3: Third quartile i.e. seventy-fifth percentile.

  • :sd: Standard deviation i.e. the square root of the sum of squares of differences from the mean.

  • :mad: Mean absolute deviation. See this article for more details.


Command Keyboard shortcut Description


C-c C-= t

Toggle profiling for var. Defaults to the var at point.


C-c C-= n

Toggle profiling for the current ns.


C-c C-= v

Show whether some var has profiling enabled or not.


C-c C-= s

Display the profiling summary for some var.


C-c C-= S

Display the profiling summary for all vars.


C-c C-=+

Display or update max-sample-count.


C-c C-= c

Clear profiling data.