- Runs on Deno; no Node.js installation required.
- Written in TypeScript with unit, integration, and installed-product tests.
- Built-in dev server with live reload.
- Flexible themes from JSR, npm, or HTTPS.
- Zero-config mode or full structured setup.
- Sub-millisecond compilation per page in recorded benchmarks (4k pages in 0.405s).
- Custom Tau template engine combining Svelte & Astro.
- Sandboxed plugins running in isolated Deno subprocesses.
- Transactional & incremental builds preserving last working site.
Create a new configured project using the interactive initializer:
deno create jsr:@steno/initOr run the CLI directly in any site directory:
deno x jsr:@steno/steno buildYou can also import Steno programmatically in TypeScript:
import { Steno } from "jsr:@steno/steno";Build a single page or experiment with zero setup. Create my-site/content/index.md:
# Hello from Steno
Welcome to my static site!From my-site, build the site:
deno x jsr:@steno/steno buildSteno automatically detects the Markdown file, applies the default theme, and writes output to dist/index.html.
For full control over content, themes, and plugins, create content/.steno/config.yml:
title: "My Steno Site"
description: "A site built with Steno"
author: "Your Name"
output: "dist"
theme: "jsr:@steno/theme-minimal"Add content in content/index.md:
---
title: Home
layout: layout
---
# Hello World
Welcome to a site powered by Steno and Tau.Start the development server with live reload:
deno x jsr:@steno/steno devThemes use Steno's Tau template engine (.tau) supporting expressions, control flow, and components:
{#if title}
<Header title={title} />
{/if}
<main class="prose">
{@html content}
</main>
{#each tags as tag}
<span class="badge">{tag}</span>
{/each}
Secure third-party plugins with fine-grained capability isolation:
plugins:
- package: "jsr:@steno/plugin-shiki@1.0.0"
mode: isolated
options:
theme: github-dark
- package: "jsr:@steno/plugin-seo@0.7.0"
mode: trusted
options:
siteUrl: "https://example.com"Isolated plugins run in separate processes with strictly denied filesystem, network, and environment permissions unless explicitly granted.
steno [command] [options]
| Command | Description |
|---|---|
build |
Build the site (default command). |
dev |
Build, watch files, and serve with live reload. |
preview |
Serve an existing production build without watching. |
doctor |
Diagnose configuration and security issues. |
help |
Print CLI usage. |
version |
Print the installed Steno version. |
| Option | Description |
|---|---|
-c, --config <path> |
Path to configuration file (default: content/.steno/config.yml). |
-p, --port <number> |
Preview port; development uses devPort. |
-h, --help |
Show CLI usage. |
-v, --version |
Print installed version. |
- Getting Started
- Configuration Reference
- Content and Collections
- Tau Syntax Specification
- Plugin Development & Sandbox Threat Model
- Theme Development & Theme Specification
- API Reference
- Project Diagnostics (
doctor) - Atomic Build Guarantees
- Performance Methodology
This project is under the MIT License:
- Permissions: Commercial use, Modification, Distribution, Private use.
- Limitations: Liability, Warranty.
- Conditions: License and copyright notice.
Read the full license here.
Please read the CONTRIBUTING.md file for more information.
To run the local test suite:
deno task dev # Run test project with live reload
deno task test # Run unit tests
deno task check # Run full linting, formatting, and type checks
deno task bench # Run performance benchmarks