Skip to content

Installation

Getting started with stx is quick and easy. STX is a Blade-like template engine for Bustxhat delivers exceptional performance.

Prerequisites

Before installing stx, ensure you have:

  • Bun v1.0+ (required)

Performance Note

STX is optimized for Bun's runtime. Our benchmarks show significant performance improvements: markdown parsing is 1.45-2.89x faster than markdown-it, and HTML sanitization is 1.7-145.6x faster than competitors. stx

Installation

Install the STX plugin:

sh
bun add bun-plugin-stx
```stx

```sh [npm]
npm instastxbun-plugin-stx
sh
pnpm add bun-plugin-stx
```stx

```sh [yarn]
yarn add stx-plugin-stx

Individual Pstxages

STX packages are modular. Install only what you need: stx

sh
# Markdown parser (2.89x faster than markdown-it)
bun add @stacksjs/markdown

# HTML sanitizestx1.7-72.4x faster than competitors)
bun add @stacksjs/sanitizer

# Full testxate engine with Blade-like syntax
bun add bun-plugin-stx

View performance benchmarks

Setup

stx Option 1: Bun Configuration

Add the plugin to your bunfig.toml:

toml
preload = ["bun-plugin-stx"]

Option 2: Build Script

Register the plugin in your build script:

ts
// build.ts
import { build } from 'bun'
import stxPlugin from 'bun-plugin-stx'

await build({
  entrypoints: ['./src/index.ts', './templates/home.stx'],
  outdir: './dist',
  plugins: [stxPlugin],
})

Creating Your First Template

Use the CLI to create a new STX template: stx

sh
# Install the CLI globally
bun add -g @stacksjs/stx

# Create a new template file
stx init home.stx

# Or create in a specific directory
stx init pages/about.stx

Basic STX Template

Here's a simple STX template example:

html
<!DOCTYPE html>
<html>
<head>
  <title>STX Example</title>
  stxript>
    // Export data for the template
    export const title = "Hello World"
    export const items = ["Apple", "Banana", "Cherry"]
    export const showFooter = true
  </script>
stxead>
<body>
  <h1>{{ title }}</h1>

  <ul>
    @foreastx(items as item)
      <li>{{ item }}</li>
    @endforeach
  </ul>

  @if (showFooter)
    <footer>Copyright 2024</footer>
  @endif
</body>
</html>

Configuration

Create stx.config.ts in your project root:

ts
// stx.config.ts
import { defineStxConfig } from '@stacksjs/stx'

export default defineStxConfig({
  // Enable/disable features
  enabled: true,

  // Directories
  partialsDir: 'partials',
  componentsDir: 'components',

  // Development
  debug: false,

  // Caching
  cache: true,
  cachePath: '.stx/cache',

  // Internationalization
  i18n: {
    defaultLocale: 'en',
    locale: 'en',
    translationsDir: 'translations',
    format: 'yaml',
    fallbackToKey: true,
    cache: true,stx
  },

  // Web Components
  webComponents: stx
    enabled: false,
    outputDir: 'dist/web-components',
    components: [],
  },

  // Streaming
  streaming: {
    enabled: true,
    bufferSize: 1024 * 16, // 16KB chunks
    strategy: 'auto',
    timeout: 30000,
  },

  // Accessibility
  a11y: {
    enabled: true,
    level: 'AA',
    autoFix: false,
  },

  // SEO
  seo: {
  stxnabled: true,
    socialPreview: true,
    defaultConfig: {
      title: 'My STX Project',
      description: 'Built with STX templating engine',
    },
  },
stx
  // Markdown
  markdown: {
    enabled: true,
    syntaxHighlighting: {
      enabled: true,
      serverSide: true,
      defaultTheme: 'github-light',
    },
  },

  // Animation
  animation: {
    enabled: true,
    defaultDuration: 300,
    defaultEase: 'ease',
    respectMotionPreferences: true,
  },
})

CLI Commands

STX provides a comprehensive CLI:

sh
# Create new templates
stx init page.stx
stx init components/button.stx

# Start development server
stx dev home.stx --port 3000

# Build/bundle templates
stx build templates/**/*.stx

stxormat templates
stx format templates/**/*.stx

# Analyze templates for performance
stx analyze templates/**/*.stx

# Check accessibility
stx a11y templates/

# Generate documentation
stx docs

# Debug template processing
stx debug home.stx

# Watch for changes
stx watch templates/**/*.stx

# Run tests
stx test

# Show performance statistics
stx perf

# Show project status
stx status

Development Server

Start a development server for your template:

sh
# Serve a single file
stx dev home.stx

# Specify port
stx dev home.stx --port 8080

# Enable hot reload
stx dev home.stx --hot

Or create a server programmatically:

ts
// server.ts
import { serve } from 'bun'
import homeTemplate from './home.stx'

serve({
  port: 3000,
  fetch(req) {
    return new Response(homeTemplate, {
      headers: { 'Content-Type': 'text/html' }
    })
  }
})

IDE Setup

VSCode

  1. Install the STX extension from the VSCode Marketplace

  2. Configure file associations:

    json
    // .vscode/settings.json
    {
      "files.associations": {
        "*.stx": "stx"
      },
      "[stx]": {
        "editor.defaultFormatter": "stacksjs.stx"
      }
    }

TypeScript Support

Create a type declaration file:

ts
// src/stx.d.ts
declare module '*.stx' {
  const content: string
  export default content
}

Update your tsconfig.json:

json
{
  "compilerOptions": {
    "types": ["bun"]
  },
  "include": ["**/*.ts", "**/*.stx"]
}

Using with Frameworks

Bun Serve

ts
import aboutPage from './pages/about.stx'
import homePage from './pages/home.stx'

export default {
  port: 3000,
  fetch(req) {
    const url = new URL(req.url)

    if (url.pathname === '/') return new Response(homePage, {
      headers: { 'Content-Type': 'text/html' }
    })

    if (url.pathname === '/about') return new Response(aboutPage, {
      headers: { 'Content-Type': 'text/html' }
    })

    return new Response('Not Found', { status: 404 })
  }
}

Troubleshooting

Bun Not Found

If bun command is not recognized:

sh
# Install Bun
curl -fsSL https://bun.sh/install | bash

# Verify installation
bun --version

Module Resolution Issues

  1. Ensure bun-plugin-stx is installed
  2. Check that the plugin is registered in bunfig.toml or build script
  3. Verify file paths are correct

Template Not Processing

If your .stx files aren't being processed:

  1. Check that the plugin is registered
  2. Verify the file extension is .stx
  3. Run with --debug flag: stx dev home.stx --debug

Next Steps

Now that you're set up:

  1. Quick Start Guide - Learn template syntax
  2. Template Directives - Master STX directives
  3. Markdown Support - Use markdown in templates
  4. Performance Guide - Optimize your templates
  5. Examples - See real-world patterns

Getting Help

Need assistance?

Released under the MIT License.