I built a CLI that eliminates README reading forever

I built a CLI that eliminates README reading forever

Leader 5
calendar_todayschedule3 min read
— Originally published at dev.to

title: I built a CLI that eliminates README reading forever
published: true
description: rex detects your project stack and runs the right command. Zero config. One binary. 12 ecosystems.
tags: go, cli, productivity, opensource

cover_image: https://rexrun.dev/logo.png

The problem

Every developer knows this pain:

  1. Clone a repo
  2. Want to run the tests
  3. Open the README
  4. Scroll... scroll... find a "Development" section... maybe
  5. Figure out it's pnpm test (not npm test, not yarn test)
  6. Run it wrong anyway because you needed pnpm install first

Multiply this by every repo you touch. Every PR you review. Every onboarding.

I got tired of it.

The solution: rex

git clone https://github.com/some/repo
cd repo
rex test

That's it. Rex looks at your project files, detects the stack, and runs the correct command. No config. No setup. No reading anything.

How it works

Rex reads files in your project root:

File found Stack detected rex test runs
go.mod Go go test ./...
package.json + pnpm-lock.yaml Node + pnpm pnpm test
Cargo.toml Rust cargo test
pyproject.toml + uv.lock Python + uv uv run pytest
composer.json + artisan PHP + Laravel php artisan test
Gemfile + app/ Ruby + Rails bundle exec rails test
pom.xml Java + Maven mvn test
build.gradle Java + Gradle ./gradlew test
build.zig Zig zig build test
mix.exs Elixir mix test
Makefile Make make test
Justfile Just just test

12 ecosystems. It also detects which package manager you use by looking at lockfiles.

Demo

Watch the video demo

$ cd my-go-project/
$ rex

  my-go-project

  stack  go

  commands
    rex test   go test ./...
    rex run    go run ./cmd/server
    rex build  go build ./...
    rex deps   go mod download
    rex fmt    gofmt -w .
    rex lint   go vet ./...

$ rex test
> go test ./...
ok   github.com/example/app   1.2s

The > arrow always shows exactly what rex will run. Full transparency.

All the verbs

Command What it does
rex test Run tests
rex run Start the app / dev server
rex build Build the project
rex deps Install dependencies
rex clean Remove build artifacts
rex fresh clean, deps, build in sequence
rex fmt Format code
rex lint Lint code
rex clone <url> Clone + detect + install deps in one command
rex init Generate rex.toml for your team
rex doctor Diagnose environment issues

Killer feature: rex clone

rex clone https://github.com/someone/project
# cloning...
# detected: node + pnpm
# deps: pnpm install
# ready! cd project && rex run

From URL to working project in one command. No README needed.

Monorepo support

Rex auto-detects monorepos (packages/, apps/, services/):

$ rex

  my-monorepo (monorepo)

  workspace  3 sub-projects detected

    packages/api         node + pnpm
    packages/web         node + pnpm
    services/auth        go

Team workflow: rex init

rex init
# created rex.toml (go project)

Generates a rex.toml from detected commands. Commit it. Now every teammate runs the same commands without asking.

.env loading

Rex automatically loads .env files before running commands. No extra tools needed.

Why I built this

I maintain projects across Go, Node, Python, and Rust. I context-switch between repos dozens of times per day. The cognitive load of remembering pnpm test vs go test ./... vs cargo test is small individually, but it adds up.

Rex makes every repo feel the same:

rex test   # always works
rex run    # always works
rex build  # always works

It's the muscle memory tax I no longer pay.

Technical details

  • Single binary, no runtime, no dependencies
  • Written in Go, cross-platform
  • Less than 50ms startup, faster than your shell prompt
  • Zero network calls, fully offline
  • Correct exit codes, works in CI
  • Shell completions for bash, zsh, fish
  • Apache 2.0 license
  • Mentioned in Awesome Go

Install

# Homebrew (macOS/Linux)
brew tap rexrun-dev/tap && brew install rex

# Go
go install rexrun.dev/rex/cmd/rex@latest

Or grab a binary from GitHub Releases.

If this solves a pain you've felt, star the repo. If you want a stack added, open an issue.

1 Comment

0 votes
🔥 Join developers growing publicly
Share your knowledge, build in public, and grow your developer presence with a global community.

More Posts

How I Built a React Portfolio in 7 Days That Landed ₹1.2L in Freelance Work

Dharanidharan - Feb 9

I Wrote a Script to Fix Audible's Unreadable PDF Filenames

snapsynapseverified - Apr 20

I’m a Senior Dev and I’ve Forgotten How to Think Without a Prompt

Karol Modelskiverified - Mar 19

The Sovereign Vault — A Comprehensive Guide to Protocol-Driven AI

Ken W. Algerverified - Jun 4

TypeScript Complexity Has Finally Reached the Point of Total Absurdity

Karol Modelskiverified - Apr 23
chevron_left

Related Jobs

View all jobs →

Commenters (This Week)

4 comments
1 comment
1 comment

Contribute meaningful comments to climb the leaderboard and earn badges!