Developer docs
Want to build your own app? Give this to your AI.
Paste it into an AI coding assistant that can run terminal commands, such as Claude Code, Codex or Cursor. It sets up the project, builds the package and tells you how to install it.
Help me build an app for my Synology NAS as a DSM package (.spk) with the Syno Package Land CLI. Run the CLI as `npx @synopackageland/cli@latest <command>`. It needs Node.js 22 or newer; its guide says what else a template needs (for example Go). Check what is installed first and tell me what is missing. 1. Before anything else, read the CLI's built-in guide: `npx @synopackageland/cli@latest skill list`, then `npx @synopackageland/cli@latest skill show orchestrator`, and follow it step by step, reading the page it points to at each step. The guide and `--help` are the authority for commands and flags; do not rely on memory or invent any. 2. Ask me what the app should do before you create anything. 3. Build it the way the guide says, then check the project and build and inspect the .spk with the CLI. Fix every error before you call it done. 4. Tell me how to install it: Package Center → Manual Install with the .spk file; the SPK is unsigned, so DSM may warn first. Do not install anything on my NAS or publish anything unless I ask. Docs: https://synopkgland.com/docs/
Your computer needs Node.js 22+ (and Go 1.25+ for the default template). The AI checks for them first.
The synopkgland CLI turns a project folder into an unsigned SPK that you install on a Synology NAS. You can build a native app with a Go backend and a DSM window UI, package a static Linux CGI you already have, wrap a Docker Compose app, or package an existing native product.
Start with the Quick start. It takes you from an empty folder to an installed package. Read Capabilities to see what your code can do on the NAS and which actions need an administrator.
Pick a template
Section titled “Pick a template”| You want to | Template | Create it with | You need |
|---|---|---|---|
| Build a new app with a Go backend and a Vue UI in a DSM window | native-go with Vue (default) | synopkgland init -t native-go | Go, Node.js |
| Build the same app with a hand-written UI | native-go with a plain UI | synopkgland init -t native-go --ui plain | Go. The plain UI cannot use login. |
| Package a static Linux CGI that handles its own authentication | binary | synopkgland init -t binary | Go, to build the sample CGI |
| Package an upstream container | compose | synopkgland init -t compose | A compose.yaml, or the generated example |
| Package a product that already has its own payload and DSM window | existing native | No template. Write dsm-package.yaml with backend: {kind: native}. | Your own build scripts |
Add --with files,jobs,login (and delegate, root-ops) to a native-go project at creation time. Add them later with synopkgland add. See Capabilities for what each one does.
I want to…
Section titled “I want to…”| I want to… | Read |
|---|---|
| Go from nothing to an installed package | Quick start |
| Decide what my code can do on the NAS | Capabilities |
| Write the backend and handlers of a native app | Native app |
| Build the window UI | UI |
| Open my app from a Login Portal address | Portal |
| Package a product that already exists | Existing native product |
| Ship a shell, Node.js, Python, Bun or Deno program | Scripts and interpreted languages |
| Package a Docker Compose app | Container app |
| Browse and transfer the signed-in user’s NAS files | Files |
| Sign users in with their Synology account outside the DSM desktop | Login |
| Give my app a Shared Folder | Shared Folder |
| Process data after the browser closes | Jobs |
| Write files into a user’s folder while they are offline | Delegate |
| Run a fixed operation as root for an administrator | Root operations |
| Build, deploy, version and distribute the package | Ship |
| Know where data lives, back it up and remove the app | Data and removal |
| Look up a command, field, API method, error code or platform limit | CLI, Manifest, Compose manifest, API, Errors, Platforms |
| Get a quick answer | FAQ |
Source repositories
Section titled “Source repositories”The developer kit is four repositories. The CLI is at 0.10.11, the SDK at 0.10.11 and the templates at 0.10.12; the UI library has its own version, 0.9.9. The CLI package also exports @synopackageland/cli/e2e: DSM sign-in, app-window and SSH-tunnel helpers for a package’s end-to-end tests on a real NAS, which mask DSM’s session cookies and tokens in the run’s output.
| Repository | What it holds | Install as |
|---|---|---|
| syno-pkg-land-cli | The synopkgland CLI: init, check, build, inspect, deploy, status | npm @synopackageland/cli |
| syno-pkg-land-templates | The app-owned files init and add copy into a project | npm @synopackageland/templates, a dependency of the CLI |
| syno-pkg-land-sdk | Executor protocol spec, the executor, the Go client packages and the TypeScript and Vue client | Go module github.com/synopackageland/syno-pkg-land-sdk, npm @synopackageland/sdk |
| syno-pkg-land-ui | DSM-styled Vue components | npm @synopackageland/ui |
A generated native-go project names its SDK version once, in backend/go.mod. The CLI builds the executor from that version.