An in-game feedback widget for Roblox games that lets players submit bug reports and feature suggestions to BetaHub. See the full integration guide for detailed setup instructions.
| Suggestion Form | Bug Report Form |
|---|---|
![]() |
![]() |
- Unified UI: Dark-themed feedback form with Bug/Suggestion toggle
- Bug Reports: Description + steps to reproduce + automatic console log collection and upload
- Feature Suggestions: Description-based submission
- Client-side validation: Minimum character counts (50 for bugs, 80 for suggestions) with live feedback
- Server-side error display: API rejection reasons shown to the player
- Rate limiting: Configurable per-player cooldown
- Secure credentials: Uses Roblox
HttpService:GetSecret()for API tokens (with clear error message if misconfigured) - Tab navigation: Tab key moves focus from description to steps-to-reproduce
- Dual log capture: Both client and server console logs attached to bug reports (server logs marked developer-private)
BetaHubFeedbackWidget.rbxl # Source of truth (full UI + scripts)
FeedbackWidget/ # Exported scripts for readable git diffs
├── Server/
│ └── BetahubFeedbackServer.lua # Server script (ServerScriptService)
└── Client/
├── FeedbackUIHandler.lua # Main UI logic (LocalScript)
├── AutoTextBoxScaler.lua # Auto-expanding text boxes (ModuleScript)
├── ButtonColourer.lua # Button state styling (ModuleScript)
└── ExampleOpenCloseButton.lua # Example toggle button (LocalScript)
The .rbxl file contains the full widget including UI hierarchy. The FeedbackWidget/ directory is an export of the scripts for version control readability.
- Open
BetaHubFeedbackWidget.rbxlin Roblox Studio - Copy these instances into your game:
StarterGui > BetahubFeedbackUi(the feedback form UI)StarterGui > ExampleOpenCloseButton(example toggle button)ReplicatedStorage > BetahubFeedback(RemoteFunction)ServerScriptService > BetahubFeedbackServer(server script)
- Configure secrets in Roblox Creator Dashboard (Game Settings > Security > Secrets):
BH_PROJECT_ID— your BetaHub project ID (e.g.pr-XXXXXXXXXX)BH_AUTH_TOKEN— your BetaHub FormUser auth token
- Enable Allow HTTP Requests in Game Settings > Security
- Player selects "Bug", fills in description (50 chars min) and steps to reproduce (Tab navigates between fields)
- Client captures console log snapshot via
LogService:GetLogHistory() - Server POSTs to
POST /projects/{id}/issues.jsonwith description, steps, source, and roblox user ID - Server parses response to get issue ID and JWT token
- Server uploads client logs to
POST /projects/{id}/issues/g-{issueId}/log_files.json - Server uploads server logs (marked as developer-private, hidden from players)
- Player selects "Suggestion", fills in description (80 chars min)
- Server POSTs to
POST /projects/{id}/feature_requests.json
- Authentication:
FormUsertoken viaAuthorizationheader - Content-Type:
application/x-www-form-urlencoded - Custom fields:
issue[custom][roblox_id]/feature_request[custom][roblox_id]for player tracking - Log upload auth:
FormUser {auth_token},{jwt_token}with JWT from issue creation response
Edit the top of BetahubFeedbackServer in Studio:
API_BASE_URL = "https://app.betahub.io"
RATE_LIMIT = 20 -- Seconds between submissions per player
RESET_RATE_LIMIT_ON_FAILURE = false -- Keep false to prevent spam on API errors- Log files may be empty on the first submission in a play session.
LogService:GetLogHistory()returns a snapshot of accumulated output — if nothing has been logged yet, the logs will be empty. Subsequent submissions in the same session will include logs. - Server-side log capture is best-effort.
LogService:GetLogHistory()works reliably in Roblox Studio but may return empty in live production games due to Roblox engine restrictions.
Part of the BetaHub platform integration suite.

