cargo-forge 0.2.0

An interactive Rust project generator with templates and common features
docs.rs failed to build cargo-forge-0.2.0
Please check the build logs for more information.
See Builds for ideas on how to fix a failed build, or Metadata for how to configure docs.rs builds.
If you believe this is docs.rs' fault, open an issue.

โš’๏ธ Cargo-Forge

A Rust project generator with templates and common features

Crates.io Documentation License Test Coverage

Generate Rust projects with templates and optional features

๐ŸŽฌ Demo

cargo-forge generating an API server project

Recorded from the actual binary with asciinema + agg.

๐Ÿš€ Quick Start

# Install cargo-forge
cargo install cargo-forge

# Create a new project interactively
cargo-forge new

# Or specify project type directly
cargo-forge new my-api --project-type api-server

# Initialize in current directory
cargo-forge init --project-type library

๐Ÿ“– See Quick Reference for shell completions and common commands, or Troubleshooting for platform-specific install issues.

โœจ Features

๐ŸŽฏ Project Types

Cargo-Forge supports 7 project types with templates:

Type Description Key Features
cli-tool Command-line applications โ€ข Clap dependency setupโ€ข Basic project structureโ€ข Ready for CLI development
library Rust library crates โ€ข Library templateโ€ข Examples directoryโ€ข Documentation readyโ€ข Tests structure
api-server REST API servers โ€ข Axum web frameworkโ€ข Basic HTTP server setupโ€ข Route handlers structureโ€ข Ready for API development
wasm-app WebAssembly applications โ€ข wasm-bindgen setupโ€ข Web-sys integrationโ€ข Build scriptsโ€ข HTML template
game-engine Game development โ€ข Bevy engineโ€ข Asset pipeline structureโ€ข Basic game setupโ€ข Development ready
embedded Embedded systems โ€ข no_std setupโ€ข Memory configurationโ€ข HAL integrationโ€ข Debug configs
workspace Multi-crate projects โ€ข Organized structureโ€ข Shared dependenciesโ€ข Cross-crate testingโ€ข Unified configuration

Note: the templates are deliberately minimal starting points, not frameworks. api-server gives you a running server with one health-check route; the rest of the handlers/routes/models are yours to write. game-engine compiles a windowed Bevy app; real assets and systems are up to you.

๐Ÿ› ๏ธ Core Features

Current features available in v0.2.0:

Project Structure

  • Working starters: every template generates real starter code (an Axum health-check server, a Clap CLI with a hello command, a library with a unit-tested greet API, a wasm-bindgen export, a minimal Bevy app). api-server, cli-tool, library and workspace starters are compile-verified by the test suite. The game-engine starter (bevy 0.20) was verified manually with cargo check --target wasm32-unknown-unknown (the automated suite skips game-engine cargo checks); native desktop builds additionally need Bevy's Linux windowing libraries (noted in the generated README). The wasm-app starter follows the standard wasm-pack flow
  • Dependency Management: Appropriate dependencies for each project type
  • Documentation: README files with project-specific instructions
  • Testing: the library and cli-tool starters ship tests you can run with cargo test right after generation

Development Tools

  • Dry Run Mode: Preview project structure before creation (add --non-interactive when running without a TTY, e.g. in CI)
  • Non-interactive Mode: CI-friendly project generation
  • Name Validation: Ensures valid Cargo package names
  • License Field: --license writes the SPDX license field into Cargo.toml (same convention as cargo new --license; no LICENSE file is generated)
  • Shell Completions: Bash, zsh, fish, and PowerShell support
  • Config File: --from-config reads TOML (JSON also accepted for backward compatibility); default_author, default_license, preferred_project_types and per-type default_features are applied

Optional Features (select interactively or via config)

  • Docker: Dockerfile (multi-stage) + .dockerignore
  • CI: GitHub Actions workflow
  • Database: PostgreSQL, MySQL, or SQLite scaffolding via sqlx

Planned

  • Authentication scaffolding (JWT/OAuth)
  • GitLab CI support

๐Ÿ“‹ Comparison with cargo-generate

Feature cargo-forge cargo-generate
Interactive Mode โœ… Prompt-based (inquire) โš ๏ธ Requires manual input
Project Types โœ… 7 built-in types โœ… Arbitrary template repos
Defaults โœ… Pre-configured options โŒ Manual configuration
Name Validation โœ… Built-in validation โš ๏ธ Basic validation
Dry Run Mode โœ… Preview before creation โŒ Not available
Non-interactive Mode โœ… CI-friendly with defaults โœ… Available
Custom Templates โŒ Built-in types only โœ… Various engines
Shell Completions โœ… All major shells โš ๏ธ Manual setup
Error Recovery โœ… Graceful handling โš ๏ธ Basic errors
Performance โœ… ~0.3s generation โš ๏ธ Varies by template

๐ŸŽฎ Usage Examples

Command-Line Mode (Current)

# Create an API server (Axum starter with a GET / health check)
cargo-forge new my-api \
  --project-type api-server \
  --author "Jane Doe" \
  --description "My awesome API" \
  --license MIT

# Create a CLI tool in non-interactive mode (great for CI)
cargo-forge new my-cli \
  --project-type cli-tool \
  --non-interactive

# Initialize a library in current directory
cargo-forge init --project-type library

# Dry run to preview what will be created
cargo-forge new my-project --dry-run

# Use saved configuration (TOML; JSON is also accepted)
cargo-forge new my-project --from-config ~/.forge/defaults.toml

Example defaults.toml:

default_author = "Jane Doe"
default_license = "MIT"
preferred_project_types = ["api-server"]
default_features = { api-server = ["docker", "ci"] }
edition = "2021"

Advanced Usage

# Create a workspace with multiple crates
cargo-forge new my-workspace --project-type workspace

# Generate a game with Bevy engine
cargo-forge new my-game --project-type game-engine

# Create an embedded project for STM32
cargo-forge new my-firmware --project-type embedded

๐Ÿ“ Generated Project Structure

Example: API Server

my-api/
โ”œโ”€โ”€ src/
โ”‚   โ”œโ”€โ”€ main.rs           # Tokio main: binds 0.0.0.0:3000 (PORT env overrides)
โ”‚   โ”œโ”€โ”€ handlers.rs       # GET / health-check handler
โ”‚   โ”œโ”€โ”€ routes.rs         # Router definition
โ”‚   โ””โ”€โ”€ models.rs         # Health model
โ”œโ”€โ”€ config/
โ”‚   โ””โ”€โ”€ default.toml      # Configuration template
โ”œโ”€โ”€ .env.example          # Documented env vars
โ”œโ”€โ”€ .gitignore            # Git ignore file
โ”œโ”€โ”€ Cargo.toml            # Project manifest with Axum dependencies
โ””โ”€โ”€ README.md             # Project documentation

๐Ÿ”ง Configuration

Command-Line Options

Cargo-Forge supports various command-line options:

# Non-interactive mode (great for CI/CD)
cargo-forge new my-project --project-type api-server --non-interactive

# Dry run to preview what will be created
# (add --non-interactive when there is no TTY, e.g. in CI)
cargo-forge new my-project --project-type library --dry-run --non-interactive

# Initialize in current directory
cargo-forge init --project-type cli-tool

Project Customization

After project creation, you can customize:

  • Add dependencies to Cargo.toml
  • Modify source files to fit your needs
  • Update configuration files as needed
  • Add additional features and integrations

๐Ÿงช Testing

The library and cli-tool starters include tests that run immediately:

# In a freshly generated library or cli-tool project
cargo test

๐Ÿณ Docker Support (optional feature)

Select the docker feature (interactively, or via default_features in your config) to generate a multi-stage Dockerfile plus .dockerignore. For api-server projects the container exposes port 3000. The generated Dockerfile uses multi-stage builds for optimal image size:

# Build stage
FROM rust:1.70 as builder
WORKDIR /app
COPY . .
RUN cargo build --release

# Runtime stage
FROM debian:bookworm-slim
COPY --from=builder /app/target/release/app /usr/local/bin/
CMD ["app"]

๐Ÿ”’ Security

Properties of the generated templates today:

  • No hardcoded secrets in templates
  • Secure default configurations
  • Environment variable usage for sensitive data

Planned: security audit integration in CI and OWASP-aligned checks for the api-server template โ€” both depend on the CI/CD integration above, which isn't implemented yet.

๐Ÿค Contributing

We love contributions! See CONTRIBUTING.md for guidelines.

Development Setup

# Clone the repository
git clone https://github.com/marcuspat/cargo-forge
cd cargo-forge

# Run tests
cargo test

# Run with coverage
cargo tarpaulin

# Build for release
cargo build --release

๐Ÿ“ˆ Performance

Cargo-Forge is optimized for speed:

  • Project generation: ~0.3 seconds per project (bounded by generation_is_fast in the test suite; 2s/project CI ceiling)
  • Name validation: <1ms
  • Cross-platform: Works on Windows, Mac, and Linux

๐Ÿ› Troubleshooting

Common Issues

Q: Command not found after installation

# Ensure cargo bin directory is in PATH
export PATH="$HOME/.cargo/bin:$PATH"

Q: Permission denied errors

# Check directory permissions
ls -la .
# Use sudo if needed (not recommended)

Q: Template rendering fails

# Validate your input
cargo-forge new --dry-run
# Check for special characters in project name

Getting Help

๐Ÿ“š Documentation

๐Ÿ“œ License

Licensed under either of:

at your option.

๐Ÿ™ Acknowledgments

  • The Rust community for feedback
  • Contributors who help make Cargo-Forge better
  • Similar projects: cargo-generate, create-react-app

Built with โค๏ธ by the Rust community

Documentation โ€ข Crates.io