One language for every realm.
Write one program. The compiler knows which parts belong to the server, which to the browser — and generates the bridge. No fetch calls, no serializers, no API layer. on / emit is the only wire.
import Store from './store.hl' String title = Store.postTitle($slug) // fetched per request, on the server View { article { h1 { title } button { 'save' on click() { emit saveNote({ slug = $slug }) // crosses the boundary } } } }
A View anchors the client, a provider anchors the server; an emit whose name crosses realms becomes the transport. You never annotate a realm.
Holes, events and structural joints are known at compile time. A state write runs exactly the statements bound to it — work is O(changes), not O(view).
The native runtime serves SSR, live push over h1/h2/h3, TLS and gzip — from a project folder holding nothing but your own files.
A file IS a class: typed members are state, functions are methods, the run body is the constructor. Hybrids are the one literal for objects, lists and config; strings are multi-line with real newlines. And on / emit is the only communication primitive — same words whether the event crosses a function, a socket or the server/browser boundary.
// note.hl → class Note — the file is the class String title = 'untitled' // typed member: state Number saves = 0 save() { // a method saves = saves + 1 emit saved({ title = title }) // anyone may listen } on saved(ev) { // ...including this class itself console.log('saved: ' + ev.title) }
The language chapter has the longer story.
One binary. Run a folder and its project.hl is the app; everything else is a subcommand.
hybriel . // run the project in this folder hybriel script.hl // run a single file hybriel init web myapp // scaffold: web · canvas · script hybriel add hl:slack // resolve, verify, pin in hybriel.lock hybriel --offline . // never touch the network, fail loudly hybriel pack ./myplugin // build src + target tarballs hybriel --manifest . // the static JSON a registry reads hybriel --graph . // the whole analysis, as JSON hybriel toolchain install // fetch zig for --native linking hybriel --version
One binary. Everything else — the stdlib included — is fetched on first use and cached.
curl -fsSL https://hybriel.worldapi.org/install.sh | bash hybriel init web myapp cd myapp && hybriel
Packages install from this very host: hybriel add hl:str verifies every byte against the registry's signed metadata and pins the version in hybriel.lock.
Rendered by hl:web — this page is a Hybriel component. Read the docs · browse the plugins