Skip to main content

pre-commit Ruff image Downloads image


alt text

Git Submodule Flow (smflow) is a lightweight toolset and set of Git hooks designed to make working with Git submodules significantly easier. It helps keep submodules in sync with the parent repository, enabling a "virtual monorepo" workflow — without giving up the benefits of repository modularity.
Report Bug · Request Feature


🚀 Features

  • Intuitively work with submodules through VS Code git interface.
  • Automatically attaches submodule HEADs to the commits referenced by the parent repository.
  • Quickly see how many changes the current submodule is behind the tracked branch.
  • Correctly set local submodules when switching branches in the parent project.
  • Automatically update .gitmodules in parent when changing locally checking out branches for submodules.

📦 Installation

Note: Requires uv to be installed.

Install smflow with:

uv tool install smflow

🛠️ Usage

From the root of your parent repository (the one that contains submodules), run:

smflow init

This will configure your repository with the appropriate Git settings and install the necessary hooks.

For help and available commands, run: smflow --help:

usage: smflow [-h]
              {init,install-hooks,configure-git,attach-heads,sync-from-local}
              ...

Make the flow of working with Git submodules smoother.

positional arguments:
  {init,install-hooks,configure-git,attach-heads,sync-from-local}
                        command to run
    init                Setup all functionality of smflow.
    install-hooks       Installs the githooks.
    configure-git       Configures some ergonomic settings for git submodules
                        in local `.gitconfig`.
    attach-heads        Attaches the head of the submodules to the branch and
                        reset to the commit-sha.
    sync-from-local     Updates .gitmodules from local file state.

options:
  -h, --help            show this help message and exit

🔍 What smflow init Does

🔗 Git Hooks

The following hooks will be installed:

  • Post-checkout hook parent: Automatically attaches to branch and resets submodules to the correct commit when you checkout a branch in the parent repository.
  • Post-Checkout hook submodules: Updates .gitmodules when you switch between branches in the children, ensuring easy updates.

⚙️ Git Configuration

smflow sets these recommended Git config values:

git config submodule.recurse true

Ensures submodules are automatically checked out when switching branches.

git config push.recurseSubmodules on-demand

Allows pushing submodule commits automatically when pushing the parent repository — if the submodules and parent share the same branch name. If not, Git will warn and suggest pushing submodules first.

⚠️ Limitations

  • smflow does not currently support recursive submodules, i.e. submodules within submodules.

🧩 Why smflow?

Managing submodules manually is tedious and error-prone. smflow minimizes the overhead and makes it easier to:

  • Stay in sync with your team
  • Avoid detached HEAD states in submodules
  • Prevent pushing parent branches that reference unpublished submodule commits

Whether you’re working with multiple shared libraries or simply trying to tame Git submodules, smflow provides a smoother, safer workflow.

Release files for smflow 0.3.8

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

Source distribution (sdist)

Source distribution for smflow 0.3.8
File Size Uploaded
smflow-0.3.8.tar.gz 3.7 MB Details

Built distribution (wheel)

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

Total release size: 3.7 MB

Release files / smflow-0.3.8.tar.gz

Download URL smflow-0.3.8.tar.gz
Size 3.7 MB
Tags Source
SHA-256 checksum
How to use checksums
c2b9dfece4960c412f56f838303dce592139e812516f4bc7b95fe18c7fefddc8
BLAKE2b-256 checksum
How to use checksums
86e954718ed12b7ecea79d0fbc31693102d0119d2eb0ba104b5507d23ec68453
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.7.8

Release files / smflow-0.3.8-py3-none-any.whl

Download URL smflow-0.3.8-py3-none-any.whl
Size 11.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
0a6bb176c7145cec40467be17b0c4ee73ab1810efe42530776c05a1c072ddd40
BLAKE2b-256 checksum
How to use checksums
cd83d20bbf20c5aaf1b73588291d406c2af028dea3411159815ef3913c0a39ad
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.7.8

Release history Release notifications | RSS feed

This release

0.3.8 This release

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.0

2 release files

0.1.0

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