CyberMax
Questwren · Quest & Dialogue System for Roblox developers

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.

7 modules + 3 example scripts2,346 lines of original Luau38 tests passing.rbxmx + Rojo

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.

Elder MiraWelcome to Fernvale, Ava. We could use a pair of steady hands.
AvaAny work for me?
Elder MiraFirst, meet Doran at the forge and Pell by the gate. Then come back to me.
AvaOn my way.
Elder MiraGood luck. Come back when you're done.
Doran the SmithForge is hot, ore is low. What do you need?
Scout PellKeep your voice down. Something's moving out past the gate.
AvaTell me about the watchtower.
Scout PellIt was built to watch the pass. Nobody has lit it in forty years.
Elder MiraSo you've met everyone. Here's a little something to get you started.

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.

EventQuestTracker line
AcceptedFirst Steps
ProgressFirst StepsMeet Doran the Smith ✓
ProgressFirst StepsMeet Scout Pell ✓
Objectives doneFirst Steps
Turned inFirst Steps
AcceptedSlime Trouble
ProgressSlime TroubleDefeat Slime 1/5
ProgressSlime TroubleDefeat Slime 5/5
Objectives doneSlime Trouble
Turned inSlime Trouble
AcceptedIron for Doran
ProgressIron for DoranMine Iron Ore 2/3

Tracker after mining 2 ore (step 2 stays hidden until step 1 is done):

Iron for DoranMine Iron Ore 2/3

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.

Day 1Slime Patrol
Ore Run
Day 2Tower Watch
Village Rounds
Day 3Ore Run
Mushroom Basket
Day 4Forager
Slime Patrol
Day 5Ore Run
Mushroom Basket
Day 6Forager
Slime Patrol
Day 7Tower Watch
Village Rounds

What's inside

ModuleRuns onWhat it doesLines
QuestBookSharedEvery quest in your game, validated once at startup so a typo never reaches players.167
QuestLogServerOne player's quests: accept, progress, turn in once, chains, daily/weekly resets, timers, save.424
DialogueServerBranching NPC conversations that give, check and complete quests, run on the server.380
RewardsServerGrant a quest's rewards all-or-nothing through your own handlers.77
BoardSharedA daily (or weekly) quest board that shows the same quests on every server, no DataStore.117
Format (free)ClientQuest tracker and dialogue text for your UI (progress lines, timers, rewards, typewriter).121
Signal (free)SharedA tiny event object so your UI and systems can react to quest and dialogue events.49
Example scriptTypePut it in
QuestwrenConfigModuleScriptReplicatedStorage
QuestwrenServerScriptServerScriptService
QuestwrenClientLocalScriptStarterPlayer > 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.

SpecPassingFor example
core13/13book: valid config loads; lookups by id and giver keep config order …
demo1/1demo: a playthrough of the example's story chain + a week of the daily board
dialogue11/11dialogue: start view shows only the choices whose conditions pass; placeholders filled …
example7/7example server: the config passes every startup check; join creates leaderstats and a quest log …
parts6/6rewards: checks run before anything is granted …

Install in 5 minutes

  1. Drag Questwren.rbxmx onto ReplicatedStorage in Roblox Studio.
  2. Drag QuestwrenExamples.rbxmx in and move the three scripts to the services above.
  3. Turn on Studio access to API services and press Play. INSTALL.md walks 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.

More tested kits

HatchwrenPet & Egg SystemStallwrenShop & Currency SystemGavelwickAdmin CommandsMillwrenTycoon KitDevEx calculatorFree: Robux to USD at 2026 rates
Roblox and Roblox Studio are trademarks of Roblox Corporation. Questwren is made by CyberMax and is not affiliated with or endorsed by Roblox Corporation.
$7Get Questwren