Asphalt requires a asphalt.toml file in your project root. This file defines the Roblox creator, code generation settings, and asset inputs.
Configuration Schema
creator
Defines the Roblox identity for uploads.
type: Either "user" or "group".id: The numeric Roblox ID.
codegen (optional)
Controls how Luau or TypeScript files are generated.
typescript: (boolean) If true, generates TypeScript definitions.style: "flat" (default) or "nested". Use "flat" to index assets like paths. Use "nested" for Luau projects since it doesn't support template literal types.strip_extensions: (boolean) Whether to remove file extensions from generated names. Defaults to false.content: (boolean) If true, outputs Content types instead of strings. Defaults to false.
inputs
A map of input names to configurations.
path: A glob pattern matching files to upload.output_path: The directory where generated code is placed.output_basename: The filename for generated files (defaults to input name).web: A map of relative paths to existing Roblox assets (e.g., "filename.png" = { id = 12345 }). This allows you to define assets already on Roblox so they are referenced in code without re-uploading.bleed: (boolean) Whether to alpha bleed images. Defaults to true. Note: changing this does not invalidate the lockfile or trigger re-uploads.
#:schema https://raw.githubusercontent.com/jackTabsCode/asphalt/refs/heads/main/schema.json
[creator]
type = "user"
id = 9670971
[codegen]
typescript = true
style = "flat"
[inputs.assets]
path = "assets/**/*"
output_path = "src/shared"
[inputs.assets.web]
"some_sound_on_roblox.ogg" = { id = 123456789 }
"some_image_on_roblox.png" = { id = 987654321 }