# Can package names contain non-ASCII characters?

**URL:** <https://discourse.julialang.org/t/can-package-names-contain-non-ascii-characters/132965>\
**Category:** General Usage\
**Created:** [October 8, 2025, 5:17am UTC](https://discourse.julialang.org/t/can-package-names-contain-non-ascii-characters/132965 "2025-10-08T05:17:18Z")\
**Posts on this page:** 15\
**Page:** 1

<div class="post-metadata">

**Author:** ![phma](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/phma/32/6576_2.png) [@phma](https://discourse.julialang.org/u/phma)\
**Post date:** [October 8, 2025, 5:17am UTC](https://discourse.julialang.org/t/can-package-names-contain-non-ascii-characters/132965/1 "2025-10-08T05:17:18Z")

</div>

I’m thinking of writing a package called “CàiSemiprimes” or “蔡Semiprimes” (Cài is a mathematician). Is it legal for a package name to have a non-ASCII character? To start with a character that does not have an upper/lowercase distinction?

---

<div class="post-metadata">

**Author:** ![gdalle](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/gdalle/32/27854_2.png) [@gdalle](https://discourse.julialang.org/u/gdalle)\
**Post date:** [October 8, 2025, 5:54am UTC](https://discourse.julialang.org/t/can-package-names-contain-non-ascii-characters/132965/2 "2025-10-08T05:54:36Z")

</div>

I would heavily discourage it, if only because users will struggle to type it (and hence install it / import it / search for it)

---

<div class="post-metadata">

**Author:** ![goerz](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/goerz/32/3269_2.png) [@goerz](https://discourse.julialang.org/u/goerz)\
**Post date:** [October 8, 2025, 6:17am UTC](https://discourse.julialang.org/t/can-package-names-contain-non-ascii-characters/132965/3 "2025-10-08T06:17:22Z")

</div>

> [@phma](#):
>
> Is it legal for a package name to have a non-ASCII character?

Not for packages in the General registry, at least. All package names must be ASCII alphanumeric and start with a capital letter.

---

<div class="post-metadata">

**Author:** ![phma](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/phma/32/6576_2.png) [@phma](https://discourse.julialang.org/u/phma)\
**Post date:** [October 8, 2025, 7:46am UTC](https://discourse.julialang.org/t/can-package-names-contain-non-ascii-characters/132965/4 "2025-10-08T07:46:44Z")

</div>

> [@gdalle](#):
>
> I would heavily discourage it, if only because users will struggle to type it

`à` is in several keyboard layouts, and we program with characters such as `ℯ`, `∈`, and `⊻`, which aren’t on any keyboard layout that I know of, so we have to type `\euler`, `\in`, or `\xor` in the REPL, hit tab, and paste the result in the editor.

> [@goerz](#):
>
> Not for packages in the General registry, at least.

Is this documented? I don’t see it in [5. Creating Packages · Pkg.jl](https://pkgdocs.julialang.org/v1/creating-packages/#Package-naming-rules) . What happens if I try to register a package with a non-ASCII character in the name?

---

<div class="post-metadata">

**Author:** ![Benny](https://avatars.discourse-cdn.com/v4/letter/b/49beb7/32.png) [@Benny](https://discourse.julialang.org/u/Benny)\
**Post date:** [October 8, 2025, 7:49am UTC](https://discourse.julialang.org/t/can-package-names-contain-non-ascii-characters/132965/5 "2025-10-08T07:49:41Z")

</div>

A fuller list here: [Automatic merging guidelines · RegistryCI.jl](https://juliaregistries.github.io/RegistryCI.jl/stable/guidelines/)

Not sure if personal registries would need to have any rules besides package names being valid Julia identifiers.

---

<div class="post-metadata">

**Author:** ![barucden](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/barucden/32/26154_2.png) [@barucden](https://discourse.julialang.org/u/barucden)\
**Post date:** [October 8, 2025, 8:28am UTC](https://discourse.julialang.org/t/can-package-names-contain-non-ascii-characters/132965/6 "2025-10-08T08:28:49Z")

</div>

Automatic merging is one thing but then [there is also](https://github.com/JuliaRegistries/General/blob/master/README.md#are-there-any-requirements-for-package-names-in-the-general-registry):

> **Are there any requirements for package names in the General registry?**
> 
> There are no hard requirements, but it is _highly recommended_ to follow the [package naming guidelines](https://pkgdocs.julialang.org/v1/creating-packages/#Package-naming-rules).

* * *

Nevertheless, ASCII characters are definitely more user-friendly.

> [@phma](#):
>
> we program with characters such as `ℯ`, `∈`, and `⊻`, which aren’t on any keyboard layout that I know of, so we have to type `\euler`, `\in`, or `\xor` in the REPL, hit tab, and paste the result in the editor.

You are right. However, you can generally use the ASCII counterparts (`in` instead of `∈`, `xor(a, b)` instead of `a ⊻ b`, …), so if you use the unicode characters in your code instead, it’s by choice. If you put a non-ASCII letter to your package’s name, then users _have_ to type that letter if they’d like to use the package — and there is no ASCII counterpart.

> [@phma](#):
>
> I’m thinking of writing a package called “CàiSemiprimes” or “蔡Semiprimes”

FWIW, `Cai` does not seem too bad of an approximation of `Cài` 🙂 Also, the character in front of “Semiprimes” in the second word does not even render for me.

---

<div class="post-metadata">

**Author:** ![phma](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/phma/32/6576_2.png) [@phma](https://discourse.julialang.org/u/phma)\
**Post date:** [October 8, 2025, 8:38am UTC](https://discourse.julialang.org/t/can-package-names-contain-non-ascii-characters/132965/7 "2025-10-08T08:38:05Z")

</div>

> [@barucden](#):
>
> There are no hard requirements, but it is _highly recommended_ to follow the [package naming guidelines](https://pkgdocs.julialang.org/v1/creating-packages/#Package-naming-rules).

Which, as I pointed out above, don’t mention ASCII.

---

<div class="post-metadata">

**Author:** ![ericphanson](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ericphanson/32/215186_2.png) [@ericphanson](https://discourse.julialang.org/u/ericphanson)\
**Post date:** [October 8, 2025, 10:26am UTC](https://discourse.julialang.org/t/can-package-names-contain-non-ascii-characters/132965/8 "2025-10-08T10:26:11Z")

</div>

There are no packages in General with non-ASCII names and I don’t think we would want to start now. Feel free to PR the ASCII requirement to Pkg’s docs.

---

<div class="post-metadata">

**Author:** ![gdalle](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/gdalle/32/27854_2.png) [@gdalle](https://discourse.julialang.org/u/gdalle)\
**Post date:** [October 8, 2025, 10:32am UTC](https://discourse.julialang.org/t/can-package-names-contain-non-ascii-characters/132965/9 "2025-10-08T10:32:49Z")

</div>

> <https://github.com/JuliaLang/Pkg.jl/pull/4404>
>
> Following https://discourse.julialang.org/t/can-package-names-contain-non-ascii-…characters/132965

---

<div class="post-metadata">

**Author:** ![goerz](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/goerz/32/3269_2.png) [@goerz](https://discourse.julialang.org/u/goerz)\
**Post date:** [October 8, 2025, 12:36pm UTC](https://discourse.julialang.org/t/can-package-names-contain-non-ascii-characters/132965/10 "2025-10-08T12:36:39Z")

</div>

> [@phma](#):
>
> characters such as `ℯ`, `∈`, and `⊻`, which aren’t on any keyboard layout

Total side note, and shameless self-promotion, but [The "U.S. International - Scientific" Keyboard Layout - Michael Goerz](https://michaelgoerz.net/notes/the-us-international-scientific-keyboard-layout/index.html)

Still: do not _require_ Unicode in the public API of your package; you can use something like

```julia-auto
function f(; eta=1.0, η=eta) end

```

if you want to allow for Unicode in your API, in addition to ASCII. Certainly, do not require it in your package name. Internally, you can go wild. But also: know your audience. What might be a useful addition to the heavily mathematically educated users of one package might severely limit the userbase of another. I’d strongly recommend keeping things in English, as the lingua franca of scientific computing. I would actually support having this as a requirement for the General registry, and then have separate “regional” registries for Spanish, Chinese, etc. It’s certainly worthwhile to also have code in one’s native language, especially for very young students, even if that means that code can’t have a global reach.

---

<div class="post-metadata">

**Author:** ![goerz](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/goerz/32/3269_2.png) [@goerz](https://discourse.julialang.org/u/goerz)\
**Post date:** [October 8, 2025, 1:56pm UTC](https://discourse.julialang.org/t/can-package-names-contain-non-ascii-characters/132965/11 "2025-10-08T13:56:57Z")

</div>

> [@phma](#):
>
> > [@barucden](#):
> >
> > There are no hard requirements, but it is _highly recommended_ to follow the [package naming guidelines](https://pkgdocs.julialang.org/v1/creating-packages/#Package-naming-rules).
> 
> Which, as I pointed out above, don’t mention ASCII.

> <https://github.com/JuliaRegistries/General/pull/139967>
>
> The restriction to ASCII is definitely a hard rule.
> 
> 
> Technically, we also ha…ve packages with underscores in the name, but I think those are restricted to \`\_jll\`. So, for all normal package registrations, I think ASCII letters and numbers is it. One could also add that the first letter can't be a number, but maybe that's understood implicitly.
> 
> Ref: https://discourse.julialang.org/t/can-package-names-contain-non-ascii-characters/132965/7

---

<div class="post-metadata">

**Author:** ![kellertuer](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kellertuer/32/220707_2.png) [@kellertuer](https://discourse.julialang.org/u/kellertuer)\
**Post date:** [October 8, 2025, 2:15pm UTC](https://discourse.julialang.org/t/can-package-names-contain-non-ascii-characters/132965/12 "2025-10-08T14:15:57Z")

</div>

Interesting how fast those two PRs came along.

I think my main argument against non-plain-ASCII comes from an example I had the good old German ü but also with à itself. There are different ways to represent these. For example one can either directly use the ü ( [“ü” U+00FC Latin Small Letter U with Diaeresis Unicode Character](https://www.compart.com/en/unicode/U+00FC) ) _or_ the diacritic ( [“¨” U+00A8 Diaeresis Unicode Character](https://www.compart.com/en/unicode/U+00A8) ) combined with u.  
I once had the case with both ü and à where the single-letter was exchanged to the [diacritic](https://en.wikipedia.org/wiki/Diacritic) when copying files, but not when copying the string (within some code). Visually they are the same. This might lead to some unwanted confusion beyond the “where is that on my keyboard?” problem.

---

<div class="post-metadata">

**Author:** ![ericphanson](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ericphanson/32/215186_2.png) [@ericphanson](https://discourse.julialang.org/u/ericphanson)\
**Post date:** [October 8, 2025, 2:27pm UTC](https://discourse.julialang.org/t/can-package-names-contain-non-ascii-characters/132965/13 "2025-10-08T14:27:59Z")

</div>

> Interesting how fast those two PRs came along.

I think that’s because this is actually a hard requirement, it just wasn’t documented. So there wasn’t a need for a decision making process (it already is a requirement), just documentation.

> This might lead to some unwanted confusion beyond the “where is that on my keyboard?” problem.

Yeah, IMO that is the main problem. We want the system to be very simple and unambiguous to prevent typosquatting, visual confusion attacks etc. We could probably have some very constrained set of unicode characters allowed but it would need to be fully thought-through from an ecosystem (and tooling) point of view and the pros would need to outweigh the cons. And since it adds to the complexity & maintenance burden of a volunteer-run system, there’s some fairly big cons, unfortunately.

---

<div class="post-metadata">

**Author:** ![kellertuer](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kellertuer/32/220707_2.png) [@kellertuer](https://discourse.julialang.org/u/kellertuer)\
**Post date:** [October 8, 2025, 2:38pm UTC](https://discourse.julialang.org/t/can-package-names-contain-non-ascii-characters/132965/14 "2025-10-08T14:38:25Z")

</div>

Complexity and maintenance would also be my main reasons, in like helping new (and confused) new users.  
Sure the one exception that could be made is of course the watch emoji, the Julia icon and the flame emoji – to have a nicer name for WatchJuliaBurn.jl 😃

---

<div class="post-metadata">

**Author:** ![GunnarFarneback](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/gunnarfarneback/32/1827_2.png) [@GunnarFarneback](https://discourse.julialang.org/u/GunnarFarneback)\
**Post date:** [October 8, 2025, 3:15pm UTC](https://discourse.julialang.org/t/can-package-names-contain-non-ascii-characters/132965/15 "2025-10-08T15:15:14Z")

</div>

> [@Benny](#):
>
> Not sure if personal registries would need to have any rules besides package names being valid Julia identifiers.

You can go wild in your personal registry. I’m fairly sure the registry tooling doesn’t even require valid Julia identifiers, although it would be utterly pointless to have a package that you can neither `Pkg.add` nor `import`.
