age: a small, modern tool for encrypting files
age is a simple file encryption tool and Go library with short public keys, SSH key support and no configuration options, designed as a modern replacement for ad hoc GPG use when you need to encrypt a backup or a secret.
Drafted with AI from official documentation. Scripts were run in a test environment and repository links verified. Awaiting a human check. Did it work for you? Last edited Outdated?
FiloSottile/age
- Stars
- 23.9k
- Forks
- 679
- Language
- Go
- Licence
- BSD-3-Clause
- Last push
- 29 Aug 2026
On GitHub: A simple, modern and secure encryption tool (and Go library) with small explicit keys, no config options, and UNIX-style composability.
Open on GitHubage (about 24,000 stars on GitHub) is a file encryption tool written by Filippo Valsorda, a cryptography engineer who led the Go security team for several years, with Ben Cartwright-Cox and others. Development started in 2019 and the format specification was finalised in 2021; a compatible Rust implementation, rage, is maintained separately by Jack Grigg. The project’s aim is a tool that does one thing with sound defaults: encrypt a file to one or more recipients so that only they can decrypt it, with no key servers, no trust web, no algorithm choices and no configuration file.
How it works
A recipient is a short public key that starts with age1, generated by age-keygen, or an existing SSH public key, which means you can encrypt a file to anyone whose key is on GitHub. The matching secret key, or a passphrase for the symmetric mode, decrypts the file. Under the hood age uses X25519 key agreement, ChaCha20-Poly1305 for the payload and scrypt for passphrases, and the format is documented so that other implementations interoperate. Plugins extend it to hardware tokens such as YubiKeys and to cloud key management services. The same code is available as a Go library for programs that need to encrypt data at rest.
Who it is for
- Developers and administrators who need to encrypt a backup, a database dump or a configuration file before storing it somewhere they do not fully control.
- Teams that commit encrypted secrets to Git; tools such as SOPS use age as a backend.
- Anyone who found GPG hard to use correctly and wants a tool with fewer ways to go wrong.
- Go programmers who need a well-reviewed encryption library with a simple API.
How to install and try it
brew install age
age --version
age-keygen -o key.txt
tar czf - ./myproject | age -r age1examplepublickey... > myproject.tar.gz.age
The last command encrypts an archive of your own project directory to a recipient key; age -d -i key.txt decrypts it. Packages exist for most Linux distributions, Homebrew, Scoop and Chocolatey, and binaries are on the releases page. The README documents every option, which is possible because there are so few.
Credit
age is written and maintained by Filippo Valsorda and contributors, and the format is specified in a public document. It is published under the BSD 3-Clause License. For the related task of running your own certificate authority, see the entry on step-ca.
Did this work for you?
No votes yet. Be the first.
If it did not work, the report form below tells the editors what went wrong.
See also
- 0306 What is hashing? Hashing turns any data into a fixed length fingerprint that cannot be reversed, used to check files and store passwords. Beginner · Explains an idea · Any system Article Secrets & access 15 Oct 2026
- 0354 sudo rules: give a user exactly the rights they need Write sudoers rules with visudo: full admin for operators, a short list of commands for a deploy account, no-password rules for automation,… Intermediate · Step by step · Linux Article Secrets & access · Users, sudo & hardening 15 Oct 2026
- 0357 Keep secrets out of git: .env files, gitignore and what to do after a leak Load passwords and API keys from an untracked .env file, commit a safe .env.example instead, catch mistakes before they are pushed, and… Beginner · Step by step · Any system Article Housekeeping · Secrets & access 15 Oct 2026
History
Every saved edit is kept. The plot on the sleeve draws one line per edit. Open any edit to see exactly what changed.
- Dominik +2,416 chars