PMem Repositories

Here is a list of all the repositories in the pmem organization in GitHub under

PMDK Repositories

The Persistent Memory Development Kit is a collection of libraries and tools. The source is spread across many repositories. Components are separated like this to help with the logistics of parallel development and asynchronous delivery.

Components Focused on Persistence:

Repo NameDescriptionMicrosite
pmdkPMDK Core C libraries and tools:
  • libpmem
  • libpmem2
  • libpmemobj
  • libpmemblk
  • libpmemlog
  • libpmempool
  • libpmemset (in development)
  • librpmem
  • pmempool utility
  • Core PMDK C examples
  • Web content for (in gh-pages branch)
libpmemobj-cppC++ bindings & containers for libpmemobj
llplLow-Level Persistence Library for
libpmemobj-jsJavaScript bindings for libpmemobj-
miniasyncC low-level concurrency library for asynchronous
pmemstreamLogging data structure (with stream-like access to data)
pmemkvTransactional Key-Value Store: Top-Level C & C++ API
pmemkv-benchBenchmarks for pmemkv-
pmemkv-pythonPython bindings for
pmemkv-javaJava bindings for
pmemkv-nodejsNodeJS bindings for
pmemkv-rubyRuby bindings for
pmdk-convertConversion tool for PMDK poolspmdk-convert
valgrindEnhanced Valgrind containing the pmemcheck
rpmaC library to simplify accessing persistent memory (PMem) on remote hosts over Remote Direct Memory Access (RDMA)

Components Focused on Volatile Usages of pmem:

Repo NameDescriptionMicrosite
memkindGeneral-purpose malloc/free-style library
(Actually lives outside the pmem GitHub org since it has a life outside of pmem as well)
vmemcacheA buffer based LRU
vmemlibvmem, the predecessor to libmemkind.
Maintenance-only -- use libmemkind for all new development.

Experimental PMDK components (not yet ready for production use):

Repo NameDescriptionMicrosite
pcjPersistent Collections for Java-
pmemfileUserspace implementation of file APIs using pmem-
syscall_interceptSyscall intercepting library used by libpmemfile-
vltraceTool for tracing syscalls-
pynvmExperimental prototype Python bindings for libpmemobj-


Repo NameDescriptionMicrosite
dev-utils-kitTools used for development of projects under pmem organization-
autoflushtestBasic data integrity test for platforms with flush-on-fail CPU caches-

ndctl is the Linux utility for managing persistent memory.

Repo NameDescriptionMicrosite
ndctlndctl, daxctl, and related
Web Content

The website is implemented as static content on GitHub using Jekyll, GitHub-flavored MarkDown, and some tool-generated HTML here and there. Some sub-areas of the website live in the gh-pages branch of the corresponding repo (for example, pmdk and ndctl).

Repo NameDescriptionMicrosite
docsPersistent Memory Docbook-
pmem.github.ioRepo containing the website (including blogs)-
pmdk-examplesPMDK examples and tutorials-
bookExamples used in the pmem Programming Book-
knowledge-baseKnowledge Base for
pmem-aware Software

These repos contain experimental versions of software modified to leverage persistent memory. Typically, when the features are mature and tested they become part of the upstream repo.

Repo NameDescriptionMicrosite
pelikanWorking tree for development of pmem-related features for Twitter's Pelikan-
pmem-rocksdbRocksDB modified to use pmem-
pmem-redisRedis, enhanced to use pmem-
pmseMongoDB pmem Storage Engine Prototype-
kvdkReference code of key/value store design for pmem-

These repos are no longer under active development or use. We archive them here for reference.

Repo NameDescriptionMicrosite
linux-examplesOriginal ideas-
redisInitial pmem enhancements to Redis-
rocksdbInitial pmem enhancements to RocksDB-
libcxxExperimental pmem-aware libcxx-
mpi-pmem-extMPI Extensions for pmem-
issuesArchive of some old issues. No longer in-use.-
pmemkv-jniJava bindings via JNI for pmemkv-
pmdk-testsExtended PMDK tests-

The contents of this web site and the associated GitHub repositories are BSD-licensed open source.