Skip to content

Installation

Wisp ships as plain Luau source in a single folder. There is nothing to compile and no dependencies to resolve — you either drop it directly into your folder or use a toolchain packager.

With Wally

Add Wisp to your wally.toml configuration file:

wally.toml
[dependencies]
Wisp = "b0nn133/wisp@0.1.0"

Run wally install, then ensure your default.project.json file maps your Packages folder so Rojo can sync it into your game layout:

default.project.json
{
  "name": "my-game",
  "tree": {
    "$className": "DataModel",
    "ReplicatedStorage": {
      "$className": "ReplicatedStorage",
      "Packages": {
        "$path": "Packages"
      }
    }
  }
}

Manual Installation (Rojo / Git Submodules)

Because Wisp has zero dependencies (well, technically only one: Luau itself), you can manually clone it straight into your repository workspace using Git:

git submodule add https://codeberg.org/lustre/wisp.git Packages/wisp

Then map the path manually inside your syncing config tree:

default.project.json
{
  "name": "my-game",
  "tree": {
    "$className": "DataModel",
    "ReplicatedStorage": {
      "$className": "ReplicatedStorage",
      "Packages": {
        "wisp": {
          "$path": "Packages/wisp/src"
        }
      }
    }
  }
}

Direct Roblox Studio Install

If you are not using an external text editor toolchain or Rojo, you can install Wisp natively: 1. Grab the latest .rbxm from the releases page 2. Drag and drop the model file directly into your Roblox Studio Explorer panel view. 3. Place the wisp ModuleScript wherever you prefer (such as ReplicatedStorage).

tests/run.luau
local Wisp = require("../src")

Wisp.suite("works"):action("under the CLI", function()
  Wisp.assume(true):isTrue()
end)

return Wisp()
luau tests/run.luau

Wisp itself is developed this way — see Contributing.

Luau must support backtick string interpolation

Wisp's source uses backtick string interpolation and utf8.char. Older or restricted Luau builds may not support these. If you are targeting an engine version where they are unavailable, transpile the source or use a recent Lune/luau CLI profile.


Verifying the install

Add a throwaway suite and run it. You should see a clean check mark and a zero-failure layout summary:

local Wisp = require("path/to/wisp")

Wisp.suite("Wisp:install")
  :action("is working", function()
    Wisp.assume(true):isTrue()
  end)

Wisp()
Wisp:install
 ✓ is working

Suites: 1 passed out of 1 total
Tests:  1 passed out of 1 total

Took:   0.05ms

If you get attempt to index a nil value or require path must start with a valid prefix, your require path does not match where you placed the module directory.

Next

Write your first real test layout in Your First Test.