{"id":13672978,"url":"https://github.com/videlais/extwee","last_synced_at":"2026-01-30T15:38:10.759Z","repository":{"id":34464287,"uuid":"179378624","full_name":"videlais/extwee","owner":"videlais","description":"Extwee is a collection of parsing and compilation functionality supporting historic and current Twine formats","archived":false,"fork":false,"pushed_at":"2026-01-21T03:43:41.000Z","size":34082,"stargazers_count":40,"open_issues_count":0,"forks_count":4,"subscribers_count":2,"default_branch":"develop","last_synced_at":"2026-01-21T15:25:20.809Z","etag":null,"topics":["html","json","twee","twine","twine-1","twine-2","tws"],"latest_commit_sha":null,"homepage":"https://videlais.github.io/extwee/","language":"HTML","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/videlais.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"ko_fi":"videlais"}},"created_at":"2019-04-03T22:18:38.000Z","updated_at":"2026-01-21T03:43:44.000Z","dependencies_parsed_at":"2025-12-03T09:00:06.486Z","dependency_job_id":null,"html_url":"https://github.com/videlais/extwee","commit_stats":{"total_commits":201,"total_committers":5,"mean_commits":40.2,"dds":0.6766169154228856,"last_synced_commit":"7bb16ad1522aac158469128d8c5dd620d52f93f7"},"previous_names":[],"tags_count":27,"template":false,"template_full_name":null,"purl":"pkg:github/videlais/extwee","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/videlais%2Fextwee","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/videlais%2Fextwee/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/videlais%2Fextwee/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/videlais%2Fextwee/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/videlais","download_url":"https://codeload.github.com/videlais/extwee/tar.gz/refs/heads/develop","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/videlais%2Fextwee/sbom","scorecard":{"id":920727,"data":{"date":"2025-08-11","repo":{"name":"github.com/videlais/extwee","commit":"067977b3eba9b32f96dd68223047c5fa25726fdb"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":5.6,"checks":[{"name":"Code-Review","score":0,"reason":"Found 0/4 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Maintained","score":10,"reason":"30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Security-Policy","score":4,"reason":"security policy file detected","details":["Info: security policy file detected: SECURITY.md:1","Warn: no linked content found","Info: Found disclosure, vulnerability, and/or timelines in security policy: SECURITY.md:1","Info: Found text in security policy: SECURITY.md:1"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: topLevel 'contents' permission set to 'write': .github/workflows/dependabot-automerge.yml:5","Info: topLevel 'contents' permission set to 'read': .github/workflows/nodejs.yml:6","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Pinned-Dependencies","score":3,"reason":"dependency not pinned by hash detected -- score normalized to 3","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/nodejs.yml:18: update your workflow using https://app.stepsecurity.io/secureworkflow/videlais/extwee/nodejs.yml/develop?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/nodejs.yml:20: update your workflow using https://app.stepsecurity.io/secureworkflow/videlais/extwee/nodejs.yml/develop?enable=pin","Warn: npmCommand not pinned by hash: .github/workflows/nodejs.yml:24","Info:   0 out of   2 GitHub-owned GitHubAction dependencies pinned","Info:   1 out of   1 third-party GitHubAction dependencies pinned","Info:   0 out of   1 npmCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"SAST","score":10,"reason":"SAST tool is run on all commits","details":["Info: all commits (26) are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Branch-Protection","score":3,"reason":"branch protection is not maximal on development and all release branches","details":["Info: 'allow deletion' disabled on branch 'develop'","Info: 'force pushes' disabled on branch 'develop'","Warn: 'branch protection settings apply to administrators' is disabled on branch 'develop'","Warn: branch 'develop' does not require approvers","Warn: codeowners review is not required on branch 'develop'","Warn: no status checks found to merge onto branch 'develop'","Warn: PRs are not required to make changes on branch 'develop'; or we don't have data to detect it.If you think it might be the latter, make sure to run Scorecard with a PAT or use Repo Rules (that are always public) instead of Branch Protection settings"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Vulnerabilities","score":9,"reason":"1 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-v6h2-p8h4-qcjw"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-25T02:19:21.479Z","repository_id":34464287,"created_at":"2025-08-25T02:19:21.479Z","updated_at":"2025-08-25T02:19:21.479Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28914906,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-30T12:13:43.263Z","status":"ssl_error","status_checked_at":"2026-01-30T12:13:22.389Z","response_time":66,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["html","json","twee","twine","twine-1","twine-2","tws"],"created_at":"2024-08-02T10:00:16.846Z","updated_at":"2026-01-30T15:38:10.753Z","avatar_url":"https://github.com/videlais.png","language":"HTML","funding_links":["https://ko-fi.com/videlais"],"categories":["Compilers"],"sub_categories":[],"readme":"\u003ca name=\"readme-top\"\u003e\u003c/a\u003e\n\n[![codecov](https://codecov.io/gh/videlais/extwee/branch/master/graph/badge.svg)](https://codecov.io/gh/videlais/extwee)\n\n[![npm version](https://badge.fury.io/js/extwee.svg)](https://badge.fury.io/js/extwee)\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\n[![NPM Badge](https://nodei.co/npm/extwee.png?downloads=true)](https://www.npmjs.com/package/extwee)\n\n## Table of Contents\n\n\u003col\u003e\n  \u003cli\u003e\u003ca href=\"#story-compilation\"\u003eStory Compilation\u003c/a\u003e\u003c/li\u003e\n  \u003cli\u003e\u003ca href=\"#format-support\"\u003eFormat Support\u003c/a\u003e\u003c/li\u003e\n  \u003cli\u003e\u003ca href=\"#usage\"\u003eNode and Web API\u003c/a\u003e\u003c/li\u003e\n  \u003col\u003e\n    \u003cli\u003e\u003ca href=\"#objects\"\u003eObjects\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#parsers\"\u003eParsers\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#compilers\"\u003eCompilers\u003c/a\u003e\u003c/li\u003e\n  \u003c/ol\u003e\n  \u003cli\u003e\u003ca href=\"#web-build-imports\"\u003eWeb Build Imports\u003c/a\u003e\u003c/li\u003e\n  \u003cli\u003e\u003ca href=\"#documentation\"\u003eDocumentation\u003c/a\u003e\u003c/li\u003e\n  \u003cli\u003e\u003ca href=\"#command-line-usage\"\u003eCommand-Line Usage\u003c/a\u003e\u003c/li\u003e\n  \u003cli\u003e\u003ca href=\"#config-file-usage\"\u003eConfig File Usage\u003c/a\u003e\u003c/li\u003e\n  \u003cli\u003e\u003ca href=\"#escaping- meta-characters\"\u003eEscaping Meta-Characters\u003c/a\u003e\u003c/li\u003e\n  \u003cli\u003e\u003ca href=\"#license\"\u003eLicense\u003c/a\u003e\u003c/li\u003e\n  \u003c/ol\u003e\n\n## Story Compilation\n\nThe process of *story compilation* converts human-readable content, what is generally called a *story*, into a playable format such as HyperText Markup Language (HTML). The result is then presented as links or other visual, interactive elements for another party.\n\nThe term *compilation* is used because different parts of code are put together in a specific arrangement to enable later play. As part of Twine-compatible HTML, this means combining JavaScript code (generally a \"story format\") with story HTML data.\n\nExtwee is **not** an authoring tool. It cannot be used to create story content. This data must be created using other tools or processes. Extwee can then *compile* the content with story format code to produce something playable.\n\nPlayable formats are the following and require external story formats[^1] to enable play:\n\n- Twine 2 HTML\n- Twine 1 HTML\n\nMore human-readable formats include:\n\n- Twee 3[^2]\n- Twine 2 JSON[^3]\n\nFrom 2009 to 2015, Twine 1 supported a now [historical format named TWS](https://github.com/iftechfoundation/twine-specs/blob/master/twine-1-twsoutput.md). This was a binary format used for archival purposes. Extwee can read this format but does not support creating it because no other tools, including current versions of Twine, accept it as valid input.\n\nTwine 2 supports exporting a collection of stories (known as a *library*) in the [Twine 2 Archive HTML format](https://github.com/iftechfoundation/twine-specs/blob/master/twine-2-archive-spec.md). Extwee can also read and write this format, creating either a collection of stories from the data or writing a collection of internal objects to a file.\n\n[^1]: Extwee does not include or publish story formats. These can be found in the [Story Format Archive (SFA)](https://github.com/videlais/story-formats-archive).\n\n[^2]: Twee exists in three versions. The first existed between 2006 to 2009 and was part of Twine 1. The move to Twine 2 in 2009 dropped support and the story compilation tools [Twee2](https://dan-q.github.io/twee2/) and [Tweego](https://www.motoslave.net/tweego/) adopted their own extensions and modifications. Beginning in 2017, work was done to unite the different projects. This resulted in [Twee 3](https://github.com/iftechfoundation/twine-specs/blob/master/twee-3-specification.md) in March 2021.\n\n[^3]: In October 2023, JavaScript Object Notation (JSON) was added as a supported community format for story compilation tools. Extwee is the first tool to support this format.\n\n## Format Support\n\nExtwee supports multiple historical and current Twine-compatible formats.\n\n| Format                                                                                                                           | Input | Output                                                                                                                                                                                |\n|----------------------------------------------------------------------------------------------------------------------------------|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| [Twine 1 HTML (2006 - 2015)]( https://github.com/iftechfoundation/twine-specs/blob/master/twine-1-htmloutput-doc.md )          | Yes   | Partial support. Twine 1 HTML can be produced, but the  `StorySettings`  optional passage introduced in Twine 1.4.0 requires external libraries like jQuery not included with Extwee. |\n| [Twine 1 TWS (2009 - 2015)]( https://github.com/iftechfoundation/twine-specs/blob/master/twine-1-twsoutput.md )                | Yes   | Extwee does not support TWS (Python pickle) output because no current version of Twine or other story compilation tool produces this historical format.                                                |\n| [Twine 2 HTML (2015 - Present)]( https://github.com/iftechfoundation/twine-specs/blob/master/twine-2-htmloutput-spec.md )      | Yes   | Yes                                                                                                                                                                                   |\n| [Twine 2 Archive HTML (2015 - Present)]( https://github.com/iftechfoundation/twine-specs/blob/master/twine-2-archive-spec.md ) | Yes   | Yes                                                                                                                                                                                   |\n| [Twee 3 (2021 - Present)]( https://github.com/iftechfoundation/twine-specs/blob/master/twee-3-specification.md )               | Yes   | Yes                                                                                                                                                                                   |\n| [Twine 2 JSON (2023 - Present)]( https://github.com/iftechfoundation/twine-specs/blob/master/twine-2-jsonoutput-doc.md )       | Yes   | Yes                                                                                                                                                                                   |\n| [Twine 2 Story Format (2015 - Present)]( https://github.com/iftechfoundation/twine-specs/blob/master/twine-2-storyformats-spec.md )       | Yes   | Yes                                                                                                                                                                                   |\n\n**Note:** Round-trip translations can present problems because of required fields and properties per format. Some metadata may be added or removed based on the specification being followed.\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n## Node and Web API\n\nThe following objects and methods are available in Node.js or browser contexts.\n\n**Note:** When used in a browser context, all objects and methods are part of the `window.Extwee` global.\n\n### Objects\n\nAn object must be created using either the `new` keyword in JavaScript or as the result of parsing data.\n\n- `StoryFormat`\n- `Passage`\n- `Story`\n\nStory and Passage objects can generate multiple output formats: `toTwee()`, `toTwine1HTML()`, `toTwine2HTML()`, and `toJSON()`. Stories cannot be played in a browser without the corresponding compiler combining it with story format data.\n\nThe StoryFormat object supports `toString()` method of producing a tab-separated JSON output and `toJSON()` method of generating JSON output matching the Twine 2 Story Format Specification.\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n### Parsers\n\nTranslates output formats such as HTML, Twee, JSON, or JSONP into objects.\n\n**Note:** Twine 1 story formats exist across multiple files (`header.html` and optional `code.js`). They cannot be parsed into a `StoryFormat` object.\n\n- `parseTwee()`\n- `parseJSON()`\n- `parseStoryFormat()`\n- `parseTwine1HTML()`\n- `parseTwine2HTML()`\n- `parseTwine2ArchiveHTML()`\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n### Compilers\n\nCompiles story, story formats, or other data into an archive or playable format.\n\n- `compileTwine2HTML()`\n- `compileTwine1HTML()`\n- `compileTwine2ArchiveHTML()`\n- `compileStoryFormat()`\n\nTo create playable Twine 1 HTML, an `engine.js` file must be supplied. (See [Story Format Archive](https://github.com/videlais/story-formats-archive/tree/main/official/twine1/engine/1.4.2) for available Twine 1 `engine.js` file.)\n\nCompilation of a story format adds the necessary function wrapper to convert the JSON output, via `toJSON()`, to JSONP.\n\n### Support Functionality\n\nMultiple Twine formats support using [an IFID](https://ifdb.org/help-ifid) to identify one work from another.\n\nAs part of its API, the Extwee method `generateIFID()` can be used to create a new IFID for a `Story` object or as part of other processes.\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n## Web Build Imports\n\nFor users who want to use pre-built, minified versions optimized for browser environments, Extwee provides several web build exports:\n\n### Available Web Builds\n\n- **Core Build**: `import Extwee from 'extwee/web'` - Complete functionality including parsers, compilers, and core utilities\n- **Twine 1 HTML**: `import Extwee from 'extwee/web/twine1html'` - Specialized for Twine 1 HTML parsing and compilation\n- **Twine 2 Archive HTML**: `import Extwee from 'extwee/web/twine2archive'` - Specialized for Twine 2 Archive HTML parsing and compilation  \n- **TWS Format**: `import Extwee from 'extwee/web/tws'` - Specialized for TWS (Twine 1 workspace) parsing\n\n### Usage Examples\n\n```javascript\n// Use the full core build\nimport Extwee from 'extwee/web';\nconst story = new Extwee.Story();\nconst ifid = Extwee.generateIFID();\n\n// Use a specialized build for smaller bundle size\nimport Extwee from 'extwee/web/twine1html';\nconst story = Extwee.parseTwine1HTML(htmlContent);\n```\n\nThese web builds are UMD-compatible and can be used with module bundlers like webpack, or loaded directly in browsers. They are optimized and minified for production use.\n\n**Note:** Web builds include their dependencies bundled, making them suitable for browser environments but larger than the Node.js imports which rely on external dependencies.\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n## Documentation\n\nExtwee has [documentation hosted on GitHub Pages](https://videlais.github.io/extwee/#/).\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n## Command-Line Usage\n\nExtwee supports a command-line interface for four general scenarios.\n\n**Notes:** As of Extwee 2.2.5, short and long command-line option flags are separated. Short options use one hyphen followed by one character and all long options begin with two hyphens and a name as word.\n\n### Compiling Twee 3 + Twine 2 Story Format into Twine 2 HTML\n\nCompile Twee 3 + StoryFormat into Twine 2 HTML:\n\n`extwee -c -i \u003ctweeFile\u003e -s \u003cstoryFormat\u003e -o \u003cTwine2HTML\u003e`\n\n### De-compiling Twine 2 HTML into Twee 3\n\nDe-compile Twine 2 HTML into Twee 3:\n\n`extwee -d -i \u003ctwine2HTML\u003e -o \u003coutputTwee\u003e`\n\n### Compiling Twee 3 into Twine 1 HTML\n\nEnabling Twine 1 mode requires using the `--twine1` long flag.\n\nBecause Twine 1 story formats can be split across files, compilation requires the \"engine\" from Twine 1 named `engine.js`, the name of the story format, and then its `header.html` template code and the optional but often included `code.js` file.\n\n(Refer to the [Story Formats Archive](https://github.com/videlais/story-formats-archive) for access to historic `engine.js` and other files.)\n\n`extwee --twine1 -c -i \u003ctweeFile\u003e -o \u003cTwine1HTML\u003e --engine \u003cengineJS\u003e --name \u003cstoryFormatName\u003e --codejs \u003cCodeJS\u003e --header \u003cheader\u003e`\n\n### De-compiling Twine 1 HTML into Twee 3\n\nEnabling Twine 1 mode requires using the `--twine1` flag.\n\n`extwee --twine1 -d -i \u003ctwine1HTML\u003e -o \u003coutputTwee\u003e`\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n## Config File Usage\n\nWhen invoked from its command-line interface using `npx extwee`, it will look for a `extwee.config.json` file in the local directory. If found, and its fields are valid, processing will use the values found in the file.\n\nConsult the possible options in its [dedicated file](extwee.config.md).\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n## Tree Shaking Support\n\nFor [advanced tree shaking](https://developer.mozilla.org/en-US/docs/Glossary/Tree_shaking) patterns, most formats are broke into `compile.js` and `parse.js` files exporting associated `compile()` and `parse()` functions.\n\nWhen using the API, it is possible to only import a single function or object to produce smaller and potentially faster code in projects dependent on Extwee functionality.\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n## Contributing\n\nContributions are welcome! Please read our [Contributing Guide](CONTRIBUTING.md) for details on:\n\n- Setting up your development environment\n- Code style and standards\n- Testing requirements\n- Submitting pull requests\n\nSee also:\n- [Code of Conduct](CODE_OF_CONDUCT.md)\n- [Changelog](CHANGELOG.md)\n- [Security Policy](SECURITY.md)\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n## License\n\nDistributed under the MIT License. See `LICENSE.txt` for more information.\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvidelais%2Fextwee","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvidelais%2Fextwee","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvidelais%2Fextwee/lists"}