{"id":30860399,"url":"https://github.com/magicink/twine-campfire","last_synced_at":"2025-09-07T15:45:05.203Z","repository":{"id":307386297,"uuid":"1029354348","full_name":"magicink/twine-campfire","owner":"magicink","description":"A cozy story format for Twine","archived":false,"fork":false,"pushed_at":"2025-09-04T17:09:20.000Z","size":1913,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-09-04T17:35:07.495Z","etag":null,"topics":["game","game-development","twine-format","twinejs","typescript"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/magicink.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2025-07-30T23:24:45.000Z","updated_at":"2025-09-04T15:36:53.000Z","dependencies_parsed_at":"2025-07-31T02:09:29.232Z","dependency_job_id":"3a07896a-0c57-47a7-9f30-e22db65f92d1","html_url":"https://github.com/magicink/twine-campfire","commit_stats":null,"previous_names":["magicink/twine-campfire"],"tags_count":185,"template":false,"template_full_name":null,"purl":"pkg:github/magicink/twine-campfire","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/magicink%2Ftwine-campfire","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/magicink%2Ftwine-campfire/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/magicink%2Ftwine-campfire/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/magicink%2Ftwine-campfire/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/magicink","download_url":"https://codeload.github.com/magicink/twine-campfire/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/magicink%2Ftwine-campfire/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":274058953,"owners_count":25215201,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-07T02:00:09.463Z","response_time":67,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["game","game-development","twine-format","twinejs","typescript"],"created_at":"2025-09-07T15:45:04.174Z","updated_at":"2025-09-07T15:45:05.193Z","avatar_url":"https://github.com/magicink.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🏕️ twine-campfire\n\nA cozy story format for Twine.\n\n## Installation\n\n1. Copy this link URL: [https://github.com/magicink/twine-campfire/releases/latest/download/format.js](https://github.com/magicink/twine-campfire/releases/latest/download/format.js).\n2. Start Twine and navigate to **Twine \u003e Story Formats**.\n3. Click **Add**, paste the copied URL into the form, then confirm.\n4. To activate the format, open a story and choose **campfire 1.x.x** from the **Story Format** dropdown in **Story \u003e Details**.\n\n## Directives\n\nCampfire extends Markdown with\n[remark-directive](https://github.com/remarkjs/remark-directive) syntax.\nDirectives begin with a colon and let passages interact with the game state.\nThey come in leaf, text, or container form, each serving a different role.\n\n- **Leaf** – `::name[LABEL]{attr=value}` — a standalone directive that performs an action or emits markup without wrapping other content.\n- **Text** – `:name[LABEL]{attr=value}` — an inline directive used inside paragraphs to inject values or generate small spans of text.\n- **Container** – a block directive that wraps content between `:::name{attr=value}` and a closing `:::` marker.\n\n  ```md\n  :::name{attr=value}\n  CONTENT\n  :::\n  ```\n\nDirectives are grouped by purpose.\n\n### Example\n\nHere's a practical example showing how directives can be combined to create interactive content:\n\n```md\n::createRange[testRange=0]{min=0 max=10}\n\nThe value is currently :show[testRange]\n\n:::trigger{label=\"add\"}\n::setRange[testRange=(testRange.value+1)]\n:::\n\n:::if[testRange.value === testRange.max]\n\n[[Next Page-\u003eNext]]\n\n:::\n```\n\nThis example creates a numeric range with a minimum of 0 and maximum of 10, displays the current value, provides a button to increment the value, and shows a link to the next passage when the maximum value is reached.\n\nSee the dedicated docs for detailed usage:\n\n- [Variables, ranges \u0026 arrays](docs/directives/variables-and-state.md)\n- [Data retrieval \u0026 evaluation](docs/directives/data-retrieval.md)\n- [Conditional logic \u0026 iteration](docs/directives/conditional-logic-and-iteration.md)\n- [Inputs and events](docs/directives/inputs-and-events.md)\n- [Navigation, composition \u0026 transitions](docs/directives/navigation-composition.md)\n- [Asset management](docs/directives/asset-management.md)\n- [Persistence](docs/directives/persistence.md)\n- [Localization \u0026 internationalization](docs/directives/localization.md)\n\nCampfire prints descriptive error messages to the browser console when it encounters invalid markup.\n\n## Twine links\n\nCampfire recognizes Twine's `[[Link]]` syntax. The text inside becomes a\nbutton that jumps to the target passage. Use an arrow to specify a different\ntarget.\n\n```md\n[[DISPLAY TEXT-\u003ePASSAGE NAME]]\n```\n\n## Markdown formatting\n\nCampfire accepts standard Markdown and extras from\n[remark-gfm](https://github.com/remarkjs/remark-gfm). This includes tables,\nstrikethrough, task lists, autolinks and more.\n\nExamples:\n\n- **Table**\n\n  Precede and separate columns with `|`.\n\n  ```md\n  | NAME  | HP  |\n  | ----- | --- |\n  | ALICE | 10  |\n  | BOB   | 8   |\n  ```\n\n- **Strikethrough**\n\n  ```md\n  ~~THIS TEXT IS CROSSED OUT~~\n  ```\n\n- **Task list**\n\n  ```md\n  - [x] FIND THE KEY\n  - [ ] OPEN THE DOOR\n  ```\n\n- **Autolink**\n\n  ```md\n  \u003chttps://twine-campfire.dev\u003e\n  ```\n\nFor more on internal classes and default styling, see [Styling elements](docs/styling-elements.md).\n\n## Further reading\n\n- [Twine documentation](https://twinery.org/)\n- [remark-directive](https://github.com/remarkjs/remark-directive)\n- [i18next](https://www.i18next.com/)\n\n## AI Disclosure\n\nSee [AI disclosure](docs/ai-disclosure.md).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmagicink%2Ftwine-campfire","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmagicink%2Ftwine-campfire","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmagicink%2Ftwine-campfire/lists"}