{"record":{"id":"922e21402f952ae0","repo":"oraios/serena","slug":"qmlls-qml-language-server-is-not-installed-or-no","errorCode":null,"errorMessage":"qmlls (QML language server) is not installed or not in PATH.\nPlease install Qt 6 and ensure 'qmlls' (or 'qmlls6') is available on your PATH.\nSee: https://doc.qt.io/qt-6/qtqml-tool-qmlls.html","messagePattern":"qmlls \\(QML language server\\) is not installed or not in PATH\\.\nPlease install Qt 6 and ensure 'qmlls' \\(or 'qmlls6'\\) is available on your PATH\\.\nSee: https://doc\\.qt\\.io/qt-6/qtqml-tool-qmlls\\.html","errorType":"exception","errorClass":"FileNotFoundError","httpStatus":null,"severity":"error","filePath":"src/solidlsp/language_servers/qml_language_server.py","lineNumber":49,"sourceCode":"    def __init__(self, config: LanguageServerConfig, repository_root_path: str, solidlsp_settings: SolidLSPSettings):\n        super().__init__(config, repository_root_path, None, \"qml\", solidlsp_settings)\n\n    def _create_dependency_provider(self) -> LanguageServerDependencyProvider:\n        return self.DependencyProvider(self._custom_settings, self._ls_resources_dir)\n\n    class DependencyProvider(LanguageServerDependencyProviderSinglePath):\n        def _get_or_install_core_dependency(self) -> str:\n            \"\"\"\n            Discover the qmlls executable on PATH.\n\n            Tries ``qmlls6`` first (Qt 6+), then falls back to ``qmlls``.\n\n            :return: path to the qmlls executable\n            :raises FileNotFoundError: if qmlls is neither on PATH nor provided via ``ls_path``\n            \"\"\"\n            qmlls_binary = shutil.which(\"qmlls6\") or shutil.which(\"qmlls\")\n            if qmlls_binary is None:\n                raise FileNotFoundError(\n                    \"qmlls (QML language server) is not installed or not in PATH.\\n\"\n                    \"Please install Qt 6 and ensure 'qmlls' (or 'qmlls6') is available on your PATH.\\n\"\n                    \"See: https://doc.qt.io/qt-6/qtqml-tool-qmlls.html\"\n                )\n            return qmlls_binary\n\n        def _create_launch_command(self, core_path: str) -> list[str]:\n            # qmlls communicates via stdio by default; no extra flags are required.\n            return [core_path]\n\n    def _create_base_initialize_params(self) -> dict:\n        \"\"\"\n        Return the language-specific initialize params for the QML language server.\n\n        ``processId``, ``rootPath``, ``rootUri`` and ``workspaceFolders`` are populated by the\n        default ``InitializeParamsBuilder`` and must not be set here.\n        \"\"\"\n        initialize_params = {","sourceCodeStart":31,"sourceCodeEnd":67,"githubUrl":"https://github.com/oraios/serena/blob/7fcbca7e62555ec2287ddb2f083caee805848ea6/src/solidlsp/language_servers/qml_language_server.py#L31-L67","documentation":"The QML language server used here is qmlls, which ships with Qt 6; the library does not download it. The dependency provider looks for 'qmlls6' then 'qmlls' via shutil.which, and raises this FileNotFoundError if neither is on PATH. Note the lookup only checks PATH — the ls_path override in ls_specific_settings.qml is honored by the generic provider layer.","triggerScenarios":"Creating the QML language server on a machine without Qt 6 tools installed, with qmlls installed under a name/location not on PATH (e.g. ~/Qt/Tools/QtDesignStudio/bin or a versioned dir like Qt/6.6/gcc_64/bin), or in a minimal Docker/CI image with no Qt toolchain.","commonSituations":"Qt installed via the online installer without the 'Qt Tools'/qml components; qmlls present but its bin dir not exported to PATH in the current shell/venv; using distro packages that ship qmlls as a separate package (e.g. qt6-qtdeclarative-devel / qt6-declarative-tools); WSL or container without Qt.","solutions":["Install Qt 6 tooling: e.g. apt install qt6-declarative-dev (Debian/Ubuntu), dnf install qt6-qtdeclarative-devel (Fedora), or brew install qt.","Add the Qt bin directory containing qmlls to PATH, e.g. export PATH=\"$HOME/Qt/6.6.0/gcc_64/bin:$PATH\".","If qmlls is installed elsewhere, set ls_specific_settings['qml']['ls_path'] to its full path.","Verify with `which qmlls6 || which qmlls` before creating the server; a plain 'qmlls' on PATH that belongs to Qt 5 won't help — you need a Qt 6 build."],"exampleFix":"// before (Serena config, qmlls outside PATH)\n\"ls_specific_settings\": { \"qml\": {} }\n// after\n\"ls_specific_settings\": { \"qml\": { \"ls_path\": \"/home/user/Qt/6.6.0/gcc_64/bin/qmlls\" } }","handlingStrategy":"validation","validationCode":"import shutil\ncfg = serena_settings.get('ls_specific_settings', {}).get('qml', {})\nif not cfg.get('ls_path') and not (shutil.which('qmlls6') or shutil.which('qmlls')):\n    raise SystemExit(\n        \"qmlls not found. Install Qt 6 (e.g. 'apt install qt6-declarative-dev' or 'brew install qt') \"\n        \"and add its bin dir to PATH, or set ls_specific_settings['qml']['ls_path'].\"\n    )","typeGuard":null,"tryCatchPattern":"try:\n    server = SolidLanguageServer.create('qml', repo_root, settings)\nexcept FileNotFoundError as e:\n    if 'qmlls' in str(e) and 'not installed' in str(e):\n        raise EnvironmentError(\n            'qmlls missing: install Qt 6 tools (https://doc.qt.io/qt-6/qtqml-tool-qmlls.html) '\n            'or set ls_specific_settings[\"qml\"][\"ls_path\"] to the qmlls binary.'\n        ) from e\n    raise","preventionTips":["Verify `which qmlls6 || which qmlls` succeeds in the exact environment (venv/CI/WSL) that launches Serena.","Install the Qt tools package, not just libraries — qmlls ships with Qt 6 tool components.","Add your Qt install's bin dir (e.g. ~/Qt/<version>/<kit>/bin) to PATH in shell startup files.","For non-standard installs, always set ls_specific_settings['qml']['ls_path']."],"tags":["qml","qt","missing-dependency","path","language-server"],"backgroundTag":"executable-not-in-path","analyzedSha":"7fcbca7e62555ec2287ddb2f083caee805848ea6","analyzedAt":"2026-08-29T00:04:09.619Z","schemaVersion":2},"datasetVersion":"2026-08-29T02:17:18.158Z"}