Skip to content
This repository has been archived by the owner on Jan 12, 2019. It is now read-only.


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
  logo is intended to be used as a submodule of the main SDK, or

The submodule includes the core, client-side image processing code which is shared between iOS and Android.

As with the main source repos, this repo does not yet contain is much in the way of documentation. 😿 So please feel free to ask any questions by creating github issues -- we'll gradually build our documentation based on the discussions there.

Note that this is actual production code, which has been iterated upon by multiple developers over several years. If you see something that could benefit from being tidied up, rewritten, or otherwise improved, your Pull Requests will be welcome! See for details.

Brought to you by
PayPal logo

Why "dmz?"

dmz stands for "demilitarized zone" -- code that is not platform-specific to iOS, Android, nor any other OS.

Some platform specific code did sneak in, but you'll note that it is in files called mz. 😸 A dmz_context structure allows each platform to associate its specific data as needed.


The dmz code contains many helpful comments, and variable and function names are usually meaningful, but otherwise we have not prepared much in the way of documentation.

A very informative resource is this talk that Josh Bleecher Snyder gave in 2015. He provides a fairly detailed overview of the steps followed by the pipeline, and the thinking behind them.

There are also some useful documents in the docs folder.

Some notes on writing dmz code

  • All functions that do not need to be called from outside the dmz should be declared and implemented prefixed by DMZ_INTERNAL. (This should be as much of the dmz as possible.)
  • If you add a new implementation file to the dmz, run fab concat to regenerate dmz_all.cpp, which is the only file that actually gets compiled.

If you're a client of the dmz, you should only ever compile dmz_all.cpp. You should run fab concat before every build.

Contributors was created by Josh Bleecher Snyder.

Subsequent help has come from Brent Fitzgerald, Tom Whipple, Dave Goldman, and Roman Punskyy.

And from you! Pull requests and new issues are welcome. See for details.


The core image-processing and machine-learning code for, which is shared between iOS and Android.







No packages published