---
title: "dulwich Breaking Changes on PyPI | Since.dev"
description: "What each dulwich release removed, renamed or changed: 1,878 breaking changes in 3 versions on PyPI, each with its source."
canonical_url: https://since.dev/packages/pypi/dulwich
last_updated: 2026-01-17
---

# dulwich breaking changes

Every breaking API change we have recorded in dulwich on PyPI: 1,878 breaking changes in 3 versions. Below are its newest 3 versions, removals and renames first, each with its source.

Newest change January 17, 2026

## 1.0.0

18 breaking changes, first published January 17, 2026.

- **Removed**  

The release removes the functions that earlier versions had deprecated. The notes do not name them, so code that still calls deprecated dulwich functions must be checked and updated. [github.com](https://github.com/jelmer/dulwich/releases/tag/dulwich-1.0.0)
- **Removed** `dulwich.line_ending.get_checkin_filter`  

Use get_clean_filter instead. [pypi.org](https://pypi.org/project/dulwich/1.0.0/)
- **Removed** `dulwich.line_ending.get_checkin_filter_autocrlf`  

Use get_clean_filter_autocrlf instead. [pypi.org](https://pypi.org/project/dulwich/1.0.0/)
- **Removed** `dulwich.line_ending.get_checkout_filter`  

Use get_smudge_filter instead. [pypi.org](https://pypi.org/project/dulwich/1.0.0/)
- **Removed** `dulwich.line_ending.get_checkout_filter_autocrlf`  

Use get_smudge_filter_autocrlf instead. [pypi.org](https://pypi.org/project/dulwich/1.0.0/)
- **Removed** `dulwich.objects.Commit.extra`  

Commit.extra was removed in dulwich 1.0.0 [pypi.org](https://pypi.org/project/dulwich/1.0.0/)
- **Removed** `dulwich.objects.parse_commit`  

dulwich.objects.parse_commit was removed in dulwich 1.0.0 [pypi.org](https://pypi.org/project/dulwich/1.0.0/)
- **Removed** `dulwich.pack.PackIndex.object_index`  

PackIndex.object_index was removed in dulwich 1.0.0 [pypi.org](https://pypi.org/project/dulwich/1.0.0/)
- **Removed** `dulwich.porcelain.checkout_branch`  

dulwich.porcelain.checkout_branch was removed in dulwich 1.0.0 [pypi.org](https://pypi.org/project/dulwich/1.0.0/)
- **Removed** `dulwich.repo.BaseRepo.do_commit`  

BaseRepo.do_commit was removed in dulwich 1.0.0 [pypi.org](https://pypi.org/project/dulwich/1.0.0/)

And 8 more in this version.

## 0.25.0

1,733 breaking changes, first published December 17, 2025.

- **Removed**  

Python 3.9 is no longer supported; users on Python 3.9 must upgrade their interpreter before using this release. [github.com](https://github.com/jelmer/dulwich/releases/tag/dulwich-0.25.0)
- **Removed** `dulwich.annotate.BaseObjectStore`  

dulwich.annotate.BaseObjectStore was removed in dulwich 0.25.0 [pypi.org](https://pypi.org/project/dulwich/0.25.0/)
- **Removed** `dulwich.annotate.Blob`  

dulwich.annotate.Blob was removed in dulwich 0.25.0 [pypi.org](https://pypi.org/project/dulwich/0.25.0/)
- **Removed** `dulwich.annotate.Commit`  

dulwich.annotate.Commit was removed in dulwich 0.25.0 [pypi.org](https://pypi.org/project/dulwich/0.25.0/)
- **Removed** `dulwich.annotate.ORDER_DATE`  

dulwich.annotate.ORDER_DATE was removed in dulwich 0.25.0 [pypi.org](https://pypi.org/project/dulwich/0.25.0/)
- **Removed** `dulwich.annotate.TreeChange`  

dulwich.annotate.TreeChange was removed in dulwich 0.25.0 [pypi.org](https://pypi.org/project/dulwich/0.25.0/)
- **Removed** `dulwich.annotate.TreeEntry`  

dulwich.annotate.TreeEntry was removed in dulwich 0.25.0 [pypi.org](https://pypi.org/project/dulwich/0.25.0/)
- **Removed** `dulwich.annotate.Walker`  

dulwich.annotate.Walker was removed in dulwich 0.25.0 [pypi.org](https://pypi.org/project/dulwich/0.25.0/)
- **Removed** `dulwich.archive.BaseObjectStore`  

dulwich.archive.BaseObjectStore was removed in dulwich 0.25.0 [pypi.org](https://pypi.org/project/dulwich/0.25.0/)
- **Removed** `dulwich.archive.Tree`  

dulwich.archive.Tree was removed in dulwich 0.25.0 [pypi.org](https://pypi.org/project/dulwich/0.25.0/)

And 1,723 more in this version.

## 0.24.0

127 breaking changes, first published August 1, 2025.

- **Removed** `dulwich.cli.parse_commit`  

dulwich.cli.parse_commit was removed in dulwich 0.24.0 [pypi.org](https://pypi.org/project/dulwich/0.24.0/)
- **Removed** `dulwich.filters.AttributeValue`  

dulwich.filters.AttributeValue was removed in dulwich 0.24.0 [pypi.org](https://pypi.org/project/dulwich/0.24.0/)
- **Removed** `dulwich.filters.match_path`  

dulwich.filters.match_path was removed in dulwich 0.24.0 [pypi.org](https://pypi.org/project/dulwich/0.24.0/)
- **Removed** `dulwich.repo.BlobNormalizer`  

dulwich.repo.BlobNormalizer was removed in dulwich 0.24.0 [pypi.org](https://pypi.org/project/dulwich/0.24.0/)
- **Removed** `dulwich.repo.CommitError`  

dulwich.repo.CommitError was removed in dulwich 0.24.0 [pypi.org](https://pypi.org/project/dulwich/0.24.0/)
- **Removed** `dulwich.repo.HookError`  

dulwich.repo.HookError was removed in dulwich 0.24.0 [pypi.org](https://pypi.org/project/dulwich/0.24.0/)
- **Removed** `dulwich.repo.TreeBlobNormalizer`  

dulwich.repo.TreeBlobNormalizer was removed in dulwich 0.24.0 [pypi.org](https://pypi.org/project/dulwich/0.24.0/)
- **Renamed** `dulwich.filters.Pattern`  

Use dulwich.line_ending.Pattern instead. [pypi.org](https://pypi.org/project/dulwich/0.24.0/)
- **Signature changed** `dulwich.archive.BaseObjectStore.tree_changes`  

Was def tree_changes(self, source, target, want_unchanged=False, include_trees=False, change_type_same=False, rename_detector=None); now def tree_changes(self, source, target, want_unchanged=False, include_trees=False... [pypi.org](https://pypi.org/project/dulwich/0.24.0/)
- **Signature changed** `dulwich.bundle.Bundle.prerequisites`  

Was prerequisites: list\[tuple\[bytes, str\]\]; now prerequisites: list\[tuple\[bytes, bytes\]\]. [pypi.org](https://pypi.org/project/dulwich/0.24.0/)

And 117 more in this version.

## Check your code

These are the changes. To see which of them reach your code, [scan a public repository](https://since.dev/scan.md), or have your coding agent call `check_code` with your manifest or lockfile over [MCP](https://since.dev/docs.md#mcp). [The API](https://since.dev/docs.md#api) reads every change in every version, not only the newest. A fix pull request opens for the changes that reach a connected repository. Nothing merges or deploys.

## Put your code on continuous maintenance.

Scan a public repository now, or give your agent one line.

[Scan a repository](https://since.dev/scan.md). Any public GitHub repository. No sign-in.

### Tell your agent what changed since it was trained.

`claude mcp add --transport http since https://api.since.dev/mcp`

[Get an API key](https://app.since.dev/login?mode=signup)

Codex, Cursor and any MCP client use https://api.since.dev/mcp.

---

Every page on this site as Markdown: https://since.dev/sitemap.md. For agents: https://since.dev/llms.txt.
