tizen-tool is a small CLI for building, re-signing, and installing Tizen web packages
through a Dockerized Tizen Studio environment.
It provides:
- a reproducible Tizen Studio setup inside Docker
build,resign, andinstallcommands- strict configuration loading from CLI arguments, environment variables, and
.env - local caching of the Tizen Studio installer by version
- Docker image reuse keyed by the Tizen Studio version, required packages, and bundled Docker resources
The project is intentionally small. It is designed to remain predictable, easy to audit, and simple to run from a single working directory.
- Builds a
.wgtpackage from a Tizen web app directory - Re-signs an existing
.wgtpackage with a configured profile - Installs a
.wgtpackage on a TV oversdb - Builds and reuses a local Docker image with Tizen Studio and the required Tizen packages
Typical workflow:
- Configure
.env - Build or re-sign a package
- Install it on a TV
- Python 3.10 or newer
- Docker with Linux image support
- uv
- a valid Tizen signing profile directory containing
profiles.xml
The default local development version is Python 3.14, as defined in
.python-version. CI also runs on Python 3.14.
uv tool install tizen-toolRun without installing:
uvx tizen-tool --helpYou can also use pipx:
pipx install tizen-toolmake install-depsRun the tool from a repository checkout with:
uv run tizen-tool --helpThe tool reads .env from the current working directory. The effective precedence is:
- CLI arguments
- Environment variables
.env
| Name | Required | Description |
|---|---|---|
TIZEN_VERSION |
Yes | Tizen Studio version (3.7 or newer), used to resolve the installer URL. |
REQUIRED_PACKAGES |
Yes | JSON array of Tizen package IDs installed into the Docker image. |
CACHE_DIR |
No | Directory used for application cache files. Defaults to ~/.tizen-tool. |
PROFILES_DIR |
Build / resign | Directory containing profiles.xml. Relative paths are resolved from the current working directory. |
PROFILE |
Build / resign | Signing profile name from profiles.xml. |
TV_IP |
Install | TV address or serial. Accepted forms: host, host:port, IPv4, or [IPv6]:port. |
BUILD_SRC_DIR or SRC_DIR |
Build fallback | Source directory for the app when not passed on the CLI. |
BUILDIGNORE_FILE or BUILD_IGNORE_FILE |
Build fallback | Optional gitignore-style exclude file for the build copy step. |
BUILD_REBUILD, INSTALL_REBUILD, RESIGN_REBUILD, or REBUILD |
No | Forces Docker image rebuilding for the corresponding command. |
INSTALL_PACKAGE_FILE or PACKAGE_FILE |
Install fallback | .wgt package path used when not passed on the CLI. |
RESIGN_PACKAGE_FILE or PACKAGE_FILE |
Resign fallback | .wgt package path used when not passed on the CLI. |
See .env.example for an example configuration.
Build a package:
tizen-tool build /path/to/appBuild with explicit package overrides:
tizen-tool build /path/to/app \
--required-package TV-Samsung_Public_6.0 \
--required-package TV-Samsung_Wearable_6.0Re-sign a package:
tizen-tool resign /path/to/app.wgtInstall a package on the configured TV:
tizen-tool install /path/to/app.wgtPrint LAN IPv4 addresses by interface for TV Developer Mode:
tizen-tool get-lan-ipsOverride the TV target from the CLI:
tizen-tool install /path/to/app.wgt --tv-ip 192.168.1.100Force rebuilding the Docker image:
tizen-tool build /path/to/app --rebuildRun the package directly from a checkout:
uv run tizen-tool --helpbuildcopies the app into a temporary directory, runstizen build-web, and writes the final.wgttodist/inside the source directoryresignwrites the new package toresigned/next to the source packageinstallmounts the package directory read-only and installs by package name oversdb- installer binaries are cached under
<CACHE_DIR>/installers/byTIZEN_VERSION - temporary files are stored under
<CACHE_DIR>/tmp/ - the Docker image is reused unless its identifying labels no longer match the requested configuration
When an installer is not already cached for the requested TIZEN_VERSION, the tool tries both
known Tizen installer URL patterns, stores the first successful match in the local cache, and
reuses it for subsequent image rebuilds of the same version.
The project supports Tizen Studio 3.7 or newer. Older CLI installers require a preinstalled Java runtime and are intentionally rejected during configuration validation.
Useful commands:
make install-deps
make lint
make check-types
make check
make buildThe development toolchain uses:
rufftyprekpysentry-rsbandit
Run the full local check suite:
make checkCreate a patch, minor, or major release from the main branch:
make release-patch
make release-minor
make release-majorThese targets:
- install dependencies
- run the local checks
- run
python-semantic-release - infer the next version from conventional commits
- update
pyproject.toml - build distributions with
uv build - create and push the release commit and annotated tag
After pushing the release commit and tag, GitHub Actions publishes the tagged release to PyPI
and creates the GitHub release from .github/workflows/ci.yml.