HackerReposA FIELD GUIDE TO OPEN SOURCE
ProSponsor the shelf♧ 0
← Back to top all-time
tc39
proposal-arraybuffer-base64
HTML2023–2023
tc39 / proposal-arraybuffer-base64 · Archived

proposal-arraybuffer-base64

TC39 proposal for Uint8Array<->base64/hex

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

What to know before exploring

What it is

TC39 proposal for Uint8Array<->base64/hex

GitHub

Where it is used

No documented product use has been verified yet.

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, 11:56:56 AM UTC.

No direct repository links were found in the indexed HN discussions over the past seven days. Older discussions are available below.

Mentions over time

HN mentions by hour3 dated mentions

Observed mentions: 2023-10-23 18:35:44 UTC to 2023-10-24 18:19:54 UTC.

012023-10-23 18:00:00 UTC to 2023-10-23 19:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 commentsOct 23, 18:002023-10-23 19:00:00 UTC to 2023-10-23 20:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2023-10-23 20:00:00 UTC to 2023-10-23 21:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2023-10-23 21:00:00 UTC to 2023-10-23 22:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2023-10-23 22:00:00 UTC to 2023-10-23 23:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2023-10-23 23:00:00 UTC to 2023-10-24 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2023-10-24 00:00:00 UTC to 2023-10-24 01:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2023-10-24 01:00:00 UTC to 2023-10-24 02:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2023-10-24 02:00:00 UTC to 2023-10-24 03:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2023-10-24 03:00:00 UTC to 2023-10-24 04:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2023-10-24 04:00:00 UTC to 2023-10-24 05:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2023-10-24 05:00:00 UTC to 2023-10-24 06:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2023-10-24 06:00:00 UTC to 2023-10-24 07:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 commentsOct 24, 06:002023-10-24 07:00:00 UTC to 2023-10-24 08:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2023-10-24 08:00:00 UTC to 2023-10-24 09:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2023-10-24 09:00:00 UTC to 2023-10-24 10:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2023-10-24 10:00:00 UTC to 2023-10-24 11:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2023-10-24 11:00:00 UTC to 2023-10-24 12:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2023-10-24 12:00:00 UTC to 2023-10-24 13:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2023-10-24 13:00:00 UTC to 2023-10-24 14:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2023-10-24 14:00:00 UTC to 2023-10-24 15:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments2023-10-24 15:00:00 UTC to 2023-10-24 16:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2023-10-24 16:00:00 UTC to 2023-10-24 17:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2023-10-24 17:00:00 UTC to 2023-10-24 18:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2023-10-24 18:00:00 UTC to 2023-10-24 19:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 commentsOct 24, 18: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
Oct 23, 18:002023-10-23 18:00:00 UTC2023-10-23 19:00:00 UTC101
Oct 23, 19:002023-10-23 19:00:00 UTC2023-10-23 20:00:00 UTC000
Oct 23, 20:002023-10-23 20:00:00 UTC2023-10-23 21:00:00 UTC000
Oct 23, 21:002023-10-23 21:00:00 UTC2023-10-23 22:00:00 UTC000
Oct 23, 22:002023-10-23 22:00:00 UTC2023-10-23 23:00:00 UTC000
Oct 23, 23:002023-10-23 23:00:00 UTC2023-10-24 00:00:00 UTC000
Oct 24, 00:002023-10-24 00:00:00 UTC2023-10-24 01:00:00 UTC000
Oct 24, 01:002023-10-24 01:00:00 UTC2023-10-24 02:00:00 UTC000
Oct 24, 02:002023-10-24 02:00:00 UTC2023-10-24 03:00:00 UTC000
Oct 24, 03:002023-10-24 03:00:00 UTC2023-10-24 04:00:00 UTC000
Oct 24, 04:002023-10-24 04:00:00 UTC2023-10-24 05:00:00 UTC000
Oct 24, 05:002023-10-24 05:00:00 UTC2023-10-24 06:00:00 UTC000
Oct 24, 06:002023-10-24 06:00:00 UTC2023-10-24 07:00:00 UTC000
Oct 24, 07:002023-10-24 07:00:00 UTC2023-10-24 08:00:00 UTC000
Oct 24, 08:002023-10-24 08:00:00 UTC2023-10-24 09:00:00 UTC000
Oct 24, 09:002023-10-24 09:00:00 UTC2023-10-24 10:00:00 UTC000
Oct 24, 10:002023-10-24 10:00:00 UTC2023-10-24 11:00:00 UTC000
Oct 24, 11:002023-10-24 11:00:00 UTC2023-10-24 12:00:00 UTC000
Oct 24, 12:002023-10-24 12:00:00 UTC2023-10-24 13:00:00 UTC000
Oct 24, 13:002023-10-24 13:00:00 UTC2023-10-24 14:00:00 UTC000
Oct 24, 14:002023-10-24 14:00:00 UTC2023-10-24 15:00:00 UTC101
Oct 24, 15:002023-10-24 15:00:00 UTC2023-10-24 16:00:00 UTC000
Oct 24, 16:002023-10-24 16:00:00 UTC2023-10-24 17:00:00 UTC000
Oct 24, 17:002023-10-24 17:00:00 UTC2023-10-24 18:00:00 UTC000
Oct 24, 18:002023-10-24 18:00:00 UTC2023-10-24 19:00:00 UTC101

What Hacker News says

3 sources
The proposal for native base64 support for Uint8Arrays is mine. I'm glad to see people are interested in using it. (So am I!) For a status update, for the last year or two the main blocker has been a conflict between a desire to have streaming support and a desire to keep the API small and simple. That's now resolved [1] by dropping streaming support, assuming I can demonstrate a reasonably efficient streaming implementation on top of the one-shot implementation, which won't be hard unless "reasonably efficient" means "with zero copies", in which case we'll need to keep arguing about it. I've also been working on documenting [2] the differences between various base64 implementations in other languages and in JS libraries to ensure we have a decent picture of the landscape when designing this. With luck, I hope to advance the proposal to s
Read the rest
tage 3 ("ready for implementations") within the next two meetings of TC39 - so either next month or January. Realistically it will probably take a little longer than that, and of course implementations take a while. But it's moving along. [1] https://github.com/tc39/proposal-arraybuffer-base64/issues/1... [2] https://gist.github.com/bakkot/16cae276209da91b652c2cb3f612a...
In Goodbye, Node.js Buffer
There's some additional interesting details, and a surprising amount of variation in those details, once you start really digging into things. If the length of your input data isn't exactly a multiple of 3 bytes, then encoding it will use either 2 or 3 base64 characters to encode the final 1 or 2 bytes. Since each base64 character is 6 bits, this means you'll be using either 12 or 18 bits to represent 8 or 16 bits. Which means you have an extra 4 or 2 bits which don't encode anything. In the RFC, encoders are required to set those bits to 0, but decoders only "MAY" choose to reject input which does not have those set to 0. In practice, nothing rejects those by default, and as far as I know only Ruby, Rust, and Go allow you to fail on such inputs - Python has a "validate" option, but it doesn't validate those bits. The other major differen
Read the rest
ce is in handling of whitespace and other non-base64 characters. A surprising number of implementations, including Python, allow arbitrary characters in the input, and silently ignore them. That's a problem if you get the alphabet wrong - for example, in Python `base64.standard_b64decode(base64.urlsafe_b64encode(b'\xFF\xFE\xFD\xFC'))` will silently give you the wrong output, rather than an error. Ouch! Another fun fact is that Ruby's base64 encoder will put linebreaks every 60 characters, which is a wild choice because no standard encoding requires lines that short except PEM, but PEM requires _exactly_ 64 characters per line. I have a writeup of some of the differences among programming languages and some JavaScript libraries here [1], because I'm working on getting a better base64 added to JS [2]. [1] https://gist.github.com/bakkot/16cae276209da91b652c2cb3f612a... [2] https://github.com/tc39/proposal-arraybuffer-base64
In Base64 Encoding, Explained

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.