Providers¶
When create_remote is true and you don't pass --remote-url, keel creates
the repository on the provider named by your provider answer, via its REST
API, then wires origin and pushes.
The four providers¶
provider accepts github, gitlab, bitbucket, sourcecraft, or none.
Credentials and overrides always come from the environment — never from a
file:
| Provider | Token env (in priority order) | Owner override | Base-URL override |
|---|---|---|---|
github |
KEEL_GITHUB_TOKEN, GITHUB_TOKEN |
KEEL_GITHUB_OWNER |
KEEL_GITHUB_URL |
gitlab |
KEEL_GITLAB_TOKEN, GITLAB_TOKEN |
KEEL_GITLAB_OWNER |
KEEL_GITLAB_URL |
bitbucket |
KEEL_BITBUCKET_TOKEN, BITBUCKET_TOKEN |
KEEL_BITBUCKET_OWNER |
KEEL_BITBUCKET_URL |
sourcecraft |
KEEL_SOURCECRAFT_TOKEN, SOURCECRAFT_TOKEN |
KEEL_SOURCECRAFT_OWNER |
KEEL_SOURCECRAFT_URL |
The KEEL_<PROVIDER>_TOKEN form takes priority; the vendor's own variable
(GITHUB_TOKEN, etc.) is the fallback.
Owner derivation¶
The repository owner defaults to the namespace in your module_path:
github.com/owner/repo→ownergitlab.com/group/subgroup/repo→group/subgroup(GitLab's nested group/subgroup namespace is preserved)
Override it per provider with the KEEL_<PROVIDER>_OWNER variable from the table
above.
Tokens never touch disk¶
Tokens are read from the environment at run time and used only for the API call.
They are never written to disk and never recorded in .scaffold.lock.
Local-only and existing remotes¶
provider: nonescaffolds a purely local repository:git initand commit, but no remote is created.--remote-url <url>wires (or clones) an existing remote instead of creating a new one — useful when the repository already exists on a host. See Repo states for how keel reconciles when both local and remote already have history.