description: The maintainer-only launch steps in order: accounts and names, repository settings, trusted publishing and the first release, with the fallback when a name is taken.¶
Launch registrations¶
What only the maintainer can do, in order, with the URL for each step, what to do when a name turns out to be taken, and which steps cannot be undone. Availability was checked on 2026-10-18 through the registries' JSON and RDAP APIs (details in the findability research and the commit that added this page); re-check anything older than a week before you pay for it.
| Name | Status on 2026-10-18 | Evidence |
|---|---|---|
PyPI karni, karni-cli, karni-payments |
free | https://pypi.org/pypi/<name>/json → 404 |
PyPI karni-framework, karnifw (fallbacks) |
free | same, 404 |
npm @karni/ui, @karni/payments-ui, karni |
free; no package in the @karni scope and no author karni (registry.npmjs.org/-/v1/search?text=scope:karni → 0) |
the scope is claimed by creating an org named karni; the web pages answer 403 to scripts, so claim it early |
GitHub user/org karni |
taken — a user account created 2012-02-10, 0 public repositories, no activity since 2015 (api.github.com/users/karni) |
abandoned, but GitHub does not release names; karni-framework, karnifw, karni-dev, getkarni, usekarni are free |
Docker Hub karni |
taken — user since 2018-08-09, 0 repositories (hub.docker.com/v2/users/karni/) |
abandoned; karniframework or publish under your own namespace |
Read the Docs karni |
free (app.readthedocs.org/projects/karni/ → 404) |
not needed while the site is on GitHub Pages |
karni.dev |
taken — registered 2024-10-25, expires 2027-10-25, Namecheap, no site | no sign of a software project; a confusingly similar framework site is unlikely, but the domain is not available |
karni.sh |
taken — registered 2026-06-23, parked on Hostinger | recent and parked; may be for sale |
usekarni.com, getkarni.com, karnifw.dev |
free (RDAP 404) | |
| Software named Karni | none found; nearest is karn-lang (an agent programming language on PyPI) and the usual Karni Mata / personal-name noise |
no collision |
Every public URL lives in packages/karni/karni/links.py; after a decision
below changes one, edit it there and run python -m karni.links sync
(and sync --rewrite OLD NEW for the prose), then commit.
1. Accounts and names¶
- GitHub organisation — reversible (renaming an org breaks links).
karniis taken. Createkarni-frameworkat https://github.com/organizations/plan (free plan), or keep the repository under your user and skip this step. If you create the org, transfer the repository (https://github.com/cbsshekhawat18-lab/karni/settings → Danger zone → Transfer), then setREPO_SLUGinlinks.pyand sync. Upload the avatar:assets/brand/avatar-512.png(Settings → Profile). - GitHub user 2FA — reversible. https://github.com/settings/security: an authenticator app plus recovery codes stored offline. Required for the trusted-publishing environments below to mean anything.
- PyPI account — the account name is permanent.
https://pypi.org/account/register/, then 2FA at
https://pypi.org/manage/account/#two-factor (mandatory for publishing).
Set a Gravatar on the account e-mail at https://gravatar.com with
assets/brand/avatar-400.png— PyPI shows no package logo, only the owner's Gravatar. Ifkarniis taken by the time you publish: usekarni-frameworkfor the core package (the fallback measured free), rename in all threepyproject.tomlfiles and the docs, and keep the import namekarni. - npm account and the
@karniorg — org names cannot be renamed. https://www.npmjs.com/signup, 2FA at https://www.npmjs.com/settings/~/tfa (set to "authorization and publishing"), then create the org at https://www.npmjs.com/org/create namedkarni; that claims the@karniscope. Uploadassets/brand/avatar-460.pngas the org avatar (org settings). If the org name is taken, createkarni-uiand publish@karni-ui/ui— updatenamein bothpackage.jsonfiles and every import in the docs and scaffold (grep -rn "@karni/"). - Docker Hub — optional; namespaces are permanent. Only if images
will be published:
karniis taken, createkarniframeworkat https://hub.docker.com/orgs and uploadassets/brand/avatar-512.png. - Domain — a purchase, refundable only within the registrar's grace
period.
karni.devandkarni.share taken. Buykarnifw.dev(orusekarni.com) at any registrar; the.devTLD forces HTTPS, which GitHub Pages provides. Until it is live the site stays athttps://cbsshekhawat18-lab.github.io/karni/— that URL is in every error message, so changeDOCS_BASE_URLinlinks.py, sync, and redeploy the docs before the first PyPI release, not after. Do not buykarni.shfrom the parker; a parked.shis a bargaining position. - Social accounts — reversible. If you create an X/Bluesky/Mastodon
account for the launch, use
assets/brand/avatar-400.pngand the About line from the research.
2. Repository settings¶
- Description, website, topics — reversible. Settings → General, or
the
gh repo editcommand in releasing with the About line and the 20 topics from the research. - Social preview — reversible. Settings → General → Social preview →
upload
assets/brand/social-1280x640.png. - GitHub Pages — reversible. Settings → Pages → Source: GitHub Actions. The docs workflow deploys; the site must be live before the first release (error-code URLs point at it).
- Private vulnerability reporting and Dependabot alerts — reversible. Settings → Security.
- Environments
pypiandnpm— reversible. Settings → Environments: create both, add yourself as required reviewer. - Sponsors (optional) — reversible. https://github.com/sponsors:
profile image
assets/brand/avatar-400.png.
3. Trusted publishing (no tokens stored anywhere)¶
- PyPI trusted publishers — reversible. For each of
karni,karni-cli,karni-payments,karni-approvals,karni-impersonation: https://pypi.org/manage/account/publishing/ → "Add a new pending publisher": ownercbsshekhawat18-lab(or the org), repositorykarni, workflowrelease.yml, environmentpypi. - npm trusted publishers — reversible. For
@karni/ui,@karni/payments-ui,@karni/approvals-uiand@karni/impersonation-ui: the package must exist first (publish 0.2.0 once by hand withnpm publish --access publicfrom the built tarball, with 2FA), then Package settings → Publishing access → Trusted publisher: this repository, workflowrelease.yml, environmentnpm. - Enable the release workflow — reversible. Settings → Secrets and
variables → Actions → Variables:
KARNI_PUBLISHING = true. Until it is set,release.ymlbuilds and checks everything and publishes nothing.
4. The first release¶
- Run the dry run: Actions → Release → "Run workflow" with
dry_run = true. It builds every artifact, runstwine checkandnpm publish --dry-run, and uploads the files for inspection. - Tag
v0.2.0(the first published release; 0.1.0 was the pre-release development line) — a published version is permanent on PyPI and npm; a mistake needsv0.2.1. The tag exists locally since the release commit:git push origin main v0.2.0, approve thepypiandnpmenvironments when the workflow pauses. - Verify the pages: https://pypi.org/project/karni/, https://www.npmjs.com/package/@karni/ui — the README renders, the links resolve, the avatar/Gravatar shows.
- Only now announce — see the launch checklist.