Releases: lune-org/lune
0.8.9
0.8.8
0.8.7
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
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 passedenvironment
.
By default, globals are injected and codegen is disabled.
Check the documentation for theluau
standard library for more information. -
Implemented support for floor division operator /
__idiv
for theVector2
andVector3
types in theroblox
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 usingstdio.format
.
Fixed
- Fixed
__type
and__tostring
metamethods on userdatas and tables not being respected when printed or formatted usingstdio.format
. - Fixed the
_VERSION
global containing an incorrect Lune version string
0.8.5
Changed
-
Improved table pretty formatting when using
print
,warn
, andstdio.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
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 additionaltarget
argument to thebuild
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 formatstd-*
.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 innet.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
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
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 Lune0.8.1
, breaking usage of things such astable.clone
.
0.8.1
0.8.0
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
, andaccessedAt
properties returned fromfs.metadata
are nowDateTime
values instead of numbers. -
The
Lune
struct has been renamed toRuntime
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 berequire
-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
andwarn
global functions yielding the thread, preventing them from being used in places such as the callback totable.sort
. - Fixed the
overwrite
option forfs.move
not correctly removing existing files / directories. (#133)