Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time

ESUP - Emacs Start Up Profiler

MELPA MELPA Stable Build Status

Benchmark Emacs Startup time without ever leaving your Emacs.


Known to work with GNU Emacs 25.1 and later. Esup may work with older versions of Emacs, but this is NOT guaranteed. Bug reports for problems related to using Esup with older versions of Emacs will most like not be addressed.

The master of all the material is the Git repository at .

NOTE: The master branch will always contain the latest unstable version. If you wish to check older versions or formal, tagged release, please switch to the relevant tag.


Add MELPA or MELPA Stable to the list of repositories to access this mode. MELPA tracks this Git repository and updates relatively soon after each commit or formal release. For more detail on setting up see MELPA Getting Started.

For those who want only formal, tagged releases use MELPA Stable:

(require 'package)
(add-to-list 'package-archives
             '("melpa-stable" . "") t)


For those who want rolling releases as they happen use MELPA:

(require 'package)
(add-to-list 'package-archives
             '("melpa" . "") t)

After initializing packaging system you can install Esup using preferred way:


Use M-x package-refresh-contents and M-x package-list-packages to get to the package listing and install esup from there.


You can install esup manually by adding following to your init file:

(unless (package-installed-p 'esup)
    (package-install 'esup))


Add following to your Cask file:

(source melpa)

(depends-on "esup")


Add following to your init file:

(use-package esup
  :ensure t
  ;; To use MELPA Stable use ":pin melpa-stable",
  :pin melpa)


Esup is included in the El-Get repository. To install Esup using El-Get:

M-x el-get-install RET esup RET

Another way is to create a recipe file esup.rcp as follows:

(:name esup
 :website ""
 :description "Emacs Start Up Profiler"
 :type github
 :pkgname "jschaf/esup")

and add it to a directory present in el-get-recipe-path. Then, use M-x el-get-install RET esup or add:

(el-get-bundle esup)

to your init file.

Manual Install

Download Esup and place the download directory on your load-path like so:

(add-to-list 'load-path "~/.emacs.d/path/to/esup")

And add either of the two following lines to your initialization file. The first only loads Esup when necessary, the 2nd always during startup of GNU Emacs.

(autoload 'esup "esup" "Emacs Start Up Profiler." nil)
;; OR
(require 'esup)


To start Esup, run M-x esup, and watch the magic happen.

Profile a custom file with esup

By default, Esup will profile user-init-file. To profile a custom file, call esup with a prefix argument. That is, C-u M-x esup.


Patches are always welcome. To submit a patch, use something like the following workflow.

  • Clone the project:
git clone
cd esup
git checkout -b MY-NEW-FIX
  • Implement your fix

  • Ensure that all elisp code is lint-clean with Flycheck

  • Test your fix with Cask

  • Test your fixes with the Emacs Regression Test runner

make test
  • Create a pull request with the normal GitHub user interface