scaffold-gen

Crates.ioscaffold-gen
lib.rsscaffold-gen
version0.0.8
created_at2025-10-11 08:28:19.196459+00
updated_at2025-12-12 06:52:50.928122+00
descriptionA modern scaffolding generator for creating project templates
homepagehttps://github.com/sunerpy/scaffold-gen
repositoryhttps://github.com/sunerpy/scaffold-gen
max_upload_size
id1877988
size461,484
sunerpy (sunerpy)

documentation

README

Scaffold-Gen

Crates.io License

English | ็ฎ€ไฝ“ไธญๆ–‡

A modern, extensible scaffolding generator for creating project templates across multiple frameworks and programming languages.

Features

  • ๐Ÿš€ Modern Architecture: Clean, modular design based on Rust traits
  • ๐Ÿ—๏ธ Three-Layer Generator Architecture: Project, Language, and Framework level generation
  • ๐Ÿ”Œ Unified Generator Interface: Consistent API across all framework generators
  • โšก Post-Processing Pipeline: Extensible hooks for custom project setup
  • ๐Ÿ’ป Interactive CLI: User-friendly prompts for project configuration
  • โœ… Environment Validation: Automatic checking of required tools and dependencies

Supported Frameworks

Language Framework Status
Go Gin โœ…
Go Go-Zero โœ…
Rust CLI App โœ…
Rust Tauri โœ…
TypeScript Vue 3 โœ…
TypeScript React โœ…
Python Basic โœ…

Installation

From crates.io

cargo install scaffold-gen

From Source

git clone https://github.com/sunerpy/scaffold-gen.git
cd scaffold-gen
make release

Pre-built Binaries

Download pre-built binaries from the Releases page.

Quick Start

Interactive Mode (Recommended)

scafgen new my-project

The CLI will guide you through:

  • Language selection (Go, Rust, TypeScript, Python)
  • Framework selection (Gin, Go-Zero, Tauri, Vue3, React, etc.)
  • Project configuration (host, port, features)
  • License selection

Direct Framework Specification

# Create a Gin project
scafgen new my-gin-app --framework gin

# Create a Go-Zero project
scafgen new my-gozero-app --framework go-zero

# Create a Tauri project
scafgen new my-tauri-app --framework tauri

# Create a Vue3 project
scafgen new my-vue-app --framework vue3

# Create a React project
scafgen new my-react-app --framework react

Architecture

Three-Layer Generator Architecture

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚           GeneratorOrchestrator         โ”‚
โ”‚      (Coordinates all generators)       โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                  โ”‚
    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
    โ–ผ             โ–ผ             โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ Project โ”‚  โ”‚ Language โ”‚  โ”‚ Framework โ”‚
โ”‚Generatorโ”‚  โ”‚Generator โ”‚  โ”‚ Generator โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
    โ”‚             โ”‚             โ”‚
    โ–ผ             โ–ผ             โ–ผ
 LICENSE      Go/Rust/      Gin/Tauri/
 Git/README   Python/TS     Vue3/React

1. Project Generator

Handles common project files:

  • LICENSE file generation
  • Git repository initialization
  • Pre-commit hooks installation
  • README file generation

2. Language Generator

Sets up language-specific environment:

  • GoGenerator: Go module initialization, dependency management
  • RustGenerator: Cargo project initialization
  • PythonGenerator: Python project structure
  • TypeScriptGenerator: Node.js/npm configuration

3. Framework Generator

Generates framework-specific code structure:

  • GinGenerator: Gin web framework project structure
  • GoZeroGenerator: Go-Zero microservice framework structure
  • TauriGenerator: Tauri desktop application structure
  • Vue3Generator: Vue 3 frontend project structure
  • ReactGenerator: React frontend project structure

Template System

The generator uses a hierarchical template system:

templates/
โ”œโ”€โ”€ frameworks/          # Framework-specific templates
โ”‚   โ”œโ”€โ”€ go/
โ”‚   โ”‚   โ”œโ”€โ”€ gin/        # Gin framework templates
โ”‚   โ”‚   โ””โ”€โ”€ go-zero/    # Go-Zero framework templates
โ”‚   โ”œโ”€โ”€ rust/
โ”‚   โ”‚   โ””โ”€โ”€ tauri/      # Tauri framework templates
โ”‚   โ””โ”€โ”€ typescript/
โ”‚       โ”œโ”€โ”€ vue3/       # Vue 3 framework templates
โ”‚       โ””โ”€โ”€ react/      # React framework templates
โ”œโ”€โ”€ languages/          # Language-specific templates
โ”‚   โ”œโ”€โ”€ go/
โ”‚   โ”œโ”€โ”€ rust/
โ”‚   โ”œโ”€โ”€ python/
โ”‚   โ””โ”€โ”€ typescript/
โ””โ”€โ”€ licenses/           # License templates
    โ”œโ”€โ”€ MIT.tmpl
    โ”œโ”€โ”€ Apache-2.0.tmpl
    โ””โ”€โ”€ GPL-3.0.tmpl

Template Variables

Common Variables

  • {{project_name}} - Project name
  • {{author}} - Project author
  • {{license}} - License type
  • {{year}} - Current year

Framework-Specific Variables

  • {{host}} - Server host (default: localhost)
  • {{port}} - HTTP port (default: 8080)
  • {{grpc_port}} - gRPC port (Go-Zero specific)
  • {{enable_swagger}} - Enable Swagger documentation
  • {{enable_database}} - Enable database support

Development

Build Commands

# Debug build
make build

# Release build
make release

# Run tests
make test

# Run linter
make lint

# Format code
make fmt

# Run all CI checks
make ci

Project Structure

src/
โ”œโ”€โ”€ commands/           # CLI command implementations
โ”œโ”€โ”€ generators/         # Generator modules
โ”‚   โ”œโ”€โ”€ core/          # Core generator traits and utilities
โ”‚   โ”œโ”€โ”€ project/       # Project-level generator
โ”‚   โ”œโ”€โ”€ language/      # Language-level generators
โ”‚   โ”œโ”€โ”€ framework/     # Framework-level generators
โ”‚   โ””โ”€โ”€ orchestrator.rs # Generator orchestrator
โ”œโ”€โ”€ scaffold.rs        # Core scaffolding system
โ”œโ”€โ”€ template_engine.rs # Template processing engine
โ””โ”€โ”€ utils/             # Utility modules

Contributing

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add some amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

License

This project is licensed under the MIT License - see the LICENSE file for details.

Commit count: 0

cargo fmt