Tringify CLI

Install the tringify command, sign in, push themes to development stores and publish versions to your listing.

The Tringify CLI is the tringify command for theme development. It creates a theme from the starter, previews and validates it, adds it to a development store, and publishes versions to your theme listing, signing in with your Tringify account. It is open source at github.com/tringify/cli.

Install#

On macOS or Linux, run:

bash
curl -fsSL https://raw.githubusercontent.com/tringify/cli/main/install.sh | sh

The installer downloads the release for your platform, verifies it against the published SHA256SUMS, and installs tringify in ~/.local/bin. On Windows, run this in PowerShell:

powershell
irm https://raw.githubusercontent.com/tringify/cli/main/install.ps1 | iex

It verifies the download the same way, installs tringify.exe in %LOCALAPPDATA%\Programs\tringify and adds that folder to your path; open a new terminal afterwards. Releases cover macOS (Apple silicon and Intel), Linux (x86-64 and ARM64) and Windows (x86-64, which also runs on Windows on Arm). Set TRINGIFY_CLI_VERSION to install a specific release. Run tringify version to confirm.

The CLI is a single program and needs nothing else installed: no Python, Node.js or other runtime. The first time you check, package or preview a theme, it downloads the theme validator (themecheck) and preview renderer (theme-preview-render) from the theme tools release for your platform, verifies them against that release's SHA256SUMS, and keeps them in your user cache folder:

System

Folder

macOS

~/Library/Caches/tringify/theme-tools

Linux

~/.cache/tringify/theme-tools, or under $XDG_CACHE_HOME

Windows

%LocalAppData%\tringify\theme-tools

The CLI looks for a newer theme tools release at most once a day and keeps working offline with the one it has. Set TRINGIFY_THEME_TOOLS_VERSION to use a specific release, TRINGIFY_THEME_TOOLS_HOME to keep the two programs in another folder, or TRINGIFY_THEME_CHECK and TRINGIFY_THEME_PREVIEW to use copies you already have.

Commands#

Command

What it does

tringify login

Signs in to a developer organization in your browser.

tringify login --store

Signs in to a store. theme push, theme dev and theme pull start this for you when needed.

tringify logout

Signs out of the developer organization and revokes the CLI's access. --store ID signs out of one store; --all signs out everywhere.

tringify whoami

Shows the organization and stores you are signed in to and the access each login currently has.

tringify store list

Lists your organization's development stores and their IDs.

tringify store create --name NAME --country CC --currency CUR

Creates a development store and waits until it is ready. --subdomain, --timezone and --billing-currency are optional.

tringify theme init [DIR] [--name NAME] [--from SOURCE]

Creates a theme from the starter theme, or from a local theme folder with --from, then builds and validates it. DIR must not exist; nothing is created if validation fails.

tringify theme preview [DIR] [--port 9292] [--preset NAME] [--host ADDRESS]

Serves a live preview with sample content and rebuilds when you save a file. A failed edit shows the error and keeps the last good page.

tringify theme dev --store ID [--storefront ID] [--theme ID] [--with-demo] [DIR]

Adds the theme to a store as an unpublished theme, then builds, validates and syncs it every time you save. The store's published theme never changes. --with-demo also adds the theme's demo products and collections that a development store does not have yet.

tringify theme build [DIR]

Compiles src/sections/<name>/ into sections/<name>.vasc and updates the section list in theme.json.

tringify theme check [DIR] [--mode sealed|development]

Validates the compiled theme, as it is, with the same rules used on upload. Run build first after editing sources.

tringify theme package [DIR] [OUTPUT]

Builds and validates in a temporary copy and writes an upload-ready ZIP, by default dist/<theme>.zip. A failed validation never replaces an existing package.

tringify theme context [DIR] --page PAGE [--entity HANDLE] [--preset NAME]

Prints the sample data a preview page receives.

tringify theme contract

Prints the theme author contract as JSON: data roots and fields, editor setting types and hosted form actions.

tringify theme push --store ID [--storefront ID] [DIR]

Adds the theme to a store as a new, unpublished theme. The live theme does not change.

tringify theme pull --store ID --theme ID [DIR]

Downloads a store theme's published files into a new folder. Without --theme it lists the storefront's themes.

tringify theme pull --listing ID [--version X.Y.Z] [DIR]

Downloads the exact package a version of your listing was published with into a new folder. Without --version it takes the newest published version.

tringify theme diff --listing ID [--version X.Y.Z] [DIR]

Packages the theme and lists the files publishing would add (+), change (~) or remove (-) compared with a published version of your listing, by default the newest.

tringify theme listings

Lists your organization's theme listings and their IDs.

tringify theme publish --listing ID --version X.Y.Z [--notes TEXT] [--breaking] [--install-store ID] [--yes] [DIR]

Shows what changes compared with the newest published version, asks, then publishes the theme as a new version of the listing. --yes publishes without asking, for example in CI.

Edit sections in src/sections/<name>/ as body.html, style.css and schema.json, and keep src/.generated-sections.json in version control: it records which compiled files build generated, so removing a section's source also removes its compiled file, and a compiled file you edited by hand is never deleted. If you used the tringify-theme command from the theme tools, each of its commands is available as tringify theme <command> with the same rules and output, on the same theme files.

Publish a version#

Create the listing in the Developer Portal under Themes first; the listing holds the name, pricing and review details. Then publish from a clean git checkout:

bash
tringify theme listings
tringify theme diff --listing LISTING_ID
tringify theme publish --listing LISTING_ID --version 1.2.0 --notes "New header layout"

diff shows the files that change compared with the newest published version. publish refuses to run when the git work tree has uncommitted or untracked changes, so every version matches a commit. It shows the same comparison and asks before publishing; pass --yes to skip the question, for example in CI. It then packages the theme, uploads and validates it, publishes the version, and adds Source commit: <sha> to its release notes. Add --install-store STORE_ID to also install the new version, unpublished, into one of your organization's development stores. A published version cannot change; publish a new version number for every update, and use tringify theme pull --listing LISTING_ID --version X.Y.Z to get any published version back exactly.

Develop against a store#

bash
tringify store create --name "Theme Lab" --country IN --currency INR
tringify theme dev --store STORE_ID

theme dev adds the theme to the store's primary storefront as an unpublished theme, then watches your files. Every time you save, it builds the theme, validates it and syncs it to that store, usually in a few seconds; refresh the theme preview in Store Admin to see the change. A change that fails validation prints the error and syncs nothing. The theme it uses is remembered in .tringify/dev.json, so the next run continues with the same theme; keep .tringify/ out of git. It never touches the store's published theme. Use --storefront to choose another storefront and --theme to sync into another unpublished theme added from a package.

push adds a separate copy each time it runs. pull downloads a store theme, for example one changed in the Store Admin code editor, into a new folder; the files are compiled, so sections are .vasc files rather than src/ folders.

Add sample products#

A theme can ship a demo catalog: demo/catalog.json and the images in demo/images, the same pack the Theme Store uses for its previews. --with-demo adds it to a development store so you can build against the catalog the theme was designed around. It uploads the images to the store's Media, then creates the products with their options, variants and vendors, priced in the store's currency, and turns each demo collection into a tag on its products and a collection for that tag.

bash
tringify theme dev --store STORE_ID --with-demo

It runs on development stores only. Products and collections whose handle the store already has are left as they are, and only the images of the ones it adds are uploaded, so running it again adds only what is missing and never changes or duplicates anything. Products appear under Products within a minute. The first run with the flag asks you to approve product and file access for that store.

Sign-in and access#

tringify login uses OAuth with PKCE and a one-time listener on 127.0.0.1; your password never passes through the CLI. On the approval screen you choose the developer organization, or the store for login --store, and see exactly what the CLI asks for:

Login

Access

Developer organization

organization:themes:read and organization:themes:write: list your theme listings, upload bundles, publish versions and install them into development stores. organization:dev_stores:read and organization:dev_stores:write: list and create development stores.

Store

store:online_store.storefronts:read and store:online_store.storefronts:write: list storefronts and themes, add a theme as unpublished, sync an unpublished theme and download a theme. With theme dev --with-demo only, store:products:write and store:files:write: upload the demo images and add the demo products and collections.

The CLI never has more access than your own role, and it follows changes to your role. It cannot change a live theme, delete stores, create listings or change pricing. If you signed in before development store access was added, run tringify login again to use the store commands. Tokens are stored only in your system keychain: the macOS Keychain, Windows Credential Manager, or the Secret Service on Linux (GNOME Keyring or KWallet). Without one, sign-in stops and says so. Access tokens last 15 minutes and are refreshed automatically; refresh tokens rotate on every use. Uploads, publishes, installs and new development stores are recorded in your organization's activity log as Connected tool: Tringify CLI.

See and disconnect the CLI in your Tringify account under Connected tools, or run tringify logout. Over SSH, set TRINGIFY_NO_BROWSER=1 and open the printed sign-in URL on a machine that can reach the CLI's 127.0.0.1 listener, for example through port forwarding. AI agents can use the same operations through MCP; see Connector OAuth.