An interactive command-line tool that generates production-ready full-stack project structures with best practices built-in.
- 🚀 Interactive CLI - User-friendly prompts guide you through project setup
- 🎯 Multiple Languages - Support for Python, JavaScript, Java, Ruby, and Go
- 🏗️ Framework Templates - Pre-configured templates for popular frameworks
- 🐳 Docker Ready - Includes Dockerfile and docker-compose.yml
- 🔄 CI/CD Integration - Optional GitHub Actions workflows
- 🧪 Testing Setup - Pre-configured test frameworks and example tests
- 📝 Documentation - Auto-generated README with setup instructions
- 🔧 Development Tools - Git, pre-commit hooks, linting, and formatting
- Python: Django, Flask, FastAPI
- JavaScript/TypeScript: Express (TypeScript), Next.js 14 (App Router)
- Java: Spring Boot
- Ruby: Rails
- Go: Standard HTTP library
- PostgreSQL
- MySQL
- MongoDB
- SQLite
- None (API only)
- React
- Vue
- Angular
- Svelte
- None (backend only)
- Python 3.8 or higher
- pip (Python package manager)
Install Exosmith so you can run it from anywhere on your system:
# Navigate to the Exosmith directory
cd C:\Users\YourUsername\Desktop\exosmith
# Install in editable mode
pip install -e .
# Now run from anywhere
exosmithAfter installation, you can run exosmith from any directory on your computer.
If you prefer not to install globally, use the provided launcher scripts:
Windows:
cd C:\Users\YourUsername\Desktop\exosmith
exosmith.batLinux/Mac:
cd /path/to/exosmith
chmod +x exosmith.sh
./exosmith.shRun the script directly without installation:
cd C:\Users\YourUsername\Desktop\exosmith
python scaffold.pyTest that everything is working:
# Run the test suite
pytest tests/ -v
# Run installation verification
python test_installation.pyYou should see: 110 passed ✅
To remove Exosmith from your system:
Windows:
uninstall.batLinux/Mac:
./uninstall.shOr manually:
pip uninstall exosmithTo reinstall Exosmith:
Windows:
reinstall.batLinux/Mac:
./reinstall.shFor detailed installation instructions, see INSTALL.md
Simply run Exosmith and follow the prompts:
# If installed globally
exosmith
# Or using launcher script (Windows)
exosmith.bat
# Or direct execution
python scaffold.pyThe tool will guide you through:
- Selecting a programming language
- Choosing a backend framework
- Selecting a database
- Choosing an optional frontend framework
- Configuring project settings (name, ports, etc.)
- Enabling optional features (Git, CI/CD, pre-commit hooks)
# Show help
exosmith --help
# Use custom plugin directory
exosmith --plugin-dir ./my-plugins
# Enable verbose output
exosmith --verbose
# Show version
exosmith --version$ exosmith
╔═══════════════════════════════════════════════════════════╗
║ ║
║ EXOSMITH ║
║ Interactive Full-Stack Project Scaffolding CLI ║
║ ║
║ Generate production-ready project structures ║
║ with best practices built-in ║
║ ║
╚═══════════════════════════════════════════════════════════╝
Select a programming language:
--------------------------------------------------
1. go
2. java
3. javascript
4. python
5. ruby
--------------------------------------------------
Select an option [1-5]: 4
Select a python backend framework:
--------------------------------------------------
1. Django
2. FastAPI
3. Flask
--------------------------------------------------
Select an option [1-3]: 2
...The scaffolder generates a complete project structure:
my-project/
├── .env.example # Environment variables template
├── .env # Your environment configuration
├── .gitignore # Git ignore patterns
├── .pre-commit-config.yaml # Pre-commit hooks (optional)
├── Dockerfile # Docker container definition
├── docker-compose.yml # Docker Compose configuration
├── README.md # Project documentation
├── app.py # Main application file
├── requirements.txt # Python dependencies (or equivalent)
├── tests/ # Test directory
│ └── test_health.py # Example tests
└── .github/ # CI/CD workflows (optional)
└── workflows/
└── ci.yml
The scaffolder supports custom templates through a plugin system:
-
Create a directory structure:
my-plugins/ └── {language}/ └── {framework}/ ├── app.py.j2 ├── Dockerfile.j2 └── ... -
Use Jinja2 template syntax for variables:
# app.py.j2 from flask import Flask app = Flask("{{ project_name }}") @app.route('/health') def health(): return {'status': 'healthy'} if __name__ == '__main__': app.run(port={{ port }}) -
Use the plugin directory:
exosmith --plugin-dir ./my-plugins
# Run all tests
pytest
# Run with coverage
pytest --cov=. --cov-report=html
# Run property-based tests
pytest tests/property/
# Run specific test file
pytest tests/test_orchestrator.py -vfullstack-scaffolder/
├── cli/ # CLI interface components
│ ├── prompt.py # Interactive prompts
│ └── example_usage.py # Usage examples
├── core/ # Core business logic
│ ├── models.py # Data models
│ ├── orchestrator.py # Workflow orchestration
│ ├── registry.py # Template registry
│ ├── renderer.py # Template rendering
│ ├── validators.py # Input validation
│ └── file_generator.py # File system operations
├── templates/ # Built-in framework templates
│ ├── python/
│ ├── javascript/
│ ├── java/
│ ├── ruby/
│ └── go/
├── tests/ # Test suite
│ ├── property/ # Property-based tests
│ └── ...
├── scaffold.py # Main CLI entry point
├── setup.py # Package configuration
└── README.md # This file
- Python 3.8 or higher
- pip (Python package manager)
All dependencies are automatically installed when you run pip install -e .:
jinja2>=3.0.0- Template enginehypothesis>=6.0.0- Property-based testingpytest>=7.0.0- Testing framework
See requirements.txt for the complete list.
Contributions are welcome! Please follow these steps:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Make your changes
- Run tests (
pytest) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
- Follow PEP 8 style guidelines
- Write tests for new features
- Update documentation as needed
- Ensure all tests pass before submitting PR
The scaffolder follows a modular architecture:
- CLI Layer: Interactive prompts and user input
- Orchestration Layer: Workflow coordination
- Registry Layer: Template discovery and management
- Rendering Layer: Jinja2 template processing
- File System Layer: Project generation and file operations
See the design document for detailed architecture information.
The project uses both unit testing and property-based testing:
- Unit Tests: Verify specific functionality and edge cases
- Property Tests: Verify universal properties across all inputs using Hypothesis
All correctness properties are documented in the design document.
MIT License - see LICENSE file for details.
Built with:
- Jinja2 - Template engine
- Hypothesis - Property-based testing
- pytest - Testing framework
- Additional framework support (NestJS, Laravel, etc.)
- Database migration templates
- API documentation generation (OpenAPI/Swagger)
- Kubernetes deployment configurations
- Cloud provider templates (AWS, GCP, Azure)
- Microservices architecture templates
- GraphQL API templates
Made with ❤️ by developers, for developers.