Documentation menu

Collaboration

Organizations, teams, members and repository access on Rinko Hub, and how hosted permissions relate to protocol-level privacy.

A repository on Rinko Hub is owned either by a person or by an organization. Ownership decides who administers it and who can be granted access to it. This guide covers organizations, teams, members and repository access, and ends with the distinction that matters most: how hosted access control relates to the encryption-based privacy described in the privacy guide.

Organizations

An organization is a shared owner. Repositories it owns are administered by its members rather than by one individual, and its name is the owner half of an owner/repo reference — exactly where a personal handle would otherwise sit.

Organizations have their own visibility, public or private, and a join policy that decides how people get in: invite-only, request-to-join, or open.

Members

People join an organization by invitation, or by requesting to join where the join policy allows it. Both are handled in the Rinko Hub web interface. An invitation is accepted once and only once — accepting is atomic, so two clicks on the same invitation cannot produce two memberships. An approved join request always grants the base member role, never anything higher.

Teams

A team is a named group of organization members that can be granted access to repositories as a unit. Teams belong to an organization, and a team can only be granted access to repositories that same organization owns — a grant that crosses an organization boundary is refused.

Team access is resolved when access is checked, rather than being copied onto each member. Adding someone to a team grants them its repository access immediately; removing them, archiving the team, or their leaving the organization withdraws it just as immediately.

Note: A personal repository has no teams

Teams are an organization mechanism. A repository owned by a person has no team access list at all — collaborators are added to it individually.

Roles and access

Rinko Hub has two separate role systems: one for the organization, and one for each repository. A role in the first does not substitute for a role in the second, though an organization role does establish a baseline.

Organization roles

Three roles are built in — owner, admin and member — and an organization may define custom roles beyond them. Roles are ranked, and the rank is what prevents privilege escalation: you cannot invite someone at or above your own rank, define a role that ranks at or above your own, or grant a permission you do not hold yourself. A custom role can never rank above the built-in admin tier.

What a role may do is expressed as a set of named permissions rather than hard-coded per role — viewing the organization, inviting members, removing members, managing roles, creating repositories, managing repository access, transferring ownership, deleting the organization, and others. Custom roles are assembled from that same catalog.

Note: Two things are owner-only and cannot be delegated

Transferring ownership and deleting the organization cannot be granted to a custom role. Billing is likewise restricted to the owner. Everything else is delegable to a role you have the standing to create.

Repository roles

Access to an individual repository is one of five roles:

RoleCan do
OwnerEverything, including deleting and transferring the repository.
AdminManage settings, members and access; everything below.
MaintainerMerge and manage releases; everything below.
ContributorContribute work to the repository, and view it.
ViewerView only.

When several sources grant access, the strongest wins, resolved in a fixed order: outright ownership first, then an access grant made to you directly, then the strongest role any of your teams confers, and finally the baseline your organization membership provides.

Note: Owner is not assignable

The owner role cannot be handed out as a grant, to a person or to a team — a repository's owner changes by transfer, not by being added to an access list.

Visibility

A repository is public or private. A private repository is hidden from people without access rather than refused to them: they are told it does not exist, not that they lack permission. This is deliberate — a refusal would confirm the repository exists, which for a private repository is itself information worth withholding.

Access from the CLI

Your account's access governs what the CLI can do. Listing what you can reach is verified behaviour:

Command
nexa repos
Expected output
ID	OWNER	SLUG	VISIBILITY	PROVISIONING
rh_repo_…	acme	capture-demo	private	ready

Bring one into your Development Root with nexa get acme/capture-demo, using the owner/repo form — the owner is a personal handle or an organization name, and the CLI resolves it either way.

Note: Read access still syncs

An account with read access can run nexa sync successfully. It reports This account has read access, so nothing was contributed rather than failing. Contributing work requires write access; syncing to receive work does not.

Two further commands connect local work to the platform. nexa publish creates a Rinko Hub repository from the recorded work in the current directory and publishes it — the code is live when the command returns — and nexa link <repository> associates work you already have with a repository that already exists on Rinko Hub. A published or linked repository is owned by whoever you publish it under, and takes its access rules from that owner.

How this relates to sealed content

Everything above is access control: Rinko Hub deciding which requests to answer. Sealed content is encryption: the file is unreadable without the key, whoever is holding it. They are independent mechanisms, and they fail in opposite directions.

Repository accessSealed content
Enforced byRinko Hub, per requestEncryption, everywhere the data goes
GranularityThe whole repositoryIndividual paths
Survives having a copyNoYes
Managed fromThe Rinko Hub web interfaceThe CLI, on a device holding the key
Important: A private repository does not seal anything

Marking a repository private restricts who Rinko Hub will serve it to. It does not encrypt any file. Everyone you grant access to reads every unsealed file in full, and anyone who obtains a copy of the repository reads it too.

Conversely, granting someone repository access does not give them a label key. They will sync the repository successfully and still be unable to read sealed paths — and because nexa restore cannot write a sealed file on such a device, their working tree is already incomplete before they record. A version recorded there omits the sealed entry, so they should not record versions in a repository that uses labels at all. See Privacy and file control.

Managing label access on Rinko Hub

Each repository has a Label access page, in the repository's own tab bar. It lists the labels the repository's policy declares, which devices hold a key for each, and who those devices belong to. From it you can grant a label key to a person's device, expand a grant across a team in one operation, and rotate a label to withdraw access. Every one of those actions is recorded in an audit trail you can read back on the same page.

Granting is deliberately a separate authority from the rest of repository administration. It belongs to the repository's owner and admin roles, and is not implied by being able to contribute work or to merge it: proposing and accepting changes is ordinary repository work, and neither should carry the authority to widen who can read a protected path.

Note: A key you do not hold cannot be given away

Granting is performed by your account's own hosted device, which must itself hold a key for that label. If it holds none, the label cannot be granted by anyone, whatever their role — this is cryptography, not permission, and no platform role can change it. The page shows which labels your account can actually act on.

Important: Revocation is forward-only

Rotating a label mints a new key and carries only the devices you retain into it. That prevents future access, and nothing more. A device that has been removed keeps whatever it could already read: everything sealed under the epochs it already held. Those objects may already exist on that machine, and no server can reach out and make them unreadable. Rotate to stop new secrets reaching a device — and treat anything it could previously read as compromised, rather than as recovered.

Note: Organisation members need a direct collaborator entry

Only direct collaborators — and the owner, when the owner is a person — are listed as possible recipients. Someone whose access comes solely from organisation membership does not appear, because an organisation's membership can be large and changes without touching this repository. Add them to the repository as a collaborator first; that is the same action that makes their access explicit.

Labels themselves are still created from the CLI, in the repository's .nexapolicy file — Rinko Hub distributes keys for labels that already exist, rather than defining them. See Privacy and file control for how labels and policy are written.