This project has been archived by its maintainers, and is no longer receiving any updates.
⚠️ This Repository is Archived ⚠️
This repository has been replaced by star-setup, a full Rust rewrite.
Why the change?
Python/pip feels correct for a CMake-specific tool, but with my future plans of expanding to work with multiple build systems it feels awkward to keep it as python. Rust is faster and easier to distribute, while keeping the same flow as starlet-setup.
Quick Start with star-setup
# Homebrew (macOS/Linux)
brew install star-setup/tap/star-setup
# npm
npm install -g @star-setup/star-setup
# Shell (Linux/macOS)
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/star-setup/core/releases/latest/download/star-setup-installer.sh | sh
# PowerShell (Windows)
powershell -ExecutionPolicy Bypass -c "irm https://github.com/star-setup/core/releases/latest/download/star-setup-installer.ps1 | iex"
See star-setup/core for full documentation.
Starlet Setup
A lightweight Python utility to quickly clone, configure, and build CMake projects — from single repos to full mono-repos.
Table of Contents
Quick start
pip install starlet-setup
# Interactive mode
starlet-setup
# Single-repo mode
starlet-setup username/repo
Features
-
Interactive Mode:
- Step-by-step instructions for all configuration options
- Shows default values for each setting
- Skips prompts for options already set via CLI flags
- Supports both single-repo and mono-repo workflows
- Choose between profile or manual repository lists
-
Single Repository Mode:
- Clone a GitHub repository with simple
username/reposyntax - Support for HTTPS (default) and SSH protocols
- Create a dedicated build directory
- Configure the project with CMake
- Build the project automatically
- Optional flags for build type, directory, cleaning, and skipping build
- Clone a GitHub repository with simple
-
Mono-repo Mode:
- Clone multiple related repositories into one workspace
- Automatically generate root CMakeLists.txt for mono-repo structure
- Build all modules together for easy debugging and development
- Customize which repositories to include
- Perfect for working across multiple interdependent projects
-
Profile Mode:
- Save frequently used mono-repo configuration as named profiles
- Quick access to predefined repository sets
- Manage multiple development environments effortlessly
- Default profile includes all core Starlet modules
-
Configurations:
- Save build settings as named configurations
- Store SSH preferences, build types, and CMake arguments
- Reuse common setups without repeating flags
- Works with both single-repo and mono-repo modes
Prerequisites
- Python 3.6+
- Git
- CMake
Installation
From PyPI
pip install starlet-setup
From GitHub
pip install git+https://github.com/masonlet/starlet-setup.git
Once installed, you can use the starlet-setup command from anywhere.
⚠️ Command not found? ⚠️
If you get an error saying the command is not found, you may need to add Python's user scripts directory to your PATH.
Find your scripts directory:
# Run this to find your exact scripts path
python -c "import sysconfig; print(sysconfig.get_path('scripts'))"
Then add it to your PATH:
Linux/macOS:
# Add to ~/.bashrc, ~/.zshrc, or equivalent
export PATH="$HOME/.local/bin:$PATH"
# Apply changes
source ~/.bashrc # or equivalent
Windows (Command Prompt):
# Add to PATH via System Properties > Environment Variables
# Add: %APPDATA%\Python\Scripts
Alternatively, you can run the script directly:
python -m starlet_setup username/repo
Configuration
Starlet Setup supports persistent configuration through a JSON file, allowing you to save your preferred defaults (e.g., SSH mode, build directory, mono-repo repositories).
1. Initialize Config
# Create a default configuration file in your current directory.
starlet-setup --init-config
This will create a .starlet-setup.json that can be edited to customize your setup preferences.
2. File Location
Starlet Setup checks for configuration files in this order:
./.starlet-setup.json(current directory)~/.starlet-setup.json(home directory)
Usage
Interactive Mode
When you run starlet-setup without a repository argument, it automatically enters interactive mode, guiding you through all configuration options.
Basic Usage
# Start interactive mode
starlet-setup
# Interactive mode respects CLI flags (skips those prompts)
starlet-setup --ssh --verbose
Advanced Usage
# Pre-set mono-repo flags, interactive asks for remaining options
starlet-setup --mono-repo --ssh
# Pre-set profile, interactive asks for repo and other settings
starlet-setup --profile myprofile
# Pre-set repos, interactive asks for test repo and other settings
starlet-setup --repos user/lib1 user/lib2 --verbose
# Combine multiple flags to skip multiple prompts
starlet-setup --ssh --build-type Release --no-build
Example Session
Starlet Setup Interactive Mode
Enter repository (user/repo or URL): masonlet/starlet-samples
Use SSH? (y/n) [N]: y
Verbose? (y/n) [N]:
Clean build directory if exists? (y/n) [N]:
Selected mode: (1) Single Repo (2) Mono-Repo: 2
Mono-repo: (1) Use profile (2) Manual repo list: 1
Profile name: default
Build type [Debug]: Release
Build directory [build]:
Additional CMake args (space separated):
Configure only (skip build)? (y/n) [N]:
Interactive mode complete
Single Repository Mode
Basic Usage
# Clone and build a repository via HTTPS
starlet-setup username/repo
starlet-setup https://github.com/username/repo.git
# Clone and build a repository via SSH
starlet-setup username/repo --ssh
starlet-setup git@github.com:username/repo.git
Advanced Usage
# Specify build type (Debug, Release, RelWithDebInfo, MinSizeRel)
starlet-setup username/repo --build-type Release
# Specify a custom build directory
starlet-setup username/repo --build-dir my-build
# Only configure, skip building
starlet-setup username/repo --no-build
# Clean the build directory before building
starlet-setup username/repo --clean
# Show verbose output for debugging
starlet-setup username/repo --verbose
# Custom CMake args
starlet-setup username/repo --cmake-arg=-DCMAKE_CXX_COMPILER=clang++
Mono-Repo Mode
BUILD_LOCAL Usage
Mono-repo mode sets BUILD_LOCAL=ON in the root project's CMakeLists.txt.
This flag tells your test repository to link against local modules instead of fetching them via CMake's FetchContent:
# In your test repo's CMakeLists.txt
if(NOT BUILD_LOCAL)
# Fetch dependencies from GitHub
FetchContent_Declare(starlet_engine
GIT_REPOSITORY https://github.com/starlet-libs/engine.git
GIT_TAG main
)
# ... other dependencies
endif()
With mono-repo mode (BUILD_LOCAL=ON):
- All modules link locally from subdirectories
- Changes in any module immediately affect your test repo
- Full debugging across module boundaries
- Single unified build for the entire ecosystem
Without mono-repo mode (BUILD_LOCAL undefined):
- Dependencies fetched via FetchContent
- Standalone builds work independently
- Users can build your repo without the full ecosystem
- Automatic dependency management
This dual-mode design allows both integrated development and standalone distribution.
Basic Usage
Note: When using --repos or --profile, mono-repo mode is automatically enabled, so the --mono-repo flag is optional.
# Clone and build default Starlet modules with a test repository
starlet-setup username/repo --mono-repo
# Use SSH instead of HTTPS
starlet-setup username/repo --mono-repo --ssh
# Clone non-default repositories
starlet-setup username/repo --repos user/lib1 user/lib2
Advanced Usage
# Multiple flags
starlet-setup username/repo --mono-repo --verbose --mono-dir my-starlet
# Custom repos and multiple flags
starlet-setup username/repo --repos user/lib1 user/lib2 --ssh --verbose
# Custom CMake args
starlet-setup username/repo --mono-repo --cmake-arg=-DCMAKE_CXX_COMPILER=clang++
Default Repositories (🚀 Starlet Ecosystem)
When using mono-repo mode without --repos or --profile, the script clones repositories based on your configuration. The default profile includes:
starlet-libs/mathstarlet-libs/loggerstarlet-libs/controlsstarlet-libs/scenestarlet-libs/graphicsstarlet-libs/serializerstarlet-libs/engine- Your specified test repository (e.g.,
masonlet/starlet-samples)
Mono-Repo Structure
Mono-repo mode creates a workspace like this:
build-mono/
├── CMakeLists.txt # Auto-generated root project
├── math/
├── logger/
├── controls/
├── scene/
├── graphics/
├── serializer/
├── engine/
├── starlet-samples/ # Your test repo
└── build/ # Single build output
This structure allows you to:
- Edit any module directory
- Build everything together
- Debug across module boundaries
- Commit changes without digging into build directories
Profile Mode (Saved Configurations)
Managing Profiles
# Add a new profile
starlet-setup --profile-add myprofile user/lib1 user/lib2
# List all saved profiles
starlet-setup --list-profiles
# Remove a profile
starlet-setup --profile-remove myprofile
Using Profiles
# Use the default profile
starlet-setup username/repo --profile
# Use a named profile
starlet-setup username/repo --profile myprofile
# Use a profile with SSH
starlet-setup username/repo --profile myprofile --ssh
Config Mode (Saved Build Settings)
Managing Configs
# List all saved configurations
starlet-setup --list-configs
# Add a new configuration with flags
starlet-setup --config-add myconfig --ssh --build-type Release --no-build
# Remove a configuration
starlet-setup --config-remove myconfig
Using Configs
# Use a saved config
starlet-setup username/repo --config myconfig
# Override specific settings
starlet-setup username/repo --config myconfig --verbose
# Config with mono-repo mode
starlet-setup username/repo --mono-repo --config myconfig --ssh
Development
Development
Running Tests
1. Clone starlet-setup
git clone https://github.com/masonlet/starlet-setup.git
cd starlet-setup
2. Install in Development Mode
pip install -e .
3. Run Tests
# Run all tests
pytest
# Run specific test file
pytest tests/test_config.py
# Run tests with flags
pytest -v
License
MIT License — see LICENSE for details.
Metadata
Release files for starlet-setup 1.2.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| starlet_setup-1.2.3.tar.gz | 24.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| starlet_setup-1.2.3-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 41.6 kB
Release files / starlet_setup-1.2.3.tar.gz
| Download URL | starlet_setup-1.2.3.tar.gz |
|---|---|
| Size | 24.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
117e572da2d03b0f0f407378b31709797922274361d9d3a30a2c4c619cf2deb6
|
|
BLAKE2b-256 checksum How to use checksums |
8d7a91929c09bc2d3b2cd30e4bbf1aa6036ab522278c8fef5f9cb561a2840ace
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 22, 2026.
Transparency logRelease files / starlet_setup-1.2.3-py3-none-any.whl
| Download URL | starlet_setup-1.2.3-py3-none-any.whl |
|---|---|
| Size | 17.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
f3b1cacc474d70aa5fdbb6884b9169df44f8c9e0b3683be7fbaac29326c04c6c
|
|
BLAKE2b-256 checksum How to use checksums |
7a15601a0b0b5308f828614b79df13a82790f343cd22f52ee79e8c631385dd82
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 22, 2026.
Transparency log