oraios/serena · error · FileNotFoundError

verible-verilog-ls not found at {executable_path}

Error message

verible-verilog-ls not found at {executable_path}

What it means

After locating (or auto-downloading) the verible dependency, the SystemVerilog LS checks that the expected binary exists at `deps.binary_path(verible_ls_dir)`. If it was still missing the library downloads/extracts `deps.install(verible_ls_dir)`; if the binary is STILL absent after that, this FileNotFoundError is raised. It indicates the download/extract produced a layout that does not contain the binary at the expected path (e.g. binary_name path mismatch inside the archive) or the install silently failed.

Source

Thrown at src/solidlsp/language_servers/systemverilog_server.py:143

            if dep is None:
                raise FileNotFoundError(
                    "verible-verilog-ls is not installed on your system.\n"
                    + "Please install verible using one of the following methods:\n"
                    + "  conda:      conda install -c conda-forge verible\n"
                    + "  Homebrew:   brew install verible\n"
                    + "  GitHub:     Download from https://github.com/chipsalliance/verible/releases\n"
                    + "See https://github.com/chipsalliance/verible for more details."
                )

            verible_ls_dir = os.path.join(self._ls_resources_dir, "verible-ls")
            executable_path = deps.binary_path(verible_ls_dir)

            if not os.path.exists(executable_path):
                log.info(f"verible-verilog-ls not found. Downloading from {dep.url}")
                _ = deps.install(verible_ls_dir)

            if not os.path.exists(executable_path):
                raise FileNotFoundError(f"verible-verilog-ls not found at {executable_path}")

            os.chmod(executable_path, 0o755)
            return executable_path

        def _create_launch_command(self, core_path: str) -> list[str]:
            return [core_path]

    def _create_base_initialize_params(self) -> dict:
        initialize_params = {
            "locale": "en",
            "capabilities": {
                "textDocument": {
                    "synchronization": {"didSave": True, "dynamicRegistration": True},
                    "completion": {
                        "dynamicRegistration": True,
                        "completionItem": {"snippetSupport": True},
                    },
                    "definition": {"dynamicRegistration": True},

View on GitHub (pinned to 7fcbca7e62)

Solutions

  1. Delete the `<ls_resources_dir>/verible-ls` directory to force a clean re-download and re-extract, then retry.
  2. Check logs for the download URL (dep.url) and verify it is reachable — proxy/VPN/firewall often blocks GitHub release downloads; also confirm allowed_hosts covers the redirect target.
  3. Verify the archive layout matches binary_name (`verible-<version>/bin/verible-verilog-ls`); if the verible release layout changed, pin a version whose layout matches.
  4. Run the extraction manually (tar -xzf / unzip) to inspect where the binary actually lands and compare with the expected binary_path.
  5. Check disk space and write permissions on the resources directory.

Example fix

// before: stale/partial install
rm -rf  # (do nothing, error repeats)
// after
cd ~/.solidlsp/resources && rm -rf verible-ls
# restart session -> fresh download + extraction
Defensive patterns

Strategy: retry

Validate before calling

import os
expected = os.path.join(resources_dir, "verible-ls", "verible-%s" % verible_version, "bin",
                        "verible-verilog-ls" + (".exe" if os.name == "nt" else ""))
if not os.path.exists(expected):
    shutil.rmtree(os.path.join(resources_dir, "verible-ls"), ignore_errors=True)  # force clean re-download

Try / catch

try:
    server = SolidLSP(systemverilog_config)
except FileNotFoundError as e:
    if "not found at" in str(e) and "verible-verilog-ls" in str(e):
        shutil.rmtree(verible_ls_dir, ignore_errors=True)
        server = retry_start()  # clean re-download + extract
    else:
        raise

Prevention

When it happens

Trigger: Starting the SystemVerilog LS when: the download from dep.url fails or is interrupted, archive extraction does not create `<verible-ls>/verible-<version>/bin/verible-verilog-ls`, binary_name in the RuntimeDependency does not match the archive layout, or a previous partial install left a corrupt verible-ls directory so the pre-check passed but files are missing.

Common situations: Network/proxy blocking download from github.com/chipsalliance releases or allowed_hosts; GitHub redirecting to a host not in VERIBLE_ALLOWED_HOSTS; checksum/layout change in a newer verible release tarball breaking the binary_name assumption; disk-full or permission error during extraction; stale partially-extracted verible-ls dir.

Related errors


AI-assisted analysis of oraios/serena@7fcbca7e62 (2026-08-29). Data as JSON: /api/errors/60019f3c0b5d8929. Report an issue: GitHub.