Build web-apps, with the frameworks of your choice, with a single command. 100% customisable.
SpinUp is a powerful CLI tool that enables developers to quickly scaffold full-stack web applications using customizable templates. It supports various frontend frameworks and backend technologies, all configurable through a simple YAML configuration file.
- π Rapid Project Setup: Create full-stack projects with a single command
- π§ Fully Customizable: Configure frontend, and backend services
- π¦ Template System: Support for remote Git repositories as templates
- π Private Repository Support: Authentication for private template repositories
- π Environment Variables: Dynamic configuration using environment files
- π¨ Beautiful CLI Output: Colored and formatted terminal output
- β‘ Concurrent Deployment: Parallel service creation for faster setup
- Go 1.25.2 or later
- Git
git clone https://github.com/SpinUp-CLI/spinup
cd spinup
make allThis will create a spin executable in the project directory.
./spin initThis creates a default configuration file at ~/.config/spinup/defaults.yaml.
# Using default project name
./spin create
# Using custom project name
./spin create my-awesome-app./spin resetSpinUp uses a YAML configuration file located at ~/.config/spinup/defaults.yaml.
env_file: none
templates:
remote_templates:
- name: none
url: https://github.com/SpinUp-CLI/
secret: none
defaults:
frontend: vue-template
backend: go
project_name: web-appenv_file: path/to/.env # Path to environment variables filetemplates:
remote_templates:
- name: github
url: https://github.com/your-org/
secret: your_github_token
- name: gitlab
url: https://gitlab.com/your-org/
secret: your_gitlab_tokendefaults:
frontend: vue-template # Frontend framework template
backend: go # Backend framework template
project_name: web-app # Default project nameYou can use environment variables in your configuration:
templates:
remote_templates:
- name: github
url: https://github.com/my-org/
secret: ${GITHUB_TOKEN:default_value}When you create a project, SpinUp generates the following structure:
my-project/
βββ my-project-front/ # Frontend service
βββ my-project-back/ # Backend service
Each service is cloned from the corresponding template repository based on your configuration.
Initialize SpinUp configuration. Creates a default configuration file if it doesn't exist.
Usage:
./spin initCreate a new full-stack project.
Usage:
./spin create # Uses default project name
./spin create my-awesome-app # Uses custom project nameWhat it does:
- Checks/creates configuration
- Sets up project directory
- Clones frontend template (if required)
- Clones backend template (if required)
- Configures services concurrently
Reset the configuration to defaults. Recreates the configuration file.
Usage:
./spin resetSpinUp uses Git repositories as templates. Templates are organized by framework name and fetched from configured remote URLs.
{remote_url}{framework_name}
Example:
- Remote URL:
https://github.com/SpinUp-CLI/ - Framework:
vue-template - Final URL:
https://github.com/SpinUp-CLI/vue-template
- Public repositories: No authentication required
- Private repositories: Basic authentication using tokens
spinup/
βββ cmd/ # Cobra CLI commands
β βββ root.go # Root command and help
β βββ init.go # Init command
β βββ create.go # Create command
β βββ reset.go # Reset command
βββ internal/
β βββ commands/ # Command implementations
β β βββ init_cmd.go
β β βββ create_cmd.go
β β βββ reset_cmd.go
β β βββ utils/ # Command utilities
β βββ config/ # Configuration management
β β βββ config.go # Config structures
β β βββ yaml.go # YAML parsing
β β βββ env_manager.go # Environment variable handling
β βββ project/ # Project creation logic
β βββ project.go # Project structures
β βββ create_project.go # Project creation
β βββ cloner.go # Git repository cloning
βββ pkg/ # Reusable packages
β βββ fileutils/ # File system utilities
β βββ iostream/ # Formatted output
β βββ utils/ # ANSI colors and formatting
βββ main.go # Application entry point
Configuration System (internal/config)
config.Config: Main configuration structureconfig.ParseConfig: YAML parsing with environment variable supportconfig.GetConfigPath: Configuration file location management
Project Management (internal/project)
project.Project: Project representationproject.CreateProject: Project creation orchestrationproject.TryRemote: Git repository cloning with authentication
Output System (pkg/iostream)
iostream.Error: Error messagesiostream.Success: Success messagesiostream.Info: Information messagesiostream.Log: General logging
# Build the project
make all
# Run the application
make run
# Format code
make fmt
# Clean build artifacts
make clean- Fork the repository
- Create a feature branch
- Make your changes
- Run tests:
make test - Format code:
make fmt - Submit a pull request
This project is licensed under the terms specified in the LICENSE file.
Elouann Hosta
- Email: ehosta@student.42lyon.fr
Built with β€οΈ using Go and Cobra CLI