A simple package manager for Roblox Studio.
Commands are typed into the Studio command bar, prefixed with --c:
--c install signal
The leading --c makes the line a Lua comment, so the command bar never errors;
the plugin reads the echoed line from the log and runs the command. There's
nothing else to open — just type and go.
Run --c help for the full list, or --c manual <command> for details on any one.
| Command | Aliases | What it does |
|---|---|---|
install <pkg>[@ver] … |
add, i |
Install packages (auto-syncs on first use) |
remove <pkg> … |
rm, uninstall |
Remove installed packages |
update [pkg…] |
up, upgrade |
Update packages to their latest version |
list [pattern] |
ls |
List installed packages |
search [query] |
find |
Search the package catalogue |
sync |
refresh |
Refresh the keyring from all remotes |
remote <list|add|remove> [url] |
remotes |
Manage package sources |
config <key> [value] |
cfg |
Get/set a setting |
confirm / cancel |
y / abort |
Confirm or abort a staged operation |
help / manual <cmd> |
? / man |
Help |
clear |
cls |
Clear the console |
about |
Credits & contacts |
Flags are consistent across commands and can be bundled:
| Flag | Long form | Meaning |
|---|---|---|
-s |
--shared |
Use ReplicatedStorage instead of ServerStorage |
-i |
--into |
Install into the selected instance (untracked) |
-a |
--all |
(update) Update both scopes — your whole project |
-y |
--yes |
Skip the confirmation prompt |
-f |
--fresh |
(sync) Rebuild the keyring from scratch |
-d |
--debug |
(sync) Verbose per-remote output |
--c install global:signal@1.2.0 -sy # shared + auto-confirm, bundled
--c remove signal --shared --yes
--c update -a -y # update the whole project, no prompt
--c sync -fd
install accepts:
slug— e.g.signalowner:slug— e.g.global:signal- either of the above with
@version— e.g.global:signal@1.2.0(defaults tolatest)
Installed packages are exposed through a single Packages module at the root of
the scope they were installed into. Index it by package name — modules are
required lazily and cached:
-- server packages (ServerStorage)
local Packages = require(game.ServerStorage.Packages)
local Signal = Packages.Signal
-- shared packages (ReplicatedStorage), e.g. installed with -s
local Shared = require(game.ReplicatedStorage.Packages)
local Promise = Shared.PromisePackages.list() returns the names of everything installed in that scope. (If
your place already has a Packages instance, Cealshell uses CealPackages
instead; install prints the exact require path each time.)
Every installed instance is tagged so it's easy to find and manage:
- a
CealshellCollectionService tag, and CealshellPackage,CealshellOwner,CealshellVersionattributes.
The registry also records owner, slug, version and remote per package,
which is what lets update know what's installed and whether a newer version
exists.
Packages are fetched from configured remotes (default: https://api.cealshell.dev/).
The CLI talks to the registry's API v2 (/api/v2/packages), which returns a
consistent envelope:
{ "ok": true, "data": { /* … */ } }
{ "ok": false, "error": { "code": "not_found", "message": "…" } }Licensed MIT © janisfox 2026.