o-
o- is a Rust-based JavaScript runtime with multiple engine backends and an
experimental npm-style package manager.
What It Does
- runs JavaScript through SpiderMonkey, V8, or JavaScriptCore
- loads a shared
jstdbootstrap layer for common host behavior - installs npm packages into local
node_modules - supports global package installs with generated
.binshims - writes npm-style
package-lock.jsonfiles - formats runtime and package-manager failures through a shared
Reportflow
Workspace Layout
o-: CLI and top-level integration crateo-core: shared runtime traits and error typesjstd: shared JavaScript bootstrap layero-toolchain-javascriptcore: JavaScriptCore embeddingo-toolchain-spidermonkey: SpiderMonkey embeddingo-toolchain-v8: V8 embeddingwww: documentation site
Configuration
The CLI reads the default engine from:
# ~/.config/o-/config.toml
[]
= "spidermonkey"
Built-in engine names:
spidermonkeyv8javascriptcoreorjscon macOS
CLI
Running a Script
Package Manager
Local install
Inside a project with a package.json:
This installs into:
<project>/node_modules
<project>/package-lock.json
Global install
Global packages are stored in:
~/.config/o-/packages/node_modules
~/.config/o-/packages/package-lock.json
Generated shims are stored in:
~/.config/o-/packages/node_modules/.bin
Uninstall
Uninstall removes:
- the installed package directory
- generated
.binshims - the matching entry in the global lockfile
Current Package-Manager Scope
Implemented:
dependenciesdevDependenciesoptionalDependenciespeerDependencies- tarball download and extraction
dist.integrityverification.binshim creation- global uninstall cleanup
Not implemented yet:
- lifecycle scripts
- workspaces
- hoisting optimization
cimodepackage.jsonmutation commands
Documentation
The docs app lives in www and includes:
- getting started
- engine backend notes
- package manager behavior
Release Process
This repository is configured for release-plz.
- push regular changes to
main release-plzopens or updates a release PR- merging that PR publishes unpublished crates and creates tags/releases
The release workflow expects a CARGO_REGISTRY_TOKEN secret with publish
access to crates.io.