Skip to main content

Proof-of-concept: encrypted repo-native secrets for developer teams

Project description

Yoink

Lean, repo-native secrets for developer teams.

Encrypted secrets live in your repo. Developers decrypt only what they have access to.

Requirements

  • Python 3.9+
  • age (brew install age)
  • Git

Install

pip install yoink-py

Commands

yoink secrets              Edit all secrets in $EDITOR
yoink access edit          Review members and requests in $EDITOR
yoink access request       Request access to the vault (new developers)
yoink run <env> -- <cmd>   Run a command with secrets injected

Quick start

cd your-repo
yoink secrets   # bootstraps vault on first run, then opens editor

The vault is created in .yoink/ with dev, staging, and production environments. Two vault-wide recovery keys are printed once — back them up in your team password manager.

Secrets editor

yoink secrets opens a buffer like:

[dev]
DATABASE_URL=postgres://localhost/mydb
API_KEY=sk_test_abc

[staging]
DATABASE_URL=postgres://staging/mydb

[production]
DATABASE_URL=postgres://prod/mydb
  • Edit values inline
  • Add a key to add it
  • Delete a line to remove a secret
  • Add a new [environment] header to create a new environment
  • Save and quit — changes are applied

Access editor

yoink access edit opens a buffer like:

## members
jack    dev staging production
sarah   dev staging

## requests
bob     dev staging
  • Edit the environment list on a member line to change their access
  • Delete a member line to revoke their access
  • Move a request line above ## requests to approve it
  • Delete a request line to reject it
  • Save and quit — changes are applied

New developer workflow

yoink access request   # generates keypair, writes .yoink/requests/<you>.json
git add .yoink/requests/<you>.json
git commit -m "access request: <you>"
# open a PR

A maintainer pulls the PR and runs yoink access edit. Moving your line above ## requests and saving approves you. The vault files are re-encrypted to include your key.

How it works

  • Secrets are encrypted with age and stored as .enc files in .yoink/
  • Each developer has an identity keypair in ~/.yoink/
  • The manifest (manifest.json) tracks who has access to what
  • Re-encryption happens automatically when access changes

Limitations

  • Git history is immutable — revoking access doesn't erase past exposure
  • No runtime audit — who decrypted what and when is not tracked
  • Best for small-to-medium teams

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

yoink_py-0.1.0.tar.gz (13.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

yoink_py-0.1.0-py3-none-any.whl (14.4 kB view details)

Uploaded Python 3

File details

Details for the file yoink_py-0.1.0.tar.gz.

File metadata

  • Download URL: yoink_py-0.1.0.tar.gz
  • Upload date:
  • Size: 13.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for yoink_py-0.1.0.tar.gz
Algorithm Hash digest
SHA256 1d2b587933115c50e0e3e765a08ee9c8196e297f492b6c57dac4a8ede71aece9
MD5 93f5255fe165b82637c3a0950e341f19
BLAKE2b-256 7812ed8383e72b513f47ca1a19331cd3ab9b1bfe69b6469aed7222c453515153

See more details on using hashes here.

File details

Details for the file yoink_py-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: yoink_py-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 14.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for yoink_py-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e055f9bb1a1cd7861b4a939ea7ef958047747112af141217ea55c87b0357f5bb
MD5 b28fabc6ff801a8910ab7caed3f581f7
BLAKE2b-256 a2f1efa9684d7ead4b8e554faf039ba866775fd18adcc1487da04773299be0f8

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page