FiloSottile/age is a security-focused project on GitHub with 23.1k stars, written primarily in Go. A simple, modern and secure encryption tool (and Go library) with small explicit keys, no config options, and UNIX-style composability.
Snapshot summary built from the project's own GitHub metadata — there's no written TopGit review yet. The page will update automatically when a full review is published.
WHY NO REVIEW YET
TopGit writes full reviews for the most-starred, most-requested repositories. This page is a snapshot until then — see the READ ME tab for the original README in full.
If you download the pre-built binaries, you can check their Sigsum proofs.
If your system has a supported version of Go, you can build from source.
go install filippo.io/age/cmd/...@latest
Help from new packagers is very welcome.
Usage
For the full documentation, read the age(1) man page.
Usage:
age [--encrypt] (-r RECIPIENT | -R PATH)... [--armor] [-o OUTPUT] [INPUT]
age [--encrypt] --passphrase [--armor] [-o OUTPUT] [INPUT]
age --decrypt [-i PATH]... [-o OUTPUT] [INPUT]
Options:
-e, --encrypt Encrypt the input to the output. Default if omitted.
-d, --decrypt Decrypt the input to the output.
-o, --output OUTPUT Write the result to the file at path OUTPUT.
-a, --armor Encrypt to a PEM encoded format.
-p, --passphrase Encrypt with a passphrase.
-r, --recipient RECIPIENT Encrypt to the specified RECIPIENT. Can be repeated.
-R, --recipients-file PATH Encrypt to recipients listed at PATH. Can be repeated.
-i, --identity PATH Use the identity file at PATH. Can be repeated.
INPUT defaults to standard input, and OUTPUT defaults to standard output.
If OUTPUT exists, it will be overwritten.
RECIPIENT can be an age public key generated by age-keygen ("age1...")
or an SSH public key ("ssh-ed25519 AAAA...", "ssh-rsa AAAA...").
Recipient files contain one or more recipients, one per line. Empty lines
and lines starting with "#" are ignored as comments. "-" may be used to
read recipients from standard input.
Identity files contain one or more secret keys ("AGE-SECRET-KEY-1..."),
one per line, or an SSH key. Empty lines and lines starting with "#" are
ignored as comments. Passphrase encrypted age files can be used as
identity files. Multiple key files can be provided, and any unused ones
will be ignored. "-" may be used to read identities from standard input.
When --encrypt is specified explicitly, -i can also be used to encrypt to an
identity file symmetrically, instead or in addition to normal recipients.
Multiple recipients
Files can be encrypted to multiple recipients by repeating -r/--recipient. Every recipient will be able to decrypt the file.
$ age -o example.jpg.age -r age1ql3z7hjy54pw3hyww5ayyfg7zqgvc7w3j2elw8zmrj2kg5sfn9aqmcac8p \
-r age1lggyhqrw2nlhcxprm67z43rta597azn8gknawjehu9d9dl0jq3yqqvfafg example.jpg
Recipient files
Multiple recipients can also be listed one per line in one or more files passed with the -R/--recipients-file flag.
$ cat recipients.txt
# Alice
age1ql3z7hjy54pw3hyww5ayyfg7zqgvc7w3j2elw8zmrj2kg5sfn9aqmcac8p
# Bob
age1lggyhqrw2nlhcxprm67z43rta597azn8gknawjehu9d9dl0jq3yqqvfafg
$ age -R recipients.txt example.jpg > example.jpg.age
If the argument to -R (or -i) is -, the file is read from standard input.
Post-quantum keys
To generate hybrid post-quantum keys, which are secure against future quantum
computer attacks, use the -pq flag with age-keygen. This may become the
default in the future.
Post-quantum identities start with AGE-SECRET-KEY-PQ-1... and recipients with
age1pq1.... The recipients are unfortunately ~2000 characters long.
Support for post-quantum keys is built into age v1.3.0 and later. Alternatively,
the age-plugin-pq binary can be installed and placed in $PATH to add support
to any version and implementation of age that supports plugins. Recipients will
work out of the box, while identities will have to be converted to plugin
identities with age-plugin-pq -identity.
Passphrases
Files can be encrypted with a passphrase by using -p/--passphrase. By default age will automatically generate a secure passphrase. Passphrase protected files are automatically detected at decrypt time.
$ age -p secrets.txt > secrets.txt.age
Enter passphrase (leave empty to autogenerate a secure one):
Using the autogenerated passphrase "release-response-step-brand-wrap-ankle-pair-unusual-sword-train".
$ age -d secrets.txt.age > secrets.txt
Enter passphrase:
Passphrase-protected key files
If an identity file passed to -i is a passphrase encrypted age file, it will be automatically decrypted.
$ age-keygen | age -p > key.age
Public key: age1yhm4gctwfmrpz87tdslm550wrx6m79y9f2hdzt0lndjnehwj0ukqrjpyx5
Enter passphrase (leave empty to autogenerate a secure one):
Using the autogenerated passphrase "hip-roast-boring-snake-mention-east-wasp-honey-input-actress".
$ age -r age1yhm4gctwfmrpz87tdslm550wrx6m79y9f2hdzt0lndjnehwj0ukqrjpyx5 secrets.txt > secrets.txt.age
$ age -d -i key.age secrets.txt.age > secrets.txt
Enter passphrase for identity file "key.age":
Passphrase-protected identity files are not necessary for most use cases, where access to the encrypted identity file implies access to the whole system. However, they can be useful if the identity file is stored remotely.
SSH keys
As a convenience feature, age also supports encrypting to ssh-rsa and ssh-ed25519 SSH public keys, and decrypting with the respective private key file. (ssh-agent is not supported.)
$ age -R ~/.ssh/id_ed25519.pub example.jpg > example.jpg.age
$ age -d -i ~/.ssh/id_ed25519 example.jpg.age > example.jpg
Note that SSH key support employs more complex cryptography, and embeds a public key tag in the encrypted file, making it possible to track files that are encrypted to a specific public key.
Encrypting to a GitHub user
Combining SSH key support and -R, you can easily encrypt a file to the SSH keys listed on a GitHub profile.
$ curl https://github.com/benjojo.keys | age -R - example.jpg > example.jpg.age
Keep in mind that people might not protect SSH keys long-term, since they are revokable when used only for authentication, and that SSH keys held on YubiKeys can't be used to decrypt files.
Inspecting encrypted files
The age-inspect command can display metadata about an encrypted file without decrypting it, including the recipient types, whether it uses post-quantum encryption, and the payload size.
$ age-inspect secrets.age
secrets.age is an age file, version "age-encryption.org/v1".
This file is encrypted to the following recipient types:
- "mlkem768x25519"
This file uses post-quantum encryption.
Size breakdown (assuming it decrypts successfully):
Header 1627 bytes
Encryption overhead 32 bytes
Payload 42 bytes
-------------------
Total 1701 bytes
For scripting, use --json to get machine-readable output.
The most recent commit recorded on FiloSottile/age was 4 months ago, based on the GitHub push timestamp. The repository has 657 forks — one of the better signals of community interest.
How does FiloSottile/age compare to other Security projects?
FiloSottile/age is tracked by TopGit in the Security category, with 23.1k GitHub stars and written in Go. Browse the Security topic page on TopGit to compare it against similar projects by stars and activity.
How many stars does FiloSottile/age have?
FiloSottile/age has 23.1k GitHub stars — refresh the page for the live number, or check github.com/FiloSottile/age. TopGit mirrors GitHub's count but does not claim minute-by-minute accuracy.
What is FiloSottile/age?
FiloSottile/age (FiloSottile/age) is a Go project on GitHub. From the project's own README: A simple, modern and secure encryption tool (and Go library) with small explicit keys, no config options, and UNIX-style composability.
What language is FiloSottile/age written in?
FiloSottile/age is written primarily in Go. GitHub's language field is based on the largest share of bytes in the default branch.
What topics is FiloSottile/age associated with?
GitHub's repository topics for FiloSottile/age: "age-encryption", "built-at-rc". TopGit's editorial category is Security.
Why is FiloSottile/age categorized under Security?
TopGit places FiloSottile/age in the Security category based on its GitHub topics and description (tagged: "age-encryption", "built-at-rc"). Categories are assigned from real repository metadata, not editorial guesswork.