A blazingly fast static site generator for developers who want to write things down. Built with Rust for performance and efficiency.
ββββββββββββββββββββββββ ββββ βββββββββββ βββ ββββββ βββ
ββββββββββββββββββββββββββββββ βββββββββββββ ββββββββββββββ
βββ ββββββ ββββββββββββββββββββββββββββ ββββββββββββββ
βββ ββββββ βββββββββββββββββββββββββββββββββββββββββββ
βββ βββββββββββ ββββββ βββ βββββββββ βββββββββ βββββββββββ
βββ βββββββββββ ββββββ βββββββββ ββββββββ βββββββββββ
βββ ββββββββββββββ βββββββ ββββββββββββββββββββββ βββ
βββ ββββββββββββββ βββββββββββββββββββββββββββββββββ ββββ
βββ βββββββββ βββ βββ ββββββ βββ βββ βββββββ
ββββ ββββββββββ βββ βββ ββββββ βββ βββ βββββ
βββββββ ββββββββββββββββββββββββββββββββββββ βββ βββ
βββββ ββββββββββββββββ βββββββ ββββββββββ βββ βββ
- π Lightning fast builds with Rust
- π Markdown support with YAML frontmatter
- π¨ Customizable templates using Tera
- π₯ Hot reloading during development
- π Static file handling
- π·οΈ Tag support for posts
- π― Simple and intuitive CLI
- Make sure you have Rust and Cargo installed
- Clone the repository
- Build and install:
cargo install terminal-velocity- Create a new blog:
termv init hello-world- Create a new post:
termv new "My First Post"- Build the site:
termv build- Serve locally:
termv serveAfter initialization, your project will have the following structure:
my-blog/
βββ posts/ # Your markdown posts go here
βββ templates/ # Tera templates
β βββ base.html
β βββ index.html
β βββ post.html
βββ static/ # Static assets (CSS, images, etc.)
βββ components/ # Reusable template components
βββ config.toml # Site configuration
Initialize a new blog site:
termv init [path]Options:
path: Directory to create the new blog in (default: current directory)
Create a new blog post:
termv new "Your Post Title"This will create a new markdown file in the posts directory with the following format:
- Filename:
YYYY-MM-DD-your-post-title.md - Pre-populated frontmatter
- Slugified title for URLs
Build your site:
termv build [options]Options:
--target-dir, -t: Source directory containing your site (default: current directory)--output-path, -o: Output directory for the built site (default: "dist")--verbose, -v: Show verbose output during build
Serve your site locally:
termv serve [options]Options:
--target-dir, -t: Directory containing the built site (default: "./dist")--port: Port to serve on (default: 8080)--hot-reload: Enable hot reloading on file changes
Posts should be written in Markdown with YAML frontmatter:
---
title: "Your Post Title"
date: 2024-11-19
author: "Your Name"
tags: ["rust", "blog"]
preview: "A brief preview of your post"
slug: "your-post-slug"
---
Your post content here...Terminal Velocity includes integration with Claude, Anthropic's large language model, to help you get started with blog post writing. When creating a new post, you can provide a prompt to generate an initial outline.
To generate a blog post outline using Claude, use the --prompt flag with the new command:
# Create a new post with AI-generated outline
termv new "My Post Title" --prompt "Write about the history and impact of the Rust programming language"
# You can also set your API key via environment variable
export ANTHROPIC_API_KEY=your_key_here
termv new "My Post Title" --prompt "Explain WebAssembly and its use cases"The --prompt flag requires an Anthropic API key, which you can provide in two ways:
- Set the
ANTHROPIC_API_KEYenvironment variable - Pass it directly using the
--anthropic-keyflag
# Create a new post about distributed systems
termv new "Understanding Distributed Systems" --prompt "Explain key concepts in distributed systems including consensus, replication, and fault tolerance"This will create a new post with:
- Standard frontmatter (title, date, etc.)
- An AI-generated outline based on your prompt
- A placeholder for your content
The file will automatically open in your configured editor, where you can begin writing using the generated outline as a guide.
For best results with the outline generation:
- Be specific about the topics you want to cover
- Mention your target audience if relevant
- Include any specific aspects or angles you want to explore
- Note if you want a particular style (technical, beginner-friendly, etc.)
Example prompt: "Write an outline for a technical blog post explaining WebAssembly to experienced JavaScript developers, focusing on real-world use cases and performance benefits"
The config.toml file contains your site's configuration:
title = "My Terminal Velocity Blog"
description = "A blazingly fast tech blog"
base_url = "http://localhost:8000"
[author]
name = "Anonymous"
email = "author@example.com"
[build]
port = 8000
verbose = true
# Relative to the site directory
output_dir = "dist"
posts_dir = "posts"
templates_dir = "templates"
static_dir = "static"- Rust 1.70+
- Cargo
- Clone the repository
- Install dependencies and build:
cargo buildcargo testTo publish a new version:
- Update the version in
Cargo.toml - Update CHANGELOG.md
- Commit the changes
- Create a new version tag:
git tag -a v0.1.0 -m "Release version 0.1.0" - Push the tag:
git push origin v0.1.0
The GitHub Action will automatically:
- Verify the version matches the tag
- Run all tests
- Publish to crates.io
- Create a GitHub release
If you need to publish manually:
# Verify everything works
cargo test
cargo publish --dry-run
# Publish to crates.io
cargo publishContributions are welcome! Please feel free to submit a Pull Request.
This project is licensed under the MIT License - see the LICENSE file for details.