Skip to content

Releases: lune-org/lune

0.8.9

07 Oct 17:46
010cd36
Compare
Choose a tag to compare

Changed

  • Updated to Luau version 0.640

0.8.8

22 Aug 19:46
ff83c40
Compare
Choose a tag to compare

Fixed

  • Fixed errors when deserializing Lighting.AttributesSerialize by updating rbx-dom dependencies (#245)

0.8.7

10 Aug 11:44
1d4d163
Compare
Choose a tag to compare

Added

  • Added a compression level option to serde.compress (#224)
  • Added missing vector methods to the roblox library (#228)

Changed

  • Updated to Luau version 0.635
  • Updated to rbx-dom database version 0.634

Fixed

  • Fixed fs.readDir with trailing forward-slash on Windows (#220)
  • Fixed __type and __tostring metamethods not always being respected when formatting tables

0.8.6

23 Jun 12:32
45493dc
Compare
Choose a tag to compare

Added

  • Added a builtin API for hashing and calculating HMACs as part of the serde library (#193)

    Basic usage:

    local serde = require("@lune/serde")
    local hash = serde.hash("sha256", "a message to hash")
    local hmac = serde.hmac("sha256", "a message to hash", "a secret string")
    
    print(hash)
    print(hmac)

    The returned hashes are sequences of lowercase hexadecimal digits. The following algorithms are supported:
    md5, sha1, sha224, sha256, sha384, sha512, sha3-224, sha3-256, sha3-384, sha3-512, blake3

  • Added two new options to luau.load:

    • codegenEnabled - whether or not codegen should be enabled for the loaded chunk.
    • injectGlobals - whether or not to inject globals into a passed environment.

    By default, globals are injected and codegen is disabled.
    Check the documentation for the luau standard library for more information.

  • Implemented support for floor division operator / __idiv for the Vector2 and Vector3 types in the roblox standard library (#196)

Changed

  • Sandboxing and codegen in the Luau VM is now fully enabled, resulting in up to 2x or faster code execution.
    This should not result in any behavior differences in Lune, but if it does, please open an issue.
  • Improved formatting of custom error objects (such as when fs.readFile returns an error) when printed or formatted using stdio.format.

Fixed

  • Fixed __type and __tostring metamethods on userdatas and tables not being respected when printed or formatted using stdio.format.
  • Fixed the _VERSION global containing an incorrect Lune version string

0.8.5

01 Jun 20:20
cf513c6
Compare
Choose a tag to compare

Changed

  • Improved table pretty formatting when using print, warn, and stdio.format:

    • Keys are sorted numerically / alphabetically when possible.
    • Keys of different types are put in distinct sections for mixed tables.
    • Tables that are arrays no longer display their keys.
    • Empty tables are no longer spread across lines.

Fixed

  • Fixed formatted values in tables not being separated by newlines.
  • Fixed panicking (crashing) when using process.spawn with a program that does not exist.
  • Fixed instance:SetAttribute("name", nil) throwing an error and not removing the attribute.

0.8.4

12 May 18:48
95b81d6
Compare
Choose a tag to compare

Added

  • Added a builtin API for regular expressions.

    Example basic usage:

    local Regex = require("@lune/regex")
    
    local re = Regex.new("hello")
    
    if re:isMatch("hello, world!") then
    	print("Matched!")
    end
    
    local caps = re:captures("hello, world! hello, again!")
    
    print(#caps) -- 2
    print(caps:get(1)) -- "hello"
    print(caps:get(2)) -- "hello"
    print(caps:get(3)) -- nil

    Check out the documentation for more details.

  • Added support for buffers as arguments in builtin APIs (#148)

    This includes APIs such as fs.writeFile, serde.encode, and more.

  • Added support for cross-compilation of standalone binaries (#162)

    You can now compile standalone binaries for other platforms by passing
    an additional target argument to the build subcommand:

    lune build my-file.luau --output my-bin --target windows-x86_64

    Currently supported targets are the same as the ones included with each
    release of Lune on GitHub. Check releases for a full list of targets.

  • Added stdio.readToEnd() for reading the entire stdin passed to Lune

Changed

  • Split the repository into modular crates instead of a monolith. (#188)

    If you previously depended on Lune as a crate, nothing about it has changed for version 0.8.4, but now each individual sub-crate has also been published and is available for use:

    • lune (old)
    • lune-utils
    • lune-roblox
    • lune-std-* for every builtin library

    When depending on the main lune crate, each builtin library also has a feature flag that can be toggled in the format std-*.

    In general, this should mean that it is now much easier to make your own Lune builtin, publish your own flavor of a Lune CLI, or take advantage of all the work that has been done for Lune as a runtime when making your own Rust programs.

  • Changed the User-Agent header in net.request to be more descriptive (#186)

  • Updated to Luau version 0.622.

Fixed

  • Fixed not being able to decompress lz4 format in high compression mode
  • Fixed stack overflow for tables with circular keys (#183)
  • Fixed net.serve no longer accepting ipv6 addresses
  • Fixed headers in net.serve being raw bytes instead of strings

0.8.3

15 Apr 21:52
34fc23d
Compare
Choose a tag to compare

Fixed

  • Fixed require not throwing syntax errors (#168)
  • Fixed require caching not working correctly (#171)
  • Fixed case-sensitivity issue in require with aliases (#173)
  • Fixed itertools dependency being marked optional even though it is mandatory (#176)
  • Fixed test cases for the net built-in library on Windows (#177)

0.8.2

12 Mar 22:54
94ba331
Compare
Choose a tag to compare

Fixed

  • Fixed REPL panicking after the first evaluation / run.
  • Fixed globals reloading on each run in the REPL, causing unnecessary slowdowns.
  • Fixed net.serve requests no longer being plain tables in Lune 0.8.1, breaking usage of things such as table.clone.

0.8.1

11 Mar 18:41
a52dfc1
Compare
Choose a tag to compare

Added

  • Added the ability to specify an address in net.serve. (#142)

Changed

  • Update to Luau version 0.616.
  • Major performance improvements when using a large amount of threads / asynchronous Lune APIs. (#165)
  • Minor performance improvements and less overhead for net.serve and net.socket. (#165)

Fixed

  • Fixed fs.copy not working with empty dirs. (#155)
  • Fixed stack overflow when printing tables with cyclic references. (#158)
  • Fixed not being able to yield in net.serve handlers without blocking other requests. (#165)
  • Fixed various scheduler issues / panics. (#165)

0.8.0

14 Jan 16:17
1b25ed2
Compare
Choose a tag to compare

Breaking Changes

  • The Lune CLI now uses subcommands instead of flag options:

    • lune script_name arg1 arg2 arg3 -> lune run script_name arg1 arg2 arg3
    • lune --list -> lune list
    • lune --setup -> lune setup

    This unfortunately hurts ergonomics for quickly running scripts but is a necessary change to allow us to add more commands, such as the new build subcommand.

  • The createdAt, modifiedAt, and accessedAt properties returned from fs.metadata are now DateTime values instead of numbers.

  • The Lune struct has been renamed to Runtime in the Lune rust crate.

Added

  • Added support for compiling single Lune scripts into standalone executables! (#140)

    Example usage:

    -- my_cool_script.luau
    print("Hello, standalone!")
    > lune build my_cool_script.luau
    # Creates `my_cool_script.exe` (Windows) or `my_cool_script` (macOS / Linux)
    > ./my_cool_script.exe # Windows
    > ./my_cool_script # macOS / Linux
    > "Hello, standalone!"

    To compile scripts that use require and reference multiple files, a bundler such as darklua should preferrably be used. You may also distribute files alongside the standalone binary, they will still be able to be require-d. This limitation will be lifted in the future and Lune will automatically bundle any referenced scripts.

  • Added support for path aliases using .luaurc config files!

    For full documentation and reference, check out the official Luau RFC, but here's a quick example:

    // .luaurc
    {
      "aliases": {
        "modules": "./some/long/path/to/modules"
      }
    }
    -- ./some/long/path/to/modules/foo.luau
    return { World = "World!" }
    
    -- ./anywhere/you/want/my_script.luau
    local mod = require("@modules/foo")
    print("Hello, " .. mod.World)
  • Added support for multiple values for a single query, and multiple values for a single header, in net.request. This is a part of the HTTP specification that is not widely used but that may be useful in certain cases. To clarify:

    • Single values remain unchanged and will work exactly the same as before.

      -- https://example.com/?foo=bar&baz=qux
      local net = require("@lune/net")
      net.request({
          url = "example.com",
          query = {
              foo = "bar",
              baz = "qux",
          }
      })
    • Multiple values on a single query / header are represented as an ordered array of strings.

      -- https://example.com/?foo=first&foo=second&foo=third&bar=baz
      local net = require("@lune/net")
      net.request({
          url = "example.com",
          query = {
              foo = { "first", "second", "third" },
              bar = "baz",
          }
      })

Changed

  • Update to Luau version 0.606.

Fixed

  • Fixed the print and warn global functions yielding the thread, preventing them from being used in places such as the callback to table.sort.
  • Fixed the overwrite option for fs.move not correctly removing existing files / directories. (#133)