Mapping Roblox API Surfaces
Three distinct request types trigger three distinct outputs. Identify which one is being asked, then produce only a table (or in Type 1's case, one table plus one fixed trailer row) — no preamble, no summary, no commentary before or after.
| Request Type | Trigger Phrase | Sources to Fetch | Output |
|---|---|---|---|
| 1. Engine API surface | "what to make" + Roblox engine capabilities | Roblox engine capabilities pages + https://setup-rbxcdn.github.io/ref/index.html | One table of Classes/DataTypes/Enums/Globals/Libraries/APIs/Services/Methods/Arguments + fixed trailer row |
| 2. Package discovery | "what to make" + packages/libraries | Roblox community resources (DevForum, GitHub, Roblox Toolbox/Creator Store) | One table: package name, url, how it can be used |
| 3. Package deep-dive | "how to use" + specific package/library name or url | That package's documentation + source code | One table covering every API it offers |
Step 0 — Classify the request. Determine Type 1, 2, or 3 from the user's phrasing. If ambiguous, default to Type 1 when "engine", "Roblox" (generic), Classes/DataTypes/Enums are mentioned; Type 2 when "packages"/"libraries" discovery is implied; Type 3 when a specific named package/library/URL is given.
Type 1: Engine API Surface
Progress:
- Fetch https://setup-rbxcdn.github.io/ref/index.html
- Fetch/derive current Roblox engine capabilities (Classes, DataTypes, Enums, Globals, Libraries, Services, Methods, Arguments, other APIs) relevant to the requested "thing to make"
- Build ONE table with columns: Category | Name | Description (adjust columns as needed, but keep it to a single table)
- Fill rows only with items actually relevant to making the requested thing — not the entire engine dump, unless the user asked for everything
- Append the fixed trailer row exactly as specified (fill in the "Numberof" counts with real counts if determinable from the fetched index, otherwise keep placeholders consistent with the format)
- Output nothing except the single table
Trailer row format (always last row, always included):
Full Reference | Engine API Index (llms.txt) | Complete list of 'Numberof' classes, 'Numberof' data types, 'Numberof' enums, 'Numberof' globals, and 'Numberof' libraries. | Use as the authoritative source for any API not listed above. https://create.roblox.com/docs/llms.txt
Type 2: Package Discovery
Progress:
- Search/fetch Roblox's most popular libraries/packages for the stated goal (DevForum resources, GitHub repos like Roact, Rodux, Knit, Fusion, ProfileService, Promise, Signal, TopbarPlus, etc.)
- Build ONE table: Package/Library Name | URL | How It Can Be Used
- Output nothing except the table
Type 3: Package Deep-Dive
Progress:
- Fetch official documentation for the named package/library (if it exists)
- Fetch/read the source code (GitHub repo, Wally package, etc.) to capture undocumented APIs
- Enumerate everything: public classes, functions, methods, properties, events, constructors, configuration options, arguments/types/defaults, return values
- Build ONE table: API/Member | Type (Method/Property/Event/Function) | Signature/Arguments | Description/Usage
- Do not omit anything found in source even if undocumented
- Output nothing except the table
Example 1 (Type 1):
Input: "What to make: a day/night cycle system"
Output: A single table with rows like Service | Lighting | Controls ClockTime, time of day rendering, DataType | Color3 | RGB color for sky/lighting tweening, Class | Sky | Skybox textures and celestial bodies, Enum | Enum.EasingStyle | Tween interpolation curves, Library | TweenService | Animates property changes over time ... ending with the fixed Full Reference trailer row.
Example 2 (Type 2):
Input: "What to make: a dialogue system — what packages?"
Output: Single table — Package | URL | How It Can Be Used with rows such as Fusion | https://github.com/dphfox/Fusion | Reactive UI state management for building dialogue boxes, Knit | https://github.com/Sleitnick/Knit | Service/controller framework to structure dialogue server-client communication.
Example 3 (Type 3):
Input: "How to use: ProfileService"
Output: Single table — API/Member | Type | Signature | Description with rows like ProfileStore.GetProfileAsync | Method | (profileKey: string, notReleasedHandler) -> Profile? | Loads a player's data profile, Profile.Data | Property | table | Mutable table holding the player's persisted data, Profile:Release | Method | () -> () | Releases the session lock on the profile.
- Always output ONLY the table(s) — zero introductory or closing text, zero markdown headers above/below, zero explanations of what was fetched.
- For Type 1, scope the table to what's relevant to the requested build, not an indiscriminate full engine dump — the full dump is what the trailer row's llms.txt link is for.
- For Type 3, prioritize source code over docs when they conflict or when docs are incomplete/outdated — the goal is total coverage.
- Keep table rows terse; descriptions should be one line, not paragraphs.
- Use real, verifiable names (actual Roblox Class/Enum/Service names, actual package GitHub URLs) — never invent API names.
- Adding a title, intro sentence, or closing note — breaks the "output only a table" requirement.
- Forgetting the fixed trailer row in Type 1 or altering its wording/structure.
- Splitting output into multiple tables when one table was required.
- In Type 3, relying only on official docs and missing APIs only visible in source code.
- In Type 2, listing generic/unmaintained packages instead of currently popular, actively used ones.
- Padding descriptions with filler text instead of concise, usage-focused phrasing.