Feeef CLI
@feeef.dev/cli — sign in with OAuth, scaffold storefront templates, live-preview drafts on your real store, and publish to the marketplace.
The CLI is the tool for template authors: scaffold a theme, preview it on a live store without customers seeing anything, then publish to the marketplace. It is itself a public OAuth client with PKCE — a working reference for CLI-style integrations.
npm install -g @feeef.dev/cli
feeef --help| Package | @feeef.dev/cli |
| Binary | feeef |
| Config | ~/.config/feeef/config.json (0600 permissions) |
| Requires | Node 18+; no private repos needed to build or preview |
Quick start
npm install -g @feeef.dev/cli
feeef signin # browser OAuth (no client secret)
feeef template init my-template --helium --store my-shop
cd my-template
feeef use # pick a store you own
npm run build
npm run dev # draft preview URL opens in browser
npm run publish -- --apply # go live (explicit)The CLI defaults to the alpha API. Select the API that owns your store before signing in;
production stores use feeef config set apiUrl https://api.feeef.org/v1.
Authentication
feeef signin opens the browser to the Feeef consent screen and completes an
authorization-code + PKCE flow — no client secret ever touches your machine:
| Detail | Value |
|---|---|
| Client type | Public (token_endpoint_auth_method: none) |
| Redirect | http://localhost.feeef.org:7777/oauth/callback, bound to 127.0.0.1 |
| Scopes | auth store store.settings store_templates store_templates.read — never * |
feeef signin # browser OAuth → token saved to config
feeef signin --password-auth # interactive email/password fallback
feeef whoami
feeef signout
feeef config show
feeef config set apiUrl https://api.feeef.org/v1Environment overrides: FEEEF_OAUTH_CLIENT_ID, FEEEF_ACCOUNTS_URL, FEEEF_API_BASE_URL
(and FEEEF_OAUTH_CLIENT_SECRET only for confidential local overrides).
Template workflow
Templates are plain Node.js packages; the npm scripts wrap the global feeef binary.
feeef template init my-template --helium --store my-shop
cd my-template
feeef use <store-slug> # binds template ↔ store via .feeefrc
feeef template add page products
feeef template add component products grid --title "Product grid"
npm run build # → dist/data.json (+ dist/schema.json, locales)
npm run check # validate
npm run dev # remote draft preview
npm run publish -- --apply # marketplace upload + install on storeSource layout of the Helium kit:
schema.ts # template-owned editor schema
pages/<page>/components/ # flat TSX sections → published sections.main
shared/ | library/ # reusable custom components
locales/*.json # translations
feeef.template.json # template manifest
dist/data.json # TemplateData build output
dist/schema.json # merged editor schemaComponents are flat TSX files: export const meta plus a function App(). The full authoring
contract is in Storefront templates. Helium kits keep
runtime: "helium" and schemaVersion: 2 in the manifest and compiled data.
Read the runtime, hydration
and migration guides before adapting a Lithium theme.
--blank remains the Lithium starter; changing a manifest marker does not port it.
The updated CLI validates Helium hydration strategies and warns about known interactive
controls marked never. Local smoke checks do not reproduce hosted QuickJS or browser behavior.
Draft preview — how dev works
feeef template dev does not run a local storefront. It watches your sources, rebuilds
dist/data.json, and uploads it as a draft to your real hosted shop:
| Draft preview | Live shop | |
|---|---|---|
| Written by | feeef template dev | publish --apply / merchant editor |
| Stored in | store.metadata.templatePreview | store.metadata.templateData |
| Visible to | You (preview link / cookie) | Customers |
Helium templates open on https://{slug}.h.feeef.store; Lithium uses
https://{slug}.feeef.store. The runtime fields choose the CLI preview host; they do not
move an existing custom domain.
The preview URL sets an httpOnly feeef_preview cookie, so you can navigate the whole shop —
home, product lists, product pages, checkout — under the draft theme while the catalog stays
real. A banner shows "Previewing draft template — Exit"; exit via the banner, /?preview=0,
stopping the CLI, or the ~24 h token TTL.
dev never overwrites live templateData. Your CLI apiUrl must match the API the shop
uses. The CLI defaults to alpha. For a production store, run
feeef config set apiUrl https://api.feeef.org/v1, then feeef signin before previewing.
Publish
# Free public listing + release
feeef template publish --public --apply
# Paid listing (you set the price; Feeef takes a platform cut)
feeef template publish --public --price 5000 --version 1.0.0 \
--changelog "Initial marketplace release" --applyOne publish writes several resources:
| Target | Content |
|---|---|
store_templates | Marketplace listing + head schema/data + price |
store_template_releases | Immutable semver snapshot + changelog |
template_components | Your shared/ + library/ components |
store_template_locales | dist/locales/*.json |
Install (with --apply) | Pins the store to the release → live templateData |
npm run publish with no flag updates the listing and release, then asks whether to
install. Enter means no. --apply installs. --no-apply skips the question. --yes
skips every question and does not install unless you also pass --apply. The day-to-day
loop is Develop and publish.
Merchants who buy a paid template own it forever on that store; paid templates cannot be forked into a new catalog row.
Command reference
| Command | Purpose |
|---|---|
feeef signin / signout / whoami | Session management (OAuth or --password-auth) |
feeef use [store] | Bind the current template to a store (.feeefrc) |
feeef template init [name] [--helium|--blank] [--store <slug>] | Scaffold Helium, Lithium, git or a free marketplace theme |
feeef template add|remove page|component | Scaffold edits |
feeef template build / check / watch | Compile and validate to dist/ |
feeef template dev | Remote draft preview (--local exists for storefront developers) |
feeef template publish [--public] [--price N] [--apply] | Upload a release. --apply installs. Enter on the prompt does not. |
feeef config show|set | Global config (apiUrl, accountsUrl, …) |
Dart SDK
The feeef Dart package that powers the official merchant app — repositories, auth persistence, realtime and integrations.
MCP server
The hosted Feeef MCP server at mcp.feeef.org — let AI agents manage stores, products, orders, delivery, landing pages and finance over the Model Context Protocol.