CLI for Django and SaaS Pegasus
Project description
pegasus-cli
Demo
A demo is worth 1,000 words. Click the image below to see the Pegasus CLI in action:
Overview
The Pegasus CLI is a command-line tool that streamlines the process of working in a Django project. It is currently designed to work with the SaaS Pegasus Django boilerplate, but can be used more generally for any Django project (and will be updated to work with generic Django projects in the future).
It is currently geared around the startapp command. This will create a new app in your Django project,
and (optionally) spin up an entire Create / Update / Delete (CRUD) interface for it, built with
Django forms and HTMX.
Example usage:
pegasus startapp todos Project Todo
This will create a todos app in your Django project with models, URLs, views and templates to
work with a Project and Todo model.
Installation
Install this tool using pip:
pip install pegasus-cli
Usage
For help, run:
pegasus --help
You can also use:
python -m pegasus --help
Configuration
You can run pegasus startapp --help for configuration options.
In addition to the command-line options, you can also set default values for configuration
options by creating a pegasus-config.yaml file in your project directory.
The format of the file is:
cli:
app_directory: apps
module_path: apps
template_directory: templates
base_model: apps.teams.models.BaseTeamModel
use_teams: true
django_settings: myproject/settings.py # optional, auto-detected from manage.py by default
The above configuration is the recommended configuration for SaaS Pegasus projects
(with teams turned on, else set use_teams: false and base_model: apps.utils.models.BaseModel).
A recommended default configuration for your project will be included in your project's pegasus-config.yaml
file if you are on Pegasus version 2024.9 or later.
The Pegasus config will create your apps in the apps directory, and will use the templates directory for your templates.
Automatic App Installation
When you run pegasus startapp, the CLI will automatically try to add the new app to your
Django project's settings.py and urls.py files. It does this by:
- Parsing
manage.pyin the current directory to find yourDJANGO_SETTINGS_MODULE. - Adding the app's
AppConfigtoPROJECT_APPS(preferred) orINSTALLED_APPSin your settings file. - Adding a
path()entry tourlpatterns(orteam_urlpatternsif using teams) in theurls.pyfile next to your settings.
If the CLI can't find manage.py or your settings file, it will fall back to printing
manual instructions instead.
You can also specify the settings file explicitly:
pegasus startapp todos --django-settings myproject/settings.py
Migrating pg- CSS classes
If you're upgrading a Pegasus project that previously used the legacy pg- prefixed
CSS classes (e.g. pg-button, pg-card), you can run:
pegasus migrate-css
from your project root to replace them with their native Tailwind/DaisyUI equivalents
in your templates and JavaScript files. The class mappings are read from your
project's assets/styles/pegasus/tailwind.css so they always match the version of
Pegasus your project was built with.
Use --dry-run to preview changes without modifying files. For non-standard
project layouts, --css-file and --search-dir (repeatable) let you point at
alternate paths.
Pushing to GitHub
You can use the CLI to push your Pegasus project to GitHub directly from the command line.
Setup
First, authenticate with your Pegasus API key:
pegasus auth
This will prompt for your API key and save it to ~/.pegasus/credentials.
You can also set the PEGASUS_API_KEY environment variable instead.
Listing projects
To see your available projects:
pegasus projects list
Configuring projects
You can create and modify projects from the CLI, mirroring what's available in the web UI.
To see all configurable fields with their types, choices, and the license tier each requires:
pegasus projects fields
By default this shows the schema for a new project, which omits fields
whose only valid value is the default (e.g. deprecated bundlers or CSS
frameworks). To see the schema as it applies to an existing project —
including any legacy options that project can still configure — pass
--for:
pegasus projects fields --for <project_id>
To show a project's full configuration:
pegasus projects show <project_id>
To create a new project, pass fields with --set key=value (repeatable),
load them from a pegasus-config.yaml (or JSON) file with --config-file,
or combine the two — --set values override values from the file:
pegasus projects create \
--set project_name="My App" \
--set project_slug=my_app \
--set use_subscriptions=true
pegasus projects create --config-file pegasus-config.yaml
pegasus projects create --config-file pegasus-config.yaml --set use_celery=true
To update an existing project, use the same flags with a project ID. Only the fields you specify are changed; everything else is left alone:
pegasus projects update <project_id> --set front_end_framework=react
Pass --json to any of these commands to get machine-readable output
instead of a Rich table.
Pushing to GitHub
To push a project to GitHub by ID:
pegasus projects push <project_id>
If you don't specify a project ID, you'll be prompted to choose from your projects:
pegasus projects push
To upgrade to the latest Pegasus version before pushing:
pegasus projects push <project_id> --upgrade
To upgrade to the latest development build instead of the stable release:
pegasus projects push <project_id> --upgrade --dev
To push as-is without upgrading and without the interactive prompt (useful in CI, scripts, or agent flows):
pegasus projects push <project_id> --no-upgrade
To set a custom pull request title (used when a PR is created):
pegasus projects push <project_id> --upgrade --pr-title "Upgrade Pegasus to 2025.2"
The CLI will show progress as the build runs and print the pull request or repository URL when complete.
Custom server URL
By default, commands use https://www.saaspegasus.com.
To use a different server, pass --base-url or set PEGASUS_BASE_URL:
pegasus projects --base-url https://your-server.com list
Development
To contribute to this tool, first checkout the code. Then create a new virtual environment:
cd cli
python -m venv venv
source venv/bin/activate
Now install the dependencies and dev dependencies:
pip install -e '.[dev]'
To run the tests:
pytest
Setup pre-commit hooks:
pre-commit install
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pegasus_cli-0.15rc1.tar.gz.
File metadata
- Download URL: pegasus_cli-0.15rc1.tar.gz
- Upload date:
- Size: 38.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bf30d8cf91a6fe6e4dd830cad2cda6e8c10b688be005e45e7d5cb137eac42fe4
|
|
| MD5 |
231f6e4f402ce78a81b67dd06d491c9a
|
|
| BLAKE2b-256 |
30f2fa4e8f8b278c54b4bfbe24740215648b3c2a4f70e038868fce3e655f8f74
|
Provenance
The following attestation bundles were made for pegasus_cli-0.15rc1.tar.gz:
Publisher:
publish.yml on saaspegasus/pegasus-cli
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pegasus_cli-0.15rc1.tar.gz -
Subject digest:
bf30d8cf91a6fe6e4dd830cad2cda6e8c10b688be005e45e7d5cb137eac42fe4 - Sigstore transparency entry: 1524076284
- Sigstore integration time:
-
Permalink:
saaspegasus/pegasus-cli@fa6051784363171cd0a090b05e0ceeda05b512c7 -
Branch / Tag:
refs/tags/v0.15rc1 - Owner: https://github.com/saaspegasus
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@fa6051784363171cd0a090b05e0ceeda05b512c7 -
Trigger Event:
release
-
Statement type:
File details
Details for the file pegasus_cli-0.15rc1-py3-none-any.whl.
File metadata
- Download URL: pegasus_cli-0.15rc1-py3-none-any.whl
- Upload date:
- Size: 45.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5ca6504f5b34f247ca69997dbede4848cd3458402ec84b65f82f62dbe16c3593
|
|
| MD5 |
271b0be86fdfaeb00fe0cdf1863a3913
|
|
| BLAKE2b-256 |
a40ba3a99530bf3a99b3f964102fb961221269773c5c91eb78eebf07c0107044
|
Provenance
The following attestation bundles were made for pegasus_cli-0.15rc1-py3-none-any.whl:
Publisher:
publish.yml on saaspegasus/pegasus-cli
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pegasus_cli-0.15rc1-py3-none-any.whl -
Subject digest:
5ca6504f5b34f247ca69997dbede4848cd3458402ec84b65f82f62dbe16c3593 - Sigstore transparency entry: 1524076348
- Sigstore integration time:
-
Permalink:
saaspegasus/pegasus-cli@fa6051784363171cd0a090b05e0ceeda05b512c7 -
Branch / Tag:
refs/tags/v0.15rc1 - Owner: https://github.com/saaspegasus
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@fa6051784363171cd0a090b05e0ceeda05b512c7 -
Trigger Event:
release
-
Statement type: