{
  "version": 1,
  "type": "tool",
  "canonicalUrl": "https://tools.utildesk.de/en/tools/choicescript/",
  "markdownUrl": "https://tools.utildesk.de/en/markdown/tools/choicescript.md",
  "language": "en",
  "data": {
    "slug": "choicescript",
    "title": "ChoiceScript",
    "category": "AI Writing",
    "priceModel": "Free",
    "tags": [
      "interactive-fiction",
      "writing",
      "games"
    ],
    "description": "ChoiceScript is a text-based scripting language for interactive novels with choices, variables, and branching scenes.",
    "officialUrl": "https://www.choiceofgames.com/make-your-own-games/choicescript-intro/",
    "affiliateUrl": null,
    "tier": "C",
    "editorialStatus": "curated",
    "wordCount": 1202,
    "contentMarkdown": "# ChoiceScript\n\nChoiceScript is a text-based scripting language from Choice of Games for interactive novels and choice-driven games. Authors write scenes as plain text files, connect them with commands such as `*choice`, `*goto`, and `*finish`, and carry story state through variables. That makes ChoiceScript a practical fit for narrative projects, but not a general game engine or layout system: a project built around 3D, heavy animation, or a fully custom interface needs a different foundation.\n\n## Who is it for?\n\nChoiceScript suits writers, narrative designers, and small studios that want to keep a long branching story as an understandable text codebase. A realistic first project might be a role-playing story with five to ten scenes where earlier choices change values such as trust, courage, or resources. Prototypes for learning and training stories are possible too, provided that subject-matter review remains a human responsibility.\n\nIt is a weaker fit for image-led visual novels, real-time gameplay, or projects whose main challenge is a custom interface. The hard part is not only learning the commands. It is designing states, avoiding dead ends, and keeping repeated logic maintainable as the story grows.\n\n## How the script model works\n\nA ChoiceScript project includes `startup.txt` and additional scene files. `*choice` defines options, while indented blocks contain their consequences. `*create` and `*set` define and change values; `*if` can later decide which text or route appears. `*label`, `*goto`, and `*goto_scene` help authors reuse shared sections instead of copying them into every branch.\n\nIndentation is part of the syntax. Spaces and tabs cannot be mixed casually, and every nested block must end with a valid jump or scene ending. This is easy to break when several people edit files. A short project convention covering indentation, UTF-8 encoding, naming, and scene ownership is more valuable than an elaborate tool stack.\n\n<figure class=\"tool-editorial-figure\">\n  <img src=\"/images/tools/choicescript-editorial.webp\" alt=\"Open book with branching paths and marked decision points\" loading=\"lazy\" decoding=\"async\" />\n</figure>\n\n## A practical workflow\n\nDo not begin with a huge world map. Start with one playable slice. Define the scene, the decision, and the states that should become visible later. Write that slice in a scene file, launch the local ChoiceScript server, and play it in a browser. For example, a promise can set `trust` to a value; three scenes later, `*if trust > 60` can determine whether another character opens a door.\n\nThen run each intentionally designed route. Dead ends, unreachable sections, and contradictory values are normal failure modes in branching fiction, not edge cases. A small table listing scenes, entry and exit states, and planned test paths helps a team reason about coverage. Git or another version-control system is still useful because ChoiceScript does not replace editorial history, review, or merge discipline.\n\n## Testing and quality control\n\nChoiceScript provides Quicktest and Randomtest for different structural checks. Quicktest attempts to cover options and conditional branches systematically; Randomtest plays many random paths and produces hit information. Each can find defects the other misses. Neither proves that a route reads well: titles, tone, variable logic, and important endings still need human reading and playthroughs.\n\nThree useful release criteria are: every planned main route is reachable, no state creates an unintended contradiction, and a new passage can be edited without repairing several duplicated copies of the same logic. Use randomness sparingly when it makes reproduction and testing harder. The official documentation itself warns that random behavior can be costly to debug.\n\n## Export, publishing, and boundaries\n\nThe official export flow can produce an HTML document for a website or for selected testers. An IFID is needed if an exported browser game should preserve progress; without it, refreshing the page can erase a player's progress. Publishing is not tied to one automatic channel: a project can be tested privately, distributed publicly for free, or submitted to Choice of Games offerings. Hosted Games and commercial publication involve separate requirements and agreements; they are not built-in guarantees of every ChoiceScript project.\n\nChoiceScript is therefore a useful core for text and story logic, not a replacement for hosting, store contracts, community moderation, translation, or an art and audio pipeline. Those responsibilities and costs should be planned separately before release.\n\n## Rights, privacy, and maintenance\n\nWriting locally in text files reduces dependence on a hosted editor, but it does not settle rights to the content. Check permissions for characters, trademarks, music, images, translations, and third-party contributions before publishing. Unreleased manuscripts should be protected through repository access controls and careful handling of exported HTML files.\n\nFor a multi-author project, reviews, branches, and clear ownership matter more than adding obscure syntax. Before a release, record the ChoiceScript version used, the IFID, supported browsers, and how saves are expected to work. This is practical governance for a file-based tool, not a claim that the tool provides a hosted security or compliance layer.\n\n## Cost and effort\n\nChoiceScript is available as a free tool. That does not make a finished game cost-free: writing, narrative design, editing, testing, translation, assets, hosting, and possible publishing services all require time or budget. If a team applies to a commercial label, it should check the current terms of that label rather than infer a revenue or licensing rule from the free entry point.\n\n## Editorial assessment\n\nI recommend ChoiceScript to writers and small narrative teams building text-first stories with explicit state and a versioned file workflow. It creates the most value when a story has already been broken into scenes, decisions, and test paths, and the team combines Quicktest, Randomtest, and manual playthroughs before release.\n\nFor a production led by visuals or complex systems, ChoiceScript should not be the default choice. A tool with a stronger visual-novel, story-editor, or world-model focus will usually be a better match. The fair decision test is a small vertical slice: if one route stays readable, state changes behave predictably, and fixes remain local, the tool is earning its place; if the slice already depends on sprawling workarounds, switch early.\n\n## Alternatives\n\n- [Twine](/en/tools/twine/): better for a fast visual story prototype and browser-based nonlinear hypertext structures.\n- [Ink by Inkle](/en/tools/ink-by-inkle/): a good fit when narrative scripts need tighter integration with a custom game or software project.\n- [Ren’Py](/en/tools/ren-py/): stronger for visual novels with characters, backgrounds, dialogue presentation, and scene logic.\n- [Inform 7](/en/tools/inform-7/): worth considering when rooms, objects, and rules as a world model are the center of the interactive fiction.\n- [Squiffy](/en/tools/squiffy/): a lighter option for small linked-text stories and simple choice structures without a large state architecture.\n\n## FAQ\n\n**Do I need programming experience to use ChoiceScript?**\n\nNo, but careful file editing and basic logical thinking are still required. The commands are approachable; nested choices, variables, and consistent indentation take practice.\n\n**Can ChoiceScript replace a visual novel engine?**\n\nNot as a general replacement. It can handle text choices and story state, but it is not designed around a large image, audio, or animation pipeline.\n\n**How should I test a branching story?**\n\nUse Quicktest and Randomtest for structural signals, then manually play the important routes. Automated coverage cannot decide on its own whether a scene is clear or dramatically sound.\n\n**Can I publish a ChoiceScript game?**\n\nYes. The official workflow supports HTML export and several publication paths. Hosted Games, app stores, rights, and commercial terms remain subject to the current requirements and agreements for each route."
  }
}