Repository navigation
Checkly CLI version 10 makes deploys safer and the CLI predictable for scripts, CI and AI agents.
checkly deployshows a plan of what will change, property by property, before it writes anything. It can write changes made in the Checkly web app back into your code, or refuse to overwrite them.- A deploy no longer runs your checks unless you ask, and it sets every property from your code.
- stdout carries only a command's result, and exit codes tell usage errors, failures and pending confirmations apart.
checkly loginworks anywhere, including over SSH and for AI agents.- Any
checklyruns your project's own installed version. - APIs that were deprecated during 9.x are removed.
npm install --save-dev checkly@latestRead Breaking changes before you upgrade a project or a CI pipeline.
Breaking changes
checkly deploy plans every deploy
Before it writes anything, a deploy now asks Checkly what would change, and then applies exactly that plan. Resources that did not change are no longer written. If someone changes your Checkly account between the plan and the deploy, the deploy is refused. A forced run makes a new plan; a run pinned with --plan-token stops. See Deploy plans below for what the plan shows.
- Use
--no-planto deploy without a plan, as 9.x did: every resource is written. - The first planned deploy of a project, and the first one after a
--no-plandeploy, has nothing earlier to compare with. It writes every existing resource once to set a baseline. Resources that show no difference are marked=and counted underto set a baseline; resources that differ are listed as~updates with their diff. Later deploys show only what changed. - A deploy with nothing to change no longer asks for confirmation, even in CI or agent mode without
--force. It printsNo changes., ends withProject "<name>" is up to date.and exits with code 0.
Checks are no longer scheduled after a deploy unless you ask
In 9.x, every deploy ran all checks right away. In CLI version 10, a deploy schedules no checks unless you pass --schedule-on-deploy. Even then it schedules only the checks the deploy created or updated.
| Flag | What it does |
|---|---|
--schedule-on-deploy |
Turns post-deploy scheduling on. It is off by default. |
--schedule-on-deploy-scope=changed|all |
changed (the default) schedules only the checks the deploy created or updated. all also schedules the unchanged ones, as 9.x did. |
--schedule-on-deploy-threshold=<n|auto> |
Schedules nothing if the deploy would schedule more than n checks. Heartbeat monitors don't count. auto lets Checkly choose (currently 500, and at most 2000). |
--schedule-on-deploy-min-frequency=<n|auto> |
Skips checks that run more often than every n minutes, because they will run again soon. 0 schedules every check. auto lets Checkly choose (currently 10). |
To get the closest match to the 9.x behaviour:
npx checkly deploy --schedule-on-deploy --schedule-on-deploy-scope=all --schedule-on-deploy-min-frequency=0Checkly applies the threshold to every CLI version, so a deploy of more than 500 checks also needs --schedule-on-deploy-threshold.
If you pass a --schedule-on-deploy-* option without --schedule-on-deploy, the deploy fails with an error. This makes scripts that tuned scheduling fail visibly instead of quietly scheduling nothing. After the deploy, the CLI tells you how many checks it did not schedule and why.
A deploy sets every property from your code
In 9.x, a few properties were left alone by a deploy when your code did not set them, so a value set in the Checkly web app survived every deploy. A deploy now sends a value for all of them, and a value that only exists in the web app is reset on your next deploy unless your code sets it:
| Resource | Property | Value when your code does not set it |
|---|---|---|
Checks and CheckGroupV1 |
retryStrategy |
API, browser and multistep checks and CheckGroupV1: one immediate retry in another location, the same retry they got before. Monitors: no retries. PlaywrightCheck: none, because Playwright handles retries. |
| Checks | description, intent, aiAutoRepairEnabled |
No description and no intent; automatic repair follows the account setting. |
| Alert channels | sendRecovery, sendFailure, sendDegraded, sslExpiry, sslExpiryThreshold |
true, true, false, false, 30 |
PrivateLocation |
proxyUrl |
No proxy. |
Dashboard |
customUrl, customDomain, logo, favicon, link, header, description |
Empty. |
MaintenanceWindow |
timezone, repeatEndsAt |
UTC (a time zone set in the web app is reset; if the maintenance is active at the time, the deploy fails until it ends) and no end date. |
A PlaywrightCheck that you remove from its group in code is now also removed from the group in Checkly. Before, it stayed in the group.
The deploy plan shows each value it would reset before you apply it, and in a terminal it offers to write the value into your code first. Because of this, the first plan after upgrading may list many resources as updates, with the note payload format changed (CLI upgrade).
Only results go to stdout
stdout now carries only a command's result: tables, JSON, check results, run summaries and final outcomes such as Successfully deployed …. Everything else goes to stderr: spinners, progress, warnings, hints, next steps, human-readable errors, prompts, and the plan shown before Apply these changes?. A terminal shows both, so nothing changes when you watch the output, but checkly <command> --output json | jq and checkly test > results.txt now get clean output.
init,importandcreate-checklyprint their progress and next steps to stderr.loginprints its URL, code and waiting notes to stderr.login,logout,switch,create-checklyand a login that another command starts now ask questions only when stdin and stderr are terminals. In 9.x,login,logoutandswitchalways asked, andcreate-checklyasked only when stdout was a terminal. Now a piped stdout (| tee log.txt) still gets the questions, but a redirected stderr (2> file) does not.
Exit codes
| Exit code | Meaning | What changed |
|---|---|---|
0 |
Success | checkly test and pw-test no longer exit 0 when they find no checks to run; see below. |
1 |
Failure | checkly init in agent or CI mode now exits 1 when it fails (it exited 0). checkly account plan <key> with an unknown key, cancelling the login account prompt, and a failed skills file read or write now exit 1 (they exited 2). |
2 |
Invalid flag or argument | Invalid flag and argument values, and flags that cannot be combined, now exit 2 across commands (many exited 1). |
3 |
Confirmation required | In agent and CI mode, a command that stops for confirmation (deploy, destroy, checks delete, …) now exits 3 instead of 2. The confirmation_required JSON is unchanged. |
checkly testfails when it finds no checks to run, for example when nothing matches a file filter,--grepor--tags, astriggerandchecks runalready did. Pass--no-fail-on-no-matchingto exit 0 instead.--liststill exits 0.checkly pw-testalso exits 1 when it finds no checks to run.- A second Ctrl+C now stops the CLI with SIGINT (exit status 130 in a shell) instead of exiting with 1.
checkly rulesis removed and exits with 127; see Other removals.
Reports and agent output
- Timed-out checks: a check that the CLI stopped waiting for (
--timeout) is now reported as timed out instead of failed; it may still finish in Checkly. Thelistandcireporters show it with⏱and count it separately,dotprintsT,githubshows⏱️ Timed out, andjsonreports"result": "Timed out". Scripts that look for"result": "Fail"should also match"Timed out", or use the exit code, which is still 1. checkly initin agent mode now prints{ "status": "success", … }or{ "status": "error", "message": … }, likelogin, instead ofsuccess: true | falseanderror.
CI detection
- Jenkins, TeamCity and AWS CodeBuild are now detected as CI. There, a
deploywithout--forceprints the confirmation JSON instead of showing a prompt nobody can answer. CI=false(or0,no,off) now turns off CI mode everywhere, including on GitHub Actions and GitLab CI.- With no reporter configured, the default is now
ciin CI and when an AI agent runs the CLI, andlistotherwise. Agents used to getlistoutside CI. Configs created bycheckly initand the create-checkly boilerplate templates no longer pinreporters: ['list'].
Credentials are fixed once the CLI has authenticated
CHECKLY_API_KEY, CHECKLY_ACCOUNT_ID, CHECKLY_ENV, CHECKLY_API_URL and CHECKLY_MQTT_URL can no longer change during a run. Before, a check file or config that loaded another .env file could switch the account partway through, causing Forbidden errors or requests to a different account. The CLI now keeps the values it authenticated with and prints a warning if one changes. To use another account, set it before the CLI starts: on the command line, in your shell, or in the .env file of the directory you run the CLI from.
AgenticCheck is removed
Agentic Checks are being retired and stop running on December 1, 2026. CLI version 10 no longer includes AgenticCheck, so a project that still defines one fails to load. Use a BrowserCheck or MultiStepCheck with aiAutoRepairEnabled: true instead. Removing an AgenticCheck from your code deletes that check on your next deploy. To keep managing Agentic Checks as code until they stop running, stay on 9.x.
doubleCheck is removed
doubleCheck is no longer accepted on checks, check groups or the checks defaults in checkly.config.ts. Use retryStrategy:
- Replace
doubleCheck: truewithRetryStrategyBuilder.singleRetry({ baseBackoffSeconds: 0, sameRegion: false }). This is one immediate retry from a different region, and also what API, browser and multistep checks get when they set no retry strategy. A baresingleRetry()is not the same: it waits 60 seconds and retries in the same region. - Replace
doubleCheck: falsewithRetryStrategyBuilder.noRetries().
groupId and groupName are removed
Use group instead:
// Before
new ApiCheck('api', { name: 'API', request, groupId: myGroup.ref() })
new PlaywrightCheck('e2e', { name: 'E2E', playwrightConfigPath, groupName: 'My Group' })
// After
new ApiCheck('api', { name: 'API', request, group: myGroup })
new PlaywrightCheck('e2e', { name: 'E2E', playwrightConfigPath, group: myGroup })groupName is also removed from playwrightChecks entries in checkly.config.ts. Pass group there as well, with a group declared in the config or CheckGroupV2.fromId().
shouldFail works only on ApiCheck, UrlMonitor and TcpMonitor
These are the types the Checkly web app supports it for. On any other type, shouldFail is now an error, even shouldFail: false, and so are checks.browserChecks.shouldFail and checks.multiStepChecks.shouldFail in checkly.config.ts. A project-wide checks.shouldFail default now applies only to these three types.
Note
Every other check that inherited shouldFail: true from checks.shouldFail is deployed with false after you upgrade, so its pass/fail result flips. This includes Browser, Multistep and Playwright checks, and all other monitor types. The deploy plan shows this change.
Other removals
These APIs were deprecated in 9.x and are now removed. A removed property that is still passed (from plain JavaScript or through a type cast) is reported as an error with a hint that names the replacement, so it is never dropped silently. A removed method, export or command fails as soon as it is used.
| Removed | Use instead |
|---|---|
ApiCheck localSetupScript / localTearDownScript |
setupScript: { content: '…' } / tearDownScript: { content: '…' }. Check groups keep these properties for now. |
caching in checkly.config.ts |
runner: { cache: { install: { version: '…' } } } in place of caching.dependencyCache.version. CLI versions before 9.1.0 ignore the new setting, so upgrade every environment that runs the CLI first. |
AssertionBuilder.responseTme() |
AssertionBuilder.responseTime() |
checkly rules command |
checkly skills. checkly rules now exits with code 127. |
HeartbeatCheck, TcpCheck (and their …Props types) |
HeartbeatMonitor, TcpMonitor |
Warning
HeartbeatCheck and TcpCheck were never marked as deprecated, so 9.x gave no warning about them. A check file that imports them fails to load.
checkly account usage uses the new usage reports
- The JSON output has changed:
- The summary reports
totals.creditsUsedinstead oftotals.credits.used, and no longer includespercentOfBudget,metersor projections. - The summary and series report
usageTermsIds(a list) instead ofusageTermsId. - Series rows report
creditsUsedand list theiraccountIdandcheckTypeunderdimensions. Run counts are included only with--include runs.intervalandgroupBy(now a list) move to the top level, andwarningsis replaced bycoverage.gaps. termsprints a list in{ data, pagination }, instead of a single term.
- The summary reports
--fromand--tonow select an inclusive UTC date range. Onterms, they select every term that overlaps the range, instead of the one term that covers--to.--check-typeis removed. Use the new--pricing-ruleflag to select charges, orseries --group-by checkTypeto break usage down by check type.--group-bynow accepts several values, such asaccount,checkType.account usage termsnow prints a table by default. The newaccount usage term <id>shows one term in detail.- The new
account usage projections <id>projects a term's credit consumption, replacing the projections that were in the summary.
Upgrade notes
- Warning for checks without a location:
deployandvalidatenow warn about a check that has nolocationsand noprivateLocations, because Checkly would pick a location for it. Set them on the check or its group, or set a default withchecks.locationsorchecks.privateLocationsincheckly.config.ts. This is only a warning: the deploy still goes ahead. --timeoutmeasures run time: incheckly test,triggerandpw-test,--timeoutnow counts from when a check starts running. On large sessions, Checkly can delay the start of a check, and that wait no longer counts. A check that never starts is reported after--timeoutplus 900 seconds.- Stricter TypeScript syntax checks: TypeScript files are now parsed with a native parser (see below). A few mistakes that only
tscused to report now fail whendeploy,testorpw-testbundles the check, for exampleconst xwithout a value orawaitused as a variable name. Code like this would also fail when the check runs. - Reinstall if the parser cannot load: if your
node_moduleslacks the parser's native package (for example afternpm install --omit=optional, or whennode_moduleswas copied from another operating system), TypeScript checks fail with an error that says to reinstall your dependencies. - Malformed
tsconfig.jsonfiles are ignored, for example one with a missing comma, as if the file did not exist.
New features
Deploy plans
- See what changes, property by property. The plan starts with an overview row per changed resource:
+create,~update,-delete,=set a baseline. Under it, each updated resource gets a coloured diff of its construct, in the same formcheckly importwrites, with each property's old lines followed directly by its new lines. Changes to scripts and request bodies appear as text diffs. Secrets are named but never shown. - Review before you apply. An interactive deploy shows the plan and asks
Apply these changes?.--previewprints the plan without deploying and ends with acheckly deploy --plan-token …command that deploys exactly that plan later. The new--dry-runflag prints the plan as JSON for scripts and agents. - Write changes made in Checkly back into your code. If someone edited a resource in the web app, the prompt offers Update my code with the changes made in Checkly. This edits your construct files in place, keeping your file's style. It covers every resource type and writes helpers like
Frequency.EVERY_5M,RetryStrategyBuilderandAssertionBuilder. Then it stops without deploying, so you can review the changes withgit diff. Anything it cannot write safely, such as references, secrets and values built from variables, is listed for you to change by hand. - Refuse to overwrite changes made in Checkly.
--fail-on-driftdeploys nothing and exits 1 when the deploy would overwrite a change made in Checkly since the last planned deploy, such as a property edited in the web app or a resource deleted there. The error lists each affected resource. SetCHECKLY_FAIL_ON_DRIFT=1to turn it on for a whole pipeline, and--no-fail-on-driftto override it. With--preview, it prints the plan and then fails if there is drift;--dry-runignores it. It needs a plan: it cannot be combined with--no-plan, and when Checkly cannot make a plan, the deploy fails instead of going ahead unchecked. Resources that the deploy writes only to set a baseline have nothing earlier to compare with, so they get a warning instead. --prune-unmanaged-relationsdeletes alert channel subscriptions and private location assignments that were added to your checks and groups outside the project. Without it they are kept and listed in the plan.- Code bundles and Playwright snapshots are uploaded only after you confirm the deploy. A preview, a dry run or a cancelled deploy uploads nothing.
Your project's checkly runs every command
Running a global checkly, pnpm dlx checkly or npx checkly@<version> in a project with its own checkly install used to fail with Unable to create a construct … outside a Checkly CLI project. From CLI version 10 on, checkly hands the command to the project's own install, like npx checkly in that directory. When the two versions differ, it prints one line saying which version runs. Set CHECKLY_NO_DELEGATION=1 to keep the command on the CLI you started. If the project's install cannot be started, the CLI says so and runs the command itself.
When the error still happens (with a global CLI older than 10.0.0, CHECKLY_NO_DELEGATION=1, Deno, or a project that resolves more than one checkly install), it now names the installs involved and says what to do.
Login that works anywhere, including for AI agents
checkly login now uses a device code. The CLI shows a URL and a short code, and you approve the login in any browser on any device. Login now works over SSH, in dev containers, in cloud coding sessions and in agent sandboxes. New users can sign up on the same page.
- AI agents get one JSON line with the URL and code to pass on to you.
checkly login --waitlets the agent wait for your approval, so you don't have to tell it you are done. If you have several accounts, the agent gets the list and asks you which one to use. - Logging in from any command: at a terminal, a command that needs a login now logs you in first instead of failing. CI and other runs without a terminal still fail with an error that points to
CHECKLY_API_KEYandCHECKLY_ACCOUNT_ID. - Without a browser: pass
--no-browseror setCHECKLY_NO_BROWSER=1to print the login URL instead of opening a browser. checkly logoutno longer asks for a confirmation that nobody can give (AI agents, CI, scripts). Before, it exited without logging out.
Working with several accounts
- Pick an account per command: setting
CHECKLY_ACCOUNT_IDwhile you are logged in, in your shell or a project's.envfile, runs commands in that account without changing your default.checkly loginno longer refuses to run while it is set, andlogin,switchandwhoamisay when it overrides your default. checkly whoamishows your default account, your other accounts, and where the current account comes from. The new--output jsonflag prints the same information.- Clearer account errors: when the account the CLI uses cannot be accessed with your login or API key, the CLI says which account it used, where it came from (
CHECKLY_ACCOUNT_ID, your login's default), and what to change, instead of a bareForbiddenorNot Found. WhenCHECKLY_ACCOUNT_IDnames an account your login cannot access, the error lists the accounts it can. When you are logged in, "not found" errors name the account that was searched and say how to look in another one. checkly switchwithout a terminal (AI agents, CI) no longer shows a menu that nobody can answer. Agents get the list of accounts so they can ask you which one to use, and other runs get an error that lists them.
Test runs
--max-failuresfortestandtrigger:--max-failures=<n>stops waiting for results oncenchecks have failed. The CLI writes its reports, asks Checkly to cancel the test session, and exits 1, so a broken change fails CI early. You can also setcli.maxFailuresincheckly.config.ts. Only a check's final result counts, so a check that passes on retry never stops the run. Checks that did not finish are reported asNot finished, and thejsonreporter adds astoppedEarlyfield. Cancelling is best effort, so some of those checks may still run in Checkly.--max-failurescannot be combined with--detach, or with--update-snapshotsontest.- Retries and flaky checks:
checkly test,triggerandpw-testnow show how many times a check was retried, as in✔ My check (2 retries), and the GitHub reporter shows the count too. A check that passed only after retrying is also counted as flaky in the summary, and still counts as passed (1 passed, 1 flaky, 1 total). The exit code is unchanged.
Faster TypeScript parsing, and TypeScript 7 support
The CLI now reads TypeScript files with oxc-parser, a native parser. This makes deploy, test and pw-test faster, and they no longer load the TypeScript compiler from your project. Projects that use TypeScript 7 now work, and the deploy plan and write-back don't need TypeScript installed. See the Upgrade notes for the stricter syntax checks.
Constructs
MaintenanceWindowhas new properties:timezone,pauseAllChecks,silenceAlertsTagsandsilenceAllAlerts.tagsis now optional, and a window that sets none of these four ortagsgets a warning, because it affects no checks.- gRPC monitors support FlatBuffers through
grpcConfig.encoding: 'FLATBUFFERS'and a base64-encoded compiled schema ingrpcConfig.bfbsContent. aiAutoRepairEnabledonBrowserCheckandMultiStepChecknow only acceptstrue,falseornull. Other values are reported as errors before the deploy.- Bun 1.4: Playwright check suites can use
Engine.bun('1.4'), orEngine.bun('1')for the latest Bun 1.x available in Checkly. A project that pins Bun 1.4.x, for example in.bun-version, now runs on Bun 1.4 instead of 1.3. Bun 1.5 or later runs on 1.4, with a notice.
Repository links
When no repository URL is configured, deploys and test runs now fall back to the GitHub Actions repository variables and then to the git origin remote. SSH remotes are converted to HTTPS, and credentials are removed. checkly init writes repoUrl into the config it generates.
Fixes
checkly test,triggerandpw-testno longer report a check twice, or end the run early, when its timeout coincides with its result arriving. The timeout also restarts with each retry, so a long series of retries is no longer cut off.checkly test,triggerandpw-testnow retry a failed connection for check results, as intended.- Pressing Ctrl+C during
checkly test,triggerorpw-testno longer crashes the CLI when cancelling the test session fails. checkly deployno longer fails withYour project could not be deployed.at the Verifying deployed state step when the project is briefly locked on the Checkly side. It now waits and tries again up to three times.- The deploy confirmation only says that resources removed from code will be deleted when the deploy actually deletes some.
- A successful deploy no longer crashes when the ping URL of a heartbeat monitor cannot be retrieved. It prints a warning instead.
- A
logicalIdlonger than 255 characters is now reported by validation, naming the construct, instead of failing the whole deploy with a database error. - Checks no longer fail to bundle when a TypeScript file uses an
accessorclass field. checkly apikeeps binary responses byte for byte, so downloaded ZIP files are no longer corrupted. A JSON response that is a plain string ornullis now printed correctly, and--jqgives a clear error for a response that is not JSON.checkly initnow works in an empty folder for AI agents and in CI: it creates apackage.jsoninstead of exiting without doing anything.checkly initnow installs the agent skill when the agent reports a versioned name, as recent Claude Code versions do.- Each construct is now attributed to the file that declares it, not to the first check file that imported it. This affects the source file shown in the deploy plan,
checkly test <file>filtering,--listgrouping, and relativeentrypointpaths for checks declared in shared modules, which are now also looked up next to that module. checkly importround-trips more resources correctly: empty alert settings, zero retry backoff, frequencies that no constant covers, groupconcurrency, and project-level defaults.- In agent mode, the CLI now tells Checkly that its requests come from an AI agent. Checkly uses this to clean up import plans that an agent started and never committed.
All pull requests
Show the 94 pull requests in this release
- fix(cli): install the agent skill when AI_AGENT carries a version suffix by @hlenke in #1485
- ci: run the test workflow on pull requests against any base branch [RED-980] [ship] by @sorccu in #1489
- feat(cli): derive the repo URL from the git remote [ship] by @martzoukos in #1500
- fix(cli): let agents and CI run init in an empty folder by @hlenke in #1483
- fix: preserve binary response bytes in api command by @sbezludny in #1502
- chore(deps): weekly CLI dependency update (2026-10-02) [RED-1005] [ship] by @sorccu in #1503
- fix(constructs): attribute a construct to the file that declares it [ship] by @sorccu in #1491
- feat(deploy): preview every deploy and show the property-level diff [ship] by @sorccu in #1486
- fix(codegen): correct default handling so import round-trips and the deploy preview renders every resource [RED-979] [ship] by @sorccu in #1488
- feat(deploy): print the preview as a plan with an overview, coloured diffs and totals [RED-981] [ship] by @sorccu in #1490
- feat(codegen): render Playwright check suites in the deploy preview [ship] by @sorccu in #1492
- feat(deploy): show the preview before asking to apply, and add --skip-plan [RED-984] [ship] by @sorccu in #1493
- feat(deploy): offer to write changes made in Checkly back into the code [RED-985] [ship] by @sorccu in #1494
- feat(deploy): write frequency, retry strategy, alert policy and assertions back into the code [ship] by @sorccu in #1495
- feat(write-back): write runtimeId and the request of every monitor type [RED-991] [ship] by @sorccu in #1496
- feat(write-back): hold the rule table to every construct prop at build time [RED-992] [ship] by @sorccu in #1497
- feat(write-back): update the code of every resource type, not only checks and groups [RED-997] [ship] by @sorccu in #1498
- feat(deploy): plan a deploy only under --plan [RED-1016] [ship] by @sorccu in #1501
- feat(grpc): support FlatBuffers monitor constructs [RED-800] [ship] by @danielpaulus in #1487
- feat(deploy): say what a first plan writes again, and why [RED-1055] [ship] by @sorccu in #1505
- fix(deploy): list the resources a first plan updates, and say why in one line [RED-1055] [ship] by @sorccu in #1506
- feat(cli): add timezone and pause/silence scope to maintenance windows [RED-1015] [ship] by @shiini2 in #1466
- ci(check-ai-context): comment only on a skills/ mismatch and keep one sticky comment [RED-1057] [ship] by @sorccu in #1507
- ci(check-ai-context): fail on untracked files in skills/ [RED-1061] [ship] by @sorccu in #1508
- feat(cli): add --schedule-on-deploy-threshold to deploy [RED-1080] [ship] by @sorccu in #1509
- feat(cli): device-flow login for agents, remote shells and inline auth [show] by @hlenke in #1484
- fix(constructs): validate automatic repair settings [ship] by @thebiglabasky in #1511
- feat(cli): add --schedule-on-deploy-min-frequency to deploy [RED-1082] [ship] by @sorccu in #1510
- ci(release): support release candidate versions [RED-1099] [ship] by @sorccu in #1512
- feat(deploy)!: plan every deploy by default, with --no-plan to opt out [RED-1100] [ship] by @sorccu in #1513
- feat(constructs)!: restrict shouldFail to ApiCheck, UrlMonitor and TcpMonitor [RED-1104] [ship] by @sorccu in #1514
- feat(constructs)!: remove the AgenticCheck construct [RED-1108] [ship] by @sorccu in #1517
- feat(constructs)!: remove the misspelled AssertionBuilder.responseTme() alias [RED-1113] [ship] by @sorccu in #1518
- feat(cli)!: remove the deprecated checkly rules command [RED-1115] [ship] by @sorccu in #1519
- feat(constructs)!: remove the HeartbeatCheck and TcpCheck aliases [RED-1116] [ship] by @sorccu in #1520
- feat(config)!: remove the caching.dependencyCache.version option [RED-1114] [ship] by @sorccu in #1521
- feat(constructs)!: remove the doubleCheck property [RED-1110] [ship] by @sorccu in #1523
- feat(constructs)!: remove the deprecated groupId and groupName props [RED-1111] [ship] by @sorccu in #1524
- feat(constructs): warn when a deployed check has no location [RED-1117] [ship] by @sorccu in #1525
- feat(constructs)!: remove ApiCheck localSetupScript and localTearDownScript [RED-1112] [ship] by @sorccu in #1522
- feat(deploy)!: schedule only the changed checks after a deploy [RED-1103] [ship] by @sorccu in #1515
- fix(cli): report a check once when its timeout races an in-flight result [RED-1119] [ship] by @hlenke in #1499
- feat(deploy)!: make --schedule-on-deploy opt-in [RED-1120] [ship] by @sorccu in #1526
- fix(cli): exclude server-side scheduling delay from the per-check timeout [RED-814] [ship] by @sorccu in #1421
- fix(cli): name a refused reference the way the construct spells it [RED-1121] [ship] by @sorccu in #1527
- feat(cli): pair the old and new lines of each property in the construct diff [RED-1138] [ship] by @sorccu in #1534
- feat(cli): list the resources a plan writes to set a baseline apart from its updates [RED-1140] [ship] by @sorccu in #1535
- fix(cli): retry a dry-run deploy while the project is busy [RED-1125] [ship] by @sorccu in #1536
- chore(deps): weekly CLI dependency update (2026-10-13) [RED-1137] [ship] by @sorccu in #1537
- fix(cli): only say a deploy deletes removed resources when it does [RED-1156] [ship] by @sorccu in #1539
- fix(cli): print the notice of an update the plan reports by cause alone [RED-1143] [ship] by @sorccu in #1540
- fix(cli): parse dependencies of TypeScript accessor class fields [RED-1158] [ship] by @sorccu in #1541
- perf(cli): parse TypeScript dependencies with oxc-parser [RED-1160] [ship] by @danielpaulus in #1533
- feat(cli): let multi-account users act on another account per command [RED-1122] [ship] by @hlenke in #1528
- fix(cli): remove a PlaywrightCheck from its group when deploy drops it [RED-1173] [ship] by @sorccu in #1544
- fix(cli): send a default retry strategy and always turn doubleCheck off [RED-1174] [ship] by @sorccu in #1545
- feat(cli)!: migrate account usage commands to v2 by @sbezludny in #1542
- test(e2e): speed up device-flow login e2e on Windows by setting SHELL [RED-1187] [ship] by @sorccu in #1546
- fix(cli): await mqtt.connectAsync so connection retries actually run [ship] by @hlenke in #1548
- fix(cli): send the default of an alert channel flag, a proxy URL and dashboard text when unset [RED-1190] [ship] by @sorccu in #1551
- fix(cli): reject construct logicalIds longer than Checkly stores [RED-1161] [ship] by @sorccu in #1547
- feat(constructs)!: a deploy owns a check's intent and automatic repair setting [RED-1193] [ship] by @sorccu in #1553
- feat(constructs): a maintenance window's timezone defaults to UTC [RED-1195] [ship] by @sorccu in #1554
- fix(cli): await heartbeat ping URLs and catch failed session cancels [ship] by @hlenke in #1552
- feat(cli): parse write-back and deploy preview sources with oxc-parser [RED-1162] [ship] by @sorccu in #1543
- feat(cli): declare agent runs via x-checkly-source: AGENT [ship] by @martzoukos in #1412
- test: keep tests from re-initialising the repository through a leaked GIT_DIR [RED-1200] [ship] by @sorccu in #1555
- test(e2e): give the checks get suite room for a slow API response [RED-1202] [ship] by @sorccu in #1556
- test(e2e): kill the login CLI directly instead of its process tree [RED-1142] [ship] by @sorccu in #1538
- fix(cli): pin credentials and endpoints once authentication passes [RED-338] [ship] by @sorccu in #1559
- fix(cli)!: fail test when no checks match, and unify CI detection [ship] by @hlenke in #1558
- chore(deps): weekly CLI dependency update (2026-10-23) [RED-1218] [ship] by @sorccu in #1560
- feat(cli): add --max-failures to test and trigger [RED-1227] [ship] by @sorccu in #1561
- fix(cli): explain inaccessible accounts instead of bare 403/404 errors [RED-1239] [ship] by @sorccu in #1562
- feat(cli): run project commands with the project's own checkly install [RED-757] [ship] by @sorccu in #1563
- fix(reporters): include retry count for unfinished checks on --max-failures by @shafiktanbir in #1566
- test(reporters): cover retry count for checks stopped by --max-failures [RED-1241] [ship] by @sorccu in #1567
- fix(reporters): show retry count for unfinished checks in github reporter [RED-1243] [ship] by @sorccu in #1568
- feat(cli): explain construct errors caused by two checkly installs [RED-1240] [ship] by @sorccu in #1564
- feat(cli): add deploy --fail-on-drift to refuse overwriting changes made in Checkly [RED-1259] [ship] by @sorccu in #1569
- feat(cli)!: rename deploy --prune-relations to --prune-unmanaged-relations [RED-1260] [ship] by @sorccu in #1570
- feat(cli)!: send all non-result output to stderr [RED-1252] [ship] by @hlenke in #1557
- fix(cli): return undefined for empty inline -c= flag in findConfigFlag by @shafiktanbir in #1574
- test(cli): share one command-context mock across command specs [RED-1263] [ship] by @sorccu in #1572
- test(cli): keep maintenance window dates stable across e2e redeploys [RED-1265] [ship] by @sorccu in #1573
- feat(cli)!: exit 3 when a command needs confirmation [RED-1256] [ship] by @sorccu in #1576
- docs: drop the pre-v10 exit code from the confirmation notes [RED-1256] [ship] by @sorccu in #1577
- feat(cli): support Bun 1.4 and Bun 1.x (latest available) engines [RED-907] [ship] by @sorccu in #1578
- fix(cli)!: exit 1 when init fails in agent or CI mode [RED-1255] [ship] by @sorccu in #1579
- refactor(cli): remove the fancy output flag [RED-1261] [ship] by @sorccu in #1580
- fix(cli): keep JSON string and null bodies intact in checkly api [RED-1269] [ship] by @sorccu in #1581
- fix(reporters): report CLI-side timeouts as timed out, not failed [RED-1276] [ship] by @sorccu in #1582
- fix(cli)!: exit 1 for runtime failures reported through this.error [RED-1274] [ship] by @sorccu in #1583
- fix(cli)!: exit 2 for invalid flag and argument values [RED-1277] [ship] by @sorccu in #1584
New contributors
- @shafiktanbir made their first contribution in #1566
Full Changelog: v9.5.0...10.0.0