Chapters ▾ 2nd Edition

A2.5 Appendix B: Embedding Git in your Applications - Dulwich


There is also a pure-Python Git implementation - Dulwich. The project is hosted under It aims to provide an interface to Git repositories (both local and remote) that doesn’t call out to Git directly but instead uses pure Python. It has an optional C extensions though, that significantly improve the performance.

Dulwich follows Git design and separate two basic levels of API: plumbing and porcelain.

Here is an example of using the lower level API to access the commit message of the last commit:

from dulwich.repo import Repo
r = Repo('.')
# '57fbe010446356833a6ad1600059d80b1e731e15'

c = r[r.head()]
# <Commit 015fc1267258458901a94d228e39f0a378370466>

# 'Add note about encoding.\n'

To print a commit log using high-level porcelain API, one can use:

from dulwich import porcelain
porcelain.log('.', max_entries=1)

#commit: 57fbe010446356833a6ad1600059d80b1e731e15
#Author: Jelmer Vernooij <>
#Date:   Sat Apr 29 2017 23:57:34 +0000

Further Reading

The API documentation, tutorial, and many examples of how to do specific tasks with Dulwich are available on the official website