{"id":48783187,"url":"https://github.com/hack-ink/airseed","last_synced_at":"2026-04-13T15:02:03.662Z","repository":{"id":351047537,"uuid":"1209248515","full_name":"hack-ink/airseed","owner":"hack-ink","description":"Offline-first wallet seed generator for air-gapped environments.","archived":false,"fork":false,"pushed_at":"2026-04-13T11:27:29.000Z","size":58,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-13T12:29:11.954Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Rust","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hack-ink.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-13T08:33:16.000Z","updated_at":"2026-04-13T11:27:33.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/hack-ink/airseed","commit_stats":null,"previous_names":["hack-ink/airseed"],"tags_count":null,"template":false,"template_full_name":"hack-ink/vibe-mono","purl":"pkg:github/hack-ink/airseed","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hack-ink%2Fairseed","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hack-ink%2Fairseed/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hack-ink%2Fairseed/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hack-ink%2Fairseed/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hack-ink","download_url":"https://codeload.github.com/hack-ink/airseed/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hack-ink%2Fairseed/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31753653,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-13T09:16:15.125Z","status":"ssl_error","status_checked_at":"2026-04-13T09:16:05.023Z","response_time":93,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-04-13T15:02:01.579Z","updated_at":"2026-04-13T15:02:03.654Z","avatar_url":"https://github.com/hack-ink.png","language":"Rust","readme":"\u003cdiv align=\"center\"\u003e\n\n# airseed\n\nOffline-first wallet seed generator for air-gapped environments.\n\n[![License](https://img.shields.io/badge/License-GPLv3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0)\n[![Language Checks](https://github.com/hack-ink/airseed/actions/workflows/language.yml/badge.svg?branch=main)](https://github.com/hack-ink/airseed/actions/workflows/language.yml)\n[![Release](https://github.com/hack-ink/airseed/actions/workflows/release.yml/badge.svg)](https://github.com/hack-ink/airseed/actions/workflows/release.yml)\n\n\u003c/div\u003e\n\n## Feature Highlights\n\n- Generate fresh BIP39 mnemonics from a small offline-first Rust CLI.\n- Derive the default EVM wallet material from a fresh or existing mnemonic.\n- Intended for air-gapped workflows, not a full wallet.\n- Explicit safety boundary: no hand-rolled cryptography, no default secret persistence, and no\n  network path in the generation flow.\n- Current strongest no-hardware route documented in this repo: prepare a Tails USB on Windows and\n  boot it on compatible x86-64 hardware.\n\n## Status\n\n- Project direction: minimal offline mnemonic and key material generator.\n- Current implementation state: `generate` and `derive` commands are implemented.\n- Current output surface: English BIP39 mnemonic, default `m/44'/60'/0'/0/0` child key material,\n  and EVM address derivation.\n- Safety status: usable as a minimal tool, but still unaudited and not positioned as the safest\n  choice for real funds.\n- Production recommendation today: use a hardware wallet for real assets.\n- Current fallback recommendation without hardware wallet: boot Tails from USB, generate offline,\n  handwrite the mnemonic, and power the machine off.\n\n## Usage\n\n### Installation\n\n#### Download a Release Asset\n\n- For offline x86-64 Linux systems, including Tails, prefer the release asset named\n  `airseed-x86_64-unknown-linux-musl`.\n- For Apple Silicon macOS, use `airseed-aarch64-apple-darwin`.\n- For Windows x86-64, use `airseed-x86_64-pc-windows-msvc.exe`.\n\n#### Build from Source\n\n```sh\ngit clone https://github.com/hack-ink/airseed\ncd airseed\ncargo build --profile final-release\n```\n\n### Interaction\n\nGenerate a fresh 24-word mnemonic and derive the default EVM address:\n\n```sh\ncargo run -- generate\n```\n\nGenerate a 12-word mnemonic and include the derived private key:\n\n```sh\ncargo run -- generate --words 12 --show-private-key\n```\n\nDerive the same wallet material from an existing mnemonic through standard input:\n\n```sh\nprintf '%s\\n' 'test test test test test test test test test test test junk' \\\n  | cargo run -- derive --stdin --show-private-key\n```\n\nEcho the mnemonic during `derive` only when you intentionally want it in stdout:\n\n```sh\nprintf '%s\\n' 'test test test test test test test test test test test junk' \\\n  | cargo run -- derive --stdin --show-mnemonic\n```\n\nCross-check the derived address with `ethers.js` in a separate implementation:\n\n```sh\nnpm install\nprintf '%s\\n' 'test test test test test test test test test test test junk' \\\n  | npm run cross-check -- --stdin --expected 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266\n```\n\n### Safety Notes\n\n- The target tool should stay minimal, auditable, and offline-first.\n- Do not implement wallet cryptography from scratch. Use maintained crates in the class of\n  `bip39`, `bip32`, `rand_core::OsRng`, and `zeroize`.\n- Prefer `derive --stdin` over passing a mnemonic directly in command arguments, because shell\n  history may retain command lines.\n- `derive --stdin` and `npm run cross-check -- --stdin` do not echo the mnemonic unless\n  `--show-mnemonic` is explicitly set.\n- Prefer `cross-check` over `double check` when you are verifying the same mnemonic and path in an\n  independent implementation.\n- Do not treat Docker as a no-trace boundary.\n- Treat virtual machines as a lower-trust fallback than a live USB boot.\n- On commodity computers, the goal is to reduce residue, not to prove the complete absence of\n  traces.\n\n### Documentation\n\n- [Project boundaries](docs/spec/project-boundaries.md)\n- [Offline generation runbook](docs/runbook/offline-generation.md)\n- [Environment decision record](docs/decisions/offline-generation-environment.md)\n\n### References\n\n- [Tails home](https://tails.net/)\n- [Install Tails from macOS](https://tails.net/install/mac/)\n- [Install Tails from Windows](https://tails.net/install/windows/)\n- [Running Tails in a virtual machine](https://tails.net/doc/advanced_topics/virtualization/index.en.html)\n- [Docker Engine security](https://docs.docker.com/engine/security/)\n- [Docker tmpfs mounts](https://docs.docker.com/engine/storage/tmpfs/)\n- [Ethereum security guidance](https://ethereum.org/security/)\n\n## Development\n\n### Architecture\n\n- `src/cli.rs` defines the command-line interface and command dispatch.\n- `src/wallet.rs` owns mnemonic generation, key derivation, and Ethereum address formatting.\n- `docs/spec/project-boundaries.md` defines the future implementation boundary.\n- `docs/runbook/offline-generation.md` defines the recommended operator workflow.\n\n### Checks\n\n```sh\ncargo make checks\ncargo make test\ncargo run -- --help\n```\n\n## Support Me\n\nIf you find this project helpful and would like to support its development, you can buy me a coffee!\n\nYour support is greatly appreciated and motivates me to keep improving this project.\n\n- **Fiat**\n    - [Ko-fi](https://ko-fi.com/hack_ink)\n    - [Afdian](https://afdian.com/a/hack_ink)\n- **Crypto**\n    - **Bitcoin**\n        - `bc1pedlrf67ss52md29qqkzr2avma6ghyrt4jx9ecp9457qsl75x247sqcp43c`\n    - **Ethereum**\n        - `0x3e25247CfF03F99a7D83b28F207112234feE73a6`\n    - **Polkadot**\n        - `156HGo9setPcU2qhFMVWLkcmtCEGySLwNqa3DaEiYSWtte4Y`\n\nThank you for your support!\n\n## Appreciation\n\nWe would like to extend our heartfelt gratitude to the following projects and contributors:\n\n- The Rust community for their continuous support and development of the Rust ecosystem.\n\n## Additional Acknowledgements\n\n- TODO\n\n\u003cdiv align=\"right\"\u003e\n\n### License\n\n\u003csup\u003eLicensed under [GPL-3.0](LICENSE).\u003c/sup\u003e\n\n\u003c/div\u003e\n","funding_links":["https://ko-fi.com/hack_ink"],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhack-ink%2Fairseed","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhack-ink%2Fairseed","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhack-ink%2Fairseed/lists"}