Skip to main content

· 2 min read
fireboltofdeath

Change Log

@flamework/core @flamework/components @flamework/networking rbxts-transformer-flamework

Additions

Core

  • Fixed the constructor field always being undefined on decorator descriptors.

Networking

  • Fixed a bug where Flamework would always create both a reliable and unreliable remote.

Transformer

  • Reflection support for roblox-ts decorators.
  • Added support for nominal fields in guard generation.
    • This means types like string & { _nominal_mynominalfield: never } will become just t.string
  • Fixed bug that triggered a diagnostic when extending a user macro class.
  • Fix crash when generating guards with an unknown field.

· 2 min read
fireboltofdeath

Change Log

@flamework/core @flamework/components @flamework/networking rbxts-transformer-flamework

Additions

Core

  • Updated @rbxts/t to latest

Components

Networking

  • Networking now supports unreliable remote events
  • Networking now supports namespaces
  • Generated event names are now shuffled to avoid const-matching.
  • Flamework no longer erases symbol information on events, so Find All References and similar tools will now function properly.
  • The networking module was rewritten. The behavior should be mostly the same, but there are some small differences.
    • The way remotes are created is now different.
    • Guards are now implemented as a middleware, which means event.predict/function.predict will now be affected by guard checking.

Transformer

  • buffer, OverlapParams and FloatCurveKey are now supported by guard generation.
  • Improved emit for user macro objects by omitting fields that result in undefined.

· 7 min read
fireboltofdeath

Change Log

Flamework is finally entering its long overdue v1.0.0, and along comes with a plethora of changes.

There have been many breaking changes made to ensure the longevity of Flamework and you should read all of these changes before migrating to v1.0.0.

A migration guide detailing the larger changes has been included here but it is still recommended that you read the full release notes.

@flamework/core @flamework/components @flamework/networking rbxts-transformer-flamework

This release contains breaking changes.

Breaking Changes

Packages that depend on Flamework v1.0.0-beta will not be compatible with Flamework v1.0.0 projects.

Transformer

  • Flamework decorators are now evaluated in the opposite order (bottom -> top) to match TypeScript behavior.

Core

  • Flamework decorators now support abstract classes.
  • Improved glob support
  • The @External() decorator has been renamed to @Optional() to better communicate intent.
  • The Flamework.registerExternalClass function has been renamed to Flamework.includeOptionalClass.
    • It is no longer necessary to explicitly include optional singletons, if they are part of your game's dependency graph.
  • Reflect.metadata, Reflect.objToId and Reflect.decorators are no longer exposed.
  • Flamework.Testing was removed.
  • Flamework.isInitialized, Flamework.flameworkConfig have been removed.
  • Flamework.ignite() no longer accepts a config object.
  • Modding.Generic and Modding.Caller have been renamed to Modding.GenericMany and Modding.CallerMany respectively.
    • The new Modding.Generic and Modding.Caller types are able to fetch individual metadata rather than an object containing metadata.
  • Flamework.hash now uses type arguments, such as Flamework.hash<"text", "context">()
  • Dependency(T) syntax has been removed in favor of Dependency<T>() for the sake of consistency.

Components

Networking

Additions

Core

Components

Networking

  • Networking configuration refactor
  • Improved networking handlers
  • Removed type-based symbol obfuscation, which avoids a common roblox-ts bug with incremental mode.
  • Networking is now mocked in edit mode to support use cases like UI stories.
  • Server config and generated type guards are no longer exposed to the client by default.

Transformer

  • Improved stability, all builtin Flamework macros have been converted to use the user macro machinery.
  • Added guard generation support for the Font datatype. I know, you're welcome.
  • User macros now support union parameters, to optionally generate metadata.
  • Modding.Many user macro types can now be nested.
  • Fixed some incorrect node factory functions, which caused Flamework to erase certain tokens are generated emit.

· One min read
fireboltofdeath

Change Log

This is a maintenance update containing bug fixes, performance improvements and usability improvements.

@flamework/core @flamework/components @flamework/networking rbxts-transformer-flamework

Transformer

  • Fixed macros not transforming inside decorators and specialized decorator fields.
  • Improved type guard generation errors and added elaboration for some types.

Core

  • Improved performance for OnTick, OnPhysics and OnRender lifecycle events by recycling threads.

Components

  • Improved component warnings.
    • Component warnings now include the component class name and no longer includes the component identifier.
    • You can now click on the instance name (note, not the path) to travel directly to that instance.

Networking

  • Added an option to warn on failed requests.
    • This can be enabled/disabled using the warnOnInvalidGuards in your networking configuration.
    • By default, warnOnInvalidGuards is enabled only in Studio.

· 4 min read
fireboltofdeath

Change Log

Flamework will begin releasing packages with matching versions. You should use the same version for every Flamework package.

@flamework/core @flamework/components @flamework/networking rbxts-transformer-flamework

This release contains breaking changes.

Transformer

  • TypeScript is now a peer dependency.
  • Flamework will user the correct parameter length for user macros where it previously didn't (such as tuple rest parameters.)
  • delete expressions will now work on component attributes.
  • Improved union simplification for literal guard generation.
    • All literal guards will combine to a single guard, e.g 1 | 2 will no longer become t.union(t.literal(1), t.literal(2))

Core

  • Added a profiling option to flamework.json to enable memory categories and microprofiler labels.
  • Advanced user macros

Components

  • Added doc comments to all component methods, also removed unnecessary overloads.
  • Added waitForComponent API to wait until a component is added to a specific instance.
  • Components will now warn whenever a component could not be created for 5+ seconds.
    • You can define warningTimeout in your component settings to override the time, set to 0 to disable.
  • Added the ability to whitelist/blacklist specific ancestors.
    • These can be specified using ancestorWhitelist and ancestorBlacklist in your component settings.
    • [BREAKING] Defaults to ancestorBlacklist: [ServerStorage, ReplicatedStorage]
    • [BREAKING] This does not update when components are reparented.

Networking

  • Fixed an error whenever NaN was sent as an ID.

· 4 min read
fireboltofdeath

Change Log

@flamework/core @flamework/components @flamework/networking rbxts-transformer-flamework

Transformer

Core

  • Added a warning for calling the Dependency macro prior to ignition and during preloading.
  • Added support for file globs with addPaths by using addPaths({ glob: "file" }, ..)
  • Fixed incorrect Modding.resolveSingleton return type.
  • Singletons are now generic and you can define your own
    • Using the flamework:singleton metadata and flamework:loadOrder metadata
  • Singletons are now topologically sorted based on dependencies.
    • This should remove the need for specifying loadOrder in all but rare cases.

Components

Networking

  • RemoteFunctions now have custom timeouts with the invokeWithTimeout method.
  • You can now provide configuration to your networking.
  • RemoteEvents now use Roblox's networking queue which will not fire events until after there is a listener.
  • Rest arguments are now properly supported.

· One min read
fireboltofdeath

Change Log

@flamework/core @flamework/components @flamework/networking rbxts-transformer-flamework

Transformer

  • Added Vector2int16 to guard generation.
  • Fixed a bug when your project has multiple rootDirs

Components

  • Default attributes are now applied as attributes onto instances.
  • Components API will no longer turn explicit component specifiers into their ID form.
  • Components API now allows you to pass strings as the component specifier.
  • Components API now supports inheritance and implements.
    • The new getComponents<T>(instance) API will get all components that implement or extend from T.
    • The getAllComponents<T>() API will also get all components that implement or extend from T.
  • Fixed a bug where onAttributeChanged would report an incorrect oldValue

· 3 min read
fireboltofdeath

Change Log

Transformer

Core

  • Flamework.implements<T>() no longer narrows constructors into T.
  • Flamework's lifecycle events now use the roblox-ts extensions @hideinherited tag.
  • OnInit and OnStart will use separate memory categories per singleton.
  • Added support for modding.

Components

  • [BREAKING] Components no longer call super.onStart() implicitly.
  • Components now use the modding API internally
    • This means you can use custom lifecycle events on components.

Networking

  • Connect macro guard generation now takes into account optional parameters.

Modding

  • [BETA BREAKING] Modding.createDependency no longer adds the dependency as a listener and must be done separately.
  • You can create Flamework decorators.
  • You can create custom lifecycle events.
  • Deferred dependency API allows you to delay the constructor of a class.
  • Decorators can request specific compile-time metadata.
  • Dependency resolution can be modified, extended or overridden.
  • You can add custom values into Flamework's default dependency resolution.
    • Modding.addDependency(Flamework.id<SomeType>(), objOfSomeType)

· 2 min read
fireboltofdeath

Change Log

This release is primarily bug fixes. Some bugs may require manual action on your part, see transformer and networking

Transformer

  • Fixed conditional type guard generation.
  • Fixed properties that do not have initializers in components.
  • Fixed constructor-inferred types on components.
  • Fixed abstract members on components.
  • Fixed Enum guard generation.
  • Fixed Enum union (Enum.A | Enum.B) guard generation.
  • Add warning when Dependency macro is outside of a function.
  • Add support for EnumItem literal guard generation.
  • Decreased output clutter when compiling in verbose mode.
  • Improved TS version mismatch errors.
Potentially breaking

Core

  • Removed preloaded messages

Networking

  • Server-sided events and functions now have predict methods.
Potentially breaking
  • Middleware and networking function connections are now (optionally) asynchronous.
    • This may require changes for existing networking function middleware, as processNext now returns a promise.

Components

  • Fixed incorrect return type on Components.getComponent

· 3 min read
fireboltofdeath

Change Log

Transformer

  • Consistent ID generation for non-obfuscated packages.
  • SourceFiles are validated prior to Flamework transforming them.
    • This can lead to slightly slower compile times, but decreases chance of incorrect emit and diagnostics.
    • You can disable this via the transformer's noSemanticDiagnostics option, but this is not recommended.

Core

  • Flamework.addPaths now has glob support.
    • Flamework.addPaths("src/features/*/server")

Networking

Components

  • Added Components.getAllComponents<T>() for fetching all components of a certain type.
  • Components will move all constructor logic (fields, constructor body, etc) into onStart automatically.
    • If you're not using the OnStart event, you cannot have a method named onStart in a component.