revenuecat-cli

module
v0.1.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 4, 2026 License: MIT

README ΒΆ


RevenueCat CLI

Subscriptions belong in the terminal, not the dashboard.


Release Β  Downloads Β  Go Β  MIT


$ rc offerings list -o table

LOOKUP_KEY    DISPLAY_NAME        IS_CURRENT
─             ─                   ─
default       Default Offering    true
premium       Premium Tier        false
enterprise    Enterprise Plan     false

Install Β· Quick Start Β· All Commands Β· Scripting Β· Config




🎯 Why

😀 Without rc ⚑ With rc
Open dashboard β†’ Settings β†’ Apps β†’ scroll... rc apps list
Click through 4 screens to create a product rc products create --store-identifier com.app.pro --type subscription --app-id app_xxx
Manually wire products to entitlements rc entitlements attach-products --product-ids prod1,prod2
"Who changed the current offering?" rc offerings list -o table
Export product catalog? Screenshot the UI... rc products list --all -o csv > products.csv
Debug a customer's subscription state rc customers get --customer-id user_12345 --pretty



πŸ“¦ Install

Homebrew

brew tap AndroidPoet/tap
brew install revenuecat-cli

Script

curl -fsSL https://raw.githubusercontent.com/AndroidPoet/revenuecat-cli/main/install.sh | bash

Source

git clone https://github.com/AndroidPoet/revenuecat-cli.git
cd revenuecat-cli && make build

Use revenuecat-cli or the alias rc. Same binary, your choice.




πŸš€ Quick Start

1. Grab your v2 secret key from RevenueCat β†’ API Keys

2. Login and set your project:

rc auth login --api-key sk_your_key_here
rc init --project proj_your_project_id

3. Verify everything:

$ rc doctor

βœ“ Configuration: OK (/Users/you/.revenuecat-cli/config.json)
βœ“ API Key: OK (sk_tes...here)
βœ“ Project ID: OK (proj_your_project_id)
βœ“ API Connectivity: OK (Successfully connected to RevenueCat API)

All checks passed!

4. Go:

rc apps list
rc entitlements list -o table
rc offerings list --pretty



πŸ“– All Commands

πŸ—οΈ Apps β€” 6 commands

Create and manage apps across iOS, Android, Stripe, Amazon, Mac, Roku, and Web.

rc apps list                                            # List all apps
rc apps get --app-id app_xxx                            # Get details
rc apps create --name "My App" --type play_store        # Create
rc apps update --app-id app_xxx --name "New Name"       # Rename
rc apps delete --app-id app_xxx --confirm               # Delete
rc apps api-keys --app-id app_xxx                       # Public API keys

App types: app_store Β· play_store Β· stripe Β· amazon Β· mac_app_store Β· roku Β· web

πŸ“¦ Products β€” 2 commands

rc products list                                        # All products
rc products create --store-identifier com.app.monthly \
  --type subscription --app-id app_xxx                  # Create

Product types: subscription Β· one_time

πŸ”‘ Entitlements β€” 8 commands

The heart of RevenueCat. Full CRUD + product association management.

rc entitlements list                                    # List all
rc entitlements get --entitlement-id entl_xxx            # Get one
rc entitlements create --lookup-key premium \
  --display-name "Premium"                              # Create
rc entitlements update --entitlement-id entl_xxx \
  --display-name "Premium+"                             # Rename
rc entitlements delete --entitlement-id entl_xxx \
  --confirm                                             # Delete

Product wiring:

rc entitlements list-products --entitlement-id entl_xxx                        # See what's attached
rc entitlements attach-products --entitlement-id entl_xxx --product-ids a,b    # Attach
rc entitlements detach-products --entitlement-id entl_xxx --product-ids a      # Detach

🎁 Offerings β€” 3 commands

rc offerings list                                       # All offerings
rc offerings create --lookup-key default \
  --display-name "Default Offering"                     # Create
rc offerings update --offering-id ofrngs_xxx \
  --is-current                                          # Make current
rc offerings update --offering-id ofrngs_xxx \
  --metadata '{"theme":"dark","version":2}'             # Set metadata

πŸ“‹ Packages β€” 4 commands

Packages live inside offerings. They hold the products your paywall displays.

rc packages list --offering-id ofrngs_xxx               # List
rc packages create --offering-id ofrngs_xxx \
  --lookup-key monthly --display-name "Monthly"         # Create
rc packages attach-products \
  --package-id pkg_xxx --product-ids prod1,prod2        # Wire products
rc packages detach-products \
  --package-id pkg_xxx --product-ids prod1              # Unwire

πŸ‘€ Customers β€” 2 commands

rc customers get --customer-id $APP_USER_ID             # Full customer info
rc customers delete --customer-id $APP_USER_ID --confirm

🎨 Paywalls β€” 1 command

rc paywalls create --offering-id ofrngs_xxx

πŸ”§ Utilities β€” 4 commands

rc doctor                                               # Diagnose issues
rc init --project proj_xxx                              # Project config (.rc.yaml)
rc completion zsh > "${fpath[1]}/_rc"                   # Shell completions
rc version                                              # Version info



πŸ–₯️ Output Formats

Every command speaks 6 formats. Pick what fits.

Flag Format Best for
(default) JSON Scripting, jq, APIs
--pretty Pretty JSON Reading in terminal
-o table Aligned columns Quick scanning
-o csv CSV Spreadsheets, exports
-o tsv Tab-separated Unix pipelines
-o yaml YAML Config files
-o minimal First field only Piping IDs
# Same data, different shapes
rc entitlements list                  # [{"id":"entl_xxx","lookup_key":"premium",...}]
rc entitlements list -o table         # ID            LOOKUP_KEY    DISPLAY_NAME
rc entitlements list -o minimal       # entl_xxx
rc entitlements list -o csv           # ID,LOOKUP_KEY,DISPLAY_NAME



πŸ”— Scripting

rc is designed to be piped, parsed, and composed.

# Export your entire product catalog
rc products list --all -o csv > products.csv

# Count entitlements
rc entitlements list --all -o json | jq length

# Check if an offering exists
rc offerings list --all -o minimal | grep -q "default" && echo "exists"

# Get all lookup keys
rc entitlements list --all -o json | jq -r '.[].lookup_key'

# Paginate manually
rc products list --limit 10
rc products list --limit 10 --starting-after prod_xxx

# Or just get everything
rc products list --all



βš™οΈ Configuration

Multiple Profiles

Switch between production, staging, or different projects seamlessly.

rc auth login --api-key sk_live_xxx --name production
rc auth login --api-key sk_test_xxx --name staging --default-project proj_staging
rc auth switch --name staging
rc auth list -o table
rc auth current

Project Config (.rc.yaml)

Drop this in your repo root β€” rc auto-discovers it:

rc init --project proj_xxx --output table
# .rc.yaml
project: proj_xxx
output: table

Environment Variables

Variable Description
RC_API_KEY API v2 secret key β€” overrides profile
RC_PROJECT Project ID
RC_PROFILE Active auth profile
RC_OUTPUT Default output format
RC_DEBUG true to log HTTP requests
RC_TIMEOUT Request timeout (default 60s)

Priority

Flags β†’ Environment variables β†’ .rc.yaml β†’ ~/.revenuecat-cli/config.json




πŸ”’ Security

  • Config stored at ~/.revenuecat-cli/config.json with 0600 permissions
  • API keys masked in rc doctor output
  • Debug mode redacts Authorization headers
  • In CI: use RC_API_KEY env var β€” nothing touches disk



πŸ—οΈ Built With

Cobra
CLI framework
Viper
Config management
GoReleaser
Cross-platform releases
RevenueCat API v2
REST API

Architecture follows playconsole-cli β€” the same patterns, proven at scale with 80+ commands.




🀝 Contributing

make build    # Build
make test     # Test
make lint     # Lint
make help     # All targets

PRs welcome. Open an issue first for major changes.




MIT License

Not affiliated with RevenueCat Inc. RevenueCat is a trademark of RevenueCat Inc.



⭐ Star this repo if rc saved you a trip to the dashboard.


Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL