The magma server daemon, classic edition, which supports server side encryption, SMTP, POP, IMAP and HTTP (with a JSON-RPC interface for the included webmail client).
C C++ Shell Python Makefile Objective-C Other
Failed to load latest commit information.
.settings Reorganized profile into gprof, while adding support for pprof. Feb 22, 2017
check Removing the custom timeout value for the append multi threaded check. Feb 23, 2017
dev Removed the trackfds option from the and Feb 22, 2017
lib Cherry picked certain tracked files back to compatible commit for mer… Feb 21, 2017
res Cherry picked certain tracked files back to compatible commit for mer… Feb 21, 2017
sandbox Replaced prime artifact prototypes w uint to avoid error on CentOS 7. Feb 7, 2017
src Fixed bugs in the hashed/tree index truncator and the append check. Feb 23, 2017
tools Major code cleanup to allow smoother gcc compilation using alt options. Feb 9, 2017
web Updated documentation. The file in particular. Jun 11, 2016
.cproject Append interface added to inx. Messages use append for big perf boost. Feb 22, 2017
.gitattributes Avoid profiling the static web content. Jun 10, 2016
.gitignore Reorganized profile into gprof, while adding support for pprof. Feb 22, 2017
.project Increment the protocol violation counter for invalid login attempts. Feb 2, 2017
.pydevproject Working realm encryption/decryption in Oct 7, 2016
COPYRIGHT Grammar fixes. Jan 24, 2017
INSTALL Initial commit Jan 29, 2015
LICENSE One project to rule them all. One repository to find them. One makefile Dec 11, 2015
Makefile Reorganized profile into gprof, while adding support for pprof. Feb 22, 2017 Updated link to stable(ish) releas.e Jan 24, 2017


Magma was originally designed and developed by Ladar Levison for The current release is currently under heavy development, and some of the features and functions contained herein are unstable. The SMTP, POP, and IMAP protocol handlers are reasonably mature. The DMTP and HTTP (and the bundled webmail system) are still in development. Happy hacking.


Magma v6.4.709

Magma Development Machine, v1.0.0

The development machine is a pre-built virtual machine with a graphical desktop and various development tools, and dependencies installed.


Magma Build Machines, v0.0.8

For those looking for a slim virtual machine pre-configured to build and run magma, consider the following Vagrant boxes which have been created specifically for that purpose. Images have been created to support the VirtualBox, VMware, and libvirt providers. An official Docker image is on the roadmap, but for the time being you might want to consider one of the community supported images. Use the appropriate command below to download and provision a Vagrant instance.

# VMware
vagrant init lavabit/magma; vagrant up --provider vmware_desktop

# VirtualBox
vagrant init lavabit/magma; vagrant up --provider virtualbox

# libvirt
vagrant init lavabit/magma; vagrant up --provider libvirt


Ladar Levison
Greg Brown
Ivan Tolkachev
Princess Levison
Ryan Crites
Sean Benson
Stephen Watt

And the army of Kickstarter supporters who contributed to this project.

Tarball Contents


Installation Instructions

These instructions are targeted at systems running CentOS 6.


List of packages to be installed: mysql-server, memcached, gettext-devel


To install MySQL and configure the magma username run the commands below. The supplied password should be replaced with value unique to your environment. You may also want to limit the permissions of the magma database user to the database it will need to access. The global permission is only needed to setup the table schema.

yum install mysql-server
service mysqld start
chkconfig mysqld on

mysql -u root < echo "CREATE USER 'magma'@'localhost' IDENTIFIED BY 'volcano';"
mysql -u root < echo "GRANT ALL PRIVILEGES ON *.* TO 'magma'@'localhost' WITH GRANT;"


To install Memcached run the commands below.

yum install memcached
service memcached start
chkconfig memcached on


To link up the development and build scripts run the This will create a bin folder in your home directory, if it doesn't already exist, and create symbolic links to the scripts and tools used to build, run and test magma. The commands below assume the bin directory is in your PATH. If it isn't, or you simply don't want to create the symbolic links, you can also run the shell scripts directly from their location in the dev/scripts folder. To execute the script:


To build the dependencies and create the library separately, run the build.lib script. Run the script without any parameters to see the possible command line options. To compile and combine all of dependencies in a single operation:

build.lib all

The bundled Makefile can be used to compile magma. It will detect when the dependencies haven't been compiled and run the preceeding step automatically, if necessary, as the Makefile looks for required header files in folders created by the previous step. If the Makefile has trouble finding the necessary include files, odds are its because the previous step didn't run properly. Assuming the dependencies are available, you can compile magmad and magmad.check using:


To setup a sandbox database which can be used to run the unit tests, or experiment with magma, run (assuming the development userid is setup with permission to your database):


To launch the magma unit tests, or magma using the sandbox configuration, run:

To download the ClamAV virus definitions into the sandbox environment, run:



To deploy magma, run the INSTALL script. Note the INSTALL script is out of date, and will need to tweaking to operate perfectly against a copy of the current magma development branch cloned directly via git. Pull requests welcome.

./INSTALL -d ~/ -u magma -p volcano -s Lavabit


The best way to get an issue fixed is to create a pull request with a unit test added to the check folder which reproduces the issue and checks for the expected output. In general, please be sure to run the and scripts before creating a pull request to make sure the newly submitted code doesn't introduce a memory leak, or invalid memory operation.


Inside the res/pages/webmail directory is a compiled copy of the webmail code. Locate script.js file and change the magma.portalUrl = true variable to false, and it will use a set of hard coded test requests/responses. These hard coded requests, and responses are useful for checking/developing the webmail code without a running version of the magma server. Currently the files are configured to access the JSON-RPC interface using the hostname "localhost" and the HTTP port 10000. This should work using the default magma.config and magma.sandbox.config files.

The static files inside the res/pages/webmail folder are compiled using the files inside the web directory. See the web/ file for details.