netlify / netlify/cli

Infinite error loop when using new netlify-cli (Netlify Database)

Open
#8,231 2 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

type: bug
Dominant language
TypeScript
Stars
1.9k
Forks
474
Avg merge
23h 30m
Merged PRs (30d)
53

Description

Describe the bug

This is a new app, attempting to use the new Netlify Database, so I updated to version 26 of netlify-cli.

When running netlify dev, it builds the frontend app, launches the browser, then spews this in a tight loop thousands of times:

› Warning: Error: Netlify CLI has terminated unexpectedly.

› Please report this problem with reproduction steps at https://ntl.fyi/cli-error including the error details below.

This message repeats until I manage to kill the process.

Here is the log (with verbose --debug) just before the error starts repeating.

`netlify dev --debug` output
  VITE v7.3.1  ready in 2566 ms

⠏ Waiting for #custom dev server to be ready on port 4200
  ➜  Local:   http://localhost:4200/
  ➜  Network: use --host to expose
⠋ Waiting for #custom dev server to be ready on port 4200
✔ #custom dev server ready on port 4200
Build step duration: dev.command completed in 3630ms
2026-05-02T18:22:24.995Z router use '/' textParser
2026-05-02T18:22:24.997Z router:layer new '/'
2026-05-02T18:22:24.998Z router use '/' rawParser
2026-05-02T18:22:24.999Z router:layer new '/'
2026-05-02T18:22:24.999Z router use '/' formSubmissionHandler
2026-05-02T18:22:24.999Z router:layer new '/'
2026-05-02T18:22:24.999Z router use '/' loggingMiddleware
2026-05-02T18:22:24.999Z router:layer new '/'
2026-05-02T18:22:25.000Z router:route new '{*splat}'
2026-05-02T18:22:25.000Z router:layer new '{*splat}'
2026-05-02T18:22:25.000Z router:route acl {*splat}
2026-05-02T18:22:25.000Z router:layer new '/'
2026-05-02T18:22:25.001Z router:route bind {*splat}
2026-05-02T18:22:25.001Z router:layer new '/'
2026-05-02T18:22:25.001Z router:route checkout {*splat}
2026-05-02T18:22:25.001Z router:layer new '/'
2026-05-02T18:22:25.001Z router:route connect {*splat}
2026-05-02T18:22:25.001Z router:layer new '/'
2026-05-02T18:22:25.001Z router:route copy {*splat}
2026-05-02T18:22:25.001Z router:layer new '/'
2026-05-02T18:22:25.001Z router:route delete {*splat}
2026-05-02T18:22:25.001Z router:layer new '/'
2026-05-02T18:22:25.001Z router:route get {*splat}
2026-05-02T18:22:25.001Z router:layer new '/'
2026-05-02T18:22:25.001Z router:route head {*splat}
2026-05-02T18:22:25.001Z router:layer new '/'
2026-05-02T18:22:25.001Z router:route link {*splat}
2026-05-02T18:22:25.001Z router:layer new '/'
2026-05-02T18:22:25.001Z router:route lock {*splat}
2026-05-02T18:22:25.001Z router:layer new '/'
2026-05-02T18:22:25.001Z router:route m-search {*splat}
2026-05-02T18:22:25.001Z router:layer new '/'
2026-05-02T18:22:25.001Z router:route merge {*splat}
2026-05-02T18:22:25.001Z router:layer new '/'
2026-05-02T18:22:25.001Z router:route mkactivity {*splat}
2026-05-02T18:22:25.002Z router:layer new '/'
2026-05-02T18:22:25.002Z router:route mkcalendar {*splat}
2026-05-02T18:22:25.002Z router:layer new '/'
2026-05-02T18:22:25.002Z router:route mkcol {*splat}
2026-05-02T18:22:25.002Z router:layer new '/'
2026-05-02T18:22:25.002Z router:route move {*splat}
2026-05-02T18:22:25.002Z router:layer new '/'
2026-05-02T18:22:25.002Z router:route notify {*splat}
2026-05-02T18:22:25.002Z router:layer new '/'
2026-05-02T18:22:25.002Z router:route options {*splat}
2026-05-02T18:22:25.002Z router:layer new '/'
2026-05-02T18:22:25.002Z router:route patch {*splat}
2026-05-02T18:22:25.002Z router:layer new '/'
2026-05-02T18:22:25.002Z router:route post {*splat}
2026-05-02T18:22:25.002Z router:layer new '/'
2026-05-02T18:22:25.002Z router:route propfind {*splat}
2026-05-02T18:22:25.002Z router:layer new '/'
2026-05-02T18:22:25.002Z router:route proppatch {*splat}
2026-05-02T18:22:25.002Z router:layer new '/'
2026-05-02T18:22:25.002Z router:route purge {*splat}
2026-05-02T18:22:25.002Z router:layer new '/'
2026-05-02T18:22:25.002Z router:route put {*splat}
2026-05-02T18:22:25.002Z router:layer new '/'
2026-05-02T18:22:25.002Z router:route query {*splat}
2026-05-02T18:22:25.002Z router:layer new '/'
2026-05-02T18:22:25.002Z router:route rebind {*splat}
2026-05-02T18:22:25.002Z router:layer new '/'
2026-05-02T18:22:25.002Z router:route report {*splat}
2026-05-02T18:22:25.002Z router:layer new '/'
2026-05-02T18:22:25.002Z router:route search {*splat}
2026-05-02T18:22:25.002Z router:layer new '/'
2026-05-02T18:22:25.002Z router:route source {*splat}
2026-05-02T18:22:25.002Z router:layer new '/'
2026-05-02T18:22:25.003Z router:route subscribe {*splat}
2026-05-02T18:22:25.003Z router:layer new '/'
2026-05-02T18:22:25.003Z router:route trace {*splat}
2026-05-02T18:22:25.003Z router:layer new '/'
2026-05-02T18:22:25.003Z router:route unbind {*splat}
2026-05-02T18:22:25.003Z router:layer new '/'
2026-05-02T18:22:25.003Z router:route unlink {*splat}
2026-05-02T18:22:25.003Z router:layer new '/'
2026-05-02T18:22:25.003Z router:route unlock {*splat}
2026-05-02T18:22:25.003Z router:layer new '/'
2026-05-02T18:22:25.003Z router:route unsubscribe {*splat}
2026-05-02T18:22:25.003Z router:layer new '/'
⬥ Functions server is listening on 53617

   ╭─────────────────────── ⬥  ────────────────────────╮
   │                                                   │
   │   Local dev server ready: http://localhost:8888   │
   │                                                   │
   ╰───────────────────────────────────────────────────╯

Using global installation of Deno CLI
Local version of types is up-to-date: 69ea7663762a1800080069da
 ›   Warning: Error: Netlify CLI has terminated unexpectedly.
 ›   
 ›   Please report this problem with reproduction steps at https://ntl.fyi/cli-error including the error details below.
 ›   
 ›       at toError (file:///Users/tcjr/Library/pnpm/global/5/.pnpm/netlify-cli@26.0.0_@types+node@22.16.0_@vercel+blob@1.0.2_encoding@0.1.13_picomatch@4.0.2/node_modules/netlify-cli/dist/utils/command-helpers.js:144:16)
 ›       at logError (file:///Users/tcjr/Library/pnpm/global/5/.pnpm/netlify-cli@26.0.0_@types+node@22.16.0_@vercel+blob@1.0.2_encoding@0.1.13_picomatch@4.0.2/node_modules/netlify-cli/dist/utils/command-helpers.js:155:17)
 ›       at process.<anonymous> (file:///Users/tcjr/Library/pnpm/global/5/.pnpm/netlify-cli@26.0.0_@types+node@22.16.0_@vercel+blob@1.0.2_encoding@0.1.13_picomatch@4.0.2/node_modules/netlify-cli/dist/commands/main.js:71:9)
 ›       at process.emit (node:events:509:28)
 ›       at process._fatalException (node:internal/process/execution:159:25)
 ›       at throwUnhandledRejectionsMode (node:internal/process/promises:394:5)
 ›       at processPromiseRejections (node:internal/process/promises:475:17)
 ›       at processTicksAndRejections (node:internal/process/task_queues:105:32)
 ›   Warning: Error: Netlify CLI has terminated unexpectedly.
 ›   

Then, the above errors appear tens of thousands of times.

The deployed app is working. See it here: https://liblove.netlify.app/

Steps to reproduce
  1. Clone the repo: https://github.com/tcjr/liblove.git
  2. cd liblove
  3. pnpm install
  4. netlify dev
Configuration

netlify.toml contents:

[build]
  command = "pnpm build"
  publish = "dist"
  functions = "netlify/functions"

  # Redirects all traffic to index.html for SPAs like Ember
  [[redirects]]
    from = "/*"
    to = "/index.html"
    status = 200

  ## Settings for Netlify Dev
  ## https://github.com/netlify/cli/blob/main/docs/netlify-dev.md#project-detection
  [dev]
    # We use the special value of '#custom' to let `netlify dev` know not to make
    # any assumptions
    framework = "#custom"
  
    # `netlify dev` runs this command and waits for the targetPort below to be ready.
    # In our Ember app, that happens when Vite does it's thing.
    command = "pnpm run start:ember"
    targetPort = 4200

  ## more info on configuring this file: https://ntl.fyi/file-based-build-config
Environment
  System:
    OS: macOS 15.7.4
    CPU: (8) x64 Intel(R) Core(TM) i5-8257U CPU @ 1.40GHz
    Memory: 28.11 MB / 8.00 GB
    Shell: 5.9 - /bin/zsh
  Binaries:
    Node: 24.3.0 - /Users/tcjr/.volta/tools/image/node/24.3.0/bin/node
    Yarn: 4.1.0 - /Users/tcjr/.volta/tools/image/yarn/4.1.0/bin/yarn
    npm: 11.6.1 - /Users/tcjr/.volta/tools/image/npm/11.6.1/bin/npm
    pnpm: 10.12.4 - /Users/tcjr/Library/pnpm/pnpm
    bun: 1.3.3 - /Users/tcjr/.bun/bin/bun
    Deno: 2.7.14 - /Users/tcjr/.deno/bin/deno
    Watchman: 2025.11.10.00 - /usr/local/bin/watchman

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Reproduce the loop with netlify dev using the supplied liblove repository and netlify.toml. Start with the error path shown in dist/utils/command-helpers.js and dist/commands/main.js, then trace the unhandled failure after the Deno CLI starts. Done means the command reports the failure once or recovers instead of printing it indefinitely.

Written by the indexing model from the issue text.

Assessment

Tech stack
deno, typescript, vite
Domain
cli
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
42/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.