Mojo standard library (stdlib) was open-sourced yesterday. It is exciting that the community can now contribute directly to the codebase. After spending some time with the stdlib repository, I want to share how you can change the standard library and make Mojo use your version when running programs.

The steps below were only tested on macOS and will likely work on Linux.

You will need the Mojo repository containing stdlib code. After making code changes in your local copy, you should build a library using the script located in stdlib/scripts/

The custom stdlib library is saved in the build/stdlib.mojopkg folder at the top level of the Mojo repository. Now, we need to replace the standard stdlib with the custom one. But where is the standard library located?

Modular CLI stores all data in the ~/.modular folder. If we walk it for a bit, we will find the following folder .modular/pkg/packages.modular.com_mojo/lib/mojo, and it’s content:

-rw-r--r--  1 vmois  staff  24449729 Mar 28 00:18 algorithm.mojopkg
-rw-r--r--  1 vmois  staff   1878446 Mar 28 00:18 autotune.mojopkg
-rw-r--r--  1 vmois  staff  12263261 Mar 28 00:18 benchmark.mojopkg
-rw-r--r--  1 vmois  staff   7377122 Mar 28 00:18 buffer.mojopkg
-rw-r--r--  1 vmois  staff   2117290 Mar 28 00:18 compile.mojopkg
-rw-r--r--  1 vmois  staff   4649490 Mar 28 00:18 complex.mojopkg
-rw-r--r--  1 vmois  staff   7598891 Mar 28 00:18 gpu.mojopkg
-rw-r--r--  1 vmois  staff   2773554 Mar 28 00:18 math.mojopkg
-rw-r--r--  1 vmois  staff   2317151 Mar 28 00:18 runtime.mojopkg
-rw-r--r--  1 vmois  staff   3435814 Mar 29 01:11 stdlib.mojopkg <---
-rw-r--r--  1 vmois  staff  48541986 Mar 28 00:18 tensor.mojopkg

The stdlib.mojopkg file is the standard library package. If we replace it with the one we just built and try to run Mojo programs as usual, our updated code will be used.

Make a copy of the original stdlib package before replacing it.

$ cp <path-to-mojo-repo>/build/stdlib.mojopkg <path-to-modular-folder>/.modular/pkg/packages.modular.com_mojo/lib/mojo/stdlib.mojopkg

You can adjust the process so there is no need to copy the library constantly. For example, try a symbolic link.