Skip to content

Configuration

xtarterize doesn’t require a config file. It detects your project’s stack automatically and applies only what’s appropriate.

When you run init, xtarterize scans your project to build a ProjectProfile:

flowchart TD
    A[read package.json] --> B[detectFramework]
    A --> C[detectBundler]
    A --> D[detectStyling]
    A --> E[detectVitePlus]
    B --> F[detectRouter]
    C --> F
    
    B --> G[detectRuntime]
    C --> G
    
    A --> H[detectPackageManager]
    A --> I[detectMonorepo]
    A --> J[detectGitHubWorkflows]
    A --> K[detectExistingConfigs]
    
    G --> L[ProjectProfile]
    F --> L
    D --> L
    E --> L
    H --> L
    I --> L
    J --> L
    K --> L
    
    style A fill:#6366f1,color:#fff
    style L fill:#22c55e,color:#fff

Framework, bundler, router, styling, and TypeScript are all detected from dependencies and devDependencies.

Tasks are gated on the detected profile:

  • Vite plugin tasks only run when bundler === 'vite'
  • Monorepo tasks only run when monorepo === true
  • CI tasks only run when hasGitHub === true
  • TypeScript tasks only run when typescript === true

When running inside a monorepo, xtarterize further filters tasks based on their scope. Each task declares one of three scopes:

  • root - The task applies only at the monorepo root.
  • package - The task applies only inside a workspace package.
  • both (default) - The task applies everywhere.

At the monorepo root (workspaceRoot: true), package-scoped tasks are hidden. Inside a workspace package (workspaceRoot: false), root-scoped tasks are hidden. Tasks without an explicit scope (or with scope: 'both') are visible in both positions.

In non-monorepo projects, scope filtering is disabled - all tasks that pass the applicable() check are shown regardless of their declared scope.

All templates adapt to the detected profile:

  • GitHub workflows use the detected package manager for install commands
  • Knip entry points are inferred from the bundler/framework
  • Plop generators vary by framework (React gets component+hook, Vue gets component+composable, etc.)
  • VS Code extensions include framework-specific recommendations
  • AGENTS.md includes framework-specific instructions

Before any file is modified, xtarterize creates a timestamped backup in .xtarterize/backups/. An index file tracks all backups for easy restoration.

  • Directory.xtarterize/
    • Directorybackups/
      • .index.json
      • tsconfig.json.2024-01-15T10-30-00-000Z
      • biome.json.2024-01-15T10-30-00-000Z

The .xtarterize/ directory is automatically added to your project’s .gitignore when you run any xtarterize command. You won’t see these internal artifacts in git status.

Restore with:

Terminal window
npx xtarterize@latest restore tsconfig.json
flowchart LR
    A[File to modify] --> B[backupFile]
    B --> C[.xtarterize/backups/]
    C --> D[.index.json]
    A --> E[apply changes]
    E --> F{Need to undo?}
    F -->|Yes| G[restoreBackup]
    G --> C
    F -->|No| H[Done]
    
    style B fill:#f59e0b,color:#fff
    style E fill:#22c55e,color:#fff