Textualize/textual · warning · LanguageDoesNotExist

tree-sitter is available, but no built-in or user-registered

Error message

tree-sitter is available, but no built-in or user-registered language called {language!r}.
Ensure the language is installed (e.g. `pip install tree-sitter-ruby`)
Falling back to plain text.

What it means

Raised by TextArea._set_document when tree-sitter is installed, but the requested language name is neither user-registered (via TextArea.register_language / a syntax) nor available via tree_sitter.get_language. The message notes it falls back to plain text and suggests installing the language, e.g. pip install tree-sitter-ruby.

Source

Thrown at src/textual/widgets/_text_area.py:1147

                language available in the current environment (e.g. use `python` for `tree-sitter-python`).
                If None, the document will be treated as plain text.
        """
        self._highlight_query = None
        if TREE_SITTER and language:
            if language in self._languages:
                # User-registered languages take priority.
                highlight_query = self._languages[language].highlight_query
                document_language = self._languages[language].language
                if document_language is None:
                    document_language = get_language(language)
            else:
                # No user-registered language, so attempt to use a built-in language.
                highlight_query = self._get_builtin_highlight_query(language)
                document_language = get_language(language)

            # No built-in language, and no user-registered language: use plain text and warn.
            if document_language is None:
                raise LanguageDoesNotExist(
                    f"tree-sitter is available, but no built-in or user-registered language called {language!r}.\n"
                    f"Ensure the language is installed (e.g. `pip install tree-sitter-ruby`)\n"
                    f"Falling back to plain text."
                )
            else:
                document: DocumentBase
                try:
                    document = SyntaxAwareDocument(text, document_language)
                except SyntaxAwareDocumentError:
                    document = Document(text)
                    log.warning(
                        f"Parser not found for language {document_language!r}. Parsing disabled."
                    )
                else:
                    self._highlight_query = document.prepare_query(highlight_query)
        elif language and not TREE_SITTER:
            # User has supplied a language i.e. `TextArea(language="python")`, but they
            # don't have tree-sitter available in the environment. We fallback to plain text.

View on GitHub (pinned to 06dbeef4bb)

Solutions

  1. Install the matching tree-sitter language package: e.g. `pip install tree-sitter-ruby`.
  2. Use the exact language name Textual/tree-sitter expects (e.g. 'python', 'javascript', 'go' — not 'golang').
  3. Register a custom language/query pair with TextArea.register_language if using a non-bundled grammar.
  4. Note the widget still works as plain text after the error; fix packaging to get highlighting.

Example fix

# before (env lacks the package)
TextArea.code_editor(code, language='go')
# after
# pip install tree-sitter-go
TextArea.code_editor(code, language='go')
Defensive patterns

Strategy: fallback

Validate before calling

from textual.widgets.text_area import TextArea
name = {'golang': 'go'}.get(lang, lang)
if TextArea is using tree-sitter and not registered/installed: fallback to plain 'text'

Try / catch

try:
    TextArea.code_editor(text, language=lang)
except LanguageDoesNotExist:
    TextArea.code_editor(text)  # plain text

Prevention

When it happens

Trigger: TextArea.code_editor('ruby', language='ruby') without `pip install tree-sitter-ruby`; using a language name that doesn't match tree-sitter conventions (e.g. 'golang' vs 'go', 'js' vs 'javascript').

Common situations: Missing tree-sitter language packages in the environment, Docker/CI images without the language wheels, name mismatches with tree-sitter package naming, or Textual version changes to bundled languages.

Related errors


AI-assisted analysis of Textualize/textual@06dbeef4bb (2026-08-27). Data as JSON: /api/errors/75f2a25d46db38fe. Report an issue: GitHub.