- Enables migrations by updating reflection database
- Adds migrations for Font and Gui Inset via rbx_dom update
- Add Model Scale support
- Added
Font
support
-
Fixed ref cloning to match Roblox behavior.
When an object is cloned, any properties referencing another object will:
- refer to a cloned object if the referenced object is a descendant of the root cloned object
- refer to the original object if the referenced object is not a descendant of the root cloned object
Previously, refs would always refer to the original object, which means operations like
remodel.writePlaceFile("clone.rbxl", game:Clone())
would result in every object reference property beingnil
. -
Implemented ref-to-lua conversion so
getRawProperty
can read object reference properties.
- Fixed writeExistingPlaceAsset to serialize datamodel properly. (Datamodel itself does not get serialized; datamodel children are all serialized at the top level. Oops!)
- Update dependencies
- Breaking: Made runtime async in a Roblox-like way.
Yielding operations now yield the current coroutine, then resume it when the operation is complete.
Internally, the "main" coroutine handles task scheduling and resuming.
Remodel will run until all coroutines it's aware of are complete. - Breaking: Made most
remodel.*
functions async.
It is now possible to run multiple heavy remodel operations in parallel. - Added
task
library basics. - Added
remodel.httpRequest
, which takes RequestAsync-like request options and returns RequestAsync-like response data. Remodel handles Roblox cookies, API keys, and CSRF for you (if you tell it to, see the readme). - Removed built-in methods for audio permissions and asset info requests. Error handling, retries, and concurrency can be better handled for these through the
remodel.httpRequest
API.
- Added
remodel.runCommand
since Luau does not have access to theos
orio
libraries need to run commands.
- Breaking: Luau is used instead of Lua 5.3
- Added
remodel.checkAudioPermissions(universeId, assetIds)
andremodel.grantAudioPermissions(universeId, assetIds)
- Added
remodel.getAssetInfos(assetIds)
- Upgraded dependencies
- Upgraded Rust edition to 2021
- Breaking: Reordered parameters of
remodel.writeModelFile
andremodel.writePlaceFile
to accept path first, then content (#81). - Added
Instance:ClearAllChildren()
. (#84) - Added
remodel.removeFile(path)
andremodel.removeDir(path)
. (#80) - Fixed behavior of reading files in
.remodel
directory. (#83) - Changed to
rbx_cookie
for authentication. (#87)
- Switched from
rlua
tomlua
, which should improve Lua performance slightly. (#73) - Updated all dependencies to improve Roblox compatibility.
- Updated to latest rbx-dom libraries.
- Increased Roblox API request timeout from 30 seconds to 3 minutes. (#63)
- Updated to rbx-dom 2.0 ecosystem.
- Added Instance:GetFullName() (#49)
- Added
Instance:FindFirstChildOfClass()
(#50) - Added support for CFrame (#48)
- Added support for Vector3, and improved Vector3int16 (#46)
- Added Color3.fromRGB(red, blue, green) (#44)
- Added
json.toStringPretty
(#55)
- Updated to latest rbx_xml, which should fix
OptionalCoordinateFrame
-related issues.
- Ported to rbx-dom v2, which includes full support for binary and XML model files.
- Changed all upload commands to upload as binary instead of XML.
- Added support for CSRF negotiation to fix asset uploading. (#25)
- Added support for Vector3int16.
- Added support for BinaryString values.
- Added Instance:GetDescendants().
- Fixed first argument to
remodel run
script being eaten by Remodel. (#19)
- Breaking: Moved script execution to
remodel run
to make room for new subcommands.- If you previously used
remodel foo.lua
, useremodel run foo.lua
now.
- If you previously used
- Added
--verbose
and-v
flags for setting verbosity. - Added
json.fromString
andjson.toString
for encoding/decoding JSON - Added
remodel.isFile
andremodel.isDir
. - Added support for reading the auth cookie through the
REMODEL_AUTH
environment variable. - Added support for Remodel looking for scripts in the
.remodel
folder of a projectremodel run foo
will now run.remodel/foo.lua
if it exists.
- Added (experimental) support for building Rojo projects through
rojo.buildProject
.- This is behind the
unstable_rojo_api
Cargo feature and is not enabled by default.
- This is behind the
- Improved logging and error reporting across the board.
- Upgraded reflection database and dependencies.
- Error messages should now be improved, thanks to an rlua upgrade
- XML models with CRLF line endings should no longer error spuriously, thanks to an rbx_xml upgrade
- Breaking:
Instance.new
now only works for instances that actually exist. - Added
Instance:Clone()
for copying instances all over the place, as is Roblox tradition. (#12) - Added
DataModel:GetService()
for finding services and creating them if they don't exist, like Roblox does. (#10) - Added
remodel.getRawProperty(instance, name)
, a clunky but powerful API for reading properties with no validation. - Added
remodel.setRawProperty(instance, name, type, value)
for writing properties with no validation. - Fixed Remodel dropping unknown properties when reading/writing XML models. This should make Remodel's behavior line up with Rojo.
- Improved error messages in preparation for #7 to be fixed upstream.
- Remodel Windows binaries now statically link the MSVC CRT, which should improve portability.
- Added
Instance.new
for creating instances. - Added
Instance:Destroy()
for destroying instances instead of just parenting them to nil.- Unlike Roblox, no properties can be accessed on a destroyed instance or else Remodel will throw an error. Be careful!
- Added APIs for interacting with models and places on Roblox.com:
remodel.readModelAsset
remodel.readPlaceAsset
remodel.writeExistingModelAsset
remodel.writeExistingPlaceAsset
- These APIs will pull your
.ROBLOSECURITY
cookie from Roblox Studio if you're on Windows, or you can pass a cookie explicitly using--auth [cookie]
- Added
remodel.readDir
for enumerating directories. - Added early support for
rbxm
models inremodel.readModelFile
andremodel.writeModelFile
.- When an
rbxm
model is written or read, a warning will be printed to the console.
- When an
- Added
remodel.writeFile
andremodel.readFile
for handling regular files. - Added support for
==
on instances. - Added support for reading and writing
Parent
on instances. - Added script file name in error stack traces.
- Improved CLI documentation. Try
remodel --help
! - Added support for extra arguments. They're passed into the script as
...
. - Added support for reading from stdin. Use
-
as the input file!echo "print('Hi')" | remodel -
- Breaking: split
remodel.load
intoremodel.readPlaceFile
andremodel.readModelFile
.readPlaceFile
can only readrbxlx
files, and returns aDataModel
instance.readModelFile
can only readrbxmx
files, and returns a list of instances.
- Breaking:: split
remodel.save
intoremodel.writePlaceFile
andremodel.writeModelFile
.writePlaceFile
can only writerbxlx
files.writeModelFile
can only writerbxmx
files.- This split helps Remodel avoid funny tricks to detect what encoding scheme to use.
Initial release!
- Basic API for loading and saving places, as well as creating directories
- Single-command CLI that runs a Lua 5.3 script with Remodel APIs