slate
S

slate

@slateorbitt

Building tools and libraries, mostly in Luau. Below are a few of them, some shipped, some still in progress.

UI component library
Live

A set of interface components, such as buttons, inputs, modals, color pickers, pills, toasts, etc. All built to look clean and minimal, inspired by shadcn, with added smoothness.

A component library shared across projects. Full docs on the stack and API are a WIP.

Task scheduler
Live

Runs repeating jobs (checks, animations, timed events) without freezing things if it gets overloaded by a bunch of tasks. You can set how often a job runs, give it priority, pause and resume without losing time, and even cancel a whole group by tag.

All written in a modulescript with strict type checking. Jobs sit in a binary heap by the next run time with priority breaking ties. Cancel, pause, and resume all update the heap directly instead of scanning a list. Pausing saves the exact time left so when you resume, the time doesn't reset. Each job runs in pcall, so one error doesn't break everything else. A time budget and per-step cap spread a pile of jobs that are due across several frames instead of spiking one frame. If the scheduler falls behind, it catches up from the missed slot instead of firing a burst of runs. A ring buffer keeps recent execution traces for debugging.

Coming soon
Promise-style async library
Coming soon

A way to write code that waits for something to finish, like a network request, a timer, or a callback, without piling callbacks on top of callbacks.

Still just something I need to fully finish. Basically a luau version of Promises: you chain .then() and .catch() instead of nesting, and there'd be helpers to wait on multiple things at once or just take whichever finishes first. Not built yet.

Coming soon
Object pooling manager
Coming soon

A system that reuses objects instead of constantly making new ones and deleting them, so the game isn't wasting time on cleanup.

Still need to get to finishing it. It'd work like an object pool for Roblox: you'd grab an instance from a pool that's already allocated instead of calling Instance.new every time, and hand it back instead of destroying it.