Skip to content
A Toy Package Manager for Emacs.
Emacs Lisp
Branch: master
Clone or download
Type Name Latest commit message Commit time
Failed to load latest commit information.


Emacsit is a toy package manager for emacs. It’s somewhat inspired from vim-plug.


The motivation behind emacsit is to let people easily get any package, from any source. Emacsit allows you to easily clone the required packages from any git repository and immediately put it in your emacs load file. It works on very basic functions, and it doesn’t cause any freezes while it manages your packages. Some people do not care about putting there packages up on MELPA or ELPA, yet there packages are pretty good. Emacsit has been create for using such packages.

The code for this project is extremely simple. Every package added to the list of packages is converted into a string of the form: “” So string before @ conveys the repository to be cloned and string after @ is the directory where the package is to be installed. So emacsit-savedir variable is used to specify the directory where all the packages are installed. It is absolutely required that the dependencies be installed before actual package. This process is manual and may require a few tries, since many packages do not mention clearly which packages they depend on.

I created this package so that we can get a similar control, as Slackware or Gentoo Linux gives, but it seems like most emacs packages have dependencies which are not optional in nature, so there doesn’t seem to be any explicit necessity for this package unless packages start giving optional compile features for their packages, which may be added complexity for other major packages managers.

Feel free to open issues and pull requests if you can offer any improvement or suggestion for this packages.


  • Emacs built-in packages.el with MELPA or Cask.
  • el-get - Look’s Amazing to me. If you have packages from various types of locations: github, emacswiki, GNU ELPA or Marmalade, privately hosted pages, git, bzr, CVS, el-get is one of the goto choices.
  • straight.el - It has a lot of features and many people swear by it (Currently I use straight.el)
  • quelpa - Build and install your Emacs Lisp packages on-the-fly and directly from source.
  • feather.el - This one seems to be similar to emacsit but better. Haven’t tried though.

Use one of the above, since they are much better supported.

Basic Usage

All you have to do for configuration is to load the emacsit directory to your load path or load emacsit.el directly, and add a variable emacsit::packages which is the list of packages you want to install.

git clone --depth=1 $HOME/.emacs.d/packages/SidharthArya/emacsit

Add this to your .emacs file.

(add-to-list 'load-path "~/.emacs.d/packages/SidharthArya/emacsit")
(require 'emacsit)
(setq emacsit::packages '( ;; List of packages you need
(setq emacsit::savedir "~/.emacs.d/packages")

Following keybindings can be used.

(define-prefix-command 'emacsit)
(define-key global-map (kbd "C-x p")  'emacsit)
(define-key global-map (kbd "C-x p g")  'emacsit::get)
(define-key global-map (kbd "C-x p l")  'emacsit::load)
(define-key global-map (kbd "C-x p b")  'emacsit::byte-compile-all)
(define-key global-map (kbd "C-x p u")  'emacsit::update)
  • Use C-x p g to downlaod packages.
  • Use C-x p l to load packages.
  • Use C-x p b to byte compile packages.
  • Use C-x p b to byte update packages.

The two functions emacsit::get and emacsit::load fetch the required packages and append then to your load path respectively. These functions are also interactively callable, so, if you don’t want to fetch the packages every time you start emacs, remove emacsit::get from your configuration.

Set Back

  • No dependency management

To Do

  • [X] Compiling
  • [X] Updating
  • [X] Compile Cask Packages
  • [ ] Cleaning
You can’t perform that action at this time.