Search by

addis / harar

samifouad

harar's client: Harar\vault(). Where each secret may go, and the secret itself for one host only.

Package info

github.com/addiscorp/harar

Homepage

Language:Rust

pkg:composer/addis/harar

Fund package maintenance!

samifouad

Statistics

Installs: 3

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 34

v0.3.1 2026-11-08 04:52 UTC

This package is auto-updated.

Last update: 2026-11-09 03:23:00 UTC


README

A free, open-source secrets vault for developers and their agents.

  • No tokens on disk. .env files and config hold harar:// references; the values live in an encrypted vault and are filled in when a command runs.
  • Real tokens never enter an agent's sandbox. Agents get short-lived credentials, or a broker outside the sandbox adds the real one on the way out.
  • OIDC between services. harar issues short-lived identity tokens so services trust each other without shared secrets.

It runs on macOS (Apple silicon and Intel Macs with a T2 chip, where the master key is sealed to the Secure Enclave) and Linux. It works without an account.

Status: early and not yet audited. Don't keep anything in it you can't rotate.

Install

curl -fsSL https://harar-releases.addis.gg/install.sh | sh

It installs harar into ~/.harar/bin, checked against the SHA-256 in the release's manifest, with no sudo. Builds: macOS (Apple silicon and Intel) and Linux x86_64. sh -s -- --canary installs the newest build of main.

From your code

The harar binary is the server. Programs talk to it through a client on its local socket; the clients hold no secrets.

  • Rust: the harar crate, harar = "0.3".
  • JavaScript and TypeScript: the harar npm package.
  • Python: the harar PyPI package, pip install harar.
  • Ruby: the harar gem, gem install harar.
  • PHP: the addis/harar Composer package, composer require addis/harar.
  • Go: the github.com/addiscorp/harar/go module, go get github.com/addiscorp/harar/go.

Each one resolves harar:// references, the way 1Password's SDKs resolve op:// ones, from the agent on your machine with no account or token:

import { vault } from 'harar'

const key = await vault().secrets.resolve('harar://prod/shop/STRIPE_KEY')

All of them publish from a stable release, at its version.

An edge, for services off your network

harar edge puts an always-on harar API in your own Cloudflare, Vercel or Supabase account, so a service on Railway or Vercel can resolve harar:// references with a narrow service token. Every request is logged to a sink you choose, best in another account. See docs/edge.md.

harar edge init --cloudflare        # writes ./harar-edge; deploy it with wrangler
harar edge pair https://harar-edge.<you>.workers.dev --dir harar-edge
harar edge put prod/shop/STRIPE_KEY
harar edge token create railway-shop --read 'prod/shop/*'

Build

cargo build --release --locked

server/ is the binary (package harar-server); client/ is the harar crate.

Run a primary

A primary holds one org's vault and policy and issues its tokens. The OS user named by --owner-user speaks as the owner; everyone else is refused until the owner maps them.

The Postgres connection string lives in a file only the primary's user can read (0600), so a password never shows in ps.

sudo harar serve --org gg.addis --machine bugsy \
  --owner gg.addis.human.sami --owner-user sami \
  --postgres-file /var/lib/harar/postgres \
  --master-key-file /etc/harar/master.key

harar policy show
harar policy role set gg.addis.role.site --read 'prod/site/*' \
  --token 'https://api.simien.dev deploy:site'
harar policy bind gg.addis.service.site --role gg.addis.role.site --zone gg.addis.zone.bugsy
harar policy user map site gg.addis.service.site
harar policy test --actor gg.addis.service.site --read prod/site/DATABASE_URL
harar token --aud https://api.simien.dev --scope deploy:site

See docs/architecture.md for the model.

License

MIT