Skip to content

Releases

v0.5.1

Choose a tag to compare

@samuelduchesne samuelduchesne released this 13 Nov 16:08

A maintenance release that gives the VS Code extension its Marketplace icon. Neither server changes; the Python package idfkit-lsp and the npm package @idfkit/language-server are republished at 0.5.1 only because all three artifacts are released from one tag.

Added

  • Marketplace icon: the extension manifest now declares images/icon.png, which is marks/tile.png from idfkit-brand at identity-2026.5, the tile the README header already uses. Version 0.5.0 declared no icon, so its listing showed the Marketplace placeholder.

Upgrade notes

  • No action is required. The extension updates through VS Code as usual, and pip install -U idfkit-lsp or npm install @idfkit/language-server@latest installs a functionally identical server.

v0.5.0

Choose a tag to compare

@samuelduchesne samuelduchesne released this 13 Nov 15:20
2c91991

This release makes the VS Code extension work as packaged. The VSIX now carries the language service it needs, the release workflow publishes it to the Visual Studio Marketplace, and the extension no longer starts the source server on an interpreter that cannot run it. The minimum versions rise to VS Code 1.90 and Node 20. Neither server gains or loses a capability.

Raised minimum versions

  1. VS Code 1.90 (previously 1.86) (#38). VS Code 1.90 is the first release on Electron 29, whose Node 20 runtime is the one the model server runs on by default. VS Code 1.86 to 1.89 run Node 18, which the @idfkit packages the model server depends on do not support.
  2. Node 20 (previously 18) for the npm package @idfkit/language-server (#38). This matches engines.node in @idfkit/core, @idfkit/idfkit and @idfkit/language 0.4.0. The bundle now targets node20.

Users of VS Code 1.86 to 1.89, and editors that run idfkit-language-server on Node 18, should remain on 0.4.0 until they upgrade. The Python source server is not affected.

Features

  • Visual Studio Marketplace publishing (#41): the release workflow packages the extension, checks the VSIX, attaches it to the GitHub release, and publishes that same file to the Marketplace through Trusted Publishing, with no stored token. Prereleases are skipped, because the Marketplace accepts only major.minor.patch.
  • python -m idfkit_lsp --version (#43): prints the source server's level and exits. It answers only after the server and its libraries have loaded, so its exit status states whether an interpreter can run the server.
  • Comment toggling for .idf files in VS Code (#40): a language-configuration.json holds the line comment marker and nothing else. It is recorded in capabilities.json as an editor-specific limitation, because the protocol has no request through which a server could supply it. Other editors configure their own marker.
  • Package headers (#48, #49): the README, the npm package and the PyPI package open with the idfkit identity header. The PyPI package gains a description, which it previously lacked.

Fixes

  • The packaged extension now carries the language service (#37). A VSIX built with vsce package contained no @idfkit package, so the model server could not resolve @idfkit/idfkit and advertised no model text capability. The npm package @idfkit/language-server was not affected.
  • The source server is not started on an interpreter that cannot run it (#43). The extension first asks the configured interpreter for -m idfkit_lsp --version. On failure, the reason goes to the output channel and one information message appears per interpreter. This replaces the error notification, the five restarts and the unhandled rejections that every Python file previously caused on a machine without the server.
  • A source server that closes during startup is no longer restarted.
  • idfkit: Restart Language Servers reads idfkitLsp.pythonPath again, so a corrected setting takes effect without reloading the window. idfkit: Open Documentation states why it cannot answer when the source server is not running.
  • Clearing idfkitLsp.pythonPath now means python3, as documented, rather than an empty command.

Other changes

  • The source server depends on idfkit 1.2.0 (previously 1.1.1) (#31).
  • The Marketplace listing is written for users; development material moved to CONTRIBUTING.md (#36).
  • .vscodeignore is an allowlist. Agent instructions, the Python server's source, tool configuration, levels.json and source maps no longer ship in the VSIX (#39).
  • CI builds the VSIX from a clean checkout, checks that its model server advertises what capabilities.json marks present, and runs the protocol suite against it (#42).

Upgrade notes

  • VS Code users on 1.90 or newer: upgrade transparently. Install from the Marketplace once the listing is live, or from the VSIX attached to this release.
  • Python source server: uv tool install -U idfkit-lsp or pip install -U idfkit-lsp. No configuration change is required. It now resolves idfkit 1.2.0.
  • Other editors using the model server: npm install -g @idfkit/language-server@latest on Node 20 or newer.

v0.4.0

Choose a tag to compare

@samuelduchesne samuelduchesne released this 30 Oct 14:29
24e3c11

This release puts the model server on npm. Editors other than VS Code (Neovim, Helix, Zed, anything that starts a language server from a command) can now install it without cloning this repository and building it. Neither server gains or loses a capability.

Features

  • The model server is published to npm as @idfkit/language-server (#34). It needs Node 20 or newer and brings the idfkit library and its language service with it:

    npm install -g @idfkit/language-server
    idfkit-language-server --stdio

    Or run it without installing: npx @idfkit/language-server --stdio. In Neovim:

    vim.lsp.config.idfkit_model = {
      cmd = { 'idfkit-language-server', '--stdio' },
      filetypes = { 'idf' },
      root_markers = { '.git' },
    }

    An editor extension can install the package and run dist/main.js --stdio on its own Node runtime. Every release now publishes to npm and PyPI from the same tag, so the npm version, the PyPI version and the VS Code extension always agree.

Changes

  • The model server reaches idfkit only through @idfkit/idfkit (#34), now that the shared package is published. It is an exact dependency, at 0.4.0, and the fallbacks to @idfkit/core and @idfkit/language under their own names are gone. If the library is missing, the server now asks for @idfkit/idfkit and @idfkit/language.
  • The model server's package was renamed from @idfkit/lsp-model-server to @idfkit/language-server, which is also the name it reports in serverInfo.

Upgrade notes

  • VS Code: update the extension as usual. It bundles the model server, so nothing else changes.
  • pip install idfkit-lsp: the source server is unchanged apart from its version. It still pins idfkit 1.1.1.
  • Other editors: if you were running model-server/dist/main.js from a clone, switch your launch command to idfkit-language-server --stdio and delete the clone.

v0.3.0

Choose a tag to compare

@samuelduchesne samuelduchesne released this 19 Oct 18:33

A maintenance release that moves both servers to the current library levels: the source server to idfkit 1.1.1, and the model server to idfkit-js 0.4.0. Neither server gains or loses a capability; capabilities.json is unchanged from 0.2.0.

Changes

  • The source server requires idfkit 1.1.1 (#27, #30). The exact pin moves from 1.0.0rc1, through 1.0.0, to 1.1.1. The pin remains exact, so pip install idfkit-lsp==0.3.0 installs idfkit 1.1.1 alongside it.
  • The model server resolves @idfkit/core and @idfkit/language at 0.4.0 (#28), up from 0.2.0.
  • The model server looks for the idfkit facade as @idfkit/idfkit (#21). npm refused the unscoped name idfkit, so the facade and its subpaths (@idfkit/idfkit/language, @idfkit/idfkit/node) are published under the scope. Until the facade is published, the model server continues to fall back to @idfkit/core and @idfkit/language under their own names.

Upgrade notes

  1. Source server users can upgrade with pip install -U idfkit-lsp or uv tool upgrade idfkit-lsp, provided the environment can hold idfkit 1.1.1. A project that must remain on an earlier idfkit should either pin idfkit-lsp==0.2.0 or run the server from an environment of its own (for example, uvx --from idfkit-lsp==0.3.0 idfkit-lsp).
  2. Model server users need take no action: the model server ships inside the editor extension with its dependencies.
  3. The remaining changes since 0.2.0 (#20, #25, #26) concern continuous integration and the consumer register, and do not affect either server.

Full changelog: v0.2.0...v0.3.0

v0.2.0

Choose a tag to compare

@samuelduchesne samuelduchesne released this 11 Sep 18:05

The first release of idfkit-lsp on PyPI. pip install idfkit-lsp now installs the source server, the language server for Python code that uses idfkit. It is the release the editor plugin's language-server entry has been waiting on, since that entry had nothing to resolve.

What is in this package

This package is the source server only. It answers completion, hover, signature help and diagnostics for Python files that import idfkit. The model server, which serves EnergyPlus model text through @idfkit/language, runs on the editor's own Node runtime and ships inside the editor extension, not in this wheel.

Features

  • Answers derived from the installed library (#15). The callables that produce a document, and the type names the server recognises, are read from the idfkit you have installed rather than from a table in this repository. A new idfkit release no longer needs a matching edit here before the server knows about it.
  • One declaration of what the server answers (#15). capabilities.json is the single record of what each server advertises. It travels inside the wheel, both servers advertise from it, and the test suite holds it against the servers in both directions.
  • The server can say what it is running (#15). An idfkit-lsp/versions request returns the server's version and the library levels it read. As of #19, idfkit_lsp.__version__ gives the same answer.

Fixes

  • The version the package reports is the version it is (#19). __version__ said 0.1.0 while the package declared 0.2.0. It is now read from the installed distribution.
  • Messages name an install that exists (#16). When the language service is missing, the guard now tells you to install @idfkit/language, which you can, rather than idfkit on npm, which is not published.

Packaging

  • MIT licence, carried in the wheel (#19).
  • Published as a wheel only, through PyPI trusted publishing (#19). A source distribution of the server cannot carry the declaration file it needs to start.
  • Requires Python 3.10 to 3.13. Pins idfkit==1.0.0rc1, pygls==2.1.1 and lsprotocol==2025.0.0 exactly.

Upgrade notes

This is a first installation, not an upgrade. The server pins idfkit exactly, so give it an environment of its own rather than the one your project runs in:

pip install idfkit-lsp==0.2.0                                          # into a dedicated virtual environment
uvx --from idfkit-lsp==0.2.0 --prerelease=allow python -m idfkit_lsp   # or its own environment, fetched on demand

uvx needs --prerelease=allow for this release. idfkit-lsp 0.2.0 depends on idfkit==1.0.0rc1, a pre-release, and uv installs a pre-release of an indirect dependency only when told to; without the flag it stops with "pre-releases weren't enabled". pip accepts the exact pre-release pin as it is. The flag stops being needed once idfkit-lsp depends on a stable idfkit. (Corrected 2026-09-11: these notes first showed the uvx command without the flag, which fails.)

In the editor extension, point idfkitLsp.pythonPath at that interpreter if it is not the one on your path.

v0.1.0

Choose a tag to compare

@samuelduchesne samuelduchesne released this 16 Apr 19:02

First tagged release of idfkit-lsp — a Language Server Protocol implementation and VS Code extension for idfkit-powered EnergyPlus IDF/epJSON editing.

What's in this release

  • Python LSP server (server/) built on pygls 2.0, providing completions, hover docs, and signature help for IDF objects and fields.
  • VS Code extension (client/) that spawns the Python server, auto-detects the server venv, and surfaces startup errors directly in the editor.
  • AST-based type inference over user code via IdfKitAnalyzer — tracks imports, variable types (DOCUMENT, COLLECTION, OBJECT), and lexical scopes.
  • Schema-driven hover and completions backed by idfkit's bundled epJSON schemas (now 17 versions, 8.9.0 through 26.1.0 via idfkit 0.8.0).
  • "Open Documentation" VS Code command that deep-links hover targets to the matching page on docs.idfkit.com.
  • Structured logging across server modules, bridged through the LSP channel so client-side users see what the server sees.

Dependencies

  • `idfkit==0.8.0` — adds EnergyPlus 26.1.0 schema support and the `idfkit migrate` CLI.
  • `pygls>=2.0`, `lsprotocol`.

Compatibility

  • Python 3.10–3.13 (server).
  • VS Code 1.85+ (client).
  • Works against all 17 EnergyPlus versions supported by idfkit 0.8.0.