New:Introducing Socket Scanning for VS Code Marketplace Extensions.Learn more →
Get Started

create-bestax

Package Overview
Dependencies
Maintainers
1
Versions
66
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

create-bestax

Create a new bestax-bulma project

latest
Source
npmnpm
Version
4.7.1
Version published
Weekly downloads
1.3K
475.45%
Maintainers
1
Weekly downloads
 
Created
Source

create-bestax

npm version npm downloads License: MIT Socket Badge OpenSSF Scorecard OpenSSF Best Practices npm provenance Security policy

The scaffolder for @allxsmith/bestax-bulma — spin up a Vite app pre-wired for the Bulma v1 React component library in one command. Picks your framework (JS or TypeScript), CSS flavor, and icon library, and can drop in the bestax AI skills so an agent like Claude Code knows the library from the first prompt.

Part of the bestax monorepo — see also @allxsmith/bestax-bulma for the components themselves.

Requirements

  • Node.js 22 or newer. Node 18 and 20 are both past end-of-life. On an older runtime the CLI exits immediately with an explicit upgrade message.
  • npm 10 or newer (ships with Node 22), or yarn/pnpm.

Usage

Quick Start

# Using npm
npm create bestax@latest my-app

# Using npx
npx create-bestax@latest my-app

Interactive Mode

Running without arguments will prompt you for all options:

npm create bestax@latest

You'll be asked to:

  • Enter a project name or path (and, if that directory already holds files, confirm removing them; nothing is removed until you have answered the last question)
  • Select a framework (Vite or Vite + TypeScript, each plain, with the React Compiler, or with React Router; Vite + TypeScript with TanStack Router; or Next.js, with or without TypeScript)
  • Choose a linter (Oxlint or ESLint)
  • Choose a Bulma CSS flavor (the --bulma options below)
  • Select an icon library (Font Awesome, Material Icons, etc.)
  • Choose whether to install the bestax AI skills into .claude/skills/
  • Choose whether to install the dependencies and start the dev server right away

Every prompt has a flag equivalent, so the whole flow is scriptable and CI-friendly — see the options below.

Command Line Options

npm create bestax@latest [project-directory] -- [options]

Put the options after --. npm needs it to pass them on at all, and so does bun, whose bun create rejects short flags such as -t and -y itself. pnpm and Yarn 1 accept the options with or without it.

Arguments:

  • [project-directory] - Optional project directory: a name such as my-app, or a path, absolute or relative, such as ../apps/my-app, whose missing folders are created. Its last part is the project name, held to the same rules as a bare name. It becomes the page title as typed, and the package.json name lower-cased the way npm init does and without a leading _, since npm rejects both. A bare . scaffolds into the current directory, named after it, as long as it's empty. It's never emptied, even with --overwrite. A bare .., or a path ending in . or .., is refused, so name the directory you want. A directory holding only .git counts as empty, as create-vite counts it, so git init then . works.

Options:

  • -t, --template <template> - Template to use:

    • vite - Vite + JavaScript
    • vite-ts - Vite + TypeScript
    • vite-compiler - Vite + JavaScript, with the React Compiler
    • vite-compiler-ts - Vite + TypeScript, with the React Compiler
    • react-router - Vite + JavaScript, with React Router and two pages
    • react-router-ts - Vite + TypeScript, with React Router and two pages
    • tanstack-router-ts - Vite + TypeScript, with TanStack Router and two pages
    • next - Next.js App Router, with two pages
    • next-ts - Next.js App Router + TypeScript, with two pages
      Default: vite
  • --lint <linter> - Linter:

    • oxlint - Oxlint, as npm create vite sets up. vite-ts gets TypeScript 7.
    • eslint - ESLint with typescript-eslint, as npm create vite -- --eslint sets up. typescript-eslint doesn't support TypeScript 7 yet, so vite-ts stays on TypeScript 6.
      Default: oxlint, which a run without a terminal also gets when it leaves --lint out
  • -b, --bulma <flavor> - Bulma CSS flavor:

    • complete - Full Bulma CSS with all components and helpers
    • prefixed - Prefixed version for compatibility
    • no-helpers - Without helper classes
    • no-helpers-prefixed - Prefixed without helpers
    • no-dark-mode - Without dark mode support
      Default: complete
  • -i, --icon <library> - Icon library:

    • none - No icon library
    • fontawesome - Font Awesome
    • mdi - Material Design Icons
    • ionicons - Ionicons
    • material-icons - Material Icons
    • material-symbols - Material Symbols
      Default: none
  • --skills / --no-skills - Install (or skip) the bestax AI skills into .claude/skills/ (with a CLAUDE.md) so a Claude Code session picks them up automatically. When omitted you're prompted; with -y the default is to install.

  • -y, --yes - Skip prompts and use defaults or provided options.
    When used, the following defaults are selected unless overridden by flags:

    • Template: vite
    • Linter: oxlint
    • Bulma flavor: complete
    • Icon library: none
    • AI skills: installed (pass --no-skills to opt out)
    • Install and start: no (pass --immediate to opt in)

    -y never deletes files. If the target directory is not empty, the run stops, lists what is there, and changes nothing; add --overwrite to empty it first. Earlier versions emptied the directory under -y alone, so a script that relied on that now needs --overwrite.

  • --no-interactive - The same as -y, for anyone used to create-vite's spelling.

  • --immediate / --no-immediate - Install the dependencies with the package manager that ran the CLI and start the dev server once the project is written (or don't), as create-vite's --immediate does. When omitted you're asked. With -y, or without a terminal, the project is only written, so a scripted run never starts a server it can't stop.

  • --overwrite - Remove existing files if the target directory is not empty, without asking. Every other flag is checked first, so a typo stops the run before anything is deleted. It never empties the current directory or a folder that holds it, however the path is written.

Example:

# Create a TypeScript project with Font Awesome icons
npm create bestax@latest my-app -- -t vite-ts -i fontawesome -b complete

# The same, linted with ESLint (and on TypeScript 6)
npm create bestax@latest my-app -- -t vite-ts -i fontawesome --lint eslint

# Use all defaults (skip prompts)
npm create bestax@latest my-app -- -y

# Scaffold into a path; the package is named my-app
npm create bestax@latest ../apps/my-app -- -y

# Scaffold into the current, empty directory, then install and start it
npm create bestax@latest . -- -y --immediate

# Turn on the React Compiler
npm create bestax@latest my-app -- -t vite-compiler-ts -y

# Start with React Router, a navbar and two pages
npm create bestax@latest my-app -- -t react-router-ts -y

# The same with TanStack Router
npm create bestax@latest my-app -- -t tanstack-router-ts -y

# A Next.js App Router app
npm create bestax@latest my-app -- -t next-ts -y

# The same with bun
bun create bestax@latest my-app -- -y

Templates

Available templates:

  • vite - Vite + JavaScript
  • vite-ts - Vite + TypeScript
  • vite-compiler - Vite + JavaScript, with the React Compiler
  • vite-compiler-ts - Vite + TypeScript, with the React Compiler
  • react-router - Vite + JavaScript, with React Router
  • react-router-ts - Vite + TypeScript, with React Router
  • tanstack-router-ts - Vite + TypeScript, with TanStack Router
  • next - Next.js App Router
  • next-ts - Next.js App Router + TypeScript

The React Compiler templates are the plain ones with the compiler turned on through Babel in vite.config, the way npm create vite builds its react-compiler starters.

The React Router templates are the plain ones with React Router 8 in data mode on top: a navbar every page shares (src/Layout), the routes (src/router), and a second page (src/pages/About), with the starter page as the home page. Each navbar item renders the router's Link through as, as the routing guide describes. React Router 8 needs Node 22.22 or newer, so these scaffolds say so in engines.

The TanStack Router template does the same with TanStack Router's code-based routes, all in src/router.tsx. Its navbar items are NavbarLink, Navbar.Item made into a TanStack link with createLink, so each to is checked against the routes. It's TypeScript only, since that check is the reason to choose TanStack Router.

The Next.js templates are Next.js App Router apps, laid out the way create-next-app --src-dir lays them out, with the same starter page as the Vite templates, naming Next.js. The root layout (src/app/layout) loads the stylesheets and the navbar (src/Navigation, a client component that links with next/link), so the flavor, icon and provider steps write there. The About page is a Server Component: bestax-bulma marks its components 'use client', so they render from either. --lint works as it does for the Vite templates: Oxlint by default, with TypeScript 7, and --lint eslint for create-next-app's eslint-config-next, which keeps TypeScript 6. The .claude/launch.json they get runs next dev on port 3000.

Each template includes:

  • Pre-configured bestax-bulma integration (React 19)
  • The latest @allxsmith/bestax-bulma, which ships Bulma v1 automatically
  • Icon library support (Font Awesome, Material Design, etc.)
  • Sample components demonstrating library usage
  • Development and build scripts

For AI Tools

Scaffolding for an AI agent? Pass --skills (or accept the prompt) to drop the bestax Agent Skills and a CLAUDE.md into the new project so Claude Code, Cursor, or Copilot build the bestax way from the start. The library also ships LLM-optimized docs:

Development

npm run build    # Build the CLI
npm run dev      # Watch mode
npm test         # Run tests
npm run lint     # Lint CLI source code
npm run typecheck # Type check CLI source code

Note on Templates: Template files in templates/ are excluded from linting. They should be manually validated by scaffolding a test project and running lint/build there before releasing.

Hardened by default

A scaffolder runs with write access to your filesystem and picks your starting dependencies, so how it is built and published matters:

  • Signed provenance — every release carries a sigstore attestation linking the tarball to the exact commit and CI run that built it. Check the Provenance section on the npm page, or run npm audit signatures.
  • npm OIDC trusted publishing — short-lived, per-run credentials; no long-lived NPM_TOKEN exists to be stolen. Release commits and tags are GPG-signed.
  • Socket.dev scans every PR for malware, install scripts, obfuscated code, and privilege escalation before it can reach main.
  • Dependencies are a deliberate act — install scripts are blocked unless individually allow-listed, freshly published versions are refused for 3 days, and CI installs only what the reviewed lockfile resolves.
  • Every GitHub Action is pinned to a full commit SHA, so a compromised action release can't roll silently into a build of this CLI.
  • CodeQL, Dependency Review, and Dependabot run continuously, alongside a high-severity pnpm audit gate.
  • Layered AI review before merge — CodeRabbit plus an independent adversarial Claude review (a different model from the one writing AI-authored changes), on top of required green CI, an approving review, and a human merge.

Full detail: SECURITY.md · Security guide

Telemetry

create-bestax can send one anonymous usage event after a successful scaffold — only if you opt in when asked (once, at the end of a scaffold). The event is just the choices you made — template, Bulma flavor, icon library, skills, package manager — plus the CLI version, Node major version, and OS platform; never names, IPs, machine IDs, paths, or file contents, and no identifier exists that could link two events together. Opt out any time with --no-telemetry, BESTAX_TELEMETRY=0, or DO_NOT_TRACK=1.

Full disclosure of every field and control: Telemetry guide

Publishing

This package uses semantic-release with scope-based rules. Only commits with feat(create-bestax) or fix(create-bestax) will trigger releases.

Keywords

bestax

FAQs

Package last updated on 01 Nov 2026

Related posts