Apps overview
Start with the built-in app builder. In the client, open App → Create an app, choose a type and where data is stored, and describe what you need. The built-in app developer Skill designs and writes the app, checks it, installs it and opens it for you to try.
The rest of this section explains how apps work, for when you want to review, change or write one by hand (Build your first app).
An app is a plugin with its own window. The window shows your page on the left and a SoduWork chat side panel on the right, so people can work in a focused UI and ask AI for help in the same place.
Apps use the same install, version, review and export path as other plugins (Plugins). Their manifest uses "template": "app".
Two kinds of page
| Kind | source.type | When to use it |
|---|---|---|
| Packaged page | package | Static HTML, CSS and JS shipped inside the plugin. No server, no sign-in. Works offline |
| Web page | external | A page served by your own HTTP(S) service, for example an existing business system |
A packaged page's entry and every file it references must be listed in resources with kind ui or asset. SoduWork reads them directly from the package; it doesn't start an HTTP server, Python or Node.js backend. The page runs with normal browser APIs and has no Node.js or file system access. localStorage and IndexedDB are separated per account and per app, and survive restarts and upgrades of the same app.
Where it appears
Each page is a ui.contributions entry with a slot. Apps use workspace.navigation and open from App in the left bar.
"ui": {
"contributions": [
{
"id": "main",
"title": "Release notes",
"slot": "workspace.navigation",
"source": {
"type": "package",
"entry": "ui/index.html",
"openMode": "workspace",
"bridge": { "version": 1, "capabilities": ["conversation.send"] }
}
}
]
}
The window opens at a default size that fits the screen; you can set your own (appWindow). The title bar's Refresh reloads only your page; the side panel chat and its draft stay.
Talking to SoduWork
The page talks to SoduWork through the H5 SDK, soduwork-app.js. Each SDK method needs a capability declared in source.bridge.capabilities. Undeclared calls are refused. See H5 SDK reference.
The page never receives a SoduWork session, device credential, local path or Electron object.
Data
New apps declare where their data lives in the top-level jiyong.storage field: {"location": "local"} or {"location": "cloud"}. The choice is made when the app is created.
- Local stores data on the user's computer.
- Cloud needs a versioned
initialization.scriptJSON in the package. The Hub creates a separate space per app and account. The page and the app's Skills share thedata.*methods; the page never holds database passwords.
If the cloud isn't reachable, configured or authorized, calls fail. They never fall back to writing locally.