Repository navigation
Releases
Deploy Center 0.10.0
-
Fixed: "Vercel could not be loaded … jq: invalid JSON text passed to --argjson" after a single failed Vercel call. Under macOS's bash 3.2 an empty fallback became
{\}; the list now loads withpartialrows instead of failing, andvercel_callhas a time limit and retries reads (never writes). -
CLI:
deploys plan [--when-green] [--json]shows whatdeploy-changed --yeswould start and roughly what it costs;deploys price set,deploys budget set <usd> [--strict]stopsdeploy-changedover budget unless--force "why". -
CLI: the app's rules (
~/.config/deploys/rules.json) are acted on:deploys rules check, hold rules indeploy-changed/plan,deploy-changed --by-rules, anddeploys schedule daily [HH:MM](opt-in, off by default). -
CLI:
deploys hooks install|uninstall|status(keeps an existing pre-push),verifychecks per project fromdeploy-center.json,autofix --preview(sends nothing), failure classes inautofix status,ai ask,ai slow,watch --timeout. -
CLI safety:
deployrespects the deploy window; observer mode also blocksautodeploy allow/revoke; tab completion never runs project names; a non-integerapprovalsblocks instead of opening the two-person rule;deploys logsis always masked;autodeploy-on --dry-runis only passed to providers that support it. -
Providers: Netlify, Cloudflare, Amplify, DigitalOcean and Coolify follow the status contract, so
watchanddeploy --waitend; contract tests for all eight. Hook URLs over http only for exact localhost. Changed: a Vercel project with no remembered repo is not deployable (repoUnknown: true) instead of deploying from its live link. A Vercel production deploy with--shais refused when the commit is not on the remembered branch (DEPLOYS_VERCEL_ANY_SHA=1to allow). -
Mac app: rule editor, Touch ID or password before risky steps (opt-in), site watch after going live, uptime per project, TLS certificate warning, migration tick before a live deploy, "critical" projects ask for the name, cost estimate and budget in the confirmation, health card, first-start guide, journal numbers (failure causes, monthly report), Spotlight (opt-in), a global hot key, colour-blind mode, quiet hours, project in its own window. A followed deploy resumes after a restart; status and cancel go to the right platform (they always went to Render).
-
iPhone: build log with masked secrets, deploy history, Live Activity, Siri and Shortcuts (read-only), Spotlight, cancel build, Lock Screen and failed-builds widgets; an outage keeps the last rows; QR codes expire after 5 minutes. Changed: the GitHub token goes to the iPhone only with a new switch; it stays on for existing links, new links start off.
-
MCP server: a client without elicitation is refused by default; Claude Code supports it, for Claude Desktop set
DEPLOYS_MCP_CONFIRM=client. New read tools anddeploys_plan. Claude Code plugin 0.3.0. -
Integrations: the GitHub Action can wait for builds (
wait) and hasonly,exclude,deploy: dry-runand a risk gate; notify reaches Teams, Google Chat, Matrix and Pushover. Changed: the example workflows usevars.DEPLOYS_VERCEL_TEAM(renameVERCEL_TEAM). -
CI: release gate, Linux, iOS, Raycast and Docker jobs, app tests in English and German; the website publishes only after a green CI.
-
App: the masker for "Copy for Claude" and prompts knows what the script's masker knows (
x-api-key:, JSON"password": …, cookies, signed URLs, short Render and GitHub tokens, JWTs) and leaves "tokens: 12" alone; both maskers are tested against one list of lines (tests/fixtures/mask/). Settings → iPhone takes a read-only GitHub token of its own for the phone; it wins over the gh CLI's. One reader fordeploys autofix status(rows and Settings). Menus and system texts follow the app language (CFBundleLocalizationsen, de). Tests: the follow deadline on a short clock, and the test build checks concurrency strictly (warnings only). -
Site and docs: Impressum and Datenschutz use the shared stylesheet and the site's top navigation (with Docs and Guides), with sized icons; the Impressum's trademark note names all supported hosts and Anthropic (draft, legal review pending). SECURITY.md: the "What is sent where" table has no duplicate rows and lists the site check after a deploy.
-
App: "Put this live now?" is one sheet for the footer, a row and the palette, with a real "Only when checks are green" checkbox (it was the alert's "don't ask again" toggle). The palette now asks with the same sheet as the window, checkbox included.
-
App: the command palette builds its lines once when it opens (and again when demo mode switches) and orders them once per query, instead of on every keystroke and every store poll.
-
App: the reload button loads every platform of the tab at once; the build log and the details mask names once per load or redraw; the saving picture is rendered once; a row reads its autofix state once.
-
Costs: with a monthly budget set, the chart shows the budget per day and a line says what is left until the month ends (or how the pace compares).
-
App: "Settings → …" in texts is built from the settings tab; a test checks that every
deploycenter://settings/…link names a real tab. -
App: MainWindow.swift is split; the costs sheet, the setup screens and the row have files of their own (no code changed).
-
App logic: the latest 30 messages survive a restart (Application Support); a list that fails with HTTP 401/403 or an expired login asks the doctor again, so the setup view appears; a failed
autofix syncis logged instead of swallowed; Claude's answers render Markdown; Render service types and raw deploy states are translated; the widget's saving uses the same function and day as the costs panel; a new app language reaches the widgets; one rule for "failed" (widget, menu bar, Claude); savings reports moved from the preferences into files, decoded off the main thread; the Claude config is written with sorted keys; "Copy diagnostics" names the script version; one quit/restart dialog; dead code and unused imports gone. -
Tests: the test runner never writes into the real Application Support, Caches or log (
DEPLOYCENTER_DATA_DIR, or a temporary folder for a binary without a bundle); new tests for ticking changed rows, waiting on two branches, the provider list after a failed read, cancellingTool.run, the widget snapshot, allowance dates, the message store and the savings move. -
iPhone app, deploys and rollbacks: "Nothing new to deploy" before a build of the live commit; the rollback question names the commit, its message and date, and the app follows the rollback until the old version is live; a success or error tap when a deploy or rollback ends.
-
iPhone app, list: auto-deploy shown on rows, in the details and as a line above the list; long press for deploy, rollback, open domain, copy the live SHA and the Render dashboard; VoiceOver's "Roll back" asks right there; live and newest commit both shown and copyable; an empty account explains the team id; a refused key (401/403) says so and offers the settings; a private repo without a GitHub token says so.
-
iPhone app, start and network: the last list shows at once while the first load runs; data older than five minutes reloads on return; offline shows "Offline" with the time of the data and reloads when the network is back.
-
iPhone and iPad: ⌘R reload, ⌘, settings, ⌘D deploy the selection; each window keeps its own selection; wide screens open the first project that needs attention.
-
iPhone app, settings: "Test connection" shows the account, team and project count per platform; empty fields say when the Mac's key is used; a note when Background App Refresh is off or Low Power Mode is on. The welcome screen links to creating a Vercel token and a Render API key.
-
iPhone app, QR code: a wrong or old code keeps the camera open with the reason.
-
iPhone app, speed: GitHub reads use ETags (with a token, a 304 does not count against the limit), the second compare pass and the PR lookups run in parallel, the keychain is read once per key, dates use shared formatters; the background refresh has a time budget and shorter retry waits.
-
iPhone app, notes: one note per project and event with a fixed id (no pile-up), more than three become one summary with "+N more".
-
Widgets: a "Demo" tag on made-up numbers; on iPhone the time of the data, orange after six hours; the language comes with the snapshot, read once; the iPhone app reloads widgets only when what they show changed.
-
shared:
DeployRuleholds the building/failed/waiting rule,DeploySnapshot.localizedthe language pick.ios/test.shchecks the rule, PR numbers, rollback targets, ETags and error texts against made-up answers on the Mac. -
ios/build.sh:
--archivesets the build number from the commit count (orBUILD_NUMBER);--runboots an iPhone simulator when none is booted. The app is not offered as an iPad app on Mac or Apple Vision Pro. -
Digest issue:
@login, HTML comments (a fakedeploys-approvemarker) and Markdown links in commit and PR titles are defused; the real approve marker stays the last line. -
notify and digest:
DEPLOYS_TZ(for exampleEurope/Berlin) sets the day of "today" and of the issue title; default UTC. -
Ship-check example: the projects step added no
platformtodeploys <p> json, so waiting commits always showed 0; fixed and run in the tests. It runs on Claude Sonnet 5.5, pins the Action tov0.9.1and has a 15-minute job timeout. -
Examples use one variable name for the Vercel team,
DEPLOYS_VERCEL_TEAM. -
MCP server: its version comes from
package.json(no second copy inserver.mjs);scripts/bump.shno longer editsserver.mjs, and a test checks that the Claude Code plugin and the MCP server carry the same version. -
integrations/lib/projects.sh:changed_projectsasksdeploys changed --jsoninstead of rebuilding the ignore rule. -
VS Code: with no...
Deploy Center 0.9.1
- Settings → General → Language: English, Deutsch or the Mac's language (the default). The app restarts to switch; the widgets follow it.
Notarized by Apple: opens without a warning.
SHA-256 of the zip: 4d8f150d668e8f4e14a64506386f4a56055409cb09ed4e968a2f0390dae23e3a
The CLI on its own (macOS, Linux, CI): curl -fsSL https://deploycenter.app/install.sh | sh or brew install pschmetzer/tap/deploys. SHA-256 of deploys-cli-0.9.1.tar.gz: de99fac35dcb53831a8d1364b88e845bba52b2b4df1339ec5f84a6e4fde4b1ff
Deploy Center 0.9.0
deploys status --jsoncarries the sharedphaseof each project. VS Code extension 0.2.0: every platform, not only Vercel and Render; failed and building fromphase; a name on two platforms is passed asplatform:name; a hint when no project matches the folder.- Observer mode also refuses
guardandautofix --only(without--dry-run); both change something. An approval check on a GitLab-linked Vercel project says that approvals are read from GitHub only. - Command palette: in observer mode (Settings → Team) it offers no deploy, rollback or "deploy all changed", like the window.
- Ask Claude → Explain this failure: its button is now "Fix with Claude", the same as on the row (same caps, setup offer and toast).
- Updates via Sparkle 2: the app reads https://deploycenter.app/appcast.xml once a day (Settings can turn it off) and on "Check for Updates …", accepts a download only with a valid EdDSA signature and the same Developer ID, and installs once no deploy is running. Replaces the old GitHub release check and "Update now". The Homebrew cask says
auto_updates true.
Notarized by Apple: opens without a warning.
SHA-256 of the zip: dd3e37d8beac897a9ad3432447c6ea0aa64369c9211e8e670a7725d6480bff64
The CLI on its own (macOS, Linux, CI): curl -fsSL https://deploycenter.app/install.sh | sh or brew install pschmetzer/tap/deploys. SHA-256 of deploys-cli-0.9.0.tar.gz: 14280e220df670b039c577e1a06d17b5d5a1147b1094a618fe86676902f932ad
Deploy Center 0.8.0
- Mac widgets ship with the app (small: PRs waiting; medium: top projects and the saving). Add them from the widget gallery.
deploys: each platform is one file,providers/vercel.shandproviders/render.sh, behind one contract (docs/PROVIDERS.md). Nothing changes for Vercel and Render users. New:deploys list --json(every project on every platform),deploys providers [--json],deploys providers enable|disable <p>(Vercel and Render are on by default, any later platform is off until turned on), and names asrender:web. Everyjsonentry has aphase(queued, building, ready, failed, canceled).render deploy-json --previewis refused instead of deploying production.providers/hook.sh(generic deploy hook) follows the same contract: off untildeploys providers enable hook, thendeploys hook add|remove|list|deployroute throughdeploys.deploys hook status <name>keeps its JSON; its doctor fields arehookReady,hookStore,hookCurlandhooks.- Auto-deploy guard (
deploys guard, Settings → Auto-deploy guard): every 30 minutes it turns auto-deploy off again wherever it is on without an allowance, and notifies.deploys autodeploy allow <platform> <project>|--all <hours>allows it for a while (emergencies);deploys vercel|render autodeploy-onturns it back on. The first run is a dry run. - Window: each row shows what autofix does ("Claude is fixing", fix PR open/merged, "deploy the fix"), a "Fix with Claude" button on failed rows (
deploys autofix --only), allowance badges, and the count in the menu bar. - Self-update moved to
Updater.swift: checks the folder is writable, swaps with a rollback, accepts only the same Team ID and no downgrade, runs off the main thread, asks before quitting during deploys, cleans up on every path. - Fixed: after a deploy, rows return to idle, so new commits count as waiting again; "today" is the local day, not UTC; notifications are asked for at the first one, not only at the first deploy.
- Fixed: a timeout ends the whole process group; a deploy timeout no longer causes a double deploy; cancel cannot leave a row running forever; a load error keeps the cached list and shows above it.
- Build log: secrets are masked before "Copy for Claude", fewer false error lines, ANSI codes removed; one broken project no longer fails the whole list.
- Journal and saved state live in Application Support; CSV export is safe in spreadsheets.
- UI: demo mode masks names everywhere; one collapsible notice area; settings in sections; Help menu, Dock badge, VoiceOver labels and actions, clearer empty states, raw states like
build_failedtranslated, build log selectable across lines. deploys: a Render read error no longer marks services changed, an unreachable API is an error instead of "Nothing to deploy",changed --platform X --jsonkeeps the filter, only a real missing ancestor counts as rewritten history;--help,--version,where,history,forget-key,deploy --wait; timeouts and retries for Render.- Release:
release.shpasses--repoand--target, checks the tree, can publish an existing build; the cask depends on jq, quits the app on uninstall and explainsbrew trustand--appdir. - Security: Autofix log masking keeps
Authorization: Bearertokens out (they used to pass, and a$1[masked]replacement emptied other matches) and now also masks AWS secret keys, Stripe, GitLab, npm and Google keys, private key blocks,--tokenarguments and*_KEY=values. - Security: a Vercel team id or a temp folder path can no longer run as shell code in
costs,vercel json,render jsonandtriggers; team ids are checked. Project and repo names reachjqas--arg, never inside a filter; JSON from GitHub file names is built byjq. - Security: project names and deploy ids with
/ ? # & % \or control characters are refused before any API call;logstakes digits only for the line count;autofix set-tokenrefuses tokens with spaces or quotes. SECURITY.md: threat model, what is sent where, rules for new code.- GitLab as a source next to GitHub (gitlab.com and self-managed): waiting commits, merged and open merge requests, and
details, throughglaborGITLAB_TOKEN(+GITLAB_HOST). Same JSON as for GitHub;doctorreportsgitlabCliandgitlabLoggedIn. Seedocs/GITLAB.md. - The CLI installs on its own (macOS, Linux, WSL, CI):
curl -fsSL https://deploycenter.app/install.sh | sh(SHA-256 checked,~/.local/bin, sudo only for a prefix that needs it;--prefix,--version,--uninstall) orbrew install pschmetzer/tap/deploys. Releases carrydeploys-cli-<version>.tar.gzandchecksums.txtnext to the app zip. SeeREADME-CLI.md. - Claude Code plugin in
integrations/claude-code/: a skill,/deploys-*commands and a read-only reminder aftergit push; install with/plugin marketplace add Pschmetzer/deploy-center. Seedocs/CLAUDE-CODE.md. providers/amplify.sh: AWS Amplify Hosting, opt-in. Auto-build off per branch, deploy (start-job RELEASE, with--sha), cancel, logs, and rollback by rebuilding an earlier commit, through theawsCLI. Seedocs/providers/amplify.md.- Claude in the app (opt-in, off by default, your own Anthropic API key): Ask Claude in the detail sheet and build log explains a failed build (with Hand to Autofix), writes plain release notes in English or German, and answers "Is this safe to ship?". Settings → Claude in the app: key in the keychain, Verify, model, monthly token cap and usage. CLI:
deploys ai explain|notes|ship <project>. Only masked text is sent; the masker now also hides email addresses. Seedocs/CLAUDE.md. examples/claude-pr-ship-check.yml: on each PR, Anthropic's Claude Code GitHub Action comments "What this ships" fromdeploys changed --json.integrations/mcp/: an MCP server for AI coding agents. Read-only by default (changed,status,explain,notes,logs,doctor); deploy and rollback of one project per call only withDEPLOYS_MCP_ALLOW_DEPLOY=1.- Safe deploys (see
docs/SAFE-DEPLOY.md):deploy-changed --when-green [--wait 30m]deploys only commits whose CI passed (and waits for running checks);deploys verify <project>checks the site after a deploy and rolls back after a countdown;window.jsoncloses deploy windows (--force "why"goes to the journal);deploys risk <project>scores the waiting diff green/yellow/red. New:deploys deploy <project>,deploys ci,deploys window. - App: "Only when checks are green" in the deploy confirmation, "Roll back if the check fails" per project in the details (a countdown notification with Cancel), a warning with "Deploy anyway…" inside a closed deploy window, and a red dot for risky changes.
- Team mode, without a server (
docs/TEAM.md): a shareddeploy-center.jsonin each repo (project → repo/branch, health paths, deploy window, ignored projects, groups, approvals, observers), read withghand cached, merged below this Mac's own files.deploys config [--json]shows each value and where it came from; schema indocs/deploy-center.schema.json. - Observer mode:
DEPLOYS_READONLY=1,~/.config/deploys/readonly(deploys readonly on|off, Settings → Team), or a login inobservers. Every command that changes something is refused; the app hides its deploy buttons and shows "Observer". - Two-person rule (optional per project): a production deploy needs an approving PR review or a
deploy-approved-by:<login>label from someone else, on the exact commit, which is then pinned.--force "reason"overrides and is journaled (deploys team journal). deploys deploy <project>|<group>: one project on either platform, or a group in order, each waiting for the one before to be live.- Fixed: file ages on Linux (
stat), which the start lock and the Vercel team cache depend on. - Window: the tabs come from the enabled providers (
deploys providers --json; Vercel and Render with an older script). One provider has no tabs, two or three a segmented control with "All", four and more a menu; ⌘1, ⌘2 … follow the order, "All" takes the next digit (⌘3 with Vercel and Render, as before). - Settings → Platforms: a switch per provider. Vercel and Render are on; others say "coming soon" until the script reports them, and switching runs
deploys providers enable|disable. - Calmer window: one summary line ("12 PRs waiting · $41 saved") instead of the waiting banner and sparkline; the cost bar is one number that opens a Costs sheet with the chart and "Share the saving"; "updated hh:mm" is in the reload tooltip; rows show one figure and sit under a small repo header instead of "same as above"; the footer has "More" (select all changed ⌘A, clear, preview deploy, history, messages) next to "Deploy N"; the row menu is Deploy, Build log, Open site, More.
- Agent digest (
integrations/digest/): once a day, what waits per project with agent and human commits apart, pull requests and risk hints, as Markdown, an issue and a webhook message with an approve button. An example workflow deploys only the projects a listed person approved (button ordeploy-approvedlabel). deploys details: each commit carries itsCo-Authored-Bytrailers ascoAuthors.- Savings, all marked as estimates (≈) with the method in the JSON:
deploys simulate [--days 30] --jsoncounts pushes to each deploy branch (GitHub) times the project's average build and puts "auto-deploy ≈ X a month" next to "once a day ≈ Y";deploys ledger --jsoncounts the pushes since auto-deploy was turned off that never built, in dollars, Vercel build minutes and Render pipeline minutes (logic inlib/savings.sh). The app has a Simulator sheet (a banner before anything is turned off, and Settings > Costs) and a Ledger ("≈ $X saved since …", per project, skipped pushes, share card). - App: command palette (⌘K). Fuzzy search over the actions (deploy all changed, reload, stop all, journal, settings, costs) and per project deploy,...
Deploy Center 0.7.0
- Build log: a failed last deploy ("Last deploy … build_failed") has its own log button, not only a deploy started from the app.
- Settings: "Check for updates now", and "Update now" downloads the newest release, checks its signature, replaces the app and restarts it.
- Site: legal notice and privacy policy.
Notarized by Apple: opens without a warning.
SHA-256 of the zip: 2df6056cc354010072d1df9430fb34f62be3cdc32095a0fd683b25acb2386070
Deploy Center 0.6.0
Includes everything listed under 0.5.0, which was not published as its own release.
-
Rollback skips an older deploy of the same commit (Vercel and Render), so it really changes what is live.
-
Menu bar: a line when auto-deploy is still on somewhere, and the current provider outages.
-
"Share the saving" under the cost bar: copies a picture and a sentence with your build cost before and since auto-deploy was turned off, without project names.
-
deploys changed --platform vercel|render; the completion names file no longer grows; the login-shell PATH is read once a day instead of at every start. -
deploys explain <project>says why a project is, or is not, counted as having changes. -
Tabs show "35 · 9" (projects · with changes); "Stand" reads "Aktualisiert".
-
release.shrefuses an empty changelog and an already tagged version; issue template "A number is wrong";docs/ZAHLEN.mdexplains the counts. -
Rows of one repo (frontend + backend) stay together; the later ones say "same changes as the row above" instead of repeating commits, oldest commit and open PRs.
-
Fixed: costs, budget and provider outages refresh while the app runs (menu bar), not only at start; status feeds load in parallel.
-
Fixed: the site check no longer holds a build slot of the queue.
-
Fixed: after a deploy run the lists reload; a running deploy on one platform no longer pauses the other.
-
Fixed: a rollback says "rolled back" and a preview "preview is ready" instead of "is live"; "1 Projekt" instead of "1 Projekte".
-
Fixed: every queued deploy waits from its own click; a later selection no longer delays an earlier one.
-
Fixed: the start lock cannot be taken twice at the same moment; Render rate limits (429) are retried (also in the parallel list read) and errors say what to do.
-
Fixed: after a rollback the row no longer claims to be on the newest commit.
-
Fixed: a repo shared by a frontend and a backend counts its PRs and commits once in the banner and the menu bar.
-
Fixed: the banner says how many of the waiting projects are on the open tab.
-
Fixed: a lost network or login is shown during a deploy instead of spinning silently.
-
Fixed: the site check asks three times (fresh Render services answer 502 at first) and treats 401/403 as protected, not broken.
-
deploy-changedstarts Render services through the same lock as the app;triggersasks Render in parallel. -
Build log: failing lines in red, "Jump to the first error", "Errors only", "Copy for Claude".
-
Demo mode (Settings): project names and domains are replaced, for screenshots.
-
CI on GitHub (tests and type-check; no deploys).
-
A wait before a deploy starts (Settings, default 8 s) with "cancel" in the row; "Stop all" in the footer; a summary when a run of several deploys ends.
-
"Copy release notes" in the project details; "Page to check after deploy" per project (e.g. /health).
-
Monthly build budget with a warning at 80 % of the pace; the cost bar also shows under "All".
-
Tab and filters are remembered; the menu bar icon shows building and failed; lists reload after sleep.
-
deploycenter://select?project=nameshows a project (never starts a build). -
The script runs on Linux too (stat, date, base64).
-
Hiding a project can be undone from the message; hidden projects are listed in Settings, one by one.
-
A bell in the footer lists the latest messages; queued rows say "place 2 of 5".
-
Settings: warn when commits wait longer than N days; "Copy diagnostics" (versions only, no names or keys).
-
Deploy history (clock in the footer): every ended deploy with duration, "n of the last 10 failed", CSV copy.
-
A banner when Vercel, Render or GitHub report a problem on their status pages; an empty state for accounts without projects.
-
A build that takes twice as long as usual turns orange.
deploys status --watch. Docs: security, contributing, launchd and deploy-on-label examples. -
deploys diff <project>anddeploys notes <project>(release notes in Markdown). -
A deploy queue (at most N builds at once), a backend before the frontend of the same repo,
cancel, retry, deploy up to a chosen commit, Render with a cleared cache, a lock against
starting a project twice.
Tested against Vercel: a preview build, the lock and following a build. Not yet: the queue
in the app, cancel, Render. -
A daily reminder at a chosen hour (it never deploys by itself); search marks; Shift-click ranges.
-
The code is split into a few files; tests for the script and the app.
-
Project details: the waiting commits with their PRs, files changed, files worth a look
(migrations, lockfiles, env, Dockerfile, workflows), CI of the branch, open PRs with CI. -
The last build log in the app and as
deploys logs <project>. -
Costs over 14 days: per day before and since auto-deploy went off, a month at this pace,
outlier days marked, about how much one build of a project costs. -
Settings (⌘,): reload interval, menu bar, no Dock icon, open at login, notifications, update check.
-
An All tab with both platforms; pin, hide and a note per project.
-
PRs waiting per day as a small line; elapsed time of a running deploy; a check that the site
answers after going live; a note when a newer version is out. -
New commands:
status,watch,logs,open,ignore,completion,details,
github-budget, and--jsonon any command.RENDER_API_KEYworks without a keychain. -
Fixes: a failed Render deploy no longer hides the changes; a Vercel build started elsewhere is
not ticked again; rollback goes to the deploy before the live one; GitHub calls are cached and
stop before the hourly budget runs out; the menu bar stays current with the window closed;
vercelinstalled through nvm, volta or fnm is found. -
Errors are written to
~/Library/Logs/DeployCenter.log.
Notarized by Apple: opens without a warning.
Homebrew: brew install --cask pschmetzer/tap/deploy-center
SHA-256 of the zip: 6aaf77906b37c242bff8e9f62b2c3c781a805e4fb944b5d882af182496575201
Deploy Center 0.4.0
- Counts what waits on GitHub: commits and merged PRs not live, per project and in total,
and open PRs. A menu bar icon with the number. deploys changedanddeploys deploy-changed [--yes];deploys vercel map.- The last lists show at once and are read again every 15 minutes; a notification when a
deploy ends; changed projects first; the waiting commits on GitHub from the context menu.
Signed with a Developer ID and notarized by Apple: it opens without a warning.
SHA-256 of the zip: 8496cb108433354c92da4bf76ffb2dcd6ad2deaf593c51cd6620f7e6b1a4f4ab
Deploy Center 0.3.0
- Build costs: Vercel build spend for the last 7 days as a chart, and per project in each row (from Vercel's billing data).
- Stray build warning: a red banner when something still starts builds after auto-deploy is off: Git or deploy-hook builds on Vercel, push builds on Render, Render Blueprint auto-sync, or GitHub workflows that deploy by themselves.
- CLI:
deploys costs [days],deploys triggers.
Install: unzip, move to Applications; first open via System Settings → Privacy & Security → Open Anyway.
Deploy Center 0.2.0
- Preview deploys (Vercel) and rollback to the previous live deploy (right-click a project).
- New changes now compares the live commit with GitHub's newest commit, not timestamps.
- Universal app: Apple silicon and Intel.
- Fixes: the app could hang on long error output; commands now time out; checkboxes work with VoiceOver and the keyboard; a build skipped by Vercel's Ignored Build Step shows as Skipped.
Install: unzip, move to Applications; first open via System Settings → Privacy & Security → Open Anyway.
Deploy Center 0.1.0
First release.
- Turn off auto-deploy on all Vercel projects and Render services in one click (the repo is remembered first).
- Deploy the newest GitHub commit by hand, one project or many, and follow each deploy until it is live.
- Last deploy, state, and a New changes badge per project; site logos; English and German.
Install: unzip, move Deploy Center to Applications. The app is not notarized yet: on first open go to System Settings → Privacy & Security → Open Anyway. Requires macOS 15+ on Apple silicon.