Releases: lune-org/lune
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)
0.7.11
Changed
- Update to Luau version
0.601
.
Fixed
- Fixed
roblox.getAuthCookie
not being compatible with the latest cookie format by upgrading rbx_cookie.
0.7.10
Added
- Added the
GetDebugId
instance method to theroblox
built-in. This will return the internal id used by the instance, and as the name implies, it should be primarily used for debugging purposes and cases where you need a globally unique identifier for an instance. It is guaranteed to be a 32-digit hexadecimal string.
Fixed
- Fixed issues with
SecurityCapabilities
on instances in theroblox
built-in by upgrading rbx-dom.
0.7.9
Added
-
Added
implementProperty
andimplementMethod
to theroblox
built-in library to fill in missing functionality that Lune does not aim to implement itself.Example usage:
local roblox = require("@lune/roblox") local part = roblox.Instance.new("Part") roblox.implementMethod("BasePart", "TestMethod", function(_, ...) print("Tried to call TestMethod with", ...) end) part:TestMethod("Hello", "world!")
Changed
- Update to Luau version
0.599
. - Stdio options when using
process.spawn
can now be set with more granularity, allowing stderr & stdout to be disabled individually and completely to improve performance when they are not being used.
0.7.8
Added
-
Added a new
datetime
built-in library for handling date & time values, parsing, formatting, and more. (#94)Example usage:
local DateTime = require("@lune/datetime") -- Creates a DateTime for the current exact moment in time local now = DateTime.now() -- Formats the current moment in time as an ISO 8601 string print(now:toIsoDate()) -- Formats the current moment in time, using the local -- time, the French locale, and the specified time string print(now:formatLocalTime("%A, %d %B %Y", "fr")) -- Returns a specific moment in time as a DateTime instance local someDayInTheFuture = DateTime.fromLocalTime({ year = 3033, month = 8, day = 26, hour = 16, minute = 56, second = 28, millisecond = 892, }) -- Extracts the current local date & time as separate values (same values as above table) print(now:toLocalTime()) -- Returns a DateTime instance from a given float, where the whole -- denotes the seconds and the fraction denotes the milliseconds -- Note that the fraction for millis here is completely optional DateTime.fromUnixTimestamp(871978212313.321) -- Extracts the current universal (UTC) date & time as separate values print(now:toUniversalTime())
-
Added support for passing
stdin
inprocess.spawn
(#106) -
Added support for setting a custom environment in load options for
luau.load
, not subject togetfenv
/setfenv
deoptimizations -
Added Terrain:GetMaterialColor and Terrain:SetMaterialColor (#93)
-
Added support for a variable number of arguments for CFrame methods (#85)
Changed
- Update to Luau version
0.596
. - Update to rbx-dom database version
0.596
. process.spawn
now usespowershell
instead of/bin/bash
as the shell on Windows, withshell = true
.- CFrame and Vector3 values are now rounded to the nearest 2 ^ 16 decimal place to reduce floating point errors and diff noise. Note that this does not affect intermediate calculations done in lua, and only happens when a property value is set on an Instance.
Fixed
- Fixed the
process
built-in library not loading correctly when using Lune in REPL mode. - Fixed list subcommand not listing global scripts without a local
.lune
/lune
directory present. - Fixed
net.serve
stopping when the returnedServeHandle
is garbage collected. - Fixed missing trailing newline when using the
warn
global. - Fixed constructor for
CFrame
in theroblox
built-in library not parsing the 12-arg overload correctly. (#102) - Fixed various functions for
CFrame
in theroblox
built-in library being incorrect, specifically row-column ordering and some flipped signs. (#103) - Fixed cross-service Instance references disappearing when using the
roblox
built-in library (#117)
0.7.7
Added
-
This allows you to run scripts within Lune without writing files!
Example usage, inside your favorite terminal:
# 1. Run the Lune executable, without any arguments lune # 2. You will be shown the current Lune version and a blank prompt arrow: Lune v0.7.7 > # 3. Start typing, and hit enter when you want to run your script! # Your script will run until completion and output things along the way. > print(2 + 3) 5 > print("Hello, lune changelog!") Hello, lune changelog! # 4. You can also set variables that will get preserved between runs. # Note that local variables do not get preserved here. > myVariable = 123 > print(myVariable) 123 # 5. Press either of these key combinations to exit the REPL: # - Ctrl + D # - Ctrl + C
-
Added a new
luau
built-in library for manually compiling and loading Luau source code. (#82)Example usage:
local luau = require("@lune/luau") local bytecode = luau.compile("print('Hello, World!')") local callableFn = luau.load(bytecode) callableFn() -- Additionally, we can skip the bytecode generation and -- load a callable function directly from the code itself. local callableFn2 = luau.load("print('Hello, World!')") callableFn2()
Changed
-
Update to Luau version
0.591
-
Lune's internal task scheduler and
require
functionality has been completely rewritten.
The new scheduler is much more stable, conforms to a larger test suite, and has a few additional benefits:- Built-in libraries are now lazily loaded, meaning nothing gets allocated until the built-in library gets loaded using
require("@lune/builtin-name")
. This also improves startup times slightly. - Spawned processes using
process.spawn
now run on different thread(s), freeing up resources for the main thread where luau runs. - Serving requests using
net.serve
now processes requests on background threads, also freeing up resources. In the future, this will also allow us to offload heavy tasks such as compression/decompression to background threads. - Groundwork for custom / user-defined require aliases has been implemented, as well as absolute / cwd-relative requires. These will both be exposed as options and be made available to use some time in the future.
- Built-in libraries are now lazily loaded, meaning nothing gets allocated until the built-in library gets loaded using
-
When using the
serde
built-in library, keys are now sorted during serialization. This means that the output ofencode
is now completely deterministic, and wont cause issues when committing generated files to git etc.
Fixed
-
Fixed not being able to pass arguments to the thread using
coroutine.resume
. (#86) -
Fixed a large number of long-standing issues, from the task scheduler rewrite:
- Fixed
require
hanging indefinitely when the module being require-d uses an async function in its main body. - Fixed background tasks (such as
net.serve
) not keeping Lune alive even if there are no lua threads to run. - Fixed spurious panics and error messages such as
Tried to resume next queued future but none are queued
. - Fixed not being able to catch non-string errors properly, errors were accidentally being wrapped in an opaque
userdata
type.
- Fixed
0.7.6
Changed
- Update to Luau version
0.588
- Enabled Luau JIT backend for potential performance improvements 🚀
If you run into any strange behavior please open an issue!
Fixed
- Fixed publishing of the Lune library to
crates.io
. - Fixed
serde.decode
deserializingnull
values asuserdata
instead ofnil
. - Fixed not being able to require files with multiple extensions, eg.
module.spec.luau
was not require-able usingrequire("module.spec")
. - Fixed instances and
roblox
built-in library APIs erroring when used asynchronously/concurrently.