mojojojo
Notes from building a service that runs other people's Python fast. Two threads: containment — how untrusted code shares a compile cache without sharing a process — and speed — where compiling Python to Mojo pays, where it does not, and how early we can tell. Product and open-source notes explain how those pieces become Studio, the agent, and the planned notebook workflow.
Everything here is measured on the machine that serves this page and says so. The engine is mojosub, which is open source; its own lab notebook is docs/research.md.
mojosub, the compiler, the coding agent, and the Mojo port factory are separate projects on purpose. Here is what each one owns, what is ready today, and where the hard gates sit.
Read →A preview of mojojojo Notebooks: reactive Python and Mojo cells, reviewed AI edits, immutable revisions, and one execution and billing path.
Read →Why mjj searches first, returns grounded line ranges, loads skills only when needed, and keeps its tool surface deliberately small.
Read →The shortest route from a browser project to a published static app with metered Python or Mojo functions, version history, and no server to keep idle.
Read →How a multi-tenant service shares a compile cache without letting one tenant put code in another tenant's process — and the four isolation bugs we shipped and fixed on the way there.
Read →Most submitted Python cannot be compiled, and finding that out late costs five seconds of somebody else's compiler. Measuring the pipeline against a labelled corpus, and the static filter that came out of it.
Read →A transpiler that follows rules can be trusted and refuses most code; an agent converts anything and can be trusted about nothing. So the agent's output goes through the same gate — compile, compare against CPython, measure. Plus what fuzzing the transpiler found.
Read →Compiled Mojo was slower than CPython on a million-element list. More than half of that was a copy back the kernel had provably not earned — plus three name-collision bugs found by reading compiler stderr.
Read →Nothing here is a benchmark of somebody else's product. mojosub
competes with the CPython interpreter, not with BLAS — a hand-written Mojo loop
loses to np.dot and we say so in the posts rather than
picking kernels where it does not. Where a measurement went against the design,
the post is about that.