Put, clone, publish
How software gets onto the computer and how it changes.
$ empty project create personal-finance Personal Finance
Created Project personal-finance at /home/exedev/projects/personal-finance
$ empty put ./notes.html --as finance --project personal-finance
Installed private static Thing finance in Project personal-finance from 1 file (61 bytes) at /home/exedev/things/finance
On anything.emptyos.com
See all Things: `empty things`
$ empty clone finance && cd finance
Cloning into 'finance'...
Bound /Users/you/finance to anything:thing://finance
# edit, then
$ ./verify && git commit -am 'Add monthly view'
$ empty put . --json
put accepts a file, an HTML page, a static directory, or a repository with a Thing manifest. A service needs the manifest. The selected directory is the deployment boundary: every file under it is served, so use a build output such as dist/ rather than a source root. EmptyOS does not scan for secrets.
A file link opens a page with its filename, type, size, and Download. Signing in returns to that same page; nothing downloads automatically. Use Download to save a copy, or Home to return to your computer. HTML pages and static sites continue to open normally.
clone binds the checkout to one computer and one Thing. Do not copy it elsewhere or edit its emptyos.* git keys.
put . from a clone publishes. It requires a clean tree, a passing ./verify, and exactly one commit on top of the live head. The computer validates the candidate, activates it, and checks the route; on failure it reverts and reports. ./prepare may install declared dependencies and use the network. ./verify runs offline.