Quests and NPC dialogue that just work
Quests checked at startup; a quest log with chains, daily and weekly resets and timed quests; branching NPC conversations that give and complete quests; rewards that land exactly once; a daily quest board identical on every server; and a dialogue box + quest tracker built in code.
For: Roblox developers adding quests, quest givers and NPC conversations to RPG, adventure and simulator games.
See it work: real output from the shipped code
A conversation with the example's NPCs
Recorded through Dialogue:Start() and Dialogue:Choose() with the example config. Choices appear only when their conditions pass (Mira offers her second quest only after the first is turned in); the server keeps the conversation, so a client can only send a choice number it was offered.
The quest log it drove
Events from log.Changed. Talking to Doran and Pell counted the talk objectives; 5 slime reports finished Slime Trouble; turn-ins paid 200 Coins and 60 XP exactly once.
| Event | Quest | Tracker line |
|---|---|---|
| Accepted | First Steps | |
| Progress | First Steps | Meet Doran the Smith ✓ |
| Progress | First Steps | Meet Scout Pell ✓ |
| Objectives done | First Steps | |
| Turned in | First Steps | |
| Accepted | Slime Trouble | |
| Progress | Slime Trouble | Defeat Slime 1/5 |
| Progress | Slime Trouble | Defeat Slime 5/5 |
| Objectives done | Slime Trouble | |
| Turned in | Slime Trouble | |
| Accepted | Iron for Doran | |
| Progress | Iron for Doran | Mine Iron Ore 2/3 |
Tracker after mining 2 ore (step 2 stays hidden until step 1 is done):
The example's daily quest board, 7 days from 12 Oct 2026
From Board:Current(os.time()): every server shows the same 2 notices for the day, with no DataStore, and none repeats from yesterday.
Ore Run
Village Rounds
Mushroom Basket
Slime Patrol
Mushroom Basket
Slime Patrol
Village Rounds
What's inside
| Module | Runs on | What it does | Lines |
|---|---|---|---|
| QuestBook | Shared | Every quest in your game, validated once at startup so a typo never reaches players. | 167 |
| QuestLog | Server | One player's quests: accept, progress, turn in once, chains, daily/weekly resets, timers, save. | 424 |
| Dialogue | Server | Branching NPC conversations that give, check and complete quests, run on the server. | 380 |
| Rewards | Server | Grant a quest's rewards all-or-nothing through your own handlers. | 77 |
| Board | Shared | A daily (or weekly) quest board that shows the same quests on every server, no DataStore. | 117 |
| Format (free) | Client | Quest tracker and dialogue text for your UI (progress lines, timers, rewards, typewriter). | 121 |
| Signal (free) | Shared | A tiny event object so your UI and systems can react to quest and dialogue events. | 49 |
| Example script | Type | Put it in |
|---|---|---|
| QuestwrenConfig | ModuleScript | ReplicatedStorage |
| QuestwrenServer | Script | ServerScriptService |
| QuestwrenClient | LocalScript | StarterPlayer > StarterPlayerScripts |
Tested like real software
38 automated tests run in a real Luau VM against a Roblox engine mock, on two runtimes (luau-web and native Luau 0.740). They ship in the zip: cd tests && npm install && node run.mjs.
| Spec | Passing | For example |
|---|---|---|
| core | 13/13 | book: valid config loads; lookups by id and giver keep config order … |
| demo | 1/1 | demo: a playthrough of the example's story chain + a week of the daily board |
| dialogue | 11/11 | dialogue: start view shows only the choices whose conditions pass; placeholders filled … |
| example | 7/7 | example server: the config passes every startup check; join creates leaderstats and a quest log … |
| parts | 6/6 | rewards: checks run before anything is granted … |
Install in 5 minutes
- Drag
Questwren.rbxmxonto ReplicatedStorage in Roblox Studio. - Drag
QuestwrenExamples.rbxmxin and move the three scripts to the services above. - Turn on Studio access to API services and press Play.
INSTALL.mdwalks through an example place step by step.
FAQ
Is this allowed on Roblox?
Yes. It's ordinary Luau using Roblox's own services (DataStoreService, MarketplaceService, Players). Nothing bypasses Roblox rules.
Why not a free model from the Toolbox?
Free models are a fine start. Questwren ships its tests (38 of them, run on two Luau runtimes), validates every remote argument, and is original code with a clear licence.
Do I need Rojo?
No. Drag the .rbxmx files into Roblox Studio. A Rojo project file is included if you use it.
Can I use it in a game I sell or a client's game?
Yes: unlimited experiences, commercial or not, for you or your clients. You can't resell or share the code itself.
Is CyberMax affiliated with Roblox?
No. Roblox and Roblox Studio are trademarks of Roblox Corporation, named only to describe compatibility.