oraios/serena · error · ValueError
Unknown language '{lang}'. Supported: {all_langs}
Error message
Unknown language '{lang}'. Supported: {all_langs} What it means
serena's `serena project create` (and index) validates each `--language` value by constructing a LanguageServerId enum. If the string is not a registered language-server identifier, a ValueError is raised listing all supported values. This fails fast during project configuration rather than later at language-server startup.
Source
Thrown at src/serena/cli.py:716
:param language: Tuple of language names
:raises FileExistsError: If project.yml already exists
:raises ValueError: If an unsupported language is specified
:return: the RegisteredProject instance
"""
project_root = Path(project_path).resolve()
serena_config = SerenaConfig.from_config_file()
yml_path = serena_config.get_project_yml_location(str(project_root))
if os.path.exists(yml_path):
raise FileExistsError(f"Project file {yml_path} already exists.")
languages: list[LanguageServerId] = []
if language:
for lang in language:
try:
languages.append(LanguageServerId(lang.lower()))
except ValueError:
all_langs = [l.value for l in LanguageServerId]
raise ValueError(f"Unknown language '{lang}'. Supported: {all_langs}")
generated_conf = ProjectConfig.autogenerate(
project_root=project_path,
serena_config=serena_config,
project_name=name,
languages=languages if languages else None,
interactive=True,
)
languages_str = ", ".join([lang.value for lang in generated_conf.language_servers]) if generated_conf.language_servers else "N/A"
click.echo(f"Generated project with language servers {{{languages_str}}} at {yml_path}.")
registered_project = serena_config.get_registered_project(str(project_root))
if registered_project is None:
registered_project = RegisteredProject(str(project_root), generated_conf)
serena_config.add_registered_project(registered_project)
return registered_project
@staticmethodView on GitHub (pinned to 7fcbca7e62)
Solutions
- Run the command again using an exact supported value from the printed Supported list (e.g. python, typescript, go).
- Pass each language as a separate --language flag instead of a comma-separated string.
- Omit --language entirely to let serena auto-detect languages from the project files.
- If the language you need is genuinely missing, upgrade serena or check LanguageServerId in the source for the current list.
Example fix
// before serena project create . --language python3 // after serena project create . --language python // or omit to auto-detect: serena project create .
Defensive patterns
Strategy: validation
Validate before calling
from serena.language_server import LanguageServerId
langs = [l.lower() for l in requested_languages]
valid = {l.value for l in LanguageServerId}
invalid = [l for l in langs if l not in valid]
if invalid:
raise SystemExit(f"Unsupported languages: {invalid}. Supported: {sorted(valid)}") Try / catch
try:
create_project(root, languages=[lang])
except ValueError as e:
if 'Unknown language' in str(e):
print(f'{lang} unsupported; pick from: {[l.value for l in LanguageServerId]}') Prevention
- Always copy language IDs verbatim from the Supported list the error prints.
- Use one --language flag per language, never comma-separated values.
- Prefer auto-detection (omit --language) unless a specific override is required.
When it happens
Trigger: Calling `_create_project` (via `serena project create` or `serena project index`) with `--language` values that don't match a LanguageServerId enum value exactly, e.g. `--language python3`, `--language js`, or `--language TypeScript` when the enum value is lowercase.
Common situations: Typos or aliases not in the enum (python3 vs python, js vs typescript), capitalized language names, passing comma-joined strings instead of repeated flags, or following outdated documentation from an older serena version with different language IDs.
Understand the failure class
Background: Invalid enum value errors: "Unknown type", "Invalid scope", "must be one of" — when a string is not on the library's allowed list — this error's family across 23 libraries.
Related errors
- Internal mode '{from_internal}' not found in {SERENAS_OWN_MO
- Internal context '{from_internal}' not found in {SERENAS_OWN
- Cannot use both fixed_tools and excluded_tools/included_opti
- Unknown language backend '{backend_str}': valid values are {
- Invalid line_ending: {value!r}. Valid values are: {valid}
AI-assisted analysis of oraios/serena@7fcbca7e62 (2026-08-29).
Data as JSON: /api/errors/b801870baa1d4b8c.
Report an issue: GitHub.