HackerReposA FIELD GUIDE TO OPEN SOURCE
ProSponsor the shelf♧ 0
← Back to top all-time
jedisct1
turbocrypt
Zig2026–2026
jedisct1 / turbocrypt

turbocrypt

A fast, easy-to-use, and secure command-line tool for encrypting and decrypting files , git repositories and directory trees.

2Distinct people
2Mentions
0Explicit recommenders
139GitHub stars
REPOSITORY AT A GLANCE

What to know before exploring

What it is

A fast, easy-to-use, and secure command-line tool for encrypting and decrypting files , git repositories and directory trees.

GitHub

Where it is used

No documented product use was verified in the last source check.

What people are saying

No recommendation phrase was found in the indexed comments.

No classified warning is attached to this page. Read the discussions before treating silence as approval.

Also in these discussions

No other repository is repeatedly linked in the same discussions.

This week on Hacker News

Nov 7–Nov 14 UTC · Direct repository links and separately labeled related project stories. Indexed through 11/14/2026, 3:56:07 PM UTC.

Claude Code's "Don't Ask Again" exposes passwords in 1,122 public GitHub files direct repository linkDebated

The discussion centers on whether Claude Code's 'Don't Ask Again' feature is at fault for leaking secrets into public repositories or if the issue stems entirely from user negligence in committing local settings files. Conversely, defenders argue that manual review is fundamentally unsustainable at scale and that the industry must shift toward automated approval or robust sandboxing despite current flaws.

429 readable replies · Supporting reply 1 · Supporting reply 2 · Supporting reply 3 · Supporting reply 4

Mentions over time

HN mentions by 3-hour interval2 dated mentions

Observed mentions: 2026-09-13 15:23:25 UTC to 2026-09-16 11:53:01 UTC.

012026-09-13 15:00:00 UTC to 2026-09-13 18:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 commentsSep 13, 15:002026-09-13 18:00:00 UTC to 2026-09-13 21:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2026-09-13 21:00:00 UTC to 2026-09-14 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2026-09-14 00:00:00 UTC to 2026-09-14 03:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2026-09-14 03:00:00 UTC to 2026-09-14 06:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2026-09-14 06:00:00 UTC to 2026-09-14 09:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2026-09-14 09:00:00 UTC to 2026-09-14 12:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2026-09-14 12:00:00 UTC to 2026-09-14 15:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2026-09-14 15:00:00 UTC to 2026-09-14 18:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2026-09-14 18:00:00 UTC to 2026-09-14 21:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2026-09-14 21:00:00 UTC to 2026-09-15 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2026-09-15 00:00:00 UTC to 2026-09-15 03:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 commentsSep 15, 00:002026-09-15 03:00:00 UTC to 2026-09-15 06:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2026-09-15 06:00:00 UTC to 2026-09-15 09:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2026-09-15 09:00:00 UTC to 2026-09-15 12:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2026-09-15 12:00:00 UTC to 2026-09-15 15:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2026-09-15 15:00:00 UTC to 2026-09-15 18:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2026-09-15 18:00:00 UTC to 2026-09-15 21:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2026-09-15 21:00:00 UTC to 2026-09-16 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2026-09-16 00:00:00 UTC to 2026-09-16 03:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2026-09-16 03:00:00 UTC to 2026-09-16 06:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2026-09-16 06:00:00 UTC to 2026-09-16 09:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2026-09-16 09:00:00 UTC to 2026-09-16 12:00:00 UTC (exclusive): 1 mentions; 1 submissions, 0 commentsSep 16, 09:00

Counts come from the repository’s dated source evidence. Index cutoff: 2026-11-02 08:16:59 UTC.

View mention counts and date ranges
UTC ranges include their start and exclude their end. Select a period to filter the source evidence.
PeriodStart (UTC)End (exclusive, UTC)MentionsSubmissionsComments
Sep 13, 15:002026-09-13 15:00:00 UTC2026-09-13 18:00:00 UTC101
Sep 13, 18:002026-09-13 18:00:00 UTC2026-09-13 21:00:00 UTC000
Sep 13, 21:002026-09-13 21:00:00 UTC2026-09-14 00:00:00 UTC000
Sep 14, 00:002026-09-14 00:00:00 UTC2026-09-14 03:00:00 UTC000
Sep 14, 03:002026-09-14 03:00:00 UTC2026-09-14 06:00:00 UTC000
Sep 14, 06:002026-09-14 06:00:00 UTC2026-09-14 09:00:00 UTC000
Sep 14, 09:002026-09-14 09:00:00 UTC2026-09-14 12:00:00 UTC000
Sep 14, 12:002026-09-14 12:00:00 UTC2026-09-14 15:00:00 UTC000
Sep 14, 15:002026-09-14 15:00:00 UTC2026-09-14 18:00:00 UTC000
Sep 14, 18:002026-09-14 18:00:00 UTC2026-09-14 21:00:00 UTC000
Sep 14, 21:002026-09-14 21:00:00 UTC2026-09-15 00:00:00 UTC000
Sep 15, 00:002026-09-15 00:00:00 UTC2026-09-15 03:00:00 UTC000
Sep 15, 03:002026-09-15 03:00:00 UTC2026-09-15 06:00:00 UTC000
Sep 15, 06:002026-09-15 06:00:00 UTC2026-09-15 09:00:00 UTC000
Sep 15, 09:002026-09-15 09:00:00 UTC2026-09-15 12:00:00 UTC000
Sep 15, 12:002026-09-15 12:00:00 UTC2026-09-15 15:00:00 UTC000
Sep 15, 15:002026-09-15 15:00:00 UTC2026-09-15 18:00:00 UTC000
Sep 15, 18:002026-09-15 18:00:00 UTC2026-09-15 21:00:00 UTC000
Sep 15, 21:002026-09-15 21:00:00 UTC2026-09-16 00:00:00 UTC000
Sep 16, 00:002026-09-16 00:00:00 UTC2026-09-16 03:00:00 UTC000
Sep 16, 03:002026-09-16 03:00:00 UTC2026-09-16 06:00:00 UTC000
Sep 16, 06:002026-09-16 06:00:00 UTC2026-09-16 09:00:00 UTC000
Sep 16, 09:002026-09-16 09:00:00 UTC2026-09-16 12:00:00 UTC110

What Hacker News says

2 sources
I think bit-aligned encodings (i.e. schemes where the output alphabets have a size that is a power of two) are the sweet-spot for encoding schemes due to simplicity of encoding and decoding compared to non-bit-aligned schemes like base84. Base16 is verbose, but each symbol in the alphabet carries exactly 4 bits (hence why a single byte in hex is two symbols). This is nice for encoding bytes. Base64 requires two non-alphanumeric symbols such as + and / or - and _ because A-Za-z0-9 only provides 62 characters. Each output symbol encodes exactly 6 bits of the original input. But when we're encoding whole bytes we sometimes need to use padding (when the input is not a multiple of 3 bytes and that ambiguity is harmful in the context that decoding occurs in). Then there's Base32, which is what currently seems like a sweet spot to me and is what
Read the rest
I'm considering using for identifiers in my own systems. It only requires 32 characters, so can easily take a range of A-Z0-9 or a-z0-9 excluding visually-similar characters. Like Base64 it can also require padding in some settings. I quite like the general scheme used in the Bech32 and Bech32m framing idea, which allows for a human-readable prefix before a `1` and then the base32 data follows. This can be done because `1` is excluded from the Bech32 alphabet. This prefix can be used to differentiate between kinds of identifier, for example: https://github.com/bitcoin/bips/blob/master/bip-0350.mediawi... But to address the article directly, I'm not sure the complexity is worth the gains in the table in https://github.com/jedisct1/zig-base84#encoding, which states that we save ~6.5% of characters, and for 128 input bytes, the resulting Base64 string is 171 characters, while the Base84 string is 161-166 characters. I also dislike that the chosen alphabet breaks text selection; GitHub very carefully picked their current token formats so that the whole token is selected with a double-click: > One other neat thing about _ is it will reliably select the whole token when you double click on it. Other characters we considered are sometimes included in application word separators and thus will stop highlighting at that character. Try out double clicking this-random-text versus this_random_text! https://github.blog/engineering/platform-security/behind-git... For example, compare double-clicking on the article's Base84 alphabet: > ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!#$%&'()+,-;=@[]^_`{}~ with the Bech32 Base32 alphabet: > qpzry9x8gf2tvdw0s3jn54khce6mua7l Regardless though we still have the fundamental issue that bytes encoded as Base16, Base32, Base64, or even Base91/Base84 will be _longer_ when encoded. Base32 can encode up to 159 bytes before hitting a filename limit of 255 bytes. I can't remember whether filenames are 16-bit on Windows (UCS-2? UTF-16?), but I speculate on average that maybe you could save a lot of bytes by first ensuring that filenames are UTF-8 before encrypting them, since filenames on a lot of computeres, especially ones running in the west, likely contain a lot of latin characters. You could even switch between encodings to get the best bit-packing in filenames. At the moment it looks like turbocrypt forbids encrypted filenames that are too long: https://github.com/jedisct1/turbocrypt/blob/4905241d271e84a0... I think turbocrypt could switch to using a surrogate file when an encrypted filename exceeds 255 bytes to allow for encrypting any filename permitted by the filesystem, while still preserving the property that the same filename in a different directory has the same encrypted filename. If an encrypted filename is too long to fit on the filesystem, maybe its hash could be stored as the filename instead (which is extremely unlikely to collide). Then we could store the full encrypted filename in a `.name` file in the same directory. We could do similar for directory names that are too long. We could then use a less dense but bit-aligned encoding scheme like Base32 with an all-lowercase alphabet without any punctuation to make filename text selection straightfoward. We would avoid all case sensitivity traps that can occur with things like Base64 and Base84. Let's pick two filename prefixes, say "tcf1" for "turbocrypt filename" and "tch1" for "turbocrypt filename hash". Then we could have a directory layout like this: tch1q9x8gf2tvdw0 # a file whose encrypted filename exceeds 255 bytes; this filename is a hash of the encrypted filename, e.g. SHA-256. tch1q9x8gf2tvdw0.name # a file whose contents are the full encrypted filename of tch1q9x8gf2tvdw0. tcf1tvdhc6mua7l9x8s3qprz # a file whose encrypted filename does not exceed 255 bytes. gocryptfs follows a similar idea for long filenames: https://github.com/rfjakob/gocryptfs-website/blob/master/doc... Once a system to support long filenames is implemented, the size of the alphabet used for encoding the filenames (like Base84) becomes less important; Base16, Base32, Base64, or another bit-aligned encoding scheme could be used. As a very small added bonus, you could even implement a bit-aligned codec such as base16 or base64 using SIMD via a bunch of swizzling, shifting, bitmasking, and AND/XORing, making it very fast should the need arise.
In Base84 deserves a place in file names

MAKE YOURSELF AT HOME

A few shortcuts

/
Search the collection
?
Open this guide
Esc
Close dialogs and navigation

Your saved repositories and interests stay in this browser.