cascade_cli 0.1.11 copy "cascade_cli: ^0.1.11" to clipboard
cascade_cli: ^0.1.11 copied to clipboard

Official Cascade CLI for cascadeci.com — login, logout, init, match, doctor. Sealed Flutter CI client; see README for usage and how to support the project.

Cascade CLI #

Cascade

Official CLI for cascadeci.com
Sealed Flutter CI — ship releases with one commit tag.
Store credentials stay in GitHub secrets. Lanes stay in the Cascade dashboard.

pub package Cascade site Guide


Why Cascade? #

Most Flutter CI dumps Play / App Store credentials into Actions YAML or sprawling workflows. Cascade flips that:

Without Cascade With Cascade
Editable workflow owns every secret name Sealed workflow — tampering is rejected
Store keys often live next to CI scripts Credentials stay in GitHub secrets (opaque slots)
Intent buried in custom scripts Intent in a commit tag + dashboard lanes
Guess whether a lane ran Status + optional APK email from the control plane

Cascade is free. The CLI is the thin client that logs you in, seals your project, and keeps CI honest.


Quick start #

# 1. Install
dart pub global activate cascade_cli

# 2. Sign up at https://cascadeci.com (email OTP), then:
cascade login

# 3. In your Flutter app root:
cascade init
cascade doctor

Then fill secrets, push them to GitHub with gh, enable lanes in the dashboard, commit the sealed files, and push.

# Fill cascade.secrets.env (gitignored), then:
gh auth login
set -a && source cascade.secrets.env && set +a
# run the gh secret set lines from cascade.secrets.md

git add cascade.project.yaml .github/workflows/cascade.yml \
  cascade.secrets.env.example cascade.secrets.md
git commit -m "Add Cascade CI"
git push

Installation #

Requirements #

Need Notes
Dart SDK ≥ 3.5 or Flutter SDK Runs the cascade binary
Account on cascadeci.com Real email + OTP (no disposable inboxes)
Flutter project Run cascade init at the app root (pubspec.yaml)
GitHub repo + Actions Hosts the sealed workflow
gh CLI Push opaque secret slots

Activate #

dart pub global activate cascade_cli

Ensure pub’s global bin directory is on your PATH (Dart prints it after activate). Verify:

cascade --help

Upgrade anytime with the same activate command.

Command vs package: you install package cascade_cli, then run the command cascade.


Commands #

Command What it does
cascade login Browser / device approval against cascadeci.com
cascade logout Sign out / switch accounts (clears ~/.cascade/config.json)
cascade init Link app, write seal + sealed workflow + secrets guide
cascade match Auto fastlane match: private git certs repo + Apple API from cascade.secrets.env
cascade doctor Local health check (login, files, readiness)
cascade --help Usage

Step-by-step #

1 · Create your Cascade account #

  1. Open cascadeci.com/register
  2. Choose Solo or Organization and complete email OTP
  3. You do not need to create an app in the dashboard first — cascade init creates or links it

2 · Login #

cascade login

To switch accounts:

cascade logout
cascade login

Approve the device in the browser. The CLI stores a session token at:

~/.cascade/config.json

Never commit that file. Re-run cascade login on a new machine or after the token expires (web sessions last 8 hours; CLI tokens are separate).

3 · Init (Flutter app root) #

cd /path/to/your_flutter_app
cascade init

What init writes

File Purpose Commit?
cascade.project.yaml Opaque project seal (CI auth) Yes
.github/workflows/cascade.yml Sealed thin workflow Yes — do not hand-edit
cascade.secrets.env.example Safe template Yes
cascade.secrets.md gh secret set push commands Yes
cascade.secrets.env Your real values No (gitignored)

Flags

Flag When to use
--name MyApp Display name for a new Cascade app
--new Force a brand-new app (skip reuse by package / bundle)
--pick Interactively choose when several apps match
cascade init
cascade init --name Roomround
cascade init --pick
cascade init --new --name ExperimentalBuild

4 · Secrets (opaque slots) #

Store credentials live in GitHub Actions secrets, never in Cascade’s database. Filling cascade.secrets.env alone is not enough — Actions cannot read your laptop.

  1. Edit cascade.secrets.env (local only, gitignored)
  2. Authenticate GitHub CLI once
  3. Source the file and run the gh secret set commands from cascade.secrets.md
# 1) fill cascade.secrets.env — only keys for lanes you enable
# example:
# CASCADE_NOTIFY_EMAILS=you@example.com

gh auth login

set -a
source cascade.secrets.env
set +a

# 2) copy the Push block from cascade.secrets.md, e.g.:
# gh secret set c_… --body "$CASCADE_NOTIFY_EMAILS"

gh secret list
cascade doctor

Use only the opaque slots from your project guide. Do not invent secret names. Do not commit cascade.secrets.env.

iOS (TestFlight / App Store)

Skip until you enable those lanes. You need both an App Store Connect API key (upload) and fastlane match (signing). Agencies do not need the client’s Apple ID password.

  1. Account Holder enables App Store Connect API (Request Access) and creates a Team key — or sends you Key ID, Issuer ID, and .p8.
  2. Install Fastlane and set up match once on a Mac:
brew install fastlane
gh auth login   # once

# Fill APP_STORE_CONNECT_API_* in cascade.secrets.env first:
cascade match
# auto: private cascade-certs-* repo, Matchfile, MATCH_PASSWORD + MATCH_GIT_AUTH, match appstore

Details: cascadeci.com/docs#ios

5 · Enable lanes #

In the Cascade dashboard:

  • Open your app
  • Enable only the deliveries you need (email, Play tracks, TestFlight, production, …)
  • Closed lanes are denied at job-plan time, even if a commit tag asks for them

6 · Doctor #

cascade doctor

Run after init, after changing secrets, or when CI looks wrong. Fix anything it reports before you push.

7 · Ship with a commit tag #

Push a commit (tag optional). Cascade reads the leading intent; the matching dashboard lane must be on.

Commit intent Typical outcome
(no tag) Default: APK + email (when email lane is on)
[test-android-internal] Play internal testing
[test-android-closed] Play closed testing
[test-android-open] Play open testing
[test-ios] TestFlight
[build-apk] APK only
[build-ios] IPA only
[release-android-partial] Production partial rollout
[release-android-full] Production full rollout
[release-ios] App Store

Example:

git commit -m "[build-apk] internal smoke"
git push

Results show on the app page and in notify email (including APK download links when configured).


How it fits together #

  You (CLI)                 cascadeci.com              GitHub Actions
  ─────────                 ─────────────              ──────────────
  cascade login  ─────────►  device approve
  cascade init   ─────────►  create / link app
                 ─────────►  write seal + sealed YAML
  fill cascade.secrets.env  ──source──►  gh secret set (opaque)
  enable lanes   ─────────►  dashboard toggles
  git push       ────────────────────────────────►  sealed workflow runs
                             ◄── job plan / status ──
                             ──► email / APK link
  • Sealed workflow — checksummed. Edits → WORKFLOW_TAMPERED.
  • Project seal — never shown in the dashboard UI; lives in cascade.project.yaml.
  • Lanes — product control on Cascade; CI asks the control plane what is allowed.

Tips & troubleshooting #

Situation What to do
cascade not found Add pub global bin to PATH, re-open the terminal
Login opens wrong host Delete ~/.cascade/config.json, run cascade login again (recent CLI ignores dead localhost)
Green on GitHub, empty dashboard Actions must reach https://cascadeci.com (not localhost)
Lane denied Enable that lane on the app page, then re-push / re-run
Secrets missing Fill cascade.secrets.env → source it → gh secret set lines from cascade.secrets.md → cascade doctor
fastlane: command not found brew install fastlane, new terminal, then cd ios && fastlane match init
App Store Connect “Request Access” greyed out Only Account Holder can enable API once; they send Key ID / Issuer ID / .p8 — not their password
Workflow edited Restore official YAML via re-init; do not patch by hand

Full product onboarding: cascadeci.com/guide · cascadeci.com/docs


Support Cascade #

Cascade stays free — all Flutter delivery lanes, no paywalls. Running the control plane (API, email, artifact storage) and maintaining this package still costs real money.

If Cascade helps you ship, you can support the project:

Thank you for keeping Cascade available for Flutter teams.


Product cascadeci.com
Guide cascadeci.com/guide
Docs cascadeci.com/docs
Support cascadeci.com/support
Package pub.dev/packages/cascade_cli
Issues GitHub issues

License #

MIT © Cascade

0
likes
0
points
1.54k
downloads

Publisher

verified publishercascadeci.com

Weekly Downloads

Official Cascade CLI for cascadeci.com — login, logout, init, match, doctor. Sealed Flutter CI client; see README for usage and how to support the project.

Homepage
Repository (GitHub)
View/report issues

License

unknown (license)

Dependencies

args, http, path

More

Packages that depend on cascade_cli