Managing Packages
Create, price, and configure the items you sell — including game commands, file downloads, and Discord roles.
Packages are the items customers buy. Each package has a name, price, optional category, and one or more deliverables — the actions that fire automatically when the order is paid. A package can deliver one rank command, a bundle of crates, a Discord role, a downloadable map, or any combination of those.
Anatomy of a package
- Name & description — what shows on the storefront card and product page.
- Price — stored in cents in the dashboard's create form (so
999= $9.99). Currency is set per-store in Settings → General. - Category — optional grouping (Ranks, Cosmetics, Crates). Drives the storefront filter pills.
- Image — JPG/PNG up to 2 MB. Square images render best in the default Fuji theme grid.
- Deliverables — one or more actions that fire on payment. The whole point of the package.
- Limits — per-user, per-server, or store-wide purchase caps.
- Visibility window — schedule launches and sunsets without manual toggling.
Creating a package
- Go to Packages and click New package.
- Fill in name, description (Markdown supported), and price.
- Pick a category, or leave uncategorized to show in the "All" tab only.
- Upload a package image. Drop the file or click to browse — uploaded straight to your tenant-scoped CDN bucket.
- Click Add deliverable and configure at least one (see below).
- Click Save. The package is published immediately unless you set a future Available from date.
Deliverable types
Game command
Runs a console command on your Minecraft server when the order is paid. The most common deliverable type — used for granting ranks, items, currencies, and any plugin-driven action.
Example commands for popular plugins:
lp user {{ username }} parent set vip
give {{ username }} diamond {{ quantity }}
eco give {{ username }} 1000
crate give {{ username }} mythic 1
broadcast {{ username }} just bought {{ packageName }}!
Available template variables:
{{ username }}— Minecraft username the buyer entered at checkout{{ uuid }}— Minecraft UUID (resolved via Mojang){{ quantity }}— how many of this package they bought{{ price }}— formatted final price (e.g.$9.99){{ packageName }}— the package's display name{{ orderId }}— Storra order ID, useful for audit trails{{ email }}— buyer's email address
File download
Emails the buyer a one-click signed download link. Useful for resource packs, modpacks, custom maps, or digital goods. Files up to 100 MB; the link expires after 30 days but can be regenerated from the order page.
Discord role
Grants a Discord role to the buyer's linked Discord account. Requires:
- The storra.discord app installed (auto-installed by default).
- The Storra Discord bot invited to your server with
Manage Rolespermission. - The buyer to link their Discord account during checkout (a button appears next to the email field).
If the buyer doesn't link Discord, the role grant queues until they do — they'll see a "Claim your Discord role" prompt on the order-confirmation page.
Gift card
Mints a fresh Storra gift card on payment and emails the code to the buyer (or a recipient address if specified). The card is redeemable on future orders. Good for "gift this rank to a friend" flows. See Sales, coupons, and gift cards for the full gift-card workflow.
Categories
Categories group related packages. They appear as filter pills above the package grid on your storefront and as section anchors on long category pages.
Create categories on the Packages page — each category has:
- Name + slug (URL path)
- Sort order — controls left-to-right ordering
- Description + optional banner image (rendered on the category page)
- Featured packages — manually pin specific packages to the top
Purchase limits
Limits prevent abuse and create scarcity. Configure per-package:
- Max per customer — total times a single email/UUID can buy this package, ever.
- Max per cart — quantity allowed in a single basket (for one-time-only items, set to 1).
- Total stock — global cap; once N copies are sold, the package marks as sold-out and disappears from storefront.
Visibility scheduling
Schedule launches without staying up till midnight. Set:
- Available from — package is hidden until this datetime, then auto-shows.
- Available until — package auto-hides at this datetime.
Both fields use your store's timezone (set in Settings → General). Useful for limited-time bundles, seasonal sales, or pre-announcing drops.
Sale pricing
Sale prices live on the Sales page, not on the package itself. This separation lets you run a 25%-off-everything weekend sale without editing every package and remembering to revert. See Sales, coupons, and gift cards.
Bulk operations
The Packages page supports multi-select — check the boxes on multiple packages then use the toolbar to:
- Move to category
- Show / hide on storefront
- Delete (with confirmation modal)
Future Bulk price adjustments and bulk deliverable templating are on the roadmap — see Bulk actions.
FAQ
Can a single package fire multiple game commands?
Yes. Add multiple Game Command deliverables to the same package. They fire in the order you list them, with no delay between them by default. If a plugin needs a setup delay, add a tellraw or wait between them with execute schedule.
What happens if the server is offline when an order is paid?
The deliverable goes into Pending state. The Storra plugin polls for pending commands and fires them as soon as the server comes back. Buyers don't lose their items — they just wait until your server is back up.
Can I price packages in multiple currencies?
Not at launch. Each store has one currency, set in Settings → General. Multi-currency support requires gateway-side conversion — Stripe handles this in their dashboard if your account has multi-currency payouts enabled.
Can I require players to be online to receive an item?
Storra doesn't enforce this directly — it's up to your command. Most plugins handle offline players gracefully (queueing the action until they next log in). For strict offline-blocking, wrap your command with a plugin like essentials's /sudo or use a custom plugin script.
Updated recently