NuMojo v0.8.0 is finally here!, a substantial update that moves the project forward on multiple fronts while keeping us firmly on the track toward v1.0.
Below are the highlights, focusing first on the most impactful changes. Check out our changelog for a more comprehensive list of all the updates and examples!
Highlights
Python-like complex numbers, everywhere
NuMojo now supports Python-style imaginary literals via the new ImaginaryUnit and the 1j alias. This enables natural, readable complex-number expressions across:
- Scalars
- SIMD vectors
- NDArray / ComplexNDArray
Complex arithmetic, broadcasting, and operator support have all been expanded and refined, making complex workflows significantly more ergonomic and consistent.
Major expansion of the complex ecosystem
Complex support has grown into a first-class citizen across the stack:
- New
ComplexDTypevariants for all real dtypes (e.g.f64 → cf64) - Rich APIs for
ComplexSIMDandComplexNDArray - Statistical, reduction, and manipulation methods (e.g.
sum,mean,argmax,cumsum,flatten,transpose, etc.) - Magnitude-based comparison operators
- Convenience constructors like
zero(),one(),I(), andfrom_polar()
Matrix views (initial rollout)
Matrix views are finally here.
- Matrix methods can now return views, laying the foundation for view-based semantics across Matrix and NDArray.
- Due to a current Mojo compiler limitation, view-returning operations are temporarily exposed via
get()/set(), while__getitem__/__setitem__continue to return copies. - This groundwork enables more efficient, NumPy-like behavior as Mojo support matures.
Explicit copy semantics
NuMojo now fully aligns with Mojo’s explicit copy rules:
- Large containers like
NDArray,ComplexNDArrayandMatriximplementCopyable - Use
.copy()for shared-origin duplication and.deep_copy()for fully independent memory - Reduced accidental copies and clearer ownership semantics throughout the codebase. More work upcoming to reduce copies.
Infrastructure & Tooling
- Migrated entirely to the
TestSuite-based testing framework, replacing the deprecatedmojo test - Introduced a Pixi-based build backend, enabling installation directly from GitHub with:
- Automatic path setup
- No dependency on Conda or external package channels
NDArray & slicing improvements
- Getting closer to NumPy compatibility for slicing!
- Full negative indexing and reverse slicing
- Automatic bounds clamping
- Improved performance and reduced memory overhead for slicing computations.
- Better diagnostics and named errors for invalid indexing and shape mismatches etc.
- Configurable per-array printing options (e.g. precision control)
Internal changes & fixes
- Reworked Matrix internals and indexing behavior
- Standardized error handling via a unified
NumojoErrorproviding better diagnostics. - Temporary compatibility layer for pointer semantics while transitioning to the new
UnsafePointermodel - Numerous correctness fixes across slicing, cumulative ops, and memory handling
- Removal of deprecated integer types (
isize,intp)
Documentation
This release also includes a major documentation push:
- Expanded and clarified docs for complex numbers, SIMD, arrays, and copy semantics
- Updated READMEs (including a new Korean version)
- Improved test, error-handling, and roadmap documentation
v0.8.0 brings NuMojo more closer to a polished, stable v1.0 while unlocking powerful new numerical and complex-number workflows today.
As always, feedback is very welcome, please try it out, report issues, and let us know what you think! Happy computing!