How it works
Write a secret
Store a key-value pair at a path (e.g.,
production/database/password). The SDK encrypts the data client-side using Seal before transmitting it.Seal encrypts on-chain
Seal distributes encryption key shares across a decentralized network of key servers. An on-chain access policy defines which wallet addresses can decrypt.
API design
The secrets API follows a path-based model inspired by HashiCorp Vault:| Operation | Method | Path | Description |
|---|---|---|---|
| Put | PUT | /secrets/{path} | Create or update a secret |
| Get | GET | /secrets/{path} | Read a secret |
| List | GET | /secrets/{path}?list=true | List keys at a path |
| Delete | DELETE | /secrets/{path} | Delete a secret |
/ separators for hierarchy: {environment}/{service}/{key}.
Path hierarchy
Organize secrets with a logical path structure:Global secrets
All secrets are global to your account — they are not scoped to a specific environment. Organize them using path hierarchy to logically group by environment, service, or purpose.Managed secrets
Some secrets are managed by Tusky and cannot be deleted. These are stored under the reservedtusky/ path prefix.
When you create an encrypted environment, Tusky automatically creates a managed secret at:
- Created automatically when an encrypted environment is created
- Non-deletable — attempting to delete returns
403 Forbidden - Readable — you can read the key material via the Secrets API
- Removed only when the parent environment is deleted
Encryption with Sui Seal
Secrets are encrypted using Seal, a decentralized encryption protocol on Sui:Client-side encryption
Plaintext never leaves your device. Data is encrypted before it reaches Tusky’s servers.
On-chain access policies
Smart contracts on Sui define who can decrypt. Policies are transparent, auditable, and tamper-proof.
Distributed key management
Encryption keys are split across multiple Seal key servers. No single server can reconstruct a key.
Token-gated access
Gate secret access on any on-chain condition: wallet address, NFT ownership, token balance, or custom Move logic.
Versioning
EveryPUT to a secret path creates a new version. Read a specific version with ?version=N, or omit to get the latest.