+++
title = "ASCII-centric Usernames"
date = 2022-01-27T18:38:25+10:00

[extra]
updated = 2022-01-27T21:07:32+10:00
+++

I'm working on a web-based side project in my spare time. The great thing about
side projects is you get to make all the choices and question the common
wisdom. Recently I've been building out the sign-up flow and I started thinking
about usernames—specifically the characters that they may be comprised of.

<!-- more -->

I poked around a few sites to see what they did: Twitter, GitHub, Discourse
all restrict your username to a mostly ASCII alphanumeric character set, perhaps
with `-`, `_`, and `.` thrown in.

It struck me that this is fine for me, an English speaker, but must suck for
folks that can't have a username in their own language. It is however not
without precedent. The Internet's origins in the US linger on with similar
restrictions on e-mail and DNS ([Punycode] is but a workaround) for example.
Some further thinking and research led to some possible reasons for this:

1. There's the obvious precedent set by e-mail and other systems: that's how
   we've always done it so it just continues.
1. Some languages require a dedicated [input system][ime] in order to type
   naturally. That means it would be difficult for people without familiarity
   with that system to be able to type the username such as might be necessary
   when @ mentioning someone.
1. Similar to above, most keyboards have some way to type the English alphabet.
1. ASCII alpha-numeric characters are able to be in URLs without [percent-encoding].

That last one is the most compelling reason I saw. For an application that has
user profile pages where the username goes in the URL it seems advantageous for
that to be able to happen directly without encoding.

Now this is all very biased by my monolingual, English speaking, Western viewpoint.
Perhaps it is more common to permit native language usernames in applications that
target non-English markets?

I did find a couple of examples that were more permissive with usernames.
Discord happily let me set my username to "🦊 こんにちは". Slack rejected the
emoji with a cute message, "Of course you want a name with an emoji. Sadly, it
is not to be. Try letters?", but was otherwise happy with "こんにちは". In both
cases @ mentioning the user appears to require typing their name, although you
could also find them in the people directory first.

Notably Discord and Slack don't have public profile pages (that would need a
URL). I'd be curious if there were systems out there with public profile pages
where the usernames are permissive and the name is in the URL (and not the
account id number for example).

[Punycode]: https://en.wikipedia.org/wiki/Punycode
[percent-encoding]: https://en.wikipedia.org/wiki/Percent-encoding
[ime]: https://en.wikipedia.org/wiki/Input_method