denoland/deno · error

Deno kernel already exists at {}, run again with `--force` t

Error message

Deno kernel already exists at {}, run again with `--force` to overwrite it

What it means

`deno jupyter --install` writes a kernel spec to <user-data-dir>/kernels/<name>/kernel.json. By default it will not overwrite an existing kernel spec (named 'deno' unless --name was given); if kernel.json already exists and --force was not passed, installation aborts with this error.

Source

Thrown at cli/tools/jupyter/install.rs:152

  maybe_name: Option<&str>,
  maybe_display_name: Option<&str>,
  force: bool,
) -> Result<(), AnyError> {
  let user_data_dir = get_user_data_dir()?;

  let kernel_name = maybe_name.unwrap_or("deno");
  let kernel_spec_dir_path = user_data_dir.join("kernels").join(kernel_name);
  let kernel_spec_path = kernel_spec_dir_path.join("kernel.json");

  std::fs::create_dir_all(&kernel_spec_dir_path).with_context(|| {
    format!(
      "Failed to create kernel directory at {}",
      kernel_spec_dir_path.display()
    )
  })?;

  if kernel_spec_path.exists() && !force {
    bail!(
      "Deno kernel already exists at {}, run again with `--force` to overwrite it",
      kernel_spec_dir_path.display()
    );
  }

  let display_name = maybe_display_name.unwrap_or("Deno");
  let current_exe_path = kernel_exe_path()?.to_string_lossy().into_owned();

  // TODO(bartlomieju): add remaining fields as per
  // https://jupyter-client.readthedocs.io/en/stable/kernels.html#kernel-specs
  let json_data = json!({
      "argv": [current_exe_path, "jupyter", "--kernel", "--conn", "{connection_file}"],
      "display_name": display_name,
      "language": "typescript",
  });

  let f = std::fs::File::create(&kernel_spec_path).with_context(|| {
    format!(

View on GitHub (pinned to 9ad36f7a2c)

Solutions

  1. Re-run with `deno jupyter --install --force` to overwrite the existing spec
  2. Or remove the old kernel dir first: delete <user-data-dir>/kernels/<name>/ (e.g. ~/.local/share/jupyter/kernels/deno/)
  3. Or install under a different name with `--name <other>` to keep both

Example fix

# before
deno jupyter --install   # Deno kernel already exists at ...

# after
deno jupyter --install --force
# or
rm -r ~/.local/share/jupyter/kernels/deno && deno jupyter --install
Defensive patterns

Strategy: validation

Validate before calling

# make kernel install idempotent in setup scripts:
deno jupyter --install --force   # overwrites safely instead of failing

Try / catch

Catch 'Deno kernel already exists'; decide policy — re-run with --force (overwrite) or skip if the existing spec already points at the current deno binary.

Prevention

When it happens

Trigger: Running `deno jupyter --install` a second time; switching Deno versions and reinstalling the kernel; a custom --name colliding with an existing kernel entry.

Common situations: Re-running setup scripts/Dockerfiles that install the kernel on every build; multiple Deno installations sharing one Jupyter user dir.

Related errors


AI-assisted analysis of denoland/deno@9ad36f7a2c (2026-08-20). Data as JSON: /api/errors/1573d94b933195df. Report an issue: GitHub.