@putdotio/taizn
v2.0.0
Published
A typed Tizen TV packaging, install, remote-control, and live proof harness.
Readme
Install
pnpm add -D @putdotio/taiznNode >=24.14 <25
Install the Tizen command-line tools separately and make sure tizen and sdb
work locally.
Quick Start
Create taizn.json in the app directory, keep .taizn/ ignored, then run:
pnpm exec taizn check
pnpm exec taizn package
pnpm exec taizn install
pnpm exec taizn runCommon project files:
| Path | Purpose |
| ---------------------- | ---------------------------------------------- |
| taizn.json | App build, widget, signing, and variant config |
| .taizn/.env | Optional local secrets read by Node |
| .taizn/certificates/ | Optional local author and distributor certs |
| .taizn/remote.json | Optional paired Samsung TV remote token |
| .taizn/build/ | Generated package staging and output |
Config
{
"build": {
"command": ["pnpm", "build"],
"output": "dist",
"requiredFiles": ["main.css", "main.js"]
},
"signing": {
"certificateDir": ".taizn/certificates",
"profile": "my-tizen-profile"
},
"widget": {
"configXml": "platforms/tizen/config.xml",
"indexHtml": "platforms/tizen/index.html",
"injectWebapis": true,
"rewriteAssetUrls": false,
"variants": {
"development": {
"applicationId": "ExampleDev.app",
"bundleName": "example-dev",
"icon": "platforms/tizen/icons/dev.png",
"name": "Example Dev",
"packageId": "ExampleDev"
},
"production": {
"applicationId": "Example.app",
"bundleName": "example",
"icon": "platforms/tizen/icon.png",
"indexHtml": "platforms/tizen/hosted.html",
"injectWebapis": true,
"name": "Example",
"packageId": "Example",
"rewriteAssetUrls": false
}
}
}
}Variant indexHtml, injectWebapis, and rewriteAssetUrls values override
the top-level widget values. Variant excludeFiles values are added to
top-level widget.excludeFiles. Use them when development packages should
bundle local app assets but production packages should load hosted asset URLs.
Automation
Prefer JSON and artifacts when taizn feeds another tool:
pnpm exec taizn describe
pnpm exec taizn check --json --fields targets,tools.sdb
pnpm exec taizn prove --dry-run --json --fields application.id,target Example.app
pnpm exec taizn prove --json --artifact .taizn/proof.json Example.app
pnpm exec taizn validate submission --json --fields ok,problems
pnpm exec taizn tv doctor --connect --json --artifact .taizn/tv-doctor.jsonUse --dry-run before mutating platform state when the command supports it.
Artifact paths must stay inside the app directory; .taizn/... is the normal
home for local proof state.
Command Surface
| Command | Purpose |
| ------------------------------------ | -------------------------------------------------- |
| describe | Print the machine-readable command surface |
| check | Verify Tizen CLI, sdb, and target readiness |
| apps | List installed target applications |
| launch | Start an already-installed app |
| prove | Resolve, launch, and record installed-app proof |
| inspect wgt | Read neutral .wgt archive metadata |
| validate submission | Check generic package metadata |
| probe hosted-assets | Discover or probe hosted asset URLs |
| logs capture | Record a bounded sdb dlog -d snapshot |
| targets list / targets current | Report configured and connected target state |
| profile | Import local Tizen signing certificates |
| package | Build and sign a .wgt |
| install | Package and sideload the widget |
| run | Launch the configured variant application |
| tv doctor / tv info | Inspect Samsung TV remote-control readiness |
| tv pair / tv press / tv script | Pair and send Samsung remote-control key sequences |
See Samsung TV Remote for pairing, environment, and limits.
Environment
Copy .env.example into .taizn/.env or export values in the
shell:
TAIZN_CERT_PASSWORD=...
TAIZN_DIST_PASSWORD=...
TAIZN_VARIANT=development
TAIZN_TARGET=<tv-ip>:26101
TAIZN_TIZEN_CLI=~/tizen-studio/tools/ide/bin/tizen
TAIZN_SDB=~/tizen-studio/tools/sdb
TAIZN_TV_HOST=<tv-ip>
TAIZN_TV_PORT=8002
TAIZN_TV_PROTOCOL=wss
TAIZN_TV_TOKEN=<paired-remote-token>taizn tv uses TAIZN_TV_HOST, or the host part of TAIZN_TARGET when no TV
host is set. taizn tv pair writes the paired remote token to
.taizn/remote.json; keep .taizn/ ignored.
Boundaries
taizn owns platform mechanics: Tizen CLI, sdb, widget archives, Samsung
remote keys, target inventory, logs, hosted-asset probes, and proof artifacts.
Consumer apps own product journeys, credentials, app IDs, content IDs, account
state, visual assertions, release decisions, and Samsung TV Seller Office
submissions.
