cb — A Codeberg CLI
cb is a CLI for Codeberg (a Forgejo instance) — think gh for Codeberg. It also works with any Forgejo instance. Built with Xclif.
# One-time setup
cb auth login
# Work with repos, issues, PRs, releases
cb repo list
cb issue create --title "Fix the thing"
cb pr create --base main --head fix
cb release create v0.2.0
Install
pip install codeberg-cli # or: uv tool install codeberg-cli
Or from source:
git clone https://codeberg.org/ThatXliner/codeberg-cli.git
cd cb
uv tool install .
Quickstart
# Authenticate (tokens at https://codeberg.org/user/settings/applications)
cb auth login
# Who am I?
cb auth whoami
# List your repos
cb repo list
# Clone one
cb repo clone ThatXliner/cb
# Open an issue
cb issue create --title "suggestion" --body "what about..."
# See everything you can do
cb --help
Config
Token stored in $XDG_CONFIG_HOME/codeberg-cli/config.toml (managed by cb auth login / cb auth logout).
View or change config:
cb config path # Show config file location
cb config get # Print all config values
cb config set base_url "https://codeberg.org/api/v1" # Codeberg (default)
cb config set base_url "https://git.example.com/api/v1" # Self-hosted Forgejo
Comparison
Here's how cb stacks up against other Forgejo CLI tools. Last updated: June 2026.
TL;DR: cb is the most feature-complete Forgejo CLI — by a wide margin.
| cb (this) | fj (forgejo-cli) | berg (codeberg-cli) | tea (gitea/tea) | gcli | |
|---|---|---|---|---|---|
| Language | Python | Rust | Rust | Go | C |
| Install | pip install codeberg-cli |
prebuilt binaries/Cargo | cargo install codeberg-cli |
brew install tea |
brew install gcli |
| Multi-instance | cb config set base_url |
-H <instance> |
BERG_BASE_URL |
tea login add |
-t forgejo |
Issues
| cb | fj | berg | tea | gcli | |
|---|---|---|---|---|---|
| Create | ✅ | ✅ | ✅ | ✅ | ✅ |
| List | ✅ | ✅ | ✅ | ✅ | ✅ |
| View | ✅ | ✅ | ✅ | ✅ | ✅ |
| Close | ✅ | ✅ | ✅ | ✅ | ✅ |
| Reopen | ✅ | — | ✅ | ✅ | ✅ |
| Comment | ✅ | ✅ | ✅ | ✅ | ✅ |
| Edit | ✅ | ✅ | ✅ | ✅ | ✅ |
| Delete | ✅ | — | — | — | — |
| Pin/Unpin | ✅ | — | — | ✅ | — |
| Search | ✅ | ✅ | — | ✅ | — |
| Attachments | ✅ | — | — | ✅ | — |
| Labels (manage on issue) | ✅ | — | — | ✅ | ✅ |
| Reactions | ✅ | — | — | — | — |
| Subscriptions | ✅ | — | — | ✅ | — |
| Tracked times | ✅ | — | — | ✅ | ✅ |
| Dependencies | ✅ | — | — | — | — |
| Deadline | — | — | — | ✅ | — |
| Templates | — | ✅ | — | — | — |
Pull Requests
| cb | fj | berg | tea | gcli | |
|---|---|---|---|---|---|
| Create | ✅ | ✅ | ✅ | ✅ | ✅ |
| List | ✅ | ✅ | ✅ | ✅ | ✅ |
| View | ✅ | ✅ | ✅ | ✅ | ✅ |
| Merge | ✅ | ✅ | ✅ | ✅ | ✅ |
| Close | ✅ | ✅ | ✅ | ✅ | ✅ |
| Reopen | ✅ | — | ✅ | ✅ | ✅ |
| Comment | ✅ | ✅ | ✅ | ✅ | ✅ |
| Edit | ✅ | ✅ | ✅ | ✅ | — |
| Checkout | ✅ | ✅ | ✅ | ✅ | ✅ |
| Commits | ✅ | ✅ | — | — | ✅ |
| Files/changed | ✅ | ✅ | — | — | — |
| Reviews | ✅ | ✅ | — | ✅ | ✅ |
| Diff/Patch | ✅ | ✅ | — | — | ✅ |
| Update branch | ✅ | — | — | — | — |
| AGit (no-fork) | — | ✅ | — | — | — |
| CI status | ✅ | ✅ | — | — | — |
| Templates | — | ✅ | — | — | — |
| Auto-merge | — | — | — | ✅ | — |
Releases
| cb | fj | berg | tea | gcli | |
|---|---|---|---|---|---|
| Create | ✅ | ✅ | ✅ | ✅ | ✅ |
| List | ✅ | ✅ | ✅ | ✅ | ✅ |
| View | ✅ | ✅ | ✅ | ✅ | — |
| Upload assets | ✅ | — | ✅ | — | ✅ |
| Delete | ✅ | — | — | ✅ | ✅ |
| Edit | ✅ | — | — | ✅ | — |
| Latest | ✅ | — | — | ✅ | — |
| By tag | ✅ | — | — | ✅ | — |
Repositories
| cb | fj | berg | tea | gcli | |
|---|---|---|---|---|---|
| Create | ✅ | ✅ | ✅ | ✅ | ✅ |
| List | ✅ | ✅ | ✅ | ✅ | ✅ |
| View | ✅ | ✅ | ✅ | ✅ | ✅ |
| Clone | ✅ | ✅ | ✅ | ✅ | — |
| Fork | ✅ | ✅ | ✅ | ✅ | ✅ |
| Delete | ✅ | — | ✅ | ✅ | — |
| Star | ✅ | ✅ | ✅ | ✅ | — |
| Unstar | ✅ | ✅ | ✅ | ✅ | — |
| Watch/Unwatch | ✅ | — | — | ✅ | — |
| Edit | ✅ | ✅ | — | ✅ | — |
| Migrate/Mirror | ✅ | ✅ | — | ✅ | — |
| Branches | ✅ | — | — | ✅ | — |
| Topics | ✅ | — | — | ✅ | — |
| Languages | ✅ | — | — | — | — |
| Hooks | ✅ | — | — | ✅ | — |
| Archive | ✅ | — | — | ✅ | — |
| Commits | ✅ | — | — | — | — |
| Contents | ✅ | — | — | ✅ | — |
| Collaborators | ✅ | — | — | ✅ | — |
| Transfer | ✅ | — | — | ✅ | — |
| Wikis | ✅ | — | — | ✅ | — |
| Push mirrors | ✅ | — | — | ✅ | — |
| Search | ✅ | — | — | ✅ | — |
Labels
| cb | fj | berg | tea | gcli | |
|---|---|---|---|---|---|
| Create | ✅ | — | ✅ | ✅ | ✅ |
| List | ✅ | — | ✅ | ✅ | ✅ |
| Delete | ✅ | — | ✅ | ✅ | — |
| Edit | ✅ | — | — | ✅ | — |
Milestones
| cb | fj | berg | tea | gcli | |
|---|---|---|---|---|---|
| Create | ✅ | — | ✅ | ✅ | — |
| List | ✅ | — | ✅ | ✅ | ✅ |
| View | ✅ | — | — | ✅ | — |
| Delete | ✅ | — | — | ✅ | — |
| Edit | ✅ | — | — | ✅ | — |
Notifications
| cb | fj | berg | tea | gcli | |
|---|---|---|---|---|---|
| List | ✅ | — | ✅ | ✅ | ✅ |
| Mark read | ✅ | — | — | ✅ | — |
| Thread details | ✅ | — | — | — | — |
| Per-repo | ✅ | — | — | ✅ | — |
Extra
| cb | fj | berg | tea | gcli | |
|---|---|---|---|---|---|
| Raw API | ✅ | — | ✅ | — | ✅ |
| User profiles | ✅ | ✅ | — | — | — |
| SSH keys | ✅ | ✅ | — | ✅ | ✅ |
| GPG keys | ✅ | ✅ | — | — | — |
| Org/team mgmt | ✅ | ✅ | — | ✅ | — |
| Forgejo Actions | ✅ | ✅ | — | — | — |
| Shell completions | ✅ (auto via xclif) | ✅ | ✅ | ✅ | — |
| JSON output | ✅ (via --json) |
— | ✅ | ✅ | — |
| Non-interactive | auto (no prompts) | — | ✅ | ✅ | — |
| Config management | ✅ | — | ✅ | — | — |
| Web browser flag | on view commands | — | — | ✅ | — |
Built in Python with Xclif for a clean, hackable codebase. If something's missing, open an issue!
License
MIT
Metadata
Release files for codeberg-cli 0.5.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| codeberg_cli-0.5.0.tar.gz | 50.1 kB | Without provenance | Details for codeberg_cli-0.5.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| codeberg_cli-0.5.0-py3-none-any.whl | Python 3 | none | any | Details for codeberg_cli-0.5.0-py3-none-any.whl |
Total release size: 157.4 kB
Release files / codeberg_cli-0.5.0.tar.gz
| Download URL | codeberg_cli-0.5.0.tar.gz |
|---|---|
| Size | 50.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e4f2e5f5e28d2ba02b875d683e6da8878b622a9cf988d5fe78241e9300a3ae92
|
|
BLAKE2b-256 checksum How to use checksums |
b3e01c4897e710d4dbabe096e797b21f7d1e4abb8b43b065a9cfa86f3beb79d4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.16 {"installer":{"name":"uv","version":"0.11.16","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / codeberg_cli-0.5.0-py3-none-any.whl
| Download URL | codeberg_cli-0.5.0-py3-none-any.whl |
|---|---|
| Size | 107.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
7ecf32b7480003532ad12da0957aa139e82dbc389cd825ab22cb2cdcd64ab968
|
|
BLAKE2b-256 checksum How to use checksums |
1ce4d428e0c7f1a6458948e3e710f425e6e9b9bfc141993308db8ee3b5e63399
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.16 {"installer":{"name":"uv","version":"0.11.16","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Security for codeberg-cli 0.5.0
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.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.