{"record":{"id":"1513e6c1421adb08","repo":"oraios/serena","slug":"crystalline-crystal-language-server-is-not-insta","errorCode":null,"errorMessage":"Crystalline (Crystal language server) is not installed or not in PATH.\nPlease install it from https://github.com/elbywan/crystalline\nand make sure the 'crystalline' binary is available on your PATH.","messagePattern":"Crystalline \\(Crystal language server\\) is not installed or not in PATH\\.\nPlease install it from https://github\\.com/elbywan/crystalline\nand make sure the 'crystalline' binary is available on your PATH\\.","errorType":"exception","errorClass":"RuntimeError","httpStatus":null,"severity":"error","filePath":"src/solidlsp/language_servers/crystal_language_server.py","lineNumber":60,"sourceCode":"            config,\n            repository_root_path,\n            ProcessLaunchInfo(cmd=crystal_ls_path, cwd=repository_root_path),\n            \"crystal\",\n            solidlsp_settings,\n        )\n        self._initialization_timestamp: float | None = None\n\n    @staticmethod\n    def _find_crystalline() -> str:\n        \"\"\"\n        Find the Crystalline executable on PATH.\n\n        :return: path to the Crystalline executable\n        :raises RuntimeError: if Crystalline is not found\n        \"\"\"\n        path = shutil.which(\"crystalline\")\n        if path is None:\n            raise RuntimeError(\n                \"Crystalline (Crystal language server) is not installed or not in PATH.\\n\"\n                \"Please install it from https://github.com/elbywan/crystalline\\n\"\n                \"and make sure the 'crystalline' binary is available on your PATH.\"\n            )\n        return path\n\n    def _wait_for_compilation(self) -> None:\n        \"\"\"\n        Wait for Crystalline to finish its initial compilation.\n\n        Crystalline compiles the project on startup using the Crystal compiler.\n        Definition requests will fail if sent before compilation completes.\n        \"\"\"\n        if self._initialization_timestamp is None:\n            return\n\n        elapsed = time.time() - self._initialization_timestamp\n        remaining_delay = max(0, _MIN_COMPILATION_DELAY - elapsed)","sourceCodeStart":42,"sourceCodeEnd":78,"githubUrl":"https://github.com/oraios/serena/blob/7fcbca7e62555ec2287ddb2f083caee805848ea6/src/solidlsp/language_servers/crystal_language_server.py#L42-L78","documentation":"Raised by _find_crystalline when shutil.which('crystalline') returns None, i.e. the Crystalline language server binary is not installed or not on PATH. Unlike other servers in this library, Crystalline is not auto-downloaded, so the user must install it themselves.","triggerScenarios":"Instantiating the Crystal language server (CrystalLanguageServer.__init__) on a machine where no `crystalline` executable is resolvable via PATH.","commonSituations":"Fresh machines/CI containers without Crystal tooling, crystalline installed but not in the PATH of the process (e.g. installed in ~/.local/bin or via asdf not activated in the service environment), or the binary named differently after a manual build.","solutions":["Install crystalline (download a release binary from https://github.com/elbywan/crystalline/releases or build with `shards build`)","Place/symlink the `crystalline` binary into a directory on PATH (e.g. /usr/local/bin)","Verify with `which crystalline` in the same environment that runs the library","If using a version manager, ensure its env vars are loaded for the service user"],"exampleFix":"// before\n$ which crystalline # (nothing)\n// after\ncurl -L https://github.com/elbywan/crystalline/releases/latest/download/crystalline-x86_64-unknown-linux-gnu -o /usr/local/bin/crystalline\nchmod +x /usr/local/bin/crystalline\nwhich crystalline # /usr/local/bin/crystalline","handlingStrategy":"validation","validationCode":"import shutil\ndef ensure_crystalline() -> str:\n    path = shutil.which(\"crystalline\")\n    if path is None:\n        raise SystemExit(\n            \"Install crystalline from https://github.com/elbywan/crystalline \"\n            \"and put it on PATH before starting the Crystal language server\"\n        )\n    return path\n","typeGuard":"def crystalline_available() -> bool:\n    import shutil\n    return shutil.which(\"crystalline\") is not None\n","tryCatchPattern":"try:\n    server = CrystalLanguageServer(repo_path)\nexcept RuntimeError as e:\n    if \"Crystalline\" in str(e):\n        install_crystalline_from_release()  # download binary into /usr/local/bin\n        server = CrystalLanguageServer(repo_path)\n    else:\n        raise\n","preventionTips":["Install crystalline in your dev container / CI image as a setup step","Ensure version-manager environments (asdf, mise) are activated for service users","Add `which crystalline` to preflight checks before starting LSP sessions","Symlink manually built binaries into a standard PATH directory"],"tags":["crystal","missing-binary","path","dependency-setup"],"backgroundTag":"binary-not-in-path","analyzedSha":"7fcbca7e62555ec2287ddb2f083caee805848ea6","analyzedAt":"2026-08-29T00:04:09.619Z","schemaVersion":2},"datasetVersion":"2026-08-29T02:17:18.158Z"}