waybetter/packages/create-waybetter
2026-10-01 04:52:37 +07:00
..
bin create-waybetter: npm create waybetter scaffolds plugins (JS/TS), themes and whole apps 2026-09-28 23:17:32 +07:00
src create-waybetter: a TypeScript plugin project depends on waybetter ^0.6.0 like the app scaffold (^0.2.0 could not resolve to the current package) 2026-10-01 04:52:37 +07:00
tests Feature modules in a new app, i18n rename, and what the first area port needed 2026-09-30 19:25:15 +07:00
LICENSE create-waybetter: npm create waybetter scaffolds plugins (JS/TS), themes and whole apps 2026-09-28 23:17:32 +07:00
package.json create-waybetter: npm create waybetter scaffolds plugins (JS/TS), themes and whole apps 2026-09-28 23:17:32 +07:00
README.md READMEs for strangers: overview, three layers, a real minimal adapter, security model; the long reference moves to docs/ARCHITECTURE.md 2026-09-30 23:20:58 +07:00
tsconfig.json create-waybetter: npm create waybetter scaffolds plugins (JS/TS), themes and whole apps 2026-09-28 23:17:32 +07:00

create-waybetter

npm create waybetter

Scaffolds something for wayBetter, the framework behind wayBetter for X: a plugin, a theme, or a whole new wayBetter app for another site. It asks what it needs when run in a terminal; every answer is also a flag. No dependencies, Node 18.3+. Source: git.crt.fyi/CRT/waybetter (packages/create-waybetter); its tests scaffold each kind into a temporary folder and check the result against the framework's real contracts.

Plugin

npm create waybetter plugin -- --name "Hide Trends"
npm create waybetter plugin -- --name "Word Badges" --ts          # TypeScript project

One *.plugin.js file with the header the plugin store reads (@name, @description, @version, @author) and a class with start() / stop(). The example uses the real plugin API: api.scope() for cleanup, api.storage(), scope.observe(), scope.onKey(), the UI kit (scope.ui.toast with an action, a settings ui.dialog built with ui.h) and the theme API (api.theme.current(), --wb-* CSS variables). --ts makes a small TypeScript project typed by the waybetter package; npm run build writes the loadable dist/<name>.plugin.js with the header first. --app any targets another wayBetter app (core API only; wayBetter for X adds api.tweet, api.account, api.users).

Install: wayBetter → Plugins → Open folder, copy the file in, Rescan, turn it on.

Theme

npm create waybetter theme -- --name "Midnight Mint" --accent "#3ddc97" --font "Geist, system-ui"

A theme JSON with "$schema": "https://unpkg.com/waybetter/theme.schema.json" (editor completion and checks), a full palette derived from --bg, --text and --accent the way the runtime derives missing roles, and the font roles (font.family for the interface, font.tweet for post text). Presets: midnight, paper, dusk. Import it in wayBetter → Appearance → Import.

App

npm create waybetter app kickapp -- --site kick.com --name "wayBetter for Kick" --yes
npm create waybetter app ytapp -- --site youtube.com --name "wayBetter for YouTube"

The first argument after app is the folder to create. The tool then prints its next steps: git init && git submodule add https://git.crt.fyi/CRT/waybetter.git waybetter, npm install, npm run build, npm run tauri dev, and replacing the placeholder selectors.

A wayBetter app skeleton, the same system as wayBetter for X: a Tauri 2 window with a trusted local shell and one native child webview per site tab (waybetter-host), the page runtime and shell models from the waybetter package, and the site adapter in its three parts:

  • src-tauri/src/site.rs: the native SiteSpec (hosts, runtime global, account rules);
  • src/site.ts: the page SiteAdapter (plugin API settings, account reader, link rules);
  • src-tauri/capabilities/: shell, tab-chrome and site-tab, keyed by webview label.

Presets for youtube.com, kick.com and twitch.tv (any host works); every selector and handle rule is a marked PLACEHOLDER to check against the live site. The host crate comes from a git submodule at waybetter/ (default), a local path (--host-source path --host-path <dir>) or git (--host-source git).

Options

npm create waybetter -- --help lists every flag. --yes takes defaults for anything not given, --dry-run prints the files, --force writes into a non-empty directory.

License

GPL-3.0-or-later. See LICENSE.