# StaticStrings.jl v0.3, move to JuliaStrings

**URL:** https://discourse.julialang.org/t/staticstrings-jl-v0-3-move-to-juliastrings/139648
**Category:** Package Announcements
**Tags:** strings, ntuple
**Created:** [September 24, 2026, 7:24pm UTC](https://discourse.julialang.org/t/staticstrings-jl-v0-3-move-to-juliastrings/139648 "2026-09-24T19:24:45Z")
**Posts on this page:** 3
**Page:** 1

<div class="post-metadata">

### Author: ![mkitti](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mkitti/32/12459_2.png) [@mkitti](https://discourse.julialang.org/u/mkitti)
#### Post date: [September 24, 2026, 7:24pm UTC](https://discourse.julialang.org/t/staticstrings-jl-v0-3-move-to-juliastrings/139648/1 "2026-09-24T19:24:45Z")

</div>

# **StaticStrings v0.3.0**

[StaticStrings.jl](https://github.com/JuliaStrings/StaticStrings.jl) v0.3 was just released and has joined the JuliaStrings Github organization. Special thanks to @PatrickHaecker for major contributions to this release.

StaticStrings.jl contains several string types which wrap a `NTuple{N, UInt8}` for strings of fixed length strings similar to InlineStrings.jl. The main difference is that StaticStrings.jl uses an `NTuple` whereas InlineStrings.jl uses integer types as a backing store.

Here are the release notes for version 0.3:

## Release Notes

[Diff since v0.2.6](https://github.com/mkitti/StaticStrings.jl/compare/v0.2.6...v0.3.0)

- Breaking changes for `CStaticString`
- Use of `unsafe_string` and `unsafe_write` for performance
- Deprecate `StaticStrings.data` in favor of `Tuple`
- Many contributions by **[@PatrickHaecker](https://github.com/PatrickHaecker)**

**Merged pull requests:**

- fix: remove convert for AbstractStaticString{N} which causes invalidation ([#21](https://github.com/JuliaStrings/StaticStrings.jl/pull/21)) (**[@Beforerr](https://github.com/Beforerr)**)
- Throw in `SubStaticString` constructor without making it slower ([#22](https://github.com/JuliaStrings/StaticStrings.jl/pull/22)) (**[@PatrickHaecker](https://github.com/PatrickHaecker)**)
- Implement a more efficient `codeunit` for `SubStaticString` ([#23](https://github.com/JuliaStrings/StaticStrings.jl/pull/23)) (**[@PatrickHaecker](https://github.com/PatrickHaecker)**)
- Allocation-free `write` and `print` for `PaddedStaticString` ([#24](https://github.com/JuliaStrings/StaticStrings.jl/pull/24)) (**[@PatrickHaecker](https://github.com/PatrickHaecker)**)
- Copy only relevant parts of a `SubStaticString` when generating a `String` ([#25](https://github.com/JuliaStrings/StaticStrings.jl/pull/25)) (**[@PatrickHaecker](https://github.com/PatrickHaecker)**)
- Fix `cmp` ([#26](https://github.com/JuliaStrings/StaticStrings.jl/pull/26)) (**[@PatrickHaecker](https://github.com/PatrickHaecker)**)
- Avoid allocations in SubStaticString equality ([#27](https://github.com/JuliaStrings/StaticStrings.jl/pull/27)) (**[@PatrickHaecker](https://github.com/PatrickHaecker)**)
- Optimize `SubStaticString` by directly writing bytes ([#28](https://github.com/JuliaStrings/StaticStrings.jl/pull/28)) (**[@PatrickHaecker](https://github.com/PatrickHaecker)**)
- Use the optimized `write` to optimize `print` for `SubStaticString` ([#29](https://github.com/JuliaStrings/StaticStrings.jl/pull/29)) (**[@PatrickHaecker](https://github.com/PatrickHaecker)**)
- Unify `write` and `print` methods to have all types accelerated ([#30](https://github.com/JuliaStrings/StaticStrings.jl/pull/30)) (**[@PatrickHaecker](https://github.com/PatrickHaecker)**)
- Restrict `SubStaticString` to `Integer` `AbstractUnitRange`s ([#31](https://github.com/JuliaStrings/StaticStrings.jl/pull/31)) (**[@PatrickHaecker](https://github.com/PatrickHaecker)**)
- Make types consistent ([#32](https://github.com/JuliaStrings/StaticStrings.jl/pull/32)) (**[@PatrickHaecker](https://github.com/PatrickHaecker)**)

**Closed issues:**

- StaticStrings on GPU, code\_warntype on StaticString generation ([#20](https://github.com/JuliaStrings/StaticStrings.jl/issues/20))

## Upstream issue for JuliaLang/Julia

In reviewing Patrick’s work, I realized that Julia is missing facilities to populate a `Vector{UInt8}` or `Memory{UInt8}` from a `NTuple{N,UInt8}` efficiently. I created an issue documenting the lack of autovectorization for this route and potential new methods for `copyto!`.

- [Copying from an NTuple into an Array/Memory neither vectorizes nor forms a memcpy · Issue #63335 · JuliaLang/julia · GitHub](https://github.com/JuliaLang/julia/issues/63335)

## Future Plans

- I was originally inspired to create this package to address fixed length strings coming from I/O libraries such as HDF5.jl. I never finished actually integrating this with I/O packages, so I hope to pursue that.
- I also noticed that an `AbstractString` that wraps an existing `Memory{UInt8}` may be useful. I am unsure whether to add this to StaticStrings or if I should start a new package.
- Your pull requests are welcome.

---

<div class="post-metadata">

### Author: ![nhz2](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/nhz2/32/44428_2.png) [@nhz2](https://discourse.julialang.org/u/nhz2)
#### Post date: [September 24, 2026, 7:33pm UTC](https://discourse.julialang.org/t/staticstrings-jl-v0-3-move-to-juliastrings/139648/2 "2026-09-24T19:33:17Z")

</div>

> [@mkitti](#):
>
> - I also noticed that an `AbstractString` that wraps an existing `Memory{UInt8}` may be useful.

I think the new `StringView` type in 1.14 or in StringViews.jl can do this.

---

<div class="post-metadata">

### Author: ![mkitti](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mkitti/32/12459_2.png) [@mkitti](https://discourse.julialang.org/u/mkitti)
#### Post date: [September 24, 2026, 7:38pm UTC](https://discourse.julialang.org/t/staticstrings-jl-v0-3-move-to-juliastrings/139648/3 "2026-09-24T19:38:44Z")

</div>

Interesting. An alternative implementation of a StaticString could be a StringView of a StaticVector from StaticArrays.jl.
