Docs

Platforms and mirrors

torii speaks to nine hosts through seven clients. The platform is detected from the remote's URL, and the right client is used without you naming it.

working tree one .git, one history torii mirror sync gitlab primary · CI runs here github replica · own token codeberg replica · own token one push · one set of refs · a replica that rejects does not roll back the others

The hosts

ClientHostsNotes
githubGitHubconfigurable API base, for Enterprise
gitlabGitLabincluding self-hosted
giteaGitea, Codeberg, Forgejoone client, identical API
bitbucketBitbucket Cloudtoken containing : is treated as user:app_password
sourcehutSourcehutissues and builds; PRs are the email-patch workflow
radicleRadiclewraps the rad binary; issues and patches
azureAzure DevOpsthree-level org/project/repo paths

Not every host exposes every concept. Bitbucket Cloud has no release object and no package registry; Radicle has no CI. Those subcommands return an explicit "not native on this platform" error rather than pretending to work.

Mirrors

One working tree, several remotes, one command:

torii mirror add gitlab user <username> <repo> --primary
torii mirror add github user <username> <repo>
torii mirror add codeberg user <username> <repo>
torii mirror sync
torii mirror list
torii mirror promote gitlab user
torii mirror autofetch --enable --interval 30m

The primary is where CI runs and where you read issues; the replicas are copies. Each carries its own token, and a replica that rejects a push does not roll back the ones that succeeded.

Creating repositories

torii remote create github <repo> --private --description "…"
torii remote create github,gitlab,codeberg <name> --public --push
torii remote visibility github <owner> <repo> --public
torii remote configure github <owner> <repo> --default-branch main
torii remote info github <owner> <repo>

Comma-separated platforms create the repository on each in one invocation. visibility currently covers GitHub and GitLab.

Choosing which remote a command talks to

For a mirrored repository, each backend has its own pipelines, packages and releases. --remote picks one:

torii pipeline list --remote github-paskidev
torii release edit v0.13.0 --notes new.md --remote github-paskidev

The flag is global within the command, so torii pipeline --remote NAME list and torii pipeline list --remote NAME are the same thing. Without it, the platform is detected from origin.

Self-hosted

~/.config/torii/platforms.toml declares your own hosts — self-hosted GitLab, Gitea, Forgejo, GitHub Enterprise, Bitbucket Data Center — so URL detection routes them to the right client instead of failing to recognise the domain.