Doh.js + uNet VPU - a unified execution environment where the boundary between Client, Server, and Network has been deleted.
Everything is an Object.
The Network is a Bus.
The Browser is a Node.
Welcome to the Sovereign Stack.
For twenty years, we built applications from fragments - a package manager here, a cloud provider there, a state library somewhere in between. We accepted that complexity was the price of scale. That multiple inheritance was a mistake. That the browser and server would always be separate worlds.
They were wrong.
Complexity wasn't the price - it was the symptom of fragmentation. A single composition algorithm can govern objects, modules, filesystems, databases, and network routing. A single codebase can run on the browser and the server. A single identity layer can replace your VPN, your auth middleware, and your API gateway.
Doh.js unifies the fragment. uNet VPU deletes the network boundary. Together, they are the Sovereign Stack.
A universal network built for you.
Your infrastructure lives in folders, on any hardware, in any location you specify. As long as something is running, uNet connects it together - meshing peers with encrypted message routing. No traffic flows until every node has cryptographically proven its identity.
A Virtual Private uNet (VPU) is the membership controller and routing approver. Because memberships are long-lived, routers store approvals - enabling offline and mesh operation even without a live connection to the VPU.
Ed25519 cryptography. Self-documenting addresses encode the entire trust chain. Self-healing topology routes around failure automatically. Address portability across VPU providers.
End-to-end encrypted tunnels. Ed25519 cryptography. No traffic until identity is proven.
Permissions baked into the protocol. Self-documenting addresses encode the full trust chain.
Tree-based routing discovers paths automatically and routes around failure without human intervention.
Your identity follows you across VPU providers. Join multiple VPUs simultaneously.
Your code writes itself into existence. No webpack. No build step. No config files.
AST-level scanning understands your code - dependencies, exports, environment targets. Generates manifests at build time so runtime execution is instant.
Write a Pattern. Doh decides where it runs - browser or server, Bun or Node. Same module system, same composition rules, same code.
Hierarchical YAML configuration that inherits and layers. Versioned portable packages that install without source scanning.
No transpilation. Your code runs as-is.
doh update
→
AST scan
→
manifests
→
doh run
Don't inherit from a Base Class. Compose capabilities.
Feature-Driven Composition
Pattern('DashboardPanel', 'html', {
// Sub-objects auto-build as children
header: { pattern: 'html', tag: 'h3' },
chart: { pattern: 'MetricsChart' },
toolbar: { pattern: 'html', css: { display: 'flex', gap: 8 } },
post_builder_phase() {
// Children exist. Wire reactive data binding.
this.header.html = this.title;
Doh.mimic(this, 'data', this.chart, 'dataset');
},
on: { click() { this.refresh(); } }
});
Sub-objects auto-build as children. Doh.mimic creates two-way reactive bindings between any two properties. Lifecycle phases run in deterministic order. MOC controls how every property combines during inheritance.
The Method Strategy Matrix
Six core strategies. Each has async variants and pre_/post_ hooks.
Base→derived, blend returns onto this
Sequential pipeline - each return becomes next input
Base→derived, blend returns onto first argument
Derived→base, blend onto this
Reverse pipeline - derived runs first
Derived→base, blend onto first argument
Inheritance becomes composition. One algorithm governs everything.
Explore the architecture →50+ modules across 9 categories. Install only what you need.
Three commands to the Sovereign Stack.
curl -fsSL https://deploydoh.com/install | bash
powershell -c "irm deploydoh.com/install.ps1 | iex"
Requires Bun or Node.js.
We can install those too:
doh install bun
or
doh install node
mkdir my-app
cd my-app
doh init webserver
doh run
Your app runs at localhost:3000 with live reloading.