The files an Orb program is made of, and the ones the compiler writes.
An Orb program can be a single .lolo file. As it grows, a few more files join it, and the compiler writes others you never edit.
my-app/
├── app.lolo the program: orbitals, entities, traits, pages
├── locales/
│ ├── en/my-app.json copy for (i18n/t "key") in each declared locale
│ └── ar/my-app.json
├── blocks/
│ └── Invoices.lolo your own building blocks, imported as "@app/blocks/Invoices"
└── public/ files copied as-is to the built site (logos, downloads).lolo is the language you write. It is a Lisp-flavoured notation: every operator call is a parenthesised list, (op args…).locales/<locale>/<app>.json holds the text for each language a program declares with locales [en, ar, sl]. See localization.blocks/ holds building blocks you import with uses X from "@app/blocks/<Name>".public "./public" in the app header names a folder copied verbatim to the built site's root..orb is the JSON form of a program: .lolo lowers to it losslessly, and it is what the runtime and the validator read. orb emit orb app.lolo prints it.orb resolve app.lolo --output app.orb writes the fully resolved program: every import flattened, every reference inlined. A program that uses uses lazy also gets a lazy/ folder with one .orb per lazily loaded behavior, and a program with locales gets one merged catalog per locale beside it.orb compile writes a full application (TypeScript by default) to --output. Never edit it: change the program and compile again.uses names where a behavior comes from:
uses Browse from "std/behaviors/std-browse" the public standard library
uses Invoices from "@app/blocks/Invoices" your own blocks
uses lazy Guide from "./guide" loaded only when one of its pages opensBehavior packages are installed, not built in: orb list shows what is available, and orb add <package> adds one to a project.
The entities page starts the tour of the language.
A programming language of composable state machines.