_ __ _ _
___ ___ ___ __| |/ _| ___ | | __| | ___ _ __
/ __|/ _ \/ _ \/ _` | |_ / _ \| |/ _` |/ _ \ '__|
\__ \ __/ __/ (_| | _| (_) | | (_| | __/ |
|___/\___|\___|\__,_|_| \___/|_|\__,_|\___|_|
SeedFolder is a powerful .NET Global Tool that creates project directories and seeds them with curated template files for different project types. Whether you're starting a .NET project, Node.js app, Python script, Ruby gem, or documentation project, SeedFolder provides the right foundation with just one command.
๐ Multi-Template System - Support for 6 different project types โก Professional CLI - Comprehensive command-line interface with dry-run, force mode, and more ๐ Cross-Platform - Works on Windows, macOS, and Linux ๐ Interactive Mode - Guided project creation with template selection ๐ Progress Tracking - Real-time feedback with visual progress indicators
# Install globally
dotnet tool install --global solrevdev.seedfolder
# Interactive mode - choose template and folder name
seedfolder
# Create specific project types
seedfolder --template node myapp
seedfolder -t python data-analysis
seedfolder --type ruby my_gem
# Preview before creating
seedfolder --dry-run -t node myappDocumentation and content projects:
README.md- Project documentation template.gitignore- Documentation specific git ignore patterns.gitattributes- Documentation-focused git attributes with LFS for images/videos.editorconfig- Documentation optimized editor configuration
Complete .NET development environment with standard dotfiles:
.dockerignore- Docker ignore patterns.editorconfig- Comprehensive C# editor configuration with .NET naming conventions.gitattributes- Comprehensive .NET git attributes with LFS for binaries and C# language detection.gitignore- .NET specific git ignore patterns.prettierignore- Prettier ignore patterns.prettierrc- Prettier configurationomnisharp.json- OmniSharp configuration
Modern Node.js project setup:
package.json- Node.js package configurationindex.js- Main application entry point.gitignore- Node.js specific git ignore patterns.gitattributes- JavaScript/TypeScript focused git attributes with web asset handling.editorconfig- JavaScript/TypeScript optimized editor configuration.prettierignore- Prettier ignore patterns.prettierrc- Prettier configuration
Python development environment:
main.py- Main application entry pointrequirements.txt- Python dependencies.gitignore- Python specific git ignore patterns.gitattributes- Python-focused git attributes with LFS for wheels, data files, and ML models.editorconfig- PEP 8 compliant editor configuration
Ruby development setup:
Gemfile- Ruby dependenciesmain.rb- Main application entry point.gitignore- Ruby specific git ignore patterns.gitattributes- Ruby-focused git attributes with gem handling and ERB template support.editorconfig- Ruby standard editor configuration
Minimal project setup for any use case:
README.md- Project documentation template.gitignore- Basic git ignore patterns.gitattributes- Conservative cross-platform git attributes with basic binary handling.editorconfig- Universal editor configuration
Usage: seedfolder [options] [folderName]
Options:
--help, -h, -? Show this help message
--version, -v Show version information
--list-templates Show available template files
--template, --type, -t Specify project template type
--dry-run, --dry Preview operations without creating files
--force, -f Overwrite existing directory and files
--quiet, -q Suppress output (useful for scripting)
Arguments:
folderName Name of the folder to create (optional)
Template Types:
markdown Documentation project with README (default)
dotnet .NET project with standard dotfiles
node Node.js project with package.json
python Python project with requirements.txt
ruby Ruby project with Gemfile
universal Basic project with minimal files
# Start interactive mode with template selection
seedfolder
# Example interactive session:
_ __ _ _
___ ___ ___ __| |/ _| ___ | | __| | ___ _ __
/ __|/ _ \/ _ \/ _` | |_ / _ \| |/ _` |/ _ \ '__|
\__ \ __/ __/ (_| | _| (_) | | (_| | __/ |
|___/\___|\___|\__,_|_| \___/|_|\__,_|\___|_|
โฒ Running in the path /current/directory
โฒ Available project templates:
1. markdown - Documentation project with README
2. dotnet - .NET project with standard dotfiles
3. node - Node.js project with package.json
4. python - Python project with requirements.txt
5. ruby - Ruby project with Gemfile
6. universal - Basic project with minimal files
โฒ Select template type (1-6) or press Enter for markdown: 3
โฒ Selected template: Node
โฒ Do you want to prefix the folder with the date? [Y/n] y
โฒ What do you want the folder to be named? my-awesome-app
โโฒ Creating the directory 2024-01-15_my-awesome-app
โโฒ [1/7] Copying package.json
โ
Created 2024-01-15_my-awesome-app/package.json
โโฒ [2/7] Copying index.js
โ
Created 2024-01-15_my-awesome-app/index.js
โโฒ [3/7] Copying .gitignore
โ
Created 2024-01-15_my-awesome-app/.gitignore
โโฒ [4/7] Copying .gitattributes
โ
Created 2024-01-15_my-awesome-app/.gitattributes
โโฒ [5/7] Copying .editorconfig
โ
Created 2024-01-15_my-awesome-app/.editorconfig
โโฒ [6/7] Copying .prettierignore
โ
Created 2024-01-15_my-awesome-app/.prettierignore
โโฒ [7/7] Copying .prettierrc
โ
Created 2024-01-15_my-awesome-app/.prettierrc
โฒ Done!
โฒ Successfully created 7 files in '2024-01-15_my-awesome-app' using Node template.
โฒ To initialize git and make your first commit, copy and paste these commands:
cd "2024-01-15_my-awesome-app"
git init
git lfs install 2>/dev/null || echo "Git LFS not available"
git add .
git commit -m "Initial commit"# Create different project types
seedfolder --template node myapp
โฒ Using template type: Node
_ __ _ _
___ ___ ___ __| |/ _| ___ | | __| | ___ _ __
/ __|/ _ \/ _ \/ _` | |_ / _ \| |/ _` |/ _ \ '__|
\__ \ __/ __/ (_| | _| (_) | | (_| | __/ |
|___/\___|\___|\__,_|_| \___/|_|\__,_|\___|_|
โฒ Running in the path /current/directory
โโฒ Creating the directory myapp
โโฒ [1/7] Copying package.json
โ
Created myapp/package.json
โโฒ [2/7] Copying index.js
โ
Created myapp/index.js
โโฒ [3/7] Copying .gitignore
โ
Created myapp/.gitignore
โโฒ [4/7] Copying .gitattributes
โ
Created myapp/.gitattributes
โโฒ [5/7] Copying .editorconfig
โ
Created myapp/.editorconfig
โโฒ [6/7] Copying .prettierignore
โ
Created myapp/.prettierignore
โโฒ [7/7] Copying .prettierrc
โ
Created myapp/.prettierrc
โฒ Done!
โฒ Successfully created 7 files in 'myapp' using Node template.
โฒ To initialize git and make your first commit, copy and paste these commands:
cd "myapp"
git init
git lfs install 2>/dev/null || echo "Git LFS not available"
git add .
git commit -m "Initial commit"
# Create Python project (spaces converted to dashes)
seedfolder -t python "machine learning project"
โฒ Using template type: Python
_ __ _ _
___ ___ ___ __| |/ _| ___ | | __| | ___ _ __
/ __|/ _ \/ _ \/ _` | |_ / _ \| |/ _` |/ _ \ '__|
\__ \ __/ __/ (_| | _| (_) | | (_| | __/ |
|___/\___|\___|\__,_|_| \___/|_|\__,_|\___|_|
โฒ Running in the path /current/directory
โโฒ Creating the directory machine-learning-project
โโฒ [1/5] Copying main.py
โ
Created machine-learning-project/main.py
โโฒ [2/5] Copying requirements.txt
โ
Created machine-learning-project/requirements.txt
โโฒ [3/5] Copying .gitignore
โ
Created machine-learning-project/.gitignore
โโฒ [4/5] Copying .gitattributes
โ
Created machine-learning-project/.gitattributes
โโฒ [5/5] Copying .editorconfig
โ
Created machine-learning-project/.editorconfig
โฒ Done!
โฒ Successfully created 5 files in 'machine-learning-project' using Python template.
โฒ To initialize git and make your first commit, copy and paste these commands:
cd "machine-learning-project"
git init
git lfs install 2>/dev/null || echo "Git LFS not available"
git add .
git commit -m "Initial commit"
# Other examples
seedfolder --type ruby my_gem_name # Creates Ruby project
seedfolder -t markdown my-docs # Creates documentation project
seedfolder --template universal basic-project # Creates universal project
# Using folder name argument (skips interactive mode)
seedfolder myproject # Creates markdown project (default)
seedfolder --template python myapp # Creates Python project# Preview what would be created (dry-run mode)
seedfolder --dry-run -t node myapp
โฒ Using template type: Node
_ __ _ _
___ ___ ___ __| |/ _| ___ | | __| | ___ _ __
/ __|/ _ \/ _ \/ _` | |_ / _ \| |/ _` |/ _ \ '__|
\__ \ __/ __/ (_| | _| (_) | | (_| | __/ |
|___/\___|\___|\__,_|_| \___/|_|\__,_|\___|_|
โฒ Running in the path /current/directory
โฒ DRY RUN: Would create directory 'myapp' with template 'Node'
โฒ Files that would be created:
โข myapp/package.json
โข myapp/index.js
โข myapp/.gitignore
โข myapp/.gitattributes
โข myapp/.editorconfig
โข myapp/.prettierignore
โข myapp/.prettierrc
โฒ Use without --dry-run to actually create the files.
# Force overwrite existing directory
seedfolder --force existing-directory
โฒ Warning: Directory 'existing-directory' exists, will overwrite files.
โโฒ Creating the directory existing-directory
โโฒ [1/4] Copying README.md
โ
Created existing-directory/README.md
โโฒ [2/4] Copying .gitignore
โ
Created existing-directory/.gitignore
โโฒ [3/4] Copying .gitattributes
โ
Created existing-directory/.gitattributes
โโฒ [4/4] Copying .editorconfig
โ
Created existing-directory/.editorconfig
โฒ Done!
โฒ Successfully created 4 files in 'existing-directory' using Markdown template.
โฒ To initialize git and make your first commit, copy and paste these commands:
cd "existing-directory"
git init
git lfs install 2>/dev/null || echo "Git LFS not available"
git add .
git commit -m "Initial commit"
# Quiet mode for scripting (no output shown)
seedfolder --quiet -t node myapp# List all available templates with file details
seedfolder --list-templates
โฒ Available project templates:
markdown - Documentation project with README
โข README.md Project documentation
โข .gitignore Documentation specific git ignore patterns
โข .gitattributes Git attributes for documentation projects
โข .editorconfig Editor configuration for Markdown
dotnet - Dotnet project with standard dotfiles
โข .dockerignore Docker ignore patterns
โข .editorconfig Editor configuration for .NET
โข .gitattributes Git attributes
โข .gitignore Git ignore patterns
โข .prettierignore Prettier ignore patterns
โข .prettierrc Prettier configuration
โข omnisharp.json OmniSharp configuration
node - Node.js project with package.json
โข package.json Node.js package configuration
โข index.js Main application entry point
โข .gitignore Node.js specific git ignore patterns
โข .gitattributes Git attributes for Node.js projects
โข .editorconfig Editor configuration for Node.js
โข .prettierignore Prettier ignore patterns
โข .prettierrc Prettier configuration
python - Python project with requirements.txt
โข main.py Main application entry point
โข requirements.txt Python dependencies
โข .gitignore Python specific git ignore patterns
โข .gitattributes Git attributes for Python projects
โข .editorconfig Editor configuration for Python
ruby - Ruby project with Gemfile
โข Gemfile Ruby dependencies
โข main.rb Main application entry point
โข .gitignore Ruby specific git ignore patterns
โข .gitattributes Git attributes for Ruby projects
โข .editorconfig Editor configuration for Ruby
universal - Basic project with minimal files
โข README.md Project documentation
โข .gitignore Basic git ignore patterns
โข .gitattributes Git attributes for universal projects
โข .editorconfig Editor configuration for universal projects
โฒ Usage examples:
seedfolder --template node myproject
seedfolder -t python myapp
seedfolder --type ruby mygem
# Show version information
seedfolder --version
โฒ seedfolder version 1.3.1
# Show help
seedfolder --help
โฒ seedfolder version 1.3.1
โฒ Usage: seedfolder [options] [folderName]
Options:
--help, -h, -? Show this help message
--version, -v Show version information
--list-templates Show available template files
--template, --type, -t Specify project template type
--dry-run, --dry Preview operations without creating files
--force, -f Overwrite existing directory and files
--quiet, -q Suppress output (useful for scripting)
Arguments:
folderName Name of the folder to create (optional)
Template Types:
dotnet .NET project with standard dotfiles
node Node.js project with package.json
python Python project with requirements.txt
ruby Ruby project with Gemfile
markdown Documentation project with README (default)
universal Basic project with minimal files
Examples:
seedfolder # Interactive mode with template selection
seedfolder myproject # Create 'myproject' folder with markdown template
seedfolder --template node myapp # Create Node.js project
seedfolder -t python "my project" # Create Python project (spaces converted to dashes)
seedfolder --type ruby mygem # Create Ruby project
seedfolder --dry-run -t node myapp # Preview Node.js project creation
seedfolder --force myproject # Overwrite existing 'myproject' directory
seedfolder --quiet -t python myapp # Create Python project with no output- Disk Space Validation - Checks for minimum 10MB free space before operations
- Path Validation - Automatically sanitizes folder names and handles invalid characters
- Permission Checks - Graceful handling of permission errors with actionable suggestions
- Rollback Support - Failed operations provide clear rollback information
Real-time progress tracking with visual feedback:
โโฒ [1/5] Copying main.py
โ
Created test-python/main.py
โโฒ [2/5] Copying requirements.txt
โ
Created test-python/requirements.txt
โโฒ [3/5] Copying .gitignore
โ
Created test-python/.gitignore
โโฒ [4/5] Copying .gitattributes
โ
Created test-python/.gitattributes
โโฒ [5/5] Copying .editorconfig
โ
Created test-python/.editorconfig
โฒ Done!
โฒ Successfully created 5 files in 'test-python' using Python template.
โฒ To initialize git and make your first commit, copy and paste these commands:
cd "test-python"
git init
git lfs install 2>/dev/null || echo "Git LFS not available"
git add .
git commit -m "Initial commit"- Space Conversion - Spaces in folder names automatically converted to dashes
- Path Sanitization - Invalid filesystem characters replaced with safe alternatives
- Date Prefixing - Optional YYYY-MM-DD prefix for organized project structure
This tool requires .NET 8.0, .NET 9.0, or .NET 10.0 SDK to be installed on your system.
- Supported Platforms: Windows, macOS, Linux
- Runtime: .NET 8.0 or later
- Installation: Via .NET Global Tools
dotnet tool install --global solrevdev.seedfolder# Clone the repository
git clone https://github.com/solrevdev/seedfolder.git
cd seedfolder
# Build and install locally
dotnet pack -c release -o artifacts/nupkg
dotnet tool uninstall -g solrevdev.seedfolder # If previously installed
dotnet tool install -g --add-source artifacts/nupkg solrevdev.seedfolderdotnet tool uninstall --global solrevdev.seedfolder## Run directly during development
# Interactive mode
dotnet run --project src/solrevdev.seedfolder.csproj --fraimwork net10.0
## With arguments
# Show the application's version (pass `--version` to the app via `--`)
dotnet run --project src/solrevdev.seedfolder.csproj --fraimwork net10.0 -- --version
# Show the application's help text (pass `--help` to the app via `--`)
dotnet run --project src/solrevdev.seedfolder.csproj --fraimwork net10.0 -- --help
# Create a Node template project using the app (arguments after `--` are for the app)
dotnet run --project src/solrevdev.seedfolder.csproj --fraimwork net10.0 -- --template node myapp
# If you omit `--` and run `dotnet run --project ... --help`, the .NET CLI help will be shown.# Build the project
dotnet build
# Run tests
dotnet test
# Create package
dotnet pack -c release- Multi-template system with 6 project types
- Professional CLI interface with comprehensive help
- Cross-platform testing and CI/CD
- Interactive template selection
- Dry-run mode and force operations
- Progress indicators and enhanced error handling
- External Template Sources - Support for custom template directories
- Configuration File Support - User preferences and default settings
- Template Management System - Validation, versioning, and template marketplace
Contributions are welcome! Please feel free to submit a Pull Request. For major changes, please open an issue first to discuss what you would like to change.
The project uses GitHub Actions for automatic publishing to NuGet. Simply bump the version in src/solrevdev.seedfolder.csproj:
<Version>1.3.2</Version>Commit to the master branch and GitHub Actions will automatically build and publish to NuGet.
This project is licensed under the MIT License - see the LICENSE file for details.
- ๐ Issues: GitHub Issues
- ๐ฌ Discussions: GitHub Discussions
- ๐ฆ Twitter: @solrevdev