Skip to main content

migtea

PyPI Python versions Tests License

Batch-migrate repositories between GitHub and Gitea from a terminal UI. migtea (migrate to Gitea) is a Textual TUI that drives the official gh and tea CLIs: it preflights both tools, diffs your GitHub account against a Gitea instance, lets you tick the repositories that are missing, totals their sizes, and migrates each one (wiki, LFS, issues, and more) with per-repo and overall progress.

Website: botmonster.com/migtea

Run it with no install:

uvx migtea

Why

Gitea's web "New Migration" page moves exactly one repository per submission. The engine behind it has no such limit, and neither does the tea CLI's tea repos migrate. migtea orchestrates that CLI across every repository you select, so moving a whole account is one pass instead of one form per repo.

Requirements

migtea does not bundle or install these; it uses whatever is already on your PATH, installed the official way:

  • GitHub CLI (gh), logged in (gh auth login).
  • Gitea CLI (tea), with at least one login configured (tea login add).
  • uv to run uvx migtea (or pip install migtea).
  • git is additionally required for the reverse (Gitea to GitHub) direction.

If a tool or login is missing, migtea's preflight screen prints the exact official command to fix it and waits for you to re-check. It never pipes a script into your shell and never installs anything itself.

Screens

1. Preflight. migtea checks that gh and tea are installed and logged in before anything else. If a check fails it prints the exact official command to fix it and waits; press r to re-check. Nothing runs until all four pass.

Preflight screen

2. Select. The full diff of both accounts, one row per GitHub repo with its visibility, size, and last push. Repos missing on the target are selectable; those already there are dimmed. Tick rows with space, filter by name, toggle forks and archived in or out, or hit "Select all missing". The footer keeps a running count and total size of what you have selected.

Select screen

3. Confirm. A summary of exactly what is about to happen: how many repos, the total size, and the target instance, so nothing migrates by accident.

Confirm screen

4. Migrate. Each repo is migrated in turn with a per-repo progress bar and a size-weighted total bar, while a log pane streams the result of every repo as it finishes.

Migrate screen

Directions

Direction How Transfers Does not transfer
GitHub → Gitea (default) tea repos migrate --service github Code, wiki, LFS, issues, labels, milestones, releases, pull requests GitHub Actions history, Projects, Discussions, stars, webhooks, branch protection
Gitea → GitHub git clone --mirror → gh repo create → git push --mirror Code, all branches and tags, best-effort wiki Issues and pull requests (GitHub has no import API)

Pass --direction gitea-to-github to reverse, or press d in the UI to flip.

Authentication

migtea never reads, prints, logs, or stores any token. GitHub auth is delegated to gh; Gitea auth is delegated to tea. For private GitHub repositories, migtea hands the output of gh auth token straight to tea's --auth-token flag in memory so Gitea can clone them; the value never touches disk or the log.

Options

migtea [--direction {github-to-gitea,gitea-to-github}] [--dry-run] [--version]

--dry-run walks the entire flow but replaces the migration call with an existence check, so you can rehearse safely before moving anything.

License

Apache-2.0.


Copyright © 2026 botmonster.com

Metadata

Release files for migtea 0.2.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 migtea 0.2.1
File Size Uploaded
migtea-0.2.1.tar.gz 12.4 kB Details

Built distribution (wheel)

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

Total release size: 28.5 kB

Release files / migtea-0.2.1.tar.gz

Download URL migtea-0.2.1.tar.gz
Size 12.4 kB
Tags Source
SHA-256 checksum
How to use checksums
7169f805d7402213c227be9543217ce961ad70fb5654386d57802ab9ed4928e7
BLAKE2b-256 checksum
How to use checksums
08efe62a8d2f0d012d0e57abb28f29826c082dbb02ecdafdf6ba9d9ec3111fb3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 11, 2026.

Transparency log

Release files / migtea-0.2.1-py3-none-any.whl

Download URL migtea-0.2.1-py3-none-any.whl
Size 16.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
2178f41147d74cc92bbfca0330c64e7d7123688b4611a9f5d4b830e87063a7df
BLAKE2b-256 checksum
How to use checksums
e33bd1ca7659eb7322fc189b53a64f38b3afdf4bcb73b58ab3cbc2787f7d9216
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 11, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.2.1 This release

2 release files

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