singularity-cli

v0.3.1

Universal project command runner. One set of commands for every project type.

$curl -fsSL https://getsingularity.lol/cli | sh

Zero-config detection

Reads your project files. Detects Rust, Node, Python, Go, Java, .NET, Ruby, and more. No setup, no config.

Monorepo aware

Discovers all sub-projects in a workspace and runs commands in parallel - or serially with --serial.

Transparent

Every command shows the underlying invocation it runs. --dry-run or --explain to inspect before committing.

Introduction

singularity-cli (command: sgl) is a universal project command runner written in Rust. It detects your project's ecosystem from its manifest files and maps one consistent verb - sgl dev, sgl test, sgl build - to the right underlying command.

No configuration required. Switch between Rust, Node, Python, and Go projects and always type the same thing. In a monorepo it finds every sub-project and runs them in parallel.

Installation

Pick the method that matches your platform.

macOS / Linux
Windows
Cross-platform
$
curl -fsSL https://getsingularity.lol/cli | sh

macOS . Linux . WSL - downloads a prebuilt binary, verifies SHA256, installs to ~/.local/bin. Add ~/.local/bin to your $PATH if needed.

Commands & Flags

All commands share a common set of global flags and forward extra arguments to the underlying tool where applicable.

Commands

CommandDescription
sgl setupInstall dependencies for the detected project ecosystem.
sgl devStart dev server, watcher, or local daemon.
sgl test [args]...Run tests. Extra arguments are automatically forwarded to the underlying test runner.Pass extra arguments without worrying about syntax conversion.
sgl buildBuild the project using the native compiler or bundler.
sgl lintRun linter and formatting checks.
sgl fmtAutomatically format source files across the project.
sgl run <script> [args]...Run a project script or task. Forwards extra arguments (inserts npm -- separator when needed).
sgl doctorCheck for installed development tools, versions, and system environment health.
sgl info [--json]Inspect detected projects, resolved package managers, and configured command mappings.
sgl initGenerate an initial singularity.toml based on detected project ecosystems.
sgl completions <shell>Generate shell autocompletions for bash, zsh, fish, or powershell.

Global Flags

FlagDescription
--dry-runPrint the commands that would run without executing them.
-v, --verboseShow verbose output and debug logs.
-q, --quietSuppress non-error output.
--no-colorDisable ANSI color formatting.
--cwd <path>Execute command as if in the specified directory.
--project <name>Limit monorepo execution to a single project name.
--changedOnly run in projects with uncommitted or branch-changed files.
--serialRun monorepo projects sequentially instead of in parallel.
--fail-fastAbort execution immediately on the first project failure.
--jsonOutput result as structured JSON (supported for info, doctor, --explain).
--explain <verb>Print the resolved underlying commands for a specific verb without running them.

Monorepos & Output

In a monorepo, sgl discovers all sub-projects and runs the requested command in parallel across all of them. Use --project to target one, --serial to run them in order, or --changed to limit to files with uncommitted changes.

monorepo usagebash
# Run tests across every sub-project in parallel
$ sgl test

# Only the "api" sub-project
$ sgl test --project api

# Serial execution, stop on first failure
$ sgl build --serial --fail-fast

# Only projects with uncommitted changes
$ sgl lint --changed

Supported Ecosystems

Detected automatically from manifest files - no config required.

EcosystemDetection
Node.jspackage.json
RustCargo.toml
Pythonpyproject.toml, requirements.txt, Pipfile
Gogo.mod
Java / Kotlinpom.xml, build.gradle[.kts]
.NET*.sln, *.csproj
RubyGemfile
Dockerdocker-compose.yml, compose.yaml
Task / MakeMakefile, justfile, Justfile, Taskfile.yml

singularity.toml

Drop a singularity.toml at the project root to override auto-detected commands, add custom scripts, or set environment variables. Generate a starting file with sgl init.

singularity.tomltoml
[project]
name = "api"

[commands]
test = "pytest -x"
dev = ["docker compose up -d db", "uvicorn app:app --reload"]
deploy = "./scripts/deploy.sh"

[env]
DATABASE_URL = "postgres://localhost/dev"

Comparison

Unlike Makefile wrappers or per-language scripts, sgl requires no configuration to get started - detection is its primary mechanism. You can override it when you need to.

sglMakefilemise / just
Zero-config setup✓✗✗
Cross-ecosystem✓✗✓
Monorepo parallel✓✗partial
Built-in override✓N/A✓
Written inRustN/ARust

Uninstall

If you installed via the curl script:

macOS / Linuxbash
rm ~/.local/bin/sgl

If you installed via cargo:

cargobash
cargo uninstall singularitycli
Other projects:/runspace

©2026 singularity - hanx.pro