# libvcs > Typed Python utilities for Git, SVN, and Mercurial. Parse URLs, execute commands, and synchronize repositories – all with a consistent, type-friendly API. ## Documentation - [Quickstart](https://libvcs.git-pull.com/quickstart/): For latest official version: - [Topics](https://libvcs.git-pull.com/topics/): Explore libvcs’s core functionalities and design patterns at a high level, with detailed explanations and runnable examples. - [API Reference](https://libvcs.git-pull.com/api/): libvcs exposes three public subsystems – URL parsing, command execution, and repository synchronization – plus a pytest plugin for test fixtures. - [Internals](https://libvcs.git-pull.com/internals/): Error hierarchy for VCS operations. - [Project](https://libvcs.git-pull.com/project/): Information for contributors and maintainers. - [Changelog](https://libvcs.git-pull.com/history/): To install the unreleased libvcs version, see developmental releases. - [Migration notes](https://libvcs.git-pull.com/migration/): Migration and deprecation notes for libvcs are here, see history as well. ## Documentation - [pytest Plugin](https://libvcs.git-pull.com/api/pytest-plugin/) - [branch](https://libvcs.git-pull.com/cmd/git/branch/): For git-branch(1). - [libvcs.cmd.git](https://libvcs.git-pull.com/cmd/git/): For git(1). - [notes](https://libvcs.git-pull.com/cmd/git/notes/): For git-notes(1). - [reflog](https://libvcs.git-pull.com/cmd/git/reflog/): For git-reflog(1). - [remote](https://libvcs.git-pull.com/cmd/git/remote/): For git-remote(1). - [stash](https://libvcs.git-pull.com/cmd/git/stash/): For git-stash(1). - [submodule](https://libvcs.git-pull.com/cmd/git/submodule/): For git-submodule(1). - [tag](https://libvcs.git-pull.com/cmd/git/tag/): For git-tag(1). - [worktree](https://libvcs.git-pull.com/cmd/git/worktree/): For git-worktree(1). - [libvcs.cmd.hg](https://libvcs.git-pull.com/cmd/hg/): For mercurial, aka hg(1). - [Commands - libvcs.cmd](https://libvcs.git-pull.com/cmd/): Compare to: fabtools.git, salt.modules.git, ansible.builtin.git - [libvcs.cmd.svn](https://libvcs.git-pull.com/cmd/svn/): For subversion, aka svn(1) - [Dataclass helpers - libvcs._internal.dataclasses](https://libvcs.git-pull.com/internals/dataclasses/): dataclasses utilities. - [Exceptions - libvcs.exc](https://libvcs.git-pull.com/internals/exc/): Exceptions for libvcs. - [List querying - libvcs._internal.query_list](https://libvcs.git-pull.com/internals/query_list/): QueryList is the backbone of the Manager/Cmd pattern. Every ls() method in libvcs returns a QueryList, enabling chainable filtering on the results. - [Command helpers - libvcs._internal.run](https://libvcs.git-pull.com/internals/run/): Misc. legacy helpers subprocess and finding VCS binaries. - [Shortcuts - libvcs._internal.shortcuts](https://libvcs.git-pull.com/internals/shortcuts/): Shortcuts for creating repos. - [SubprocessCommand - libvcs._internal.subprocess](https://libvcs.git-pull.com/internals/subprocess/): Invocable subprocess wrapper. - [Typing utilities - libvcs._internal.types](https://libvcs.git-pull.com/internals/types/): Internal type annotations. - [Code Style](https://libvcs.git-pull.com/project/code-style/): libvcs uses ruff for formatting and linting in a single tool. The full rule set is declared in pyproject.toml under [tool.ruff]. - [Contributing](https://libvcs.git-pull.com/project/contributing/): As an open source project, libvcs accepts contributions through GitHub. - [Releasing](https://libvcs.git-pull.com/project/releasing/): libvcs is pre-1.0. Any minor bump (e.g. 0.39 to 0.40) may contain breaking changes. Patch bumps (0.39.0 to 0.39.1) are reserved for bug-fixes and documentation. - [Workflow](https://libvcs.git-pull.com/project/workflow/): uv is a required package to develop. - [libvcs.sync.base](https://libvcs.git-pull.com/sync/base/): Base objects / classes for projects. - [libvcs.sync.git](https://libvcs.git-pull.com/sync/git/): For git(1). - [libvcs.sync.hg](https://libvcs.git-pull.com/sync/hg/): For mercurial, aka hg(1). - [Sync - libvcs.sync](https://libvcs.git-pull.com/sync/): Compare to: fabtools.require.git, salt.states.git, ansible.builtin.git - [libvcs.sync.svn](https://libvcs.git-pull.com/sync/svn/): For subversion, aka svn(1) - [QueryList Filtering](https://libvcs.git-pull.com/topics/filtering/): libvcs uses QueryList to enable Django-style filtering on git entities. Every ls() method returns a QueryList, letting you filter branches, tags, remotes, and more with a fluent, chainable API. - [Traversing Git Repos](https://libvcs.git-pull.com/topics/traversing_git/): libvcs provides Managers and Commands for intuitively traversing and navigating entities in a git repository—branches, tags, remotes, stashes, and more—with ORM-like convenience via QueryList. - [URL Parsing](https://libvcs.git-pull.com/topics/url_parsing/): libvcs provides typed URL parsing for git, Mercurial, and Subversion repositories. Think of it as urllib.parse for VCS URLs—detecting URL types, extracting components, and converting between formats. - [Framework: Add and extend URL parsers - libvcs.url.base](https://libvcs.git-pull.com/url/base/): Foundational tools to detect, parse, and validate VCS URLs. - [Constants - libvcs.url.constants](https://libvcs.git-pull.com/url/constants/): Constants shared across libvcs.url. - [Git URL Parser - libvcs.url.git](https://libvcs.git-pull.com/url/git/): Detect, parse, and change git URLs using libvcs’s URL parser for git(1). It builds on top of the VCS-friendly URL parser framework. - [Mercurial URL Parser - libvcs.url.hg](https://libvcs.git-pull.com/url/hg/): For hg, aka hg(1). - [URL Parser - libvcs.url](https://libvcs.git-pull.com/url/): We all love urllib.parse, but what about VCS systems? - [VCS Detection - libvcs.url.registry](https://libvcs.git-pull.com/url/registry/): Detect VCS from git, hg, and svn URLs. - [SVN URL Parser - libvcs.url.svn](https://libvcs.git-pull.com/url/svn/): For svn, aka svn(1).