A blazing-fast Rust scaffolding tool.
Generate thousands of files and directories with file contents from a YAML configuration in milliseconds.
Capture existing nested folders as YAML templates with snapshot mode.
Skeletor simplifies project scaffolding with an easy-to-use YAML configuration.
skeletor applyskeletor apply custom.ymlCreate a YAML file (.skeletorrc) to define the directory structure:
directories:
src:
main.rs: |
fn main() {
println!("Hello, Skeletor!");
}
lib.rs: ""
tests:
integration.rs: |
#[test]
fn sample_test() {
assert_eq!(2 + 2, 4);
}
Cargo.toml: |
[package]
name = "my_project"
version = "0.1.0"Apply the Configuration
skeletor applyThis will generate the entire folder structure instantly!
Use a Custom Template
skeletor apply my-template.ymlPreview Before Running
# Quick summary of what would be created
skeletor apply --dry-run
# With custom template
skeletor apply my-template.yml --dry-run
# Detailed listing of all operations (useful for debugging)
skeletor apply --dry-run --verbose
skeletor apply my-template.yml --dry-run --verboseCommon Options (Apply)
config.yml→ Use a custom config file (default:.skeletorrc)-o ./path→ Output directory (default: current directory)--dry-run→ Preview changes (default: off; summary by default)--verbose→ Show full operation listing (default: off; affects dry-run and apply output)--overwrite→ Overwrite existing files (default: off)
curl -fsSL https://raw.githubusercontent.com/theGeekist/skeletor/main/install.sh | bashtip: Review the script before running to ensure security.
# Install globally
npm install -g @geekist/skeletor
# Use via npx without installing
npx @geekist/skeletor applybrew tap theGeekist/skeletor
brew install skeletorEasiest method if Homebrew is installed.
cargo install skeletorInstalls directly from crates.io.
git clone https://github.com/theGeekist/skeletor.git
cd skeletor
cargo install --path .Rust & Cargo need to be installed on your system.
- Generate Nested Files & Directories Instantly
- Dry-Run Mode – Preview before applying
- Snapshot Mode – Convert an existing folder into YAML
- Ignore Patterns & Binary File Detection
- Metadata & Stats Included
Capture a YAML snapshot of an existing folder.
Create a Snapshot
# Write .skeletorrc
skeletor snapshot .
# Save to file
skeletor snapshot . -o my-template.yml
# Print YAML to stdout
skeletor snapshot . --stdoutIgnore files and add a note
skeletor snapshot -n "Initial snapshot" -i .gitignore -i .git/ .Preview Before Creating
# Quick summary of what would be captured
skeletor snapshot --dry-run .
# Detailed listing with ignore pattern matching
skeletor snapshot --dry-run --verbose .Common Options
-o custom.yml→ Save snapshot to file (default:.skeletorrc)--stdout→ Print snapshot YAML to stdout instead of writing a file (default: write to file)-i "*.log"→ Exclude files based on patterns (default: none; can be used multiple times)-i .gitignore→ Use .gitignore file patterns for exclusion (default: none; auto-detected)--ignore-file .gitignore→ Explicitly read ignore patterns from a file (default: none)-n "Initial snapshot"→ Add custom notes to the snapshot (default: none)--exclude-contents→ Exclude file contents (default: include contents; binary files still detected)--verbose→ Show detailed ignore pattern matching and file processing info (default: off)
Display metadata from a .skeletorrc file.
# Show info for .skeletorrc
skeletor info
# Show info for custom file
skeletor info my-template.ymlSkeletor can be used as a Rust library for programmatic scaffolding in your applications.
[dependencies]
skeletor = "0.3"use skeletor::{SkeletorConfig, apply_config};
use std::path::Path;
// Load configuration from YAML string
let config = SkeletorConfig::from_yaml_str(r#"
directories:
src:
main.rs: |
fn main() {
println!("Hello, world!");
}
tests:
test.rs: "// Test content"
"#)?;
// Apply configuration to target directory
let result = apply_config(&config, Path::new("./my-project"), false, false)?;
println!("Created {} files and {} directories in {:?}",
result.files_created, result.dirs_created, result.duration);- MCP Servers: Integrate with Model Context Protocol for AI-driven scaffolding
- Web Services: Create project templates via REST APIs
- Build Tools: Generate code structures in build pipelines
- IDE Extensions: Provide scaffolding capabilities in editors
- Custom CLIs: Build domain-specific scaffolding tools
See examples/library_demo.rs for a complete example.
Contributions are welcome! Open an issue or submit a pull request.
For comprehensive development guidelines, see DEVELOPMENT.md.
# Clone and set up development environment
git clone https://github.com/theGeekist/skeletor.git
cd skeletor
./scripts/setup-git-hooks.sh
# Run tests and quality checks
cargo test
cargo clippy -- -D warnings- DEVELOPMENT.md: Complete development workflow and version management guide
- CHANGELOG.md: Project history and release notes
- Version Management: Automated system prevents version drift - see DEVELOPMENT.md
- Testing Standards: Shared utilities and >80% coverage target - see DEVELOPMENT.md
This project uses cargo-release for automated releases:
# Dry-run (see what would happen)
cargo release patch # 0.3.1 → 0.3.2
cargo release minor # 0.3.1 → 0.4.0
cargo release major # 0.3.1 → 1.0.0
# Actual release (maintainers only)
cargo release patch --executecargo release only.
See DEVELOPMENT.md for complete version management guidelines.
This project is licensed under the MIT License. Enjoy effortless scaffolding with Skeletor!
Proudly brought to you by @theGeekist and @pipewrk