Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
146 commits
Select commit Hold shift + click to select a range
882c9c2
Refactor SerialSimulation
weenachuangkud Sep 14, 2026
c7d08fb
Refactor ParallelSimulation
weenachuangkud Sep 14, 2026
ee1bc16
Fix useless comments
weenachuangkud Sep 14, 2026
670771b
make things a little better
weenachuangkud Sep 14, 2026
1c5c8e7
Making things better
weenachuangkud Sep 14, 2026
709c9ee
edit smth
weenachuangkud Sep 14, 2026
0d97ea6
edit
weenachuangkud Sep 14, 2026
c3b3794
edit
weenachuangkud Sep 14, 2026
3bce9be
edit
weenachuangkud Sep 14, 2026
4db89f7
Remove useless things
weenachuangkud Sep 14, 2026
e59b0ff
Update order
weenachuangkud Sep 14, 2026
bc6112c
Fix
weenachuangkud Sep 14, 2026
c735011
Add shit back
weenachuangkud Sep 15, 2026
65625ce
edit
weenachuangkud Sep 15, 2026
66e5fdf
Fix shit
weenachuangkud Sep 15, 2026
46ea88b
edit
weenachuangkud Sep 15, 2026
14a18d7
edit
weenachuangkud Sep 15, 2026
498fe99
edit 2
weenachuangkud Sep 15, 2026
60e7732
fix stuffs
weenachuangkud Sep 15, 2026
b9174c2
fix stuffs
weenachuangkud Sep 15, 2026
5c67e97
Fix setmovement for motor6D
weenachuangkud Sep 15, 2026
d0e2698
Fix some more things
weenachuangkud Sep 15, 2026
f17f4b6
Fixes
weenachuangkud Sep 15, 2026
7114128
Fix
weenachuangkud Sep 15, 2026
c454bfd
Fixes
weenachuangkud Sep 15, 2026
6190377
omg
weenachuangkud Sep 15, 2026
9c0a0e0
Pass ActivesRef
weenachuangkud Sep 15, 2026
8e46f9e
Fix simulation logic bugs
weenachuangkud Sep 15, 2026
b4cbaa3
Add NOTE
weenachuangkud Sep 15, 2026
d63b329
Fix Serial CastTerminating: invoke user callback before cleanup
weenachuangkud Sep 15, 2026
fe606b7
RS:BindToSimulation
weenachuangkud Sep 16, 2026
69081bb
Improve benchmarks scripts
weenachuangkud Sep 16, 2026
59c2b69
Performance: optimize SerialSimulation event system and allocations
weenachuangkud Sep 16, 2026
5cca89b
Performance: optimize ParallelSimulation event system and allocations
weenachuangkud Sep 16, 2026
f76b645
Fix annoying warning
weenachuangkud Sep 16, 2026
8a0da25
Fix Serial architecture + add RAY_SEARCH_OFFSET for pierce prevention
weenachuangkud Sep 16, 2026
820ce8c
Fix RAY_SEARCH_OFFSET to only apply after a pierce
weenachuangkud Sep 16, 2026
fe6a0e1
fix: consolidate TerminateCast, add cast.Mode, use table.clear
weenachuangkud Sep 16, 2026
11c3c9b
fix: audit fixes for TerminateCast consolidation
weenachuangkud Sep 16, 2026
bb570ec
Optimizing shit
weenachuangkud Sep 16, 2026
9b52211
test: add automated Studio test and benchmark suite
Naymmmm Sep 17, 2026
df60ab9
test: isolate benchmark failures and broaden serial coverage
Naymmmm Sep 17, 2026
6409067
Merge branch 'feature/test/automated-suite' into test/automated-suite
Naymmmm Sep 17, 2026
10a6b5f
fix: correct refactor regressions found by the suite
Naymmmm Sep 17, 2026
b4c35cb
Merge pull request #94 from Shellworks-Development/test/automated-suite
weenachuangkud Sep 17, 2026
4c9c4c1
perf: optimize cast simulation hot paths and add benchmarks
Naymmmm Sep 17, 2026
9d3e439
Merge pull request #95 from Shellworks-Development/t3code/parallel-pr…
weenachuangkud Sep 17, 2026
745c25d
feat(events): replace BindableEvent caster events with Signal
Naymmmm Sep 18, 2026
0de045e
Merge weenachuangkud-refactor into signals branch
Naymmmm Sep 18, 2026
20973b7
Merge pull request #96 from Shellworks-Development/t3code/implement-s…
weenachuangkud Sep 18, 2026
803f274
fix: initialize parallel actors reliably on the client
Naymmmm Sep 18, 2026
4dc7ec1
docs: note the client ContainerParent requirement for parallel casters
Naymmmm Sep 18, 2026
d8d8a5c
perf: batch parallel fire requests into one message per worker per frame
Naymmmm Sep 18, 2026
ac5530c
Merge pull request #98 from Shellworks-Development/perf/parallel-batc…
weenachuangkud Sep 18, 2026
4f924e5
Merge pull request #97 from Shellworks-Development/fix/client-paralle…
weenachuangkud Sep 18, 2026
cc277d7
Checkmark some shits
weenachuangkud Sep 18, 2026
4a83ed5
Merge branch 'main' into weenachuangkud-refactor
weenachuangkud Sep 18, 2026
e153737
Simplify FastCastParallel initialization for parallel luau
weenachuangkud Sep 18, 2026
b7639fa
Update FastCastParallel:Init API
weenachuangkud Sep 18, 2026
dfd885e
Update BenchmarkClient.client.luau
weenachuangkud Sep 18, 2026
de65422
Update FastCastParallel:Init API
weenachuangkud Sep 18, 2026
a66d2b1
Update FastCastParallel:Init API
weenachuangkud Sep 18, 2026
90c1200
Update
weenachuangkud Sep 18, 2026
177552c
Update FastCastParallel:Init API
weenachuangkud Sep 18, 2026
650602a
Update FastCastParallel:Init API
weenachuangkud Sep 18, 2026
b4044bb
docs: Update FastCastParallel:Init API
weenachuangkud Sep 19, 2026
0f2a8bb
Update README.md
weenachuangkud Sep 19, 2026
a0a019a
Update CasterParallel
weenachuangkud Sep 20, 2026
2cc70ef
Change rojo version to v7.7.0
weenachuangkud Sep 20, 2026
f61521b
Add GitHub Actions workflow to run tests
weenachuangkud Sep 20, 2026
19b7f07
Delete .github/workflows/run-tests.yml
weenachuangkud Sep 20, 2026
c79dca6
fix: can't benchmark after first benchmark
weenachuangkud Sep 21, 2026
56f29c8
Fix: benchmark for server
weenachuangkud Sep 21, 2026
0338d30
Update benchmarks.project.json to include Packages path
weenachuangkud Sep 21, 2026
9904973
Add wally.toml to benchmarks for ByteNet
weenachuangkud Sep 21, 2026
5bf6bb0
implement: ByteNet input sender to server for client benchmark
weenachuangkud Sep 21, 2026
93d64b2
Create BenchmarkPackets.luau
weenachuangkud Sep 21, 2026
63cdddc
Add BenchmarkPackets path to benchmarks.project.json
weenachuangkud Sep 21, 2026
3154854
Refactor chat handling and input mapping
weenachuangkud Sep 21, 2026
e01f70c
Add missing [package]
weenachuangkud Sep 21, 2026
7de960b
Add missing fields
weenachuangkud Sep 21, 2026
7f57d00
fix: wally.toml
weenachuangkud Sep 21, 2026
fbeb774
Fix: typo
weenachuangkud Sep 21, 2026
bdc0951
Update README.md
weenachuangkud Sep 22, 2026
a63c109
Update README.md
weenachuangkud Sep 22, 2026
36d31c5
Fix README.md
weenachuangkud Sep 22, 2026
f240df9
Update CONTRIBUTING.md
weenachuangkud Sep 22, 2026
aa9f666
Update intro.md
weenachuangkud Sep 22, 2026
916ed21
Update FastCastParallel:Init API
weenachuangkud Sep 23, 2026
2af3e65
Fix parallel ObjectCache and FastCastEventsModule handling
weenachuangkud Sep 23, 2026
3215d53
Fix: comment error
weenachuangkud Sep 23, 2026
42ebb81
Fix serial CastFire and ObjectCache handling
weenachuangkud Sep 23, 2026
4ab899f
Fix: comment error
weenachuangkud Sep 23, 2026
4d23fd5
Remove useless comment
weenachuangkud Sep 24, 2026
613c97f
Fix comments
weenachuangkud Sep 24, 2026
9d8633a
Remove ObjectCache
weenachuangkud Sep 29, 2026
7645c93
Delete src/ObjectCache.luau
weenachuangkud Sep 29, 2026
aa4861d
Remove ObjectCache
weenachuangkud Sep 29, 2026
4b462c5
Update BaseCastSerial.luau
weenachuangkud Sep 29, 2026
4171bff
Remove ObjectCache
weenachuangkud Sep 29, 2026
2b528a6
Remove ObjectCache
weenachuangkud Sep 29, 2026
47de23c
Remove automatic clean up
weenachuangkud Sep 29, 2026
37d382d
Remove ObjectCache
weenachuangkud Sep 29, 2026
d997464
Remove ObjectCache
weenachuangkud Sep 29, 2026
6a712c2
Remove unused variable
weenachuangkud Sep 29, 2026
8c0141e
Remove ObjectCache parameters for :Init()
weenachuangkud Sep 29, 2026
60928c7
Fix CastFire
weenachuangkud Sep 29, 2026
d7eadf7
Add _TerminationQueued = false
weenachuangkud Sep 29, 2026
90df7aa
Fix :TerminateCast
weenachuangkud Sep 29, 2026
f82a1d6
Add _TerminationQueued
weenachuangkud Sep 29, 2026
21e920d
Unregister when called TerminateCast
weenachuangkud Sep 29, 2026
cd61710
Fix :Destroy function
weenachuangkud Sep 29, 2026
1be664c
Update TypeDefinitions.luau
weenachuangkud Sep 29, 2026
9afd383
Update TypeDefinitions.luau
weenachuangkud Sep 29, 2026
f34aed7
Update init.luau
weenachuangkud Sep 29, 2026
ff50247
Update init.luau
weenachuangkud Sep 29, 2026
0147d3d
Add comment regarding OOP preference for performance
weenachuangkud Sep 29, 2026
fd9430a
docs: update README for refactor
weenachuangkud Sep 29, 2026
7c2188e
docs: update Thai README for refactor
weenachuangkud Sep 29, 2026
52e977b
docs: update intro for refactor
weenachuangkud Sep 29, 2026
e32e783
docs: update API reference for refactor
weenachuangkud Sep 29, 2026
37082ec
docs: update cheatsheet for refactor
weenachuangkud Sep 29, 2026
f3187a2
docs: update refactor changelog
weenachuangkud Sep 29, 2026
861f745
docs: finish API reference refactor update
weenachuangkud Sep 29, 2026
bbbc0e1
docs: finish cheatsheet refactor update
weenachuangkud Sep 29, 2026
67c0d7c
docs: fix remaining intro API examples
weenachuangkud Sep 29, 2026
1817c86
docs: fix remaining README API example
weenachuangkud Sep 29, 2026
bb3b9c1
docs: fix remaining Thai README API example
weenachuangkud Sep 29, 2026
1ebeab9
docs: remove stale ObjectCache example
weenachuangkud Sep 29, 2026
fb46e1c
docs: remove stale ObjectCache test checklist
weenachuangkud Sep 29, 2026
5599bf3
docs: mark README update complete
weenachuangkud Sep 29, 2026
c3e4ab8
docs: remove stale ObjectCache test docs
weenachuangkud Sep 29, 2026
21e3dc4
docs: update benchmark README for refactor
weenachuangkud Sep 29, 2026
ebdbe82
docs: remove final stale parallel Init docs
weenachuangkud Sep 29, 2026
2775800
bench: remove ObjectCache from client benchmark
weenachuangkud Sep 29, 2026
f727771
bench: remove ObjectCache from server benchmark
weenachuangkud Sep 29, 2026
fb73a2a
bench: remove remaining stale ObjectCache references
weenachuangkud Sep 29, 2026
ed6a6d3
bench: remove remaining stale ObjectCache references
weenachuangkud Sep 29, 2026
ae285c2
bench: remove stale ObjectCache info output
weenachuangkud Sep 29, 2026
2cc6e34
Update changelog.md
weenachuangkud Sep 29, 2026
f75d2e2
Update changelog.md
weenachuangkud Sep 29, 2026
1987f3d
Update ActiveCast.luau
weenachuangkud Sep 29, 2026
c0664b2
Conditionally clone CosmeticBulletObject
weenachuangkud Sep 29, 2026
33c1ed9
Update TypeDefinitions.luau
weenachuangkud Sep 29, 2026
f84e6a5
Add CloneTemplate option to DefaultConfigs
weenachuangkud Sep 29, 2026
07c7df8
Update api-reference.md
weenachuangkud Sep 29, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ sourcemap.json
/node_modules
/package-lock.json


# FastCast2 related stuff
/src/*.legacy.luau
.aider*
Expand All @@ -24,4 +25,4 @@ sourcemap.json

# Development related stuff
DevPackages
build
build
8 changes: 4 additions & 4 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,6 @@ This project is open-source and community-driven, and **all kinds of help are we
- Commit your changes
- Push to your fork
- Open a **Pull Request** against the `main` branch
- You must provide **RBXM** file to the author for release (Optional) <br>
> (Only if the author aka **Mawin_CK** himself requested you to provide **RBXM** for the release)

All pull requests will go through **code review** before merging.

Expand All @@ -33,7 +31,7 @@ All pull requests will go through **code review** before merging.
### Commit Message Guidelines

Examples:
- `fix: prevent nil reference in ObjectCache`
- `fix: prevent nil reference in cast cleanup`
- `feat: add BulkMoveTo support for parts.`
- `docs: improve usage example for parallel mode.`
- `chore: update Luau types in Caster.`
Expand All @@ -58,7 +56,9 @@ I'm not strict about changelogs, and I don't really bother writing explicit chan
- Keep discussions technical and constructive

### Testing
- Read manual testing instructions: https://github.com/weenachuangkud/FastCast2/blob/main/TESTS.md
- Run the automated suite before opening a PR: `npm test` (or `lune run tests/run.luau`)
- It runs the functional tests and benchmark matrix in Studio and uploads the report to paste.shellworks.dev; see [`tests/README.md`](tests/README.md)
- Manual checklist / coverage reference: [`TESTS.md`](TESTS.md)

### Questions?

Expand Down
142 changes: 82 additions & 60 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,69 +45,70 @@ Because FastCast is no longer actively maintained by [EtiTheSpirit](https://gith
- Raycast and Blockcast, Spherecast support
- BulkMoveTo/Motor6D support
- Built-in castVisualization
- Built-in ObjectCache
- Built-in HighFidelitySegment control
- Flexible and extensible design
- Flexible, extensible
- High Performance

FastCast2 is an open-source project, and contributions from the community are welcome. <br />
Read more on [FastCast2 devforum](https://devforum.roblox.com/t/fastcast2-an-improved-version-of-fastcast-with-parallel-scripting-more-extensions-and-statically-typed/4093890)
FastCast2 is an open-source project, and contributions from the community are welcome — see [Contributing](#contributing) below.

---
# Installation guide
## Installation guide


1. Go to [Releases](https://github.com/weenachuangkud/FastCast2/releases) and install the `.rbxm` file from the latest release.
### 1. Model file (.rbxm)

1. Go to [Releases](https://github.com/weenachuangkud/FastCast2/releases) and download the `.rbxm` file from the latest release.
2. Open Roblox Studio and open any project.
3. Go to **File → Import Roblox Model** and import the `.rbxm` file.
4. After importing, **FastCast2** will appear in your Workspace.
5. Drag **FastCast2** into **ReplicatedStorage**.
6. Done, and you’re ready to use FastCast2.

---

## Install with [Wally](https://wally.run/)

1. Make you have installed Wally: https://wally.run/install
2. After you've installed Wally, make sure to `wally init`
3. Then inside `wally.toml` below `[dependencies]` copy and paste `FastCast2 = "weenachuangkud/fastcast2@0.1.4"`
4. Run `wally install`, and you're ready to use

NOTE: This does not include rojo setup
6. Done — you're ready to use FastCast2.

### 2. Install with [Wally](https://wally.run/)

1. Make sure you have [Wally installed](https://wally.run/install).
2. Run `wally init` if you haven't already.
3. Add FastCast2 under `[dependencies]` in your `wally.toml`:
```toml
FastCast2 = "weenachuangkud/fastcast2@0.1.4"
```

4. Run `wally install` and you're ready to use it.
> **Note:** This does not include a Rojo setup, you'll need your own `default.project.json` to sync `Packages` into your place.

---

# Code example

Shooting projectiles from your head (Serial mode - simpler, main thread):

## Quick start
Shooting projectiles from your head (Serial mode, simpler, runs on the main thread):
```lua
-- Services
local Rep = game:GetService("ReplicatedStorage")
local Players = game:GetService("Players")

-- Requires
local FastCast2 = require(Rep:WaitForChild("FastCast2"))
local FastCastEnums = require(Rep:WaitForChild("FastCast2"):WaitForChild("FastCastEnums"))

-- CONSTANTS
local SPEED = 500

-- Variables
local player = Players.LocalPlayer
local character = player.Character or player.CharacterAdded:Wait()
local Head = character:WaitForChild("Head")
local Mouse = player:GetMouse()

local ProjectileContainer = workspace:WaitForChild("Projectiles")
local ProjectileTemplate = Rep:WaitForChild("Projectile")

-- CastParams
local CastParams = RaycastParams.new()
CastParams.FilterDescendantsInstances = {character}
CastParams.FilterType = Enum.RaycastFilterType.Exclude
CastParams.IgnoreWater = true

-- Behavior (FastCastBehavior)
local behavior = FastCast2.newBehavior()
behavior.MaxDistance = 1000
Expand All @@ -117,24 +118,23 @@ behavior.HighFidelitySegmentSize = 1
behavior.Acceleration = Vector3.new(0, -workspace.Gravity/2.3, 0)
behavior.CosmeticBulletContainer = ProjectileContainer
behavior.CosmeticBulletTemplate = ProjectileTemplate



-- Serial Caster (runs on main thread, simpler)
local Caster = FastCast2.new()
Caster:Init("BulkMoveTo", false) -- movementMode, useObjectCache

Caster:Init("BulkMoveTo") -- movementMode
-- Events (can be set before Init)
Caster.Hit = function(cast, result, velocity, bullet)
print("Hit: " .. result.Instance.Name)
end

-- Fire
local function fire()
local origin = Head.Position
local direction = (Mouse.Hit.Position - origin).Unit
Caster:RaycastFire(origin, direction, SPEED, behavior)
end

-- Input
game:GetService("UserInputService").InputBegan:Connect(function(input, gameProcessed)
if gameProcessed then return end
Expand All @@ -145,63 +145,52 @@ end)
```

### Blockcast & Spherecast

Swap `RaycastFire` for `BlockcastFire` or `SpherecastFire` to change cast type:

Swap `RaycastFire` for `BlockcastFire` or `SpherecastFire` to change the cast type:
```lua
-- Blockcast: pass a Vector3 size after origin
Caster:BlockcastFire(origin, Vector3.new(2, 4, 2), direction, SPEED, behavior)

-- Spherecast: pass a number radius after origin
Caster:SpherecastFire(origin, 3, direction, SPEED, behavior)
```

### ObjectCache (Or object pooling)
### Cosmetic bullets

ObjectCache reuses cosmetic bullet instances instead of creating/destroying them every shot:
FastCast2 no longer includes a built-in ObjectCache. Manage cosmetic bullet instances yourself and provide them through `behavior.CosmeticBulletTemplate` and `behavior.CosmeticBulletContainer`.

```lua
local Caster = FastCast2.new()
Caster:Init("BulkMoveTo", true, ProjectileTemplate, 500, workspace)
-- ^template ^size ^holder
```

The cache pre-allocates 500 parts by default, auto-expands when exhausted, and moves retired
parts to a far-away CFrame via `BulkMoveTo` — no instance creation/destruction overhead.
FastCast2 also does not automatically destroy or return cosmetic bullets when a cast terminates, so the caller controls their lifecycle.

### Parallel mode


```lua
local Caster = FastCast2.newParallel()
Caster:Init(
4, -- numWorkers
workspace, -- VM folder parent
"FastCastVMs", -- VM folder name
workspace, -- container parent
"VMContainer", -- container name
"VM", -- VM name
"BulkMoveTo", -- movementMode
nil, -- FastCastEventsModule (optional)
false -- useObjectCache
)

-- Events work the same as serial
Caster.Hit = function(cast, result, velocity, bullet)
print("Hit: " .. result.Instance.Name)
end

--[[
-- Except:
-- Caster.CanPierce
--> You will have to use FastCastEventsModule for that
]]

-- Fire the same as serial
Caster:RaycastFire(origin, direction, SPEED, behavior)
Caster:BlockcastFire(origin, Vector3.new(2, 4, 2), direction, SPEED, behavior)
Caster:SpherecastFire(origin, 3, direction, SPEED, behavior)
```


<br />

How to set up [FastCastEventsModule](https://weenachuangkud.github.io/FastCast2/api/TypeDefinitions/#FastCastEventsModule)
Expand Down Expand Up @@ -277,7 +266,7 @@ Motor6D mode uses `Motor6D.Transform` for more performance instead of `BulkMoveT

```lua
local Caster = FastCast2.new()
Caster:Init("Motor6D", false) -- movementMode = "Motor6D"
Caster:Init("Motor6D") -- movementMode = "Motor6D"
```

All active casts automatically get a Motor6D connection on registration and disconnection on cleanup.
Expand All @@ -288,6 +277,18 @@ Caster:SetMovementModeEnabled(true, "Motor6D") -- enable Motor6D
Caster:SetMovementModeEnabled(true, "BulkMoveTo") -- switch back
```

### Simulation configuration

Simulation behavior can be configured in `src/Config.luau`:

```lua
Config.SimulationMode = "PerFrame" -- or "Fixed"
Config.FixedSimulationFrequency = Enum.StepFrequency.Hz60
Config.CosmeticUpdateInterval = 3
```

`PerFrame` uses `PreSimulation` on the client and `Heartbeat` on the server. `Fixed` uses `RunService:BindToSimulation()` at the configured step frequency. `CosmeticUpdateInterval` controls how often cosmetic bullet movement is applied; hit detection still runs every simulation step.

### Cast manipulation

Modify active casts at runtime using the static `FastCast` methods:
Expand Down Expand Up @@ -316,11 +317,33 @@ FastCast2:TerminateCast(cast)

### -> Get started with the [FastCast2 documentation](https://weenachuangkud.github.io/FastCast2/docs/api-reference)

---

## Contributing

FastCast2 is community-driven, and contributions of all kinds are welcome, code, documentation, bug reports, examples, or ideas.

1. Found a bug or have an idea? Open an [Issue](https://github.com/weenachuangkud/FastCast2/issues) first.
2. Want to submit code or docs? Fork the repo, branch off `main`, make your changes, and open a Pull Request.
See [`CONTRIBUTING.md`](CONTRIBUTING.md) for the full guide and [`CODE_OF_CONDUCT.md`](CODE_OF_CONDUCT.md) for community expectations.

<br>


## Benchmarks

FastCast2 includes repeatable client and server benchmarks for raycasts, blockcasts, and spherecasts. They compare serial and parallel execution using creation/cleanup throughput and simulation frame-time percentiles. See the [benchmark guide](benchmarks/README.md) for controls and the ready-to-sync Rojo project.

## Tests

The automated suite runs the functional tests and the six-case benchmark matrix inside Roblox Studio, prints a Markdown results table, and uploads the report to [paste.shellworks.dev](https://paste.shellworks.dev). Run it with `npm test` (or `lune run tests/run.luau`). See the [test guide](tests/README.md) for prerequisites and flags.


---

# People behind FastCast2(Contributors)
- [CK06](https://github.com/weenachuangkud): Main developer, Maintainer, Graphic designer
- [Naymmmm](https://github.com/Naymmmm): Maintainer (Inactive)
- [Naymmmm](https://github.com/Naymmmm): Maintainer
- [EtiTheSpirit](https://github.com/EtiTheSpirit): Original developer
- [Per2iako](https://github.com/Per2iako): Maintainer

Expand All @@ -342,5 +365,4 @@ More broadly, this community feedback has played a significant role in FastCast2
- [90gq31](https://computerunion.miraheze.org/90gq31) — Giving me the opportunity to be part of the community

# Dependency
- [ObjectCache](https://devforum.roblox.com/t/objectcache-a-modern-blazing-fast-model-and-part-cache/3104112)
- [VMsDispatcher](https://github.com/weenachuangkud/VMsDispatcher)
Loading