Citry language server
citry-lsp brings Citry template diagnostics, completion, hover, navigation,
symbols, references, and formatting to editors that support the Language Server
Protocol.
It understands templates written inside Python, standalone citry-html
documents, and template files owned by registered components. It can work
without loading an app, while a project-aware installation also understands
your registered components and their Python declarations.
Install in your project
Install the server in the same Python environment as the Citry project:
python -m pip install citry-lsp
The 0.1.x server supports Citry 0.4.x and Python 3.10 through 3.14. It installs
the compatible Citry runtime, pygls, and the supported ty analyzer
automatically.
Your editor should launch this command over stdio:
citry-lsp
For an isolated syntax-only process, use:
uvx --from citry-lsp citry-lsp
The isolated form cannot import the project app, so it deliberately omits registry-backed component knowledge.
Choose how much project knowledge to load
Without a project target, the server reports syntax-only mode. Parser
diagnostics, Citry structural completion, lexical c-for and c-fill
bindings, Citry event/State binding keys and modifiers, Alpine directive
completion and hover, first-party hover help, and structural formatting remain
available.
The server does not guess which user components exist.
For component-aware features, the editor supplies a module:attribute target
through its citry.app setting:
{
"citry.app": "my_project.web:app"
}
The target may be a configured Citry instance or a ComponentLibrary:
{
"citry.app": "citry_ui:__citry_library__"
}
The server imports that target in a bounded worker process. Import errors, invalid targets, crashes, and timeouts produce one visible status message and fall back to syntax-only behavior without corrupting the editor connection.
Clients may also provide an optional envFile initialization option. Relative
paths resolve from the workspace:
{
"protocolVersion": 1,
"app": "my_project.web:app",
"envFile": ".env"
}
File values override the environment inherited by the server and apply only to the isolated app-discovery worker. The stdio server and its type analyzer remain unchanged. Each registry reload rereads the file; missing or malformed configured files produce a syntax-only status instead of importing the app with an unintended environment. Citry's environment adapter reports the selected path but never serializes or logs its parsed values.
Registry mode adds:
- component, input, slot, and typed slot-data completion and hover;
- navigation to component classes, schema fields, inferred data keys, and template bindings;
TemplateData,JsData, andCssDatachecks across Python, templates, Alpine expressions, JavaScript, and CSS;- Events handler and
$c-propschecks; - Fluent message, key, argument, formatter, and translation navigation;
- project lint settings and component-aware diagnostics.
Each workspace folder should run its own server process so it can use that folder's Python interpreter and registry target.
Type-aware template expressions
The server uses the ty executable installed in the selected project
environment. Proven template roots receive Python member and call completion,
hover, definitions, signature help, narrowing, and source-mapped diagnostics.
If ty is missing, has the wrong version, exits, or times out, the server shows
one degradation notice and keeps parser diagnostics and Citry-owned root
features active.
Formatting
Protocol v1 formats citry-html documents and parser-proven templates inside
Python through Citry's shared structural formatter. Registry-proven ordinary
HTML template files can be formatted through the explicit Citry request without
registering Citry as the formatter for every HTML document.
Clients may also negotiate citry/formatComponentAssets and
citry/formatEmbedded for one atomic template, JavaScript, and CSS formatting
operation. Stale or malformed client responses produce no edit.
Compatibility
The server advertises language-server version 0.1.3, Citry 0.4.x, component catalog v1, and client protocol v1. It refuses incompatible client protocols or Citry series instead of returning results based on a contract it does not understand.
The console command accepts pygls development transports:
citry-lsp --tcp --host 127.0.0.1 --port 2087
Use stdio for normal editor integration.
For editor setup and troubleshooting, see the Citry IDE guide. Report problems through the Citry issue tracker.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file citry_lsp-0.1.3.tar.gz.
File metadata
- Download URL: citry_lsp-0.1.3.tar.gz
- Upload date:
- Size: 212.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
901990731a3018a91fa9c323a822632ded74b2cc796fc8183a6cf0db54a8c850
|
|
| MD5 |
210a0af947c52429dbc0c2513c0ed4ba
|
|
| BLAKE2b-256 |
373ad1ac4105c848c93cc635a87b6b42bf7b667899d662814e7669b7fc2972f1
|
Provenance
The following attestation bundles were made for citry_lsp-0.1.3.tar.gz:
Publisher:
py--citry-lsp--publish.yml on citry-dev/citry
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
citry_lsp-0.1.3.tar.gz -
Subject digest:
901990731a3018a91fa9c323a822632ded74b2cc796fc8183a6cf0db54a8c850 - Sigstore transparency entry: 2654165950
- Sigstore integration time:
-
Permalink:
citry-dev/citry@e1b5461f83ff529430494e14d330552304d8ac23 -
Branch / Tag:
refs/tags/citry-lsp@0.1.3 - Owner: https://github.com/citry-dev
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
py--citry-lsp--publish.yml@e1b5461f83ff529430494e14d330552304d8ac23 -
Trigger Event:
push
-
Statement type:
File details
Details for the file citry_lsp-0.1.3-py3-none-any.whl.
File metadata
- Download URL: citry_lsp-0.1.3-py3-none-any.whl
- Upload date:
- Size: 143.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a70ecb679953012541b17cbb496804d319695688ca0072b37239cbab0a8e7137
|
|
| MD5 |
e3e2874c59eafe710347486c6b1d1f71
|
|
| BLAKE2b-256 |
ff61c6dc58ad63fb280fb41dea5274652c2f18a8590c0b03b64f63c460785f0e
|
Provenance
The following attestation bundles were made for citry_lsp-0.1.3-py3-none-any.whl:
Publisher:
py--citry-lsp--publish.yml on citry-dev/citry
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
citry_lsp-0.1.3-py3-none-any.whl -
Subject digest:
a70ecb679953012541b17cbb496804d319695688ca0072b37239cbab0a8e7137 - Sigstore transparency entry: 2654165999
- Sigstore integration time:
-
Permalink:
citry-dev/citry@e1b5461f83ff529430494e14d330552304d8ac23 -
Branch / Tag:
refs/tags/citry-lsp@0.1.3 - Owner: https://github.com/citry-dev
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
py--citry-lsp--publish.yml@e1b5461f83ff529430494e14d330552304d8ac23 -
Trigger Event:
push
-
Statement type: