InkQuest — Narrative Quest Engine

Build story-driven quests for Minecraft — using tools you already know.
InkQuest is a lightweight quest engine for Minecraft 1.20.1 (Fabric), built for map makers, pack developers, and narrative designers. It works with scoreboards, Minecraft predicates, and datapack functions — systems you already have. No proprietary task types to learn.
Quests have real failure states, stage-by-stage progression, and branching based on outcomes. Choices that mean something. Endings that differ.
What players experience
- Quest Book — press
Jor right-click the book to browse all quests: active, completed, and failed. Each shows title, current task, description, and progress. - HUD tracker — pin a quest to keep its task and progress bar always on screen, with smooth stage-transition and completion animations.
- Quest Scrolls — a physical item that starts a quest on right-click. Distribute via loot tables, trades, or
/give— the player just right-clicks, no commands on their end. - New quest notification — a HUD toast when a quest arrives, with one key to open it immediately.
How InkQuest works
Stages, not checkboxes. A quest advances through stages in sequence. Each stage has one required task and any number of optional ones. Move forward when the required task is done; optional tasks add side content, bonus rewards, or narrative branches.
Real failure. Any task can fail — and failure ends the quest immediately. The world can react differently to each outcome.
Branching and memory. Quests unlock each other through dependencies. Different completions open different chains. Full narrative trees, no code required.
Conditions you already know:
| Condition | What it checks |
|---|---|
score |
Scoreboard objective threshold — with progress bar |
global_score |
A shared global counter, safe across multiple players |
predicate |
Any Minecraft predicate: location, inventory, NBT, advancement… |
all / any / none |
Boolean composition, nested arbitrarily deep |
optionals |
Enough optional tasks in the current stage are done |
Lifecycle hooks. Run mcfunction files and assign scoreboard tags at different points in a task's life: when the stage loads, every tick while active, every tick while active and pinned, when it deactivates, on success, and on failure.
From these primitives — timed challenges, escort missions, server-wide kill goals with shared counters, faction races — all build from systems you already understand.
For map makers and pack developers
Two ways to define quests:
- Datapack (
data/<namespace>/quests/<id>.json) — versioned, portable, source-controlled. Ships with your project. - Commands (
/quest new) — create quests without leaving the game. Good for rapid iteration: build a quest in-game, wire it to command blocks, test immediately.
Full command API:
/quest give,complete,fail,skip,pin,unpin,drop,modify,new/execute if quest— check quest and task status in command blocks and functions/quest query— inspect task progress, quest state, and stage completion — regardless of which condition type the task uses
Manual buttons. Add Success / Failure / Skip buttons to any task for player-driven decisions right from the quest book.
Repeatable quests. One flag to allow replaying a completed quest from scratch — daily tasks, faction missions, anything cyclical.
Gamerules:
doQuestBookItemCheck— require holding the book to open it (make players find or craft it)allowManualQuestPin— lock player-side pinning so only commands control the HUD
Localization. Full Minecraft JSON Text in all titles and descriptions — colors, formatting, translate keys. Add a lang file to a resource pack and quest text adapts to each player's language.
Resource pack override. All mod textures replaceable. Craft recipe overridable via a single datapack file.
Getting started
/quest new tutorial:intro "First Quest"
/quest give @s tutorial:intro pin
/quest modify tutorial:intro tasks add required step1 "Find the ruins"
Three commands, one working pinned quest. Add a scoreboard condition, a lifecycle hook, or a chain to the next quest — it scales from there.
→ [Full documentation] · [GitHub] · [Issue tracker]
Why InkQuest
Most quest systems give you a menu of pre-built task types. InkQuest hands you the tools Minecraft already provides — scoreboards, predicates, functions, tags — and composes them into a quest engine with no hardcoded limits.
Quests live in JSON, version alongside your project, and ship as a standard datapack.
Install the mod, drop in a datapack — and your world has a story.
Requires Fabric 1.20.1. No additional dependencies.

