Satchel // Open-source backpack system

GitHub release GitHub top language GitHub license

“Satchel, a modern open-source alternative to Roblox’s default backpack.” :briefcase:

:information_source: About

Read what is Satchel.

Satchel is a modern open-source alternative to Roblox’s default backpack. Satchel aims to be more customizable and easier to use than the default backpack while still having a “vanilla” feel. Installation of Satchel is as simple as dropping the module into your game and setting up a few properties if you like to customize it. It has a familiar feel and structure as to the default backpack for ease of use for both developers and players.

:star: Features

Find why Satchel is better other alternatives and why to make the switch.

Satchel comes packed with much-needed features and changes the default backpack doesn’t have.

Modernized Familiar Feel

Satchel completely remakes the backpack’s UI to a uniform and vanilla feeling UI, blending in with other elements designed by Roblox.

Highly Customizable & Versatile

Satchel is highly customizable & adjustable with instance attributes support, allowing you to customize the behavior and appearance of over 10+ attributes. Please change the color, transparency, behavior, and more of its elegantly designed UI.

Improved Mobile Experience

Satchel expands on the mobile experience, doubling the number of slots, allowing players to not be disadvantaged.

Topbar Plus Support

Satchel supports Topbar Plus by 1ForeverHD, allowing users to open the inventory easily and more quickly.


:playground_slide: Playground

Test and demo Satchel before using it.

We provide an open-source playground of Satchel where you can test and play with Satchel before deciding to use it. See Satchel Playground on Roblox. Feel free to use the playground as a reference for how to use Satchel. Please download and modify it to your liking.

:arrow_down_small: Installation

Learn to install Satchel from Creator Marketplace or GitHub.

Installation of Satchel is easy and painless. Satchel is a drag-and-drop module that works out of the box and with easy customization. Below are different ways to get you to download and install Satchel.

Install from Creator Marketplace
  1. Get the Satchel module from the Creator Marketplace.

  1. Open Roblox Studio and create a new place or open an existing place.

  2. Open or locate the Toolbox.

  1. Open your Inventory from the Toolbox.

  1. Search for Satchel created by WinnersTakesAll and click on it.


  1. Insert Satchel into the Explorer and drag into StarterPlayerScripts.

Install from GitHub Releases
  1. Download the Satchel.rbxmx file from Releases.

  1. Open Roblox Studio and create a new place or open an existing place.

  2. Go to the Explorer and right click on StarterPlayerScripts and click on Insert from file....

  1. Select the Satchel.rbxmx you downloaded from GitHub and click Open.

  1. Ensure that Satchel is in StarterPlayerScripts.

:open_book: Documentation

Learn all about the customization Satchel has to offer.

Satchel supports instance attributes allowing you to change and customize many aspects including various behaviors in a friendly easy-to-use interface without having to touch any code. Below see all attributes.


Attribute Description Default
BackgroundColor3: Color3 Determines the background color of the default inventory window and slots. [25, 27, 29]
BackgroundTransparency: number Determines the background transparency of the default inventory window and slots. 0.3
CornerRadius: UDim Determines the radius, in pixels, of the default inventory window and slots. 0, 8
EquipBorderColor3: Color3 Determines the color of the equip border when a slot is equipped. [0, 162, 255]
EquipBorderSizePixel: number Determines the pixel width of the equip border when a slot is equipped. 5
InsetIconPadding: boolean Determines whether or not the tool icon is padded in the default inventory window and slots. True
OutlineEquipBorder: boolean Determines whether or not the equip border is outline or inset when a slot is equipped. True
TextColor3: Color3 Determines the color of the text in default inventory window and slots. [255, 255, 255]
TextSize: number Determines the size of the text in the default inventory window and slots. 14
TextStrokeColor3: Color3 Determines the color of the text stroke of text in default inventory window and slots. [0, 0, 0]
TextStrokeTransparency: number Determines the transparency of the text stroke of text in default chat window and slots. 0.5


IsOpened(): boolean
Returns whether the inventory is opened or not.
SetBackpackEnabled(enabled: boolean): void
Sets whether the backpack gui is enabled or disabled.
GetBackpackEnabled(): boolean
Returns whether the backpack gui is enabled or disabled.
GetStateChangedEvent(): RBXScriptSignal
Returns a signal that fires when the inventory is opened or closed.

:sparkling_heart: Support

Get support for Satchel or how to support it.

If you see an issue with Satchel and would like to report it, you can reply to this topic or open a GitHub issue.

Satchel fully supports all platforms, which includes computer, tablet, phone, console, and VR.

You can support Satchel by liking this topic and sharing it to others. Learn about contributing to Satchel below at Contributing.

:pray: Contributing

Know how to contribute.

We welcome all contributions from the community. If you would like to contribute, please visit our GitHub repository.

:page_with_curl: License

Locate how to properly license Satchel.

Satchel is licensed under GNU General Public License v3.0. See LICENSE.txt for details.

:scroll: Latest Release Notes

Get informed on the latest Satchel updates.

This post was adapted from Satchel’s GitHub.


btw there is a typo where it says ‘Highly Customizable and Versitile’ just wanna let you know


Thanks for the keen eye. I’ve edited the topic to correct the misspelling.


I have a couple of suggestions, and here is the list of suggestions I would like to suggest:

  • Add an attribute/option to toggle the SlotFrame’s AutoButtonColor in Satchel’s attributes (also set it as true on default because it looks better when the player is hold-clicking a SlotFrame).
  • Make the ToolTip’s CornerRadius to 0, 4 instead of 0, 8 (and maybe add a separate attribute/option to change the ToolTip’s CornerRadius, setting the ToolTip’s CornerRadius to 0, 8 looks odd in my opinion).
  • Add a UIPadding to ToolTips and SlotFrames

Overall I like this resource, and you should find a way to get rid of the warnings. Thank you for making this! :slightly_smiling_face:


Thanks for all your feedback and I’m considering how to make the Tooltip corners less aggressive while keeping one attribute for ease of use but I’m confused on the following:

Can you please specify what exactly are the “warnings”?


Well according to Script Analysis (not a plugin btw), there are 97 warnings found in Satchel’s ModuleScript.


They are expected for pre-release software and on release they all should be resolved or significantly reduced. For now they should not limit functionality or cause any problems.


Will give it a try later, overall it looks pretty solid and i love the way you can edit it through attributes its original


This would be very suitable for our upcoming game, considering that the Roblox backpack is still using .Draggable.

I do have a suggestion. Add an attribute that determines if tool switching should be scroll-wheel based on PC. This would be useful for zoom-locked camera types, as well as first person modes, where scrolling is helpful for switching tools.


Satchel aims to be as close to the default backpack hence why it’s called “vanilla”.

Adding such feature would also be very niche in my opinion due to how it would be limited to only first-person and how it can cause potential confusion if people use it outside.

Nothing stops you from forking this Satchel and implementing your own version of you would prefer building off of this.


It looks like that SlotFrame’s ToolName is bigger than SlotFrame’s Icon, you should change that and make them the same size


Hi, I’ve fixed your issue with ToolName not being the same size as ToolIcon with commit 1efd888 on our GitHub.

Additionally, I would like to notify that the tooltips are no longer as round as before with commit e71db22.

Thanks for your valuable feedback. The changes are live on our GitHub and will be included in Satchel’s next release.


minor nitpick: I found your github repo before you posted it here

but great resource!


Just 2 days ago I finished documentation and adding some last-minute changes for pre-release. Only today I just wrote the DevForum topic.



oh sorry found another typo
‘Improved Mobile Experiance’
good module btw, love the strict typing


Thanks for the report again. I’ve fixed the typo and ran a spellchecker to ensure they shouldn’t be any more misspellings.


Hey this looks awesome! I have one question though and forgive me if you already went over this but, can you change the open backpack button because I hate pressing the ‘ button to open the backpack. Basically what I’m saying is can you bind the backpack to open when you press the “tab” key or something like that? Otherwise, great system!

1 Like

I was scratchin my head so much with disabling Tool keybind for Reinvent (one of the tool inventory system like this) because it isn’t actually designed to have unbinding event when the UI is hidden/disabled, it breaks after the Default backpack is enabled with the UI there

Also it would be nice if you add a boolean option to hide backpack and the bar like HideHotbar and UnbindButtons to this resource, i hate to actually disconnect every single connections each time i wanted to unbind keys.


Really good resource I really love how the UI resemble the Chat UI. Keep up the good work :smiley:

1 Like

Yes, you can modify the keybind to toggle the backpack.

Replace line 93 in SatchelScript with the below to set Tab to toggle the backpack.

local ARROW_HOTKEY = { Enum.KeyCode.Tab, Enum.KeyCode.DPadUp }

Note that you can replace Enum.KeyCode.Tab with any Enum.KeyCode to toggle the backpack.

Just a warning but Tab is already binded to the leaderboard so you should disable that behavior first.