AGENTS.md, a
CLAUDE.md and a Claude Code skill (tassyir-app) that explains the
contract.
Use
Node 22.18 or later:my-app/ and prints the next steps. The project’s README walks
the rest with today’s tools: create the app in the developer console, upload
the manifest, create a dev store, run behind an https tunnel, and install.
With options (after --, which npm needs to pass them on):
The handle, name and URL are checked with the manifest’s own rules
(
@tassyir/app-manifest, the Tassyir API’s validator) before anything is
written, and nothing is ever written into a folder that is not empty.
The project
Request and Response, like
@tassyir/app (fetch and WebCrypto only), so the same routes run on Node
today and on Cloudflare Workers, which Tassyir Hosting is built on. Node runs
the TypeScript as it is (type stripping, Node 22.18 and later), so the
server has no build step; esbuild bundles the page.
The generated package.json names the @tassyir/* versions released with
this version of create-tassyir-app, and pins every other dependency to an
exact version.
Errors
A refusal has a stablecode, the input at fault (path: --handle,
--url, directory, …), a message and a one-sentence fix; problems
lists every problem found, this one first. With --json
(npm create tassyir-app@latest my-app -- --handle tassyir --json):
TEMPLATE_UNKNOWN, TEMPLATE_NOT_AVAILABLE, TARGET_NOT_EMPTY,
TARGET_NOT_A_DIRECTORY, INVALID_ARGUMENT, NODE_VERSION_UNSUPPORTED,
WRITE_FAILED, INSTALL_FAILED, and the manifest’s own codes for the
handle, name and URL (MANIFEST_HANDLE_INVALID, MANIFEST_URL_INVALID, …).
From code
Tassyir Hosting
A second template, an app on Tassyir Hosting (Hono and React, no server to run), comes once Tassyir Hosting opens. Until then--template hosted
answers TEMPLATE_NOT_AVAILABLE. Apps made from the external template move
to it with the same manifest, API and webhooks: their routes are
Web-standard.