@volter/world is the product in a library: World and TwinLog, one method per verb, in the same words
as the command line. The volter command is one client of it and adds nothing.
scripts/docs-reference.test.ts checks this page against the source: every public method of
World appears here.
import { World } from '@volter/world';
const world = World.open(); // the world of the cwd, on its checked-out branch
await world.up();
world.run(['npm', 'test']);
for (const change of world.log()) console.log(change.service, change.operation, change.subject.id);
await world.down();
A world: the twins an app needs, running together, on one branch.
| method |
does |
World.open({ root?, name? }) |
the world of root (default: walk up from the cwd to .volter/world.json), on name or the checked-out branch. Throws when there is no world |
World.find(from?) |
the same, or null |
World.init(app?, { name?, allowUnknown?, force?, out? }) |
volter world init: detect vendors, write .volter/world.json; returns { world, result } with the plan and the coverage proof |
World.initBare(dir, '<org>/<world>', twins, { install?, force? }) |
volter world init --bare: a world with no app over the twins named, installed with bun; served as /<org>/<world>/ |
isMain() |
whether this is the main branch |
world.name, world.root |
the branch, and the world root |
| method |
does |
up({ mode?, seed?, cwd? }) |
start the twins; resume a branch that has run before, seed a fresh one unless seed: false. mode: 'sealed' is the sandbox |
down({ purge? }) |
stop; purge deletes state if no dependent local branch references it |
run(command, { cwd?, verbose? }) |
run a command inside the world; returns its exit code; verbose: true shows the injector routing banner |
activateScript() |
the shell script volter world activate prints |
shell() |
a subshell with the world active; resolves to its exit code |
status() |
WorldStatus: world, branch, branches, running, origin, unpushed, changesets pushed, each service's URL, the env file |
instance() |
the runtime's own record of the branch, or null before the first up |
| method |
does |
repos() |
one twin log per twin that has recorded anything: its branch entries and what is unpushed |
repo(service) |
the twin log for one twin; throws naming the twins the world has |
| method |
does |
log() |
every change across the twins, oldest first; a pushed change carries its receipt and the changeset that pushed it |
unpushed() |
changes not yet pushed |
diff(base?) |
the changes since a mark, grouped by twin |
diffBase() |
what diff measures from, as it says it: branch <name>, origin, or the story |
| method |
does |
seed({ entry?, cwd? }) |
load the default data |
reset({ entry?, cwd? }) |
back to the default data |
| method |
does |
branch(name, { at?: { instant?, positions?, views? } }) |
a new branch from here or a selected immutable view; positions and views are keyed by twin. Resolves to its World, checked out. This branch stops |
checkout(name) |
switch branches; resolves to the target's World |
branches() |
the branch names |
replay(name, into) |
feed a changeset's changes into another branch's twins, in order, with the same ids |
| method |
does |
clock() |
{ at, frozen }: the instant every twin stamps from, or the wall clock when none is set |
setClock(iso) |
set it |
advanceClock(by) |
move a set clock forward: '30d', '12h' |
| method |
does |
serve({ port?, host?, announce? }) |
volter world serve: this world on a URL under /<org>/<world>/; resolves to { url, base, token, readToken, stop } |
vendors() |
the vendors this world has a twin of, as world.json names them: what volter remote add --create makes a hosted World with |
remotes() |
the remotes named in world.json, name → url or path |
addRemote(name, target, { token? }) |
volter remote add; origin is the default for fetch and push |
removeRemote(name) |
forget a remote |
remote(name?) |
the remote a verb uses: { url, namespace } or null |
| method |
does |
twin(vendor) |
the twin's URL, root and deploy policy, and whether a credential is sealed |
setTwinRoot(vendor, { url, deploy, scope?, refresh? } | null) |
volter twin <vendor> root: the vendor's real account behind the twin, in world.json; null clears it |
sealTwinCredential(vendor, input) |
seal a credential (a bare token, or a JSON payload) beside the world under the user's key |
refreshTwin(vendor) |
observe the root now |
| method |
does |
origin() |
the remote this world clones from and pushes to, or null |
clone(url, { token? }) |
record the remote, store the token, fetch everything |
fetch({ token?, services? }) |
bring what the remote has into this branch's cache of its parent; what it reads does not move until pull or named changeset rebase |
pull({ token?, services? }) |
fetch and integrate the origin snapshot, preserving inherited local layers and naming conflicts |
changeset({ name?, message?, base?, verifiers?, overwrite? }) |
cut a changeset from the unpushed changes |
changesets() |
every changeset on this branch, with its file |
push({ name?, token?, force? }) |
push to the remote: the named changeset or every unpushed one; resolves to the outcomes with their receipts |
| method |
does |
mark(id?), marks() |
a base position across every twin, and the ones recorded |
verify(name, { into?, ephemeral? }) |
replay into a clean target and run the changeset's checks |
approve(name, principal, note?) |
sign the changeset's current hash |
readiness(name) |
ready or not, with every missing leg named |
rebase(name) |
integrate the fetched origin snapshot and re-check the changeset; without an origin, use the local base |
rebaseBranch() |
rebase this branch onto its base's current position, every twin; conflicts named per record and field |
deploy(name?) |
volter world deploy: perform landed changes against each root twin's vendor, by policy; the named changeset, or every ready one. Automatic on arrival only under auto; gated requires checks and approval, and hold requires explicit deployment |
| export |
does |
parseOriginUrl(url) |
https://host/org/world → { url, namespace } |
worldNameFor(app) |
the world name init derives from a directory |
findWorldRoot(from?), requireWorldRoot(from?) |
the nearest world root |
currentBranch(root), setCurrentBranch(root, name), mainBranch(root) |
the checked-out branch |
worldConfigPath(root), worldEnvPath(root), worldSeedPath(root) |
the files |
tokenFor(origin), storeToken(origin, token), requireToken(origin, explicit?), credentialsPath() |
the token store |
What world.repos() and world.repo(service) return: one twin's log as the world reads it.
| method |
what it answers |
service, stateService, root |
the twin's name, the state service it records under, its control root |
state() |
the tree: the twin's resources as a read sees them |
log() |
this branch's own entries, bookkeeping aside |
unpushed({ pushable? }) |
entries the parent does not hold |
change(write) |
one write through the kernel's write path; the head performs it when the twin's root says so |
captureHistory(service, root) returns {view, position, descriptor}. Store the view and
position together for a durable cut. readTree(service, root, {view, at?}) reads that retained
view; forkTwin({service, fromRoot, toRoot, occurredAt, view, at?}) branches from it.
historyAtInstant(service, instant, root) captures an immutable time selection, including
noncontiguous inherited and local history. The numeric helper positionAt refuses an instant
that cannot be represented by one contiguous offset.