This document describes changes between versions of rbxmk. The imperative
branch is the latest unreleased version.
Incompatibilities
- Identifiers with uppercase acronyms are renamed to lowercase to improve familiarity with Roblox's API. The following APIs are affected:
- HTTPHeaders → HttpHeaders
- HTTPOptions → HttpOptions
- HTTPRequest → HttpRequest
- HTTPResponse → HttpResponse
- RBXAssetOptions → RbxAssetOptions
- RbxAssetOptions.AssetID → RbxAssetOptions.AssetId
- The RootDesc type is renamed to Desc.
- RootDesc.new is now Desc.new
- The Optional functions under the type library are moved to constructors of the Optional type.
- types.none is now Optional.none.
- types.some is now Optional.some.
- The
path.expand
function errors for unknown variables, or in rare cases where a path could not be located.- With stdin, certain variables expand to the working directory instead of an empty string. Highlights:
- Add
base64
format for encoding and decoding strings in Base64. - Add
path.rel
function to convert a path into a relative path. - Add
plugin
dump format, which enables custom dump formats.- Runs a Lua script in a limited environment.
- Receives a table that describes the Lua environment, and a function to write output.
- Add "Priority" field to libraries in dump format.
- Add support for CFrames in
rbxattr
format.
Fixes:
- Fix table.concat being unable to concatenate large tables.
- Fix fs.dir returning an empty table instead of nil when the path does not point to a directory.
- Fix nil pointer dereference when writing models that contain UniqueId property types.
See a comparison with the previous version for a thorough list of changes.
The Documentation page provides a complete reference for this version of rbxmk.
Highlights:
- Add support for
.luau
extension.- Add
luau
format. - Add
client.luau
format. - Add
localscript.luau
format. - Add
modulescript.luau
format. - Add
script.luau
format. - Add
server.luau
format.
- Add
- When a descriptor is set while encoding or decoding an instance, the service status is determined by the Service tag from instance's class descriptor instead of the instance's IsService field.
- This improves conversion from XML Roblox formats to binary Roblox formats.
- Add support for Optional types.
- If a descriptor is set, optional properties are handled transparently by accepting either nil (for None), or a value of the optional's type (for Some).
- Add types.none to create an empty Optional exprim.
- Add types.some to create an Optional exprim that contains a value.
- Currently, this only affects the "Model.WorldPivotData" property, which is an optional CFrame.
- Add support for UniqueId type.
- Improve interface of the doc command.
- Frag mode is the default. List mode is enabled with the
--list
flag.
- Frag mode is the default. List mode is enabled with the
- Add RootDesc.Copy method.
Fixes:
- Fix descriptor IsA checks failing when superclass matches current class.
- Fix encoding of PhysicalProperties type in rbxl format.
- Fix options not working for the rbx formats.
- Fix SetAttribute throwing an error when setting an attribute to nil.
- Fix SetAttributes pulling wrong argument for dictionary.
- Fix nondeterministic order of encoded SharedStrings in rbxl format.
Internal:
- Switch to cobra for handling CLI.
- When the program is executed from a GUI, a message is displayed indicating that it is a command-line tool.
- Adds
completion
command for generating autocompletion scripts for various shells.
See a comparison with the previous version for a thorough list of changes.
The Documentation page provides a complete reference for this version of rbxmk.
Botched release. See v0.9.1.
Incompatibilities
- Remove DataModel.new in favor of Instance.new("DataModel").
- Move os library functions to path library.
- Move os.clean to path.clean
- Move os.expand to path.expand
- Move os.join to path.join
- Move os.split to path.split
- os.getenv is unchanged.
- Refactor descriptors.
- Element types are represented as dictionaries containing the fields of the element.
- Add RootDesc.new for creating new RootDesc types.
- Remove rbxmk.newDesc.
- All operations to get and set descriptor information are contained in RootDesc.
- The methods of RootDesc are updated to reflect this change.
- Move rbxmk.diffDesc function to RootDesc.Diff method.
- Move rbxmk.patchDesc function to RootDesc.Patch method.
- Move rbxmk.newCookie to Cookie.new.
- Move rbxmk.cookiesFrom to Cookie.from.
- Move rbxmk.newAttrConfig to AttrConfig.new.
Highlights:
- Improve handling of values in the rbx formats.
- Add "Desc" option to the rbx formats to set a descriptor used when encoding or decoding.
- Add "DescMode" option to the rbx formats to set how deviations from the descriptor are handled.
- Including
--desc-*
flags causes the "Enum" global variable to be set to the enums generated from the resulting descriptor. - Implement members for the DescAction type.
- Add DescAction.new constructor.
- xpcall can receive extra arguments that are passed to the called function.
- Add path.clean function to clean file paths.
- Add Enum field to rbxmk library to contain enums defined by rbxmk. Note that there are currently no such enums.
Fixes:
- Fix missing properties from sym.Properties when instance has a descriptor.
- Fix unexpected conversion failures when getting certain property types while an instance has descriptor.
- Fix type conversion error when encoding
desc-patch.json
format. - Fix type conversion error when encoding Objects with rbx formats.
- Fix encoding of SharedStrings in rbxlx/rbxmx formats.
- Fix incorrect use of CDATA sections in rbxlx/rbxmx formats.
- Fix interactive command not having descriptor flags.
- Fix Cookie.from returning incorrect values when no cookies are found.
- Fix Instance.new handling DataModel incorrectly.
- Fix Instance.ClassName being settable to "DataModel".
- Fix typeof returning "userdata" for Symbol values.
- Fix incorrect behavior when select is called with index 0.
- Fix Envelope field being printed as Time field when ColorSequenceKeypoint or NumberSequenceKeypoint is converted to a string.
- Fix bounds error when calling ColorSequence.new or NumberSequence.new.
- Fix ColorSequence.new and NumberSequence.new not verifying order of keypoints.
- Fix NumberRange.new not verifying interval.
See a comparison with the previous version for a thorough list of changes.
The Documentation page provides a complete reference for this version of rbxmk.
Fixes:
- Fix fragments failing to resolve due to case-sensitivity.
See a comparison with the previous version for a thorough list of changes.
The Documentation page provides a complete reference for this version of rbxmk.
Highlights:
- Add Instance[sym.Properties] to get or set all properties of an instance at once.
- Add
rbxmk i
command to enter an interactive prompt. - Add flags to
run
command that preset a global descriptor.- The
--desc-latest
flag uses the latest API dump from Roblox. - The
--desc-file
flag uses a file in the descriptor format (API dump). - The
--desc-patch
flag uses a file in the descriptor patch format.
- The
- Add
--libraries
flag torun
andi
to include and exclude libraries.
Fixes:
- Fix
download-asset
flags not working. - Fix error handling in
download-asset
. - Fix error when getting certain string exprim types.
- Fix path security error when running a file outside of working directory.
- Fix runtime error produced by os.split.
See a comparison with the previous version for a thorough list of changes.
The Documentation page provides a complete reference for this version of rbxmk.
Botched release. See v0.7.1.
Highlights:
- Add
rbxmk download-asset
command to quickly download an asset from the Roblox website. - Add
rbxmk upload-asset
command to quickly upload an asset to the Roblox website. - Add
rbxmk dump
command to dump the rbxmk Lua API in various formats.- Supports generic JSON and minified JSON format.
- Supports selene TOML format.
- Add Instance.Descend as an alternative to child indexing, which rbxmk deliberately does not implement.
- Add
--include-root
flag to run command to include paths as root directories. - Add
--allow-insecure-paths
flag to run command to disable path restrictions. - Add CFrame.lookAt constructor.
- Implementations of Axes.new and Faces.new match Roblox API.
- Previous implementations exist as Axes.fromComponents and Faces.fromComponents.
- Implement face fields on Axes, matching Roblox API.
- Rename AttrConfig.new to rbxmk.newAttrConfig.
- Improve speed of table.clear.
- Entries returned by fs.dir contain only Name and IsDir fields.
- For large directories, getting files is much faster.
- Use fs.stat to get full metadata of a file.
Fixes:
- Fix version displayed by rbxmk.
- Fix error when assigning a property to a DataModel.
- Fix type of BrickColor properties decoded by Roblox XML formats.
- Fixes to encoding of Roblox file formats.
- Fix RBXAssetOptions.Cookies not being optional.
- Fix missing properties encoded by Roblox binary formats in certain cases.
- Fix Instance.FindFirstAncestor behaving as FindFirstAncestorOfClass.
- Fix equality of Enums, Enum, and EnumItem types.
- Fix tostring of Enums, Enum, and EnumItem types.
- Fix handling of nil Instance properties.
- Fix Instance properties not checking inherited classes.
- Fix handling of nil PhysicalProperties properties.
- Fix handling of arguments in fs.mkdir, fs.remove, and fs.rename.
- Fix FormatSelectors being received incorrectly in clipboard.read and clipboard.write.
- Fix userdata caching. Immutable types like Vector3 which were equal would incorrectly produce the same userdata. Makes creation of such types faster.
- Fix os.getenv not returning all variables when no value is passed.
Internal:
- Automated tests run on Windows in addition to Linux.
- Add tool for automatically incrementing version number.
- Improve documentation.
- Remove concept of "sources"; they're just libraries.
See a comparison with the previous version for a thorough list of changes.
The Documentation page provides a complete reference for this version of rbxmk.
Botched releases. See v0.6.2.
Internal:
- Fix automated releases.
See a comparison with the previous version for a thorough list of changes.
The Documentation page provides a complete reference for this version of rbxmk.
Highlights:
- Improve handling of HTTP cookies.
- Add rbxmk.cookiesFrom for getting cookies from known locations.
- Add rbxmk.newCookie for creating a cookie from scratch.
- DataModel metadata is now accessed through the Metadata symbol.
- Rename "file" source to "fs".
- Move os.dir and os.stat to the fs library.
- fs.dir and fs.stat return nil if the file does not exist.
- Additions to fs library.
- To reduce the impact of malicious scripts, files can only be accessed by rbxmk from certain locations.
- The working directory.
- The directory of the first running script.
- A temporary directory, accessible via
os.expand("$tmp")
- Changes to os.expand.
- Add the
$root_script_directory
variable, which expands to the directory of the first running script. - The
$temp_directory
variable now points to a temporary directory that is unique per run of rbxmk.
- Add the
Fixes:
- Fix garbled error messages.
Internal:
- Implement automated releases.
See a comparison with the previous version for a thorough list of changes.
The Documentation page provides a complete reference for this version of rbxmk.
Highlights:
- The command-line API now uses sub-commands.
rbxmk run
runs scripts as before.rbxmk help
displays help.rbxmk version
displays the current version.
- Implement Instance attributes.
- Instance.GetAttribute
- Instance.GetAttributes
- Instance.SetAttribute.
- Additional SetAttributes method for efficiently setting all attributes at once.
- Add inheritance-based methods to Instance.
- Format configuration: in APIs where a format string could be passed, a table can be passed instead, which can contain additional options that configure the format.
- The http source has been rewritten.
- Has single http.request function.
- Handles CSRF tokens automatically.
- Add rbxassetid source for accessing assets on the Roblox website.
- Add clipboard source for accessing the operating system's clipboard.
- Currently available only on Windows.
- Add os.stat function for getting the metadata of a file.
- Additions to the math library.
- math.log from Lua 5.2.
- math.clamp from Roblox.
- math.round from Roblox.
- math.sign from Roblox.
- Additions to the table library.
- table.pack from Lua 5.2.
- table.unpack from Lua 5.2.
- table.move from Lua 5.3.
- table.clear from Roblox.
- table.create from Roblox.
- table.find from Roblox.
- Additions to the string library.
- string.split from Roblox.
- Add rbxmk.formatCanDecode function for getting whether a given format can decode into a given type.
- Add json format for decoding JSON data generically, similar to HttpService.JSONEncode/JSONDecode.
- Add csv format for converting general CSV data.
- Add l10n.csv format for converting localization data.
- Instance.new is allowed to create classes with the NotCreatable tag.
- Document
_RBXMK_VERSION
global variable. - Remove rbxmk.readSource and rbxmk.writeSource functions.
Fixes:
- Fix sorting of members returned by ClassDesc.Members.
- Fix error with EnumDesc.AddItem.
- Fix error with RootDesc.AddEnum.
- Fix error when indexing Enums or calling GetEnums.
- Fix Enums.GetEnums returning no values.
- Fix issues with cloned Instances.
- Fix string and double types being returned as empty userdata.
- Fix strings not having a metatable.
See a comparison with the previous version for a thorough list of changes.
The Documentation page provides a complete reference for this version of rbxmk.
Imperative Mode is a complete rewrite of rbxmk from the ground up.
- Versus the previous quasi-declarative Lua API, the new API is completely imperative.
- The API is designed to emulate the Roblox Lua API.
The Documentation page provides a complete reference for this version of rbxmk.