Skip to content

Releases: JohnnyMorganz/luau-lsp

1.51.0

24 Jun 19:04

Choose a tag to compare

[1.51.0] - 2025-06-24

Added

  • Go To Definition now follows to the location of a property on a table type if the property doesn't have a real
    implementation (#1123)
  • Go To Definition now works on properties on the result of a function call (e.g., unwrap in
    process.spawn(""):unwrap()) (#1123)
  • Go To Type Definition now follows through expressions (such as variables) better (e.g., cross module) to find the true
    location of the original type

Changed

  • Reimplemented internal file-system calls and removed references to std::filesystem. There should be no external differences from this change, except that non-ASCII filepaths are handled correctly on Windows
  • Sync to upstream Luau 0.679

Fixed

  • Fixed handling of non-ASCII file paths and directories on Windows (#746)

Full Changelog: 1.50.0...1.51.0

1.50.0

16 Jun 19:57

Choose a tag to compare

[1.50.0] - 2025-06-16

Added

  • Added ServerInfo to the LanguageServer::onInitialize result.
  • .robloxrc files are now processed alongside .luaurc files for backwards compatibility with old
    configuration. It is recommended to still use .luaurc for new code.
  • FindFirstChildWhichIsA and friends now report an error if the class name provided was not found as a valid instance
    type.

Changed

  • Sync to upstream Luau 0.678
  • Removed the restriction on maximum table size when displaying during Hover etc. This is done by setting the
    LuauTableTypeMaximumStringifierLength flag value to 0. Overrides for this value are still respected.

Fixed

  • Fixed stack overflow when looking up a property on self-referential intersection types

External Contributions

New Contributors

Full Changelog: 1.49.1...1.50.0

1.49.1

09 Jun 19:19

Choose a tag to compare

[1.49.1] - 2025-06-09

Changed

  • Sync to upstream Luau 0.677

Fixed

  • Fixed requests failing when write a string require where the filename begins with disallowed names (e.g. ./con) on
    Windows

1.49.0

01 Jun 13:22

Choose a tag to compare

[1.49.0] - 2025-06-01

Added

  • Added luau-lsp.require.useOriginalRequireByStringSemantics to fall back to the old require-by-string semantics for
    init.luau files to preserve backwards compatibility. This option is deprecated and may be removed at any time in the
    future. Note that @self-based requires remain supported with this option, allowing gradual migration to the new
    semantics (#1046)

Changed

  • Sync to upstream Luau 0.676
  • For DM types, .Parent is now typed with a write type of "Instance" in the new solver, preventing false-positive type
    errors (#1039)
  • Renamed command "Luau: Regenerate Rojo Sourcemap" to "Luau: Regenerate Sourcemap" as it can be configured to generate sourcemaps from non-Rojo tooling
  • Workspaces are initialized lazily on-demand, improving startup time for set-ups with many workspace folders. We only
    setup and index a workspace folder once we receive a request for that
    folder. (#947)
  • It is no longer valid to pass --flag and --no-flags-enabled before the subcommand name on the CLI: it should be
    luau-lsp lsp --flag:NAME=VALUE / luau-lsp lsp --no-flags-enabled.

Fixed

  • Fixed require-by-string failing for files named luau (e.g, project/luau.luau)
  • Fixed crash during early startup where a text document update notification is already sent before the workspaces are
    fully configured.
  • Fixed unnecessary type check when fragment autocomplete is enabled, leading to an autocomplete delay (#991)
  • Fixed FFlag registration logic always enabling all
    FFlags (#1090)
  • Fixed string require auto-imports in an init.luau file not resolving correctly with new require-by-string semantics.
    Now, @self is correctly added when necessary. (#1030)
  • When importing a directory containing an init.luau file with string require auto-imports, we now correctly resolve
    to the directory name instead of to
    directory/init (#1038 / #1041)
  • init.luau files are no longer aware of .luaurc files that are its sibling on the file
    system (#1037)

1.48.0

28 May 19:55

Choose a tag to compare

Added

  • Internal caught but unhandled exceptions are now reported to Sentry if crash reporting is enabled
  • Added progress indicator for watched files changes
  • A Cloudflare page is now available to serve the type definition files and API documentations, due to GitHub ratelimiting (#1059)
    • https://luau-lsp.pages.dev/type-definitions/globalTypes.None.d.luau
    • https://luau-lsp.pages.dev/type-definitions/globalTypes.PluginSecurity.d.luau
    • https://luau-lsp.pages.dev/type-definitions/globalTypes.LocalUserSecurity.d.luau
    • https://luau-lsp.pages.dev/type-definitions/globalTypes.RobloxScriptSecurity.d.luau
    • https://luau-lsp.pages.dev/api-docs/en-us.json

Changed

  • Sync to upstream Luau 0.675
  • Significant performance improvements to initial workspace indexing time (~3m to ~20s on 30,000 files)
  • ~1160x performance improvement to Uri parsing time at scale (7.77s to 0.0067s for ~30,000 URIs)
  • ~10x performance improvement to require resolution for string requires and virtual (sourcemap) -> real file paths (
    3.28s to 0.322s for ~30,000 files)
  • ~1.29x performance improvement to reading files (4.5s to 3.66s for ~30,000 files)

Fixed

  • Fixed blowup of linux-arm64 release build size due to the inclusion of debug symbols
  • Fixed crash when auto imports is enabled and the file contains a require with no arguments (e.g.
    local Value = require(), typically the case when in the middle of typing a require)
  • Fixed performance regression from previous release where type checking is being performed on document change even if
    workspace diagnostics is disabled
  • Fixed crash where catch-all error handler attempts to send an error message with non-UTF 8 characters
  • Fixed find references not showing types used as return types for
    functions (#1060)
  • VSCode: if fetching API documentation / definitions fails, then we do not overwrite the existing file (#740)

Full Changelog: 1.47.0...1.48.0

1.47.0

17 May 12:46

Choose a tag to compare

[1.47.0] - 2025-05-17

Added

  • Implemented opt-in crash reporting for the language server. This is enabled via luau-lsp.server.crashReporting.enabled. This setting is not enabled by default, but you may receive a dismissible prompt to enable it if the server restarts unexpectedly. Note: crash reporting sends network requests to Sentry. Crash Reporting is only available on Windows and macOS, and is not enabled in Standalone mode (luau-lsp analyze).

Changed

  • Sync to upstream Luau 0.674

1.46.0

13 May 19:52

Choose a tag to compare

[1.46.0] - 2025-05-13

Added

  • Added progress indicator during indexing of initial startup. Currently does not provide much detail, but does provide
    some feedback to indicate the server is doing work.
  • VSCode: server binary location setting (luau-lsp.server.path) now supports relative paths (#1036)

Changed

  • Sync to upstream Luau 0.673
  • Luau FFlags are now synced from the Studio channel rather than the main channel on VSCode, which is typically updated
    earlier ([#1040])

Fixed

  • Fixed invalid variable names created for instance-based auto-imports
  • Fixed diagnostics not getting updated for dependent files when a file is edited and workspace diagnostics is
    enabled (#1042)

Full Changelog: 1.45.0...1.46.0

1.45.0

04 May 17:00

Choose a tag to compare

[1.45.0] - 2025-05-04

Breaking Changes

This changes the string require behaviour for init.lua files. Now, requires are resolved relative to the parent directory, rather than the file itself. A new alias @self is available to allow resolving relative to the current file.

Added

  • Autocomplete in string requires now respects luau-lsp.completion.imports.ignoreGlobs for filtering out files to skip (e.g., one can add *.server.luau or *.client.luau) (#1014)
  • End autocompletion now also autocompletes missing then or do tokens in control flow statements (e.g., pressing enter after typing just if condition) (#999)

Changed

  • Sync to upstream Luau 0.672
  • Color picker will now strip redundant decimal digits (i.e. 0.0000 -> 0) (#1022)

Fixed

  • Fixed string-require auto imports not using aliases correctly on Windows (#1025)
  • Instance-based auto-imports now use expression syntax when parts are not a valid identifier (e.g. require(Modules["react-spring"])) (#1026)
  • Auto-imports no longer create invalid variable names (#1026)

1.44.1

24 Apr 18:49

Choose a tag to compare

[1.44.1] - 2025-04-24

Fixed

  • Fixed incorrect serialization of maps that are keyed by a Uri, causing commands that apply edits such as Rename to fail

1.44.0

24 Apr 16:53

Choose a tag to compare

[1.44.0] - 2025-04-24

Removed

  • The deprecated luau-lsp.require.fileAliases and luau-lsp.require.directoryAliases no longer show up in autocomplete for string requires. Use aliases as part of .luaurc instead

Added

  • Auto-importing now supports string requires. In standard platform, string requires is the default when luau-lsp.completion.imports.enabled and luau-lsp.completion.imports.suggestRequires are enabled. For the Roblox platform, string require auto imports must be switched on using luau-lsp.completion.imports.stringRequires.enabled (default: false) (#494).

Changed

  • Reimplementation of string require autocomplete based off upstream Luau require work
  • Updated implementation of Uris internally to handle case-insensitive file systems correctly

Fixed

  • Fixed diagnostics not updating on windows for Neovim or Zed due to mismatched URI cases (#988)
  • Fixed "isIgnoredFile failed: relative path is default-constructed" for Neovim Windows users (#752)