A powerful CLI tool to bootstrap FastAPI projects powered by the FastGear library — with best practices, pre-configured templates, and modern development tools out of the box.
FastGear CLI is the official command-line companion for the FastGear library. It streamlines the creation of FastAPI projects by generating a complete, production-ready project structure with:
- Pre-configured FastGear integration for accelerated API development
- FastAPI application scaffolding with best practices
- Modern Python project setup with type hints and validation
Note: Projects generated by FastGear CLI are designed to work seamlessly with the FastGear library, which provides utilities, patterns, and abstractions to supercharge your FastAPI development.
- 🚀 FastAPI Project Setup - Create production-ready FastAPI projects in seconds
- ⚡ FastGear Integration - Pre-configured to use the FastGear library
- 🐳 Docker Support - Optional Docker configuration with Dockerfile and docker-compose
- 🤖 AI Agent Tools - Integrate AI-powered development tools (GitHub Copilot)
- 🔄 CI/CD Integration - Pre-configured CI/CD pipelines (GitHub Actions)
- 📦 Modern Dependencies - Uses
uvfor fast, reliable dependency management - 🔍 Dry-Run Mode - Preview files before creation
- ✅ Type-Safe - Full type hints and Pydantic models
- 🧪 Test Coverage - Comprehensive test suite with pytest
- Python 3.13+
- uv (recommended for dependency management)
uv pip install fastgear-clipip install fastgear-cligit clone https://github.com/hmarcuzzo/fastgear-cli.git
cd fastgear-cli
uv pip install -e .Create a new project in the current directory:
fg initCreate a project in a specific directory:
fg init /path/to/projectPreview what files would be created (dry-run):
fg init --dry-run
# or
fg init -n$ fg init
? Project name: my-awesome-api
? Project title: My Awesome API
? Use Docker? Yes
? Use AI agent tools? No
? Use CI/CD pipeline? Yes
? Select CI/CD provider: GitHub Actions
📦 Generating uv.lock...
🎉 Project 'my-awesome-api' created successfully!Your new FastAPI project is ready with FastGear pre-configured!
Preview the project structure before creating files:
$ fg init --dry-run
? Project name: my-awesome-api
? Project title: My Awesome API
? Use Docker? Yes
🔍 Dry run mode - no files created
Files that would be created:
└── 📁 my-awesome-api
├── 📁 docker
│ ├── 📄 Dockerfile
│ └── 📄 docker-compose.yml
├── 📁 src
│ └── 📁 my_awesome_api
│ ├── 📄 __init__.py
│ └── 📄 main.py # FastAPI app with FastGear
├── 📁 tests
│ ├── 📄 __init__.py
│ └── 📄 test_main.py
├── 📄 .dockerignore
├── 📄 .gitignore
├── 📄 pyproject.toml # Includes FastGear dependency
└── 📄 README.md
Total: 12 file(s)Create a project in a specific location:
fg init ~/projects/new-apiCreate an entity:
fg add entity user --path src/modules/userCreate a service and inject a repository explicitly:
fg add service user --path src/modules/user \
--repository-path src.modules.user.repositories.UserRepositoryCreate a repository and choose interactively whether to inject an entity:
fg add repository user --path src/modules/userCreate a full module and choose components interactively:
fg add module user --path src/modulesCreate a module non-interactively:
fg add module user --path src/modules \
--module-components entity,repository,service,controllerPreview created files without writing:
fg add module user --path src/modules --module-components service,controller --dry-runInitialize a new FastAPI project with FastGear.
Usage:
fg init [DIRECTORY] [OPTIONS]Arguments:
DIRECTORY- Target directory (default: current directory)
Options:
--dry-run,-n- Show what files would be created without creating them--help- Show help message
Interactive Prompts:
- Project name - The name of your project (used for directory and package names)
- Project title - Human-readable project title
- Use Docker? - Include Docker configuration files
- Use AI agent tools? - Include AI development tools configuration
- Use CI/CD pipeline? - Include continuous integration/deployment setup
- Select CI/CD provider - Choose your CI/CD platform (if enabled)
Add components to an existing project/module.
Usage:
fg add [ELEMENT_TYPE] [ELEMENT_NAME] [OPTIONS]Element types:
entityrepositoryservicecontrollermodule
Arguments:
ELEMENT_TYPE- Component type to generateELEMENT_NAME- Component/module name (normalized to snake_case)
Common options:
--path,-p- Base directory where files are generated (default: current directory)--use-folders/--no-use-folders- Generate in folders (entities/,services/, etc.) or flat files--dry-run,-n- Preview output without writing files
Dependency options:
--entity-path- Entity import path used byrepository--repository-path- Repository import path used byservice--service-path- Service import path used bycontroller
Module option:
--module-components- Comma-separated list formodule:entity,repository,service,controller
This project is licensed under the MIT License - see the LICENSE file for details.