Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
144 commits
Select commit Hold shift + click to select a range
ad05bc1
Add React Luau dependency
ryanlua Feb 13, 2026
cdd65fb
Add example from Flipbook
ryanlua Feb 13, 2026
b11321c
Add basic tooltip
ryanlua Feb 13, 2026
32cf04b
Add style sheets
ryanlua Feb 13, 2026
2c1b4d6
Add tooltip summary and fix capitalization
ryanlua Feb 13, 2026
3ea5c60
Fix stylesheet
ryanlua Feb 13, 2026
c954bad
Export types
ryanlua Feb 13, 2026
1e2818a
Remove button component
ryanlua Feb 13, 2026
d6d92f2
Add Slot component
ryanlua Feb 14, 2026
2f23005
Remove style link child
ryanlua Feb 14, 2026
c941c1f
Add back missing components
ryanlua Feb 19, 2026
39ddd4e
Merge branch 'main' into react-luau
ryanlua Feb 19, 2026
a3a9cbe
Enable strict types on supported components
ryanlua Feb 19, 2026
3a5db8a
Add model files for StyleSheets
ryanlua Feb 20, 2026
cbfc439
Rename design tokens to theme tokens
ryanlua Feb 20, 2026
55c8682
Remove style link
ryanlua Feb 20, 2026
bef0a02
Move away from model based files
ryanlua Feb 20, 2026
8c3b8ca
Update hints frame
ryanlua Feb 20, 2026
047e637
Don't return nil
ryanlua Feb 21, 2026
7f8f82a
Add number hint logic
ryanlua Feb 21, 2026
912d0fc
Improve getting tool properties
ryanlua Feb 21, 2026
2e1d67a
Combine order and number hint props
ryanlua Feb 21, 2026
3d3f779
Rename hintKey prop to key
ryanlua Feb 21, 2026
67f079c
Add logic for slot amount
ryanlua Feb 21, 2026
5ac1995
Fix using key prop
ryanlua Feb 21, 2026
dfa6527
Shorten preferred input name
ryanlua Feb 21, 2026
c62540c
Separate gamepad and keyboard hint forcing
ryanlua Feb 21, 2026
4c2c582
Add opening inventory logic for hotbar
ryanlua Feb 21, 2026
ab82917
Add basic rendering
ryanlua Feb 22, 2026
303b4fb
Fix missing style link
ryanlua Feb 22, 2026
2e67d13
Merge branch 'main' into react-luau
ryanlua Feb 23, 2026
486ad88
Add input actions
ryanlua Feb 23, 2026
a5e0ef6
Only ignore build outputs
ryanlua Feb 23, 2026
e0ca584
Merge branch 'main' into react-luau
ryanlua Feb 23, 2026
fb7fb59
Don't use require by string
ryanlua Feb 23, 2026
4249977
Add backpack component
ryanlua Feb 23, 2026
c49bbb8
Render backpack component
ryanlua Feb 23, 2026
6504b27
Enable strict type checking
ryanlua Feb 23, 2026
e89177f
Remove loader
ryanlua Feb 23, 2026
3ed2e3f
Remove loader references
ryanlua Feb 23, 2026
6a9c7b1
Return nil
ryanlua Feb 23, 2026
2b71060
Add search bar component
ryanlua Feb 24, 2026
7d4c29e
Improve formatting
ryanlua Feb 24, 2026
9896043
Fix searchbar capitalization
ryanlua Feb 24, 2026
1083d7b
Add inventory component
ryanlua Feb 24, 2026
b6c585c
Update summaries
ryanlua Feb 24, 2026
76b681a
Fix issues with requires
ryanlua Feb 24, 2026
2c7c5bf
Use package
ryanlua Feb 24, 2026
ae255d8
Merge branch 'main' into react-luau
ryanlua Feb 24, 2026
c5ead80
Fix incorrect env
ryanlua Feb 24, 2026
03305c4
Remove old attributes
ryanlua Feb 24, 2026
48840ee
Combine opened and unlocked prop logic
ryanlua Mar 9, 2026
f2f1467
Add basic API
ryanlua Mar 9, 2026
8bd89f9
Simplify API
ryanlua Mar 9, 2026
809aa8b
Merge branch 'react-luau' of https://github.com/ryanlua/satchel into …
ryanlua Mar 9, 2026
08ee32c
Add placeholders
ryanlua Mar 9, 2026
293ca0c
Use strict
ryanlua Mar 9, 2026
1623e52
Use require by string
ryanlua Mar 9, 2026
36d768e
Separate stories
ryanlua Mar 9, 2026
853c687
Don't return nil
ryanlua Mar 9, 2026
797cdb6
Fix misnamed prop
ryanlua Mar 10, 2026
0f68329
Don't use hardcoded hints
ryanlua Mar 10, 2026
796b91a
Remove bindings for slot numbers since they shouldn't be rebinded
ryanlua Mar 10, 2026
57c7e1a
Remove on activated prop
ryanlua Mar 10, 2026
f4063a7
Remove controls for previewing hotbar hint
ryanlua Mar 12, 2026
5726bc1
Fix extra '('
ryanlua Mar 12, 2026
09555ef
Cleanup story controls
ryanlua Mar 12, 2026
2b1989f
Use dynamic sizing for hotbar
ryanlua Mar 12, 2026
4fd9808
Remove unused UI elements from preview
ryanlua Mar 12, 2026
1f9f67b
Center stories
ryanlua Mar 13, 2026
d5027ca
Use fixed size
ryanlua Mar 13, 2026
f930d43
Merge branch 'main' into react-luau
ryanlua Mar 13, 2026
071fd5b
Fix hotbar padding
ryanlua Mar 13, 2026
919dce9
Use custom TopbarPlus fork
ryanlua Mar 13, 2026
c3a8cd7
Add basic topbarplus icon
ryanlua Mar 13, 2026
a4c5699
Cleanup props
ryanlua Mar 14, 2026
247aa53
Rename tags for hints
ryanlua Mar 14, 2026
0c210a3
Fix hint image background transparency
ryanlua Mar 14, 2026
48b7119
Fix sizing for hint images
ryanlua Mar 14, 2026
7ba1add
Add inventory hint component
ryanlua Mar 14, 2026
3b36572
Rename context to indicate inventory
ryanlua Mar 14, 2026
502dfdc
Cleanup hint styling
ryanlua Mar 14, 2026
31aac1e
Add basic inventory component
ryanlua Mar 14, 2026
5a017a1
Add prop for showing keyboard hint
ryanlua Mar 14, 2026
e8447aa
Add inventory slot logic
ryanlua Mar 14, 2026
0cb86ad
Add basic inventory to backpack
ryanlua Mar 14, 2026
2302f22
Improve slots scrolling
ryanlua Mar 14, 2026
7371082
Add opening backpack
ryanlua Mar 14, 2026
72ad41e
Allow changing tools between hotbar and inventory
ryanlua Mar 14, 2026
732596b
Add logic for click equipping
ryanlua Mar 15, 2026
1951fc7
Merge branch 'react-luau' of https://github.com/ryanlua/satchel into …
ryanlua Mar 15, 2026
12c4ab3
Fix inventory hint
ryanlua Mar 16, 2026
df6ce50
Remove extra property
ryanlua Apr 2, 2026
0c60c4e
Add missing keys
ryanlua Apr 2, 2026
e15cd64
Add basic client script
ryanlua Apr 4, 2026
3df404d
Add style link
ryanlua Apr 4, 2026
933f923
Add default props
ryanlua Apr 4, 2026
49ffb47
Disable effect on unmounted
ryanlua Apr 4, 2026
dfcabdd
Fix record
ryanlua Apr 5, 2026
7f074a0
Merge branch 'main' into react-luau
ryanlua Apr 5, 2026
3b624f2
Ignore dist path
ryanlua Apr 5, 2026
13ae35d
Package as standalone
ryanlua Apr 5, 2026
f8e7a97
Add warning for outdated versions
ryanlua Apr 5, 2026
fdf5208
Rename app
ryanlua Apr 5, 2026
ded3d89
Hook topbar icon to opening
ryanlua Apr 6, 2026
07bd3f3
Disable CoreGui backpack
ryanlua Apr 6, 2026
09574c8
Add logic for opening inventory
ryanlua Apr 6, 2026
6cfa7ec
Fix using wrong API
ryanlua Apr 6, 2026
b5b81cd
Add signal suffix
ryanlua Apr 6, 2026
bb9f569
Add basic enabled API
ryanlua Apr 6, 2026
1610521
Add test scripts
ryanlua Apr 6, 2026
0dbbd5c
Add logic for toggling inventory
ryanlua Apr 6, 2026
5a2fed9
Add logic for detecting state
ryanlua Apr 6, 2026
e799475
Add test for toggling inventory
ryanlua Apr 6, 2026
c8e7184
Simplify get icon logic
ryanlua Apr 6, 2026
5dfb4c7
Rename keycode string
ryanlua Apr 6, 2026
e6475f0
Dynamically adjust slots
ryanlua Apr 6, 2026
e0a4fba
Automatically resize based on slots
ryanlua Apr 6, 2026
d77ab27
Remove old size prop
ryanlua Apr 6, 2026
8788865
Remove gamepad hints from components
ryanlua Apr 6, 2026
c53926f
Remove gamepad hint props
ryanlua Apr 6, 2026
fe7b623
Remove old props
ryanlua Apr 6, 2026
b64af56
Fix missing inventory prop
ryanlua Apr 6, 2026
e9318ae
Remove gamepad hint control
ryanlua Apr 6, 2026
349d759
Fix using default prop
ryanlua Apr 6, 2026
8ec02b8
Add basic app
ryanlua Apr 6, 2026
86ded7d
Fix layout issues
ryanlua Apr 6, 2026
aede77e
Fix hotbar hints
ryanlua Apr 6, 2026
ade6a9c
Polish props and stories
ryanlua Apr 6, 2026
87c453f
Fix inventory hint sizing
ryanlua Apr 6, 2026
7b8de58
Add padding
ryanlua Apr 6, 2026
c1bb213
Fix mounting
ryanlua Apr 6, 2026
768a2f0
Add rows prop
ryanlua Apr 6, 2026
556a9d5
Add sizing for rows
ryanlua Apr 7, 2026
637892b
Disable Satchel when CoreGui is detected
ryanlua Apr 7, 2026
485b37f
Improve slot sizing
ryanlua Apr 7, 2026
829a278
Rename keys
ryanlua Apr 7, 2026
31d14c3
Change story summary
ryanlua Apr 7, 2026
cecab60
Fix inventory sizing
ryanlua Apr 7, 2026
7cc2321
Remove negative index logic
ryanlua Apr 7, 2026
ef9e533
Require tools to equip
ryanlua Apr 7, 2026
94cc29b
Change slot equip color
ryanlua Apr 7, 2026
a2f18c2
Add search clear
ryanlua Apr 7, 2026
038a582
Fix function type
ryanlua Apr 7, 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
7 changes: 3 additions & 4 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,13 +1,12 @@
# Rojo
sourcemap.json
*.rbxl
*.rbxlx
*.rbxm
*.rbxmx

# Wally
Packages/
DevPackages/

# MkDocs documentation
site/

# Builds
dist/
3 changes: 2 additions & 1 deletion .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,6 @@
"tag:yaml.org,2002:python/name:material.extensions.emoji.twemoji",
"tag:yaml.org,2002:python/name:pymdownx.superfences.fence_code_format",
"tag:yaml.org,2002:python/object/apply:pymdownx.slugs.slugify mapping"
]
],
"luau-lsp.sourcemap.rojoProjectFile": "package.project.json"
}
4 changes: 2 additions & 2 deletions develop.project.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@
"$className": "DataModel",
"ReplicatedStorage": {
"$className": "ReplicatedStorage",
"SatchelLoader": {
"$path": "models/SatchelLoader"
"Satchel": {
"$path": "models/Satchel"
}
}
}
Expand Down
7 changes: 0 additions & 7 deletions docs/installation.md
Original file line number Diff line number Diff line change
Expand Up @@ -61,13 +61,6 @@ The Creator Store is the easiest way to install Satchel. It is a one-click insta

You are expected to already have Wally setup in your Rojo project and basic knowledge on how to use Wally packages.

!!! warning

Wally does not include the loader script so you need to [`#!lua require()`][require] Satchel to run:
``` lua title="Satchel Loader"
require(script.Satchel)
```

1. Open your Rojo project in the code editor of your choice.

1. In the `wally.toml` file, add the [latest Wally version for Satchel][Wally]. Your dependencies should look similar to this:
Expand Down
9 changes: 9 additions & 0 deletions models/Satchel/Packages.project.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"name": "Packages",
"tree": {
"$path": "../../Packages",
"satchel": {
"$path": "../../default.project.json"
}
}
}
File renamed without changes.
9 changes: 0 additions & 9 deletions models/SatchelLoader/Satchel/Packages.project.json

This file was deleted.

11 changes: 0 additions & 11 deletions models/SatchelLoader/init.client.luau

This file was deleted.

5 changes: 4 additions & 1 deletion package.project.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@
"name": "Satchel",
"emitLegacyScripts": false,
"tree": {
"$path": "models"
"$path": "models/Satchel",
"ThumbnailCamera": {
"$path": "models/ThumbnailCamera.model.json"
}
}
}
13 changes: 13 additions & 0 deletions src/Api/closeInventory.luau
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
--!strict

local RunService = game:GetService("RunService")

local bindableEvents = script.Parent.Parent.BindableEvents

local function closeInventory()
assert(RunService:IsClient(), "closeInventory can only be called on the client")

bindableEvents.InventoryClosed:Fire()
end

return closeInventory
16 changes: 16 additions & 0 deletions src/Api/getEnabled.luau
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
--!strict

local Players = game:GetService("Players")
local RunService = game:GetService("RunService")

local player = Players.LocalPlayer
local playerGui = player:WaitForChild("PlayerGui")
local screenGui = playerGui:WaitForChild("SatchelGui")

local function getEnabled()
assert(RunService:IsClient(), "getEnabled can only be called on the client")

return screenGui.Enabled
end

return getEnabled
13 changes: 13 additions & 0 deletions src/Api/getTopbarIcon.luau
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
--!strict

local RunService = game:GetService("RunService")

local TopbarPlus = require(script.Parent.Parent.Parent.topbarplus)

local function getTopbarIcon(): TopbarPlus.Icon?
assert(RunService:IsClient(), "getTopbarIcon can only be called on the client")

return TopbarPlus.getIcon("SatchelInventory")
end

return getTopbarIcon
23 changes: 23 additions & 0 deletions src/Api/isInventoryOpen.luau
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
--!strict

local RunService = game:GetService("RunService")

local bindableEvents = script.Parent.Parent.BindableEvents

local inventoryOpen = false

bindableEvents.InventoryOpened.Event:Connect(function()
inventoryOpen = true
end)

bindableEvents.InventoryClosed.Event:Connect(function()
inventoryOpen = false
end)

local function isInventoryOpen(): boolean
assert(RunService:IsClient(), "isInventoryOpen can only be called on the client")

return inventoryOpen
end

return isInventoryOpen
13 changes: 13 additions & 0 deletions src/Api/openInventory.luau
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
--!strict

local RunService = game:GetService("RunService")

local bindableEvents = script.Parent.Parent.BindableEvents

local function openInventory()
assert(RunService:IsClient(), "openInventory can only be called on the client")

bindableEvents.InventoryOpened:Fire()
end

return openInventory
23 changes: 23 additions & 0 deletions src/Api/setEnabled.luau
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
--!strict

local Players = game:GetService("Players")
local RunService = game:GetService("RunService")

local getTopbarIcon = require(script.Parent.getTopbarIcon)

local player = Players.LocalPlayer
local playerGui = player:WaitForChild("PlayerGui")
local screenGui = playerGui:WaitForChild("SatchelGui")

local function setEnabled(isEnabled: boolean)
assert(RunService:IsClient(), "setEnabled can only be called on the client")

screenGui.Enabled = isEnabled

local icon = getTopbarIcon()
if icon then
icon:setEnabled(isEnabled)
end
end

return setEnabled
23 changes: 22 additions & 1 deletion src/Attribution.client.luau
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,29 @@
Thank you for supporting Satchel.
]]

local MarketplaceService = game:GetService("MarketplaceService")
local RunService = game:GetService("RunService")

local VERSION = "2.0.0"

-- Print attribution. Do not modify without reading above
if not RunService:IsStudio() then
print("💼 Running Satchel v1.4.1 by @WinnersTakesAll")
print(`💼 Running Satchel v{VERSION} by @WinnersTakesAll`)
end

-- Check for updates. You may modify the below
local latestVersion: string?

local success, result = pcall(function()
return MarketplaceService:GetProductInfoAsync(13947506401)
end)

if success then
latestVersion = string.match(result.Name, "v(%d+%.%d+%.%d+)")
end

if latestVersion and latestVersion ~= VERSION then
warn(
`A new version of Satchel (v{VERSION} -> v{latestVersion}) is available: https://create.roblox.com/store/asset/13947506401`
)
end
3 changes: 3 additions & 0 deletions src/BindableEvents/BackpackItemAdded.model.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"ClassName": "BindableEvent"
}
3 changes: 3 additions & 0 deletions src/BindableEvents/BackpackItemEquipped.model.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"ClassName": "BindableEvent"
}
3 changes: 3 additions & 0 deletions src/BindableEvents/BackpackItemRemoved.model.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"ClassName": "BindableEvent"
}
3 changes: 3 additions & 0 deletions src/BindableEvents/BackpackItemUnequipped.model.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"ClassName": "BindableEvent"
}
3 changes: 3 additions & 0 deletions src/BindableEvents/InventoryClosed.model.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"ClassName": "BindableEvent"
}
3 changes: 3 additions & 0 deletions src/BindableEvents/InventoryOpened.model.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"ClassName": "BindableEvent"
}
Loading
Loading