Skip to main content

shed

shed canonicalises Python code. Shed your legacy, stop bikeshedding, and move on. Black++

What does it do?

shed is the maximally opinionated autoformatting tool. It's all about convention over configuration, and designed to be a single opinionated tool that fully canonicalises my code - formatting, imports, updates, and every other fix I can possibly automate.

There are no configuration options at all, but if the defaults aren't for you that's OK - you can still use the underlying tools directly and get most of the same effect... though you'll have to configure them yourself.

shed must either be run in a git repo to auto-detect the files to format, or explicitly passed a list of files to format on the command-line.

Features

shed...

  • Runs ruff, to remove unused imports and variables, upgrade code, sort imports, and more.
  • Runs black, with autodetected minimum version >= py38
  • Formats code blocks in docstrings, markdown, and restructured text docs (based on blacken-docs).
  • If shed --refactor, also runs com2ann and custom refactoring logic using libcst. See documentation for the codemods in CODEMODS.md

The version detection logic is provided by black. Because shed supports the same versions of Python as upstream, it assumes that the minimum version is Python 3.8.

If you run shed in a Git repository, the name of the root directory is assumed to be a first-party import. src layout packages are also automatically detected, i.e. the foo in any paths like .../src/foo/__init__.py.

Jupyter Notebook support

We recommend using jupytext to save your notebooks in .py or .md files, in which case shed supports them natively. For a quick-and-dirty workflow, you can use nbqa shed notebook.ipynb - nbqa works for any linter or formatter.

Using shed in your editor

We recommend using black in your editor instead of shed, since it provides our core formatting logic and shed's extra smarts can be counterproductive while you're actively editing code - for example, removing an "unused" import just after you add it!

Then, when you're done editing, you can run shed from the command-line, pre-commit hooks, and your CI system.

Using shed with pre-commit

If you use pre-commit, you can use it with Shed by adding the following to your .pre-commit-config.yaml:

minimum_pre_commit_version: '2.9.0'
repos:
- repo: https://github.com/Zac-HD/shed
  rev: 2025.6.1
  hooks:
    - id: shed
      # args: [--refactor, --py311-plus]
      types_or: [python, pyi, markdown, rst]

This is often considerably faster for large projects, because pre-commit can avoid running shed on unchanged files.

See also

shed inherits pyupgrade's careful approach to converting string formatting code. If you want a more aggressive refactoring tool and don't mind checking for breaking changes, check out flynt.

For Django upgrades, see django-codemod or django-upgrade.

The ssort project sorts the contents of python modules so that statements are placed after the things they depend on, for easier navigation and consistency of design.

Semgrep supports some autofixes, with patterns for a wide variety of languages. This includes a variety of both security and style checks, with manual inspection of results recommended.

Changelog

Patch notes can be found in CHANGELOG.md.

Release files for shed 2025.6.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for shed 2025.6.1
File Size Uploaded
shed-2025.6.1.tar.gz 39.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for shed 2025.6.1
File Interpreter ABI Platform
shed-2025.6.1-py3-none-any.whl Python 3 none any Details

Total release size: 76.3 kB

Release files / shed-2025.6.1.tar.gz

Download URL shed-2025.6.1.tar.gz
Size 39.8 kB
Tags Source
SHA-256 checksum
How to use checksums
43d056a2495172194ed23ee7738c49cde9cc3a54abbfa6178d5b70fd32b1a3b2
BLAKE2b-256 checksum
How to use checksums
74c53c8d41c902a0b453b6423779d938f703948bd6f023a6eaecd1c7a86eefc6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.9.22

Release files / shed-2025.6.1-py3-none-any.whl

Download URL shed-2025.6.1-py3-none-any.whl
Size 36.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
a238f34be0f040bdd705e4cbdaf3f98cdd30db832c34ca542037c8462556eb2a
BLAKE2b-256 checksum
How to use checksums
e4eb76f3dad9f509ef744c925ef374d5b814fafbdf7d4c8da19772717edb21ad
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.9.22

Release history Release notifications | RSS feed

This release

2025.6.1 This release

2 release files

0.10.8

2 release files

0.10.3

2 release files

0.10.0

2 release files

0.9.7

2 release files

0.9.6

2 release files

0.9.5

2 release files

0.9.4

2 release files

0.9.3

2 release files

0.9.2

2 release files

0.9.1

2 release files

0.9.0

2 release files

0.8.0

2 release files

0.7.0

2 release files

0.6.0

2 release files

0.5.3

2 release files

0.5.2

2 release files

0.5.1

2 release files

0.5.0

2 release files

0.4.2

2 release files

0.4.1

2 release files

0.4.0

2 release files

0.3.10

2 release files

0.3.9

2 release files

0.3.8

2 release files

0.3.7

2 release files

0.3.6

2 release files

0.3.5

2 release files

0.3.4

2 release files

0.3.3

2 release files

0.3.2

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.5

2 release files

0.2.4

2 release files

0.2.3

2 release files

0.2.2

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.3

2 release files

0.1.1

2 release files

0.1.0

2 release files

0.0.5

2 release files

0.0.4

2 release files

0.0.3

2 release files

0.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page