Choose a template and features that match your NAS architecture.
| Project type | Architectures | Limits |
|---|
native-go with plain or Vue UI | x86_64, aarch64, armv7 | Default manifest: x86_64, aarch64; armv7 executor, jobs and daemon are built but not yet verified on a NAS. |
binary | x86_64, aarch64, armv7 | Static CGI executable for each declared family. |
compose | x86_64, aarch64 | Requires Container Manager; a project without a gateway produces an architecture-independent SPK. |
| Native layout | x86_64, aarch64, armv8, armv7 | Uses your payload layout and build hooks; check, build, and inspect only. |
x86_64, aarch64 NAS platforms | Every DSM platform of the family | INFO arch lists them all, the same set the package source matches; it includes broadwellntb, coffeelake, skylaked and rtd1619. |
armv7 NAS platforms | alpine, alpine4k, armada38x, monaco | DSM 7.2 or later platforms; other armv7 models are not included in the generated SPK. |
| Native capability or feature | x86_64 | aarch64 | armv7 | Backend requirement |
|---|
files: session | Yes | Yes | Yes | Go |
identity: standalone (login) | Yes | Yes | Yes | Go with Vue UI build |
jobs | Yes | Yes | Yes | Go |
delegate | Yes | Yes | Yes | Go; administrator approval |
rootOps | Yes | Yes | Yes | Root scripts and administrator approval; binary manifest permits the declaration |
daemon | Yes | Yes | Yes | Go or binary |
install.sharedFolder | Yes | Yes | Yes with Go | Go or binary; CLI init option is native-go only |
entry | Yes | Yes | Yes | Go with entry gate |
portal | Yes | Yes | Yes | Go, Rust, Python, Node or binary with rootOps or delegate; portal DSM floor applies |
Template defaults and feature floors apply together.
| Template or feature | Minimum DSM | Validation |
|---|
native-go, binary template default | 7.1-42661 | Base manifest validates version/build syntax; this is the template default. |
| Listed armv7 platforms | DSM 7.2 | Generated platform list excludes models confined to DSM 7.0/7.1. |
| Compose / Container Manager | 7.2.1-69057 | Enforced by init and build; check does not enforce the container floor. |
| Native Application Portal | 7.1-42661 | Declaration and build. |
| Root operations | 7.1-42661 | Enforced by manifest validation and capability addition. |
--min-dsm shorthand | Full version/build |
|---|
7.0 | 7.0-41890 |
7.1 | 7.1-42661 |
7.2 | 7.2-64570 |
7.2.1 | 7.2.1-69057 |
| Full DSM 7 version/build | 7.<minor>[.<patch>]-<build>; feature floors still apply |
Install the tools needed by your project on the development machine.
| Tool or build | Requirement | Notes |
|---|
| Node.js for the CLI | Minimum not declared by the CLI package | Repository CI uses Node.js 22.19.0; a CLI minimum cannot be inferred from that alone. |
| Node.js for this website | 22.19.0 or later | Website package requirement. |
| Native-go backend and jobs | Go 1.25.0 module; selected toolchain 1.26.9 | Toolchain selection may download Go 1.26.9; make it available for offline builds. |
| Compose DSM authentication gateway | Go 1.21 or later; builds with exactly Go 1.26.9 | Required for DSM-authenticated web Apps; headless/public Compose packages do not build a gateway. |
| Daemon build | Go 1.21 or later; builds with exactly Go 1.26.9 | In addition to tools needed for your payload. |
| Root operations / delegate build | Go 1.21 or later; builds with exactly Go 1.26.9 | Native-go projects also require their backend toolchain. |
The CLI compiles the executor, lifecycle helper, daemon controller and gateway with exactly Go 1.26.9 (GOTOOLCHAIN=go1.26.9, ignoring your GOTOOLCHAIN, GOFLAGS and GOAMD64/GOARM64), so every builder produces the same bytes and the same executor digest. Go downloads that release when your go is a different version. Offline, or when the download is blocked, the build fails and names Go 1.26.9; install go1.26.9 on PATH or allow GOPROXY to serve golang.org/toolchain. The build also refuses a binary whose build info names another Go release. The executor and lifecycle helper come from the SDK version that backend/go.mod requires (Go module github.com/synopackageland/syno-pkg-land-sdk/executor). build checks their SHA-256 against the digests the CLI ships for that version and stops with EXECUTOR_DIGEST_MISMATCH when they differ.
Build your own Go code for armv7, such as a native-go backend, a daemon payload or a binary CGI, with Go 1.26.9 too. On a DS416 (alpine4k, DSM 7.1.1, kernel 3.10.108), an armv7 program built with Go 1.26.0 crashed at start with futexwakeup ... returned -22 and SIGSEGV; the same program built with Go 1.26.9 ran. Other Go 1.26 releases were not tested. The CLI does not check the Go release of your own binaries.
| Binary template creation | Go command | init -t binary builds the sample CGI binaries; packaging your own prebuilts needs no backend compilation. |
| Vue frontend | Node.js and npm; project dependencies installed | Run npm install in frontend/ before build; build does not install dependencies. |
| Local Compose dev / test | Docker with docker compose | Needed to start and check local containers. |
| Native layout | Tools required by your build hooks | Supply them for each declared architecture. |
Catalog filenames use locale tags; DSM uses the language codes below.
| Locale | Language | DSM code | Catalog file |
|---|
en | English | enu | en.json (required fallback) |
zh-TW | Traditional Chinese | cht | zh-TW.json |
zh-CN | Simplified Chinese | chs | zh-CN.json |
ja | Japanese | jpn | ja.json |
ko | Korean | krn | ko.json |
de | German | ger | de.json |
fr | French | fre | fr.json |
es | Spanish | spn | es.json |
it | Italian | ita | it.json |
| Other DSM languages | English fallback | — | en.json |
| i18n rule | Limit |
|---|
| Catalogs | Every shipped locale has exactly the English keys and placeholders. |
| Package Center translations | i18n.info accepts supported locales except en; English text comes from top-level fields. |
| Glossary | Each listed message uses its locale’s term, ignoring case. |
Keep root scripts short and within the output limit.
| Feature | Limit |
|---|
| Root operation script | At most 16 KiB; fixed root/<name>.sh, with no caller-supplied command arguments |
| Root operation execution | At most 20 seconds |
| Root operation output | At most 1 MiB combined stdout and stderr |
| Binary CGI | At most 256 MiB per executable |
| Daemon payload | At most 512 MiB per architecture; no symlinks or setuid/setgid files |
| Delegate destination keys | 1–64 unique keys, each at most 64 characters |