A minimal String type for Julia that allows for efficient string representation and transfer
21 Stars
Updated Last
1 Year Ago
Started In
June 2016


CI codecov deps version pkgeval

A string type for minimizing data-transfer costs in Julia


The package is registered in the General registry and so can be installed with Pkg.add.

julia> using Pkg; Pkg.add("WeakRefStrings")

Project Status

The package is tested against Julia 1.6 and nightly on Linux, OS X, and Windows.

Contributing and Questions

Contributions are very welcome, as are feature requests and suggestions. Please open an issue if you encounter any problems or would just like to ask a question.



A set of custom string types of various fixed sizes. Each inline string is a custom primitive type and can benefit from being stack friendly by avoiding allocations/heap tracking in the GC. When used in an array, the elements are able to be stored inline since each one has a fixed size. Currently support inline strings from 1 byte up to 255 bytes.

The following types are supported: String1, String3, String7, String15, String31, String63, String127, String255.


A custom string representation that takes a byte buffer (buf), poslen, and e escape character, and lazily allows treating a region of the buf as a string. Can be used most efficiently as part of a PosLenStringVector which only stores an array of PosLen (inline) along with a single buf and e and returns PosLenString when indexing individual elements.


Usage of WeakRefStrings is discouraged for general users. Currently, a WeakRefString purposely does not implement many Base Julia String interface methods due to many recent changes to Julia's builtin String interface, as well as the complexity to do so correctly. As such, WeakRefStrings are used primarily in the data ecosystem as an IO optimization and nothing more. Upon indexing a WeakRefStringArray, a proper Julia String type is materialized for safe, correct string processing. In the future, it may be possible to implement safe operations on WeakRefString itself, but for now, they must be converted to a String for any real work.

Additional documentation is available at the REPL for ?WeakRefStringArray and ?WeakRefString.