Everything not listed in this document should behave the same as upstream Hello World. If a feature, setting, or behavior is not mentioned here, the upstream documentation is accurate and fully applicable — see the Documentation section of
instructions.mdfor links.
Hello World is Start9's demonstration service: a single page that proves a package installs, starts, publishes an address, and can be backed up. It exists to be the simplest possible working example of a StartOS package, and this repository is the reference a new package is measured against.
- Upstream repo: https://github.com/Start9Labs/hello-world
- Wrapper repo: https://github.com/Start9Labs/hello-world-startos
- Image and Container Runtime
- Volume and Data Layout
- File Models
- Dependencies
- Network Access and Interfaces
- Installation and First-Run Flow
- Actions
- Tasks
- Health Checks
- Backups and Restore
- Limitations and Differences
- Quick Reference for AI Consumers
One image, and it is the only package here built for every architecture StartOS supports.
| Property | Value |
|---|---|
| Image | ghcr.io/start9labs/hello-world |
| Architectures | x86_64, aarch64, riscv64 |
| Command | hello-world |
| Subcontainer | Purpose |
|---|---|
hello-world-sub |
The primary daemon — the one to attach to |
riscv64 is included because this package doubles as the smoke test for a new StartOS platform: if Hello World installs and starts, the packaging runtime works there.
One volume, and effectively nothing in it.
| Volume | Mount Point | Purpose |
|---|---|---|
main |
/data |
Mounted, but the app writes nothing |
The volume is here to demonstrate the shape a package takes, not because there is state to keep.
None. There is no configuration file and nothing for the package to write.
None.
One interface, serving the page.
| Interface | Id | Type | Port | Description |
|---|---|---|---|---|
| Web UI | ui |
ui | 80 | The web interface of Hello World |
The port is bound on the ui-multi MultiHost and is not masked.
Nothing to configure and nothing to reveal. Install it, start it, open the address, and you should see the page. There is no task, no account, and no credential.
That is the whole test. If the page loads, StartOS installed a package, started its daemon, published an address, and routed a request to it.
None.
None. This package raises no tasks, so the service is never held on a prompt and its ordinary controls are always available.
One check, on the only daemon.
| Check | Displayed | Method |
|---|---|---|
primary |
"Web Interface" | Port 80 is listening |
A failure means the container did not start, which on a working StartOS should not happen — the service logs will say why.
The main volume is copied wholesale — sdk.Backups.ofVolumes('main'). In practice the backup is empty, because the app writes nothing. It is here so the backup and restore paths are exercised, not because there is anything to lose.
- It does nothing. That is the point — it is a demonstration and a smoke test, not a useful service.
- No configuration, no actions, no state.
- The volume is mounted but unused.
package_id: hello-world
image: ghcr.io/start9labs/hello-world
architectures:
- x86_64
- aarch64
- riscv64
subcontainers:
- hello-world-sub # the only container
volumes:
main: /data # mounted but unused
file_models: []
startos_managed_env_vars: []
dependencies: []
interfaces:
ui: { type: ui, port: 80 }
actions: []
tasks: []
health_checks:
- primary # displayed "Web Interface"