{"id":17026326,"url":"https://github.com/scambier/tq-bundler","last_synced_at":"2026-02-07T13:10:12.228Z","repository":{"id":81168272,"uuid":"374133943","full_name":"scambier/TQ-Bundler","owner":"scambier","description":"The all-in-one TIC-80 bundler","archived":false,"fork":false,"pushed_at":"2025-02-01T20:23:56.000Z","size":128,"stargazers_count":24,"open_issues_count":4,"forks_count":2,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-07-01T18:10:12.797Z","etag":null,"topics":["bundler","fantasy-console","tic-80"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/scambier.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"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},"funding":{"github":"scambier","ko_fi":"scambier"}},"created_at":"2021-06-05T14:25:08.000Z","updated_at":"2025-05-19T20:47:46.000Z","dependencies_parsed_at":"2024-01-14T03:51:02.241Z","dependency_job_id":"c47d05ac-01eb-478b-ad4d-80a8a7622cfb","html_url":"https://github.com/scambier/TQ-Bundler","commit_stats":null,"previous_names":[],"tags_count":17,"template":false,"template_full_name":null,"purl":"pkg:github/scambier/TQ-Bundler","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scambier%2FTQ-Bundler","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scambier%2FTQ-Bundler/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scambier%2FTQ-Bundler/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scambier%2FTQ-Bundler/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/scambier","download_url":"https://codeload.github.com/scambier/TQ-Bundler/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scambier%2FTQ-Bundler/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29194707,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-07T12:38:28.597Z","status":"ssl_error","status_checked_at":"2026-02-07T12:38:23.888Z","response_time":63,"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":["bundler","fantasy-console","tic-80"],"created_at":"2024-10-14T07:31:48.875Z","updated_at":"2026-02-07T13:10:12.211Z","avatar_url":"https://github.com/scambier.png","language":"Rust","funding_links":["https://github.com/sponsors/scambier","https://ko-fi.com/scambier"],"categories":[],"sub_categories":[],"readme":"# TQ-Bundler\n\n\u003e A fast bundler/watcher/launcher for your [**TIC-80**](https://tic80.com/) projects.\n\n----\n\nTQ-Bundler streamlines the use of external editors for TIC-80. Split your project into several files, then bundle them and start your game in a single command.\n\n\u003cspan\u003e🎈\u0026nbsp;_It's a lightweight single-file executable!_\u0026nbsp;🎈\u003c/span\u003e\n\n**[Downloads for Windows and Linux.](https://github.com/scambier/TQ-Bundler/releases)**\n\nTl;dr:\n```bash\n$ mkdir my-game\n$ cd my-game\n$ tq-bundler.exe init lua\n$ tq-bundler.exe run game.lua main.lua --tic tic80.exe\n```\n\n## Features\n\n- [x] Initializes your multi-files project\n- [x] Builds all your files into a single bundle\n- [x] Watches changes to rebuild automatically\n- [x] Launches your game inside TIC-80\n- [x] Supports Lua, Moonscript, Fennel, Janet, Wren, Squirrel, JavaScript, Ruby, and Python\n\n## Installation\n\nSince TQ-Bundler is a single-file executable, you can simply [download it](https://github.com/scambier/TQ-Bundler/releases) and place it wherever you'd like.\nFor easy access, I recommend to place it somewhere in your `PATH`, next to TIC-80, or at the root of your games projects folder.\n\n## Usage\n\nTQ-Bundler has 2 sub-commands:\n- `init` to quickly initialize a multi-file project in the language of your choice\n- `run` to bundle the files and start TIC-80 with your game\n\n### Create a project\n\n```bash\n$ mkdir my-game\n$ cd my-game\n$ tq-bundler.exe init lua # or moon, wren, fennel, janet, squirrel, js, ruby, python\n```\n\nThis will create the files `game.lua` (containing the sprites and sounds) and `main.lua` (the code entry point)\n\n### Include your files\n\nIn all languages, paths are in the format of `\"folder.subfolder.file\"`. Paths are resolved relatively from the root of your project (see example [here](https://github.com/scambier/TQ-Bundler/blob/master/tests/lua/sub/nested.lua)).\n\nAll `include`s are recursively resolved, with respect to their declaration order. `include`s **must** be on their own line (1 per line).\n\n```lua\n-- Lua syntax\ninclude \"macros\" -- will look for ./macros.lua\ninclude \"tools.utils\" -- ./tools/utils.lua\n```\n\n```lua\n-- Moonscript syntax\ninclude \"macros\" -- ./macros.moon\ninclude \"tools.utils\" -- ./tools/utils.moon\n```\n\n```lisp\n;; Fennel syntax\n(include \"macros\") ;; ./macros.fnl\n(include \"tools.utils\") ;; ./tools/utils.fnl\n```\n\n```janet\n# Janet syntax\n(include \"macros\") # ./macros.janet\n(include \"tools.utils\") # ./tools/utils.janet\n```\n\n```c\n// Wren syntax\ninclude \"macros\" // ./macros.wren\ninclude \"tools.utils\" // ./tools/utils.wren\n```\n\n```js\n// Squirrel syntax\ninclude(\"macros\") // ./macros.nut\ninclude(\"tools.utils\") // ./tools/utils.nut\n```\n\n```js\n// JavaScript syntax\ninclude(\"macros\") // ./macros.js\ninclude(\"tools.utils\") // ./tools/utils.js\n```\n\n```ruby\n# Ruby syntax\ninclude \"macros\" # ./macros.rb\ninclude \"tools.utils\" # ./tools/utils.rb\n```\n\n```python\n# Python syntax\ninclude(\"macros\") # ./macros.py\ninclude(\"tools.utils\") # ./tools/utils.py\n```\n\n### Bundle and launch your game\n\n\u003e ⚠️ Be careful to respect the arguments order, or your game won't launch. It's always `tq-bundler.exe run GAME MAIN`.\n\n```sh\n# Bundle the game into `build.lua`:\n$ tq-bundler.exe run game.lua main.lua\n```\n\n```sh\n# Bundle and launch through TIC-80, then rebuild when files change:\n$ tq-bundler.exe run game.lua main.lua --tic path/to/tic80.exe\n```\nThis way, you can edit code inside your IDE and edit assets inside TIC-80 _at the same time_. Changes are applied after a `ctrl+r`.\n\n```sh\n# View all options:\n$ tq-bundler.exe help run\n```\n\n**/!\\\\** The default bundle file is named `build.lua` (or `.wren` etc.). TQ-Builder won't check if a file with this name already exists, and will happily overwrite it with each new compilation **/!\\\\**\n\nThe bundle file is annotated with comments delimiting the start and end of all included files.\n\n## Addendum\n\n**Why not use `require` or `import` statements that already exist in several of these languages?**\n\nTQ-Bundler literally replaces `include` statements with the raw contents of said included files. Since statements like `require` or `import` work differently, I wanted to avoid any confusion.\n\n**The bundle file only contains the code, how can I bundle *this* with the assets file?**\n\nSimply `ctrl+s` inside TIC-80, and your whole game (code + assets) will be saved to `game.lua`\n\nFor convenience, TQ-Bundler leaves the game file (the one containing your sprites \u0026 sounds) alone. This allows you to edit those assets inside TIC-80 and your code inside your external editor, without risking to overwrite one or the other.\n\n**TIC-80 doesn't correctly reload my code**\n\nIf you're building TIC-80 yourself, make sure to use the correct settings\n\n```sh\n$ cd \u003cpath-to-tic\u003e/build\n$ cmake -G \"Visual Studio 16 2019\" -DBUILD_PRO=On -DCMAKE_BUILD_TYPE=MinSizeRel ..\n$ cmake --build . --config MinSizeRel --parallel\n```\n\n### TypeScript support\n\n[Take a look at TSC-80, a TypeScript compiler for TIC-80](https://github.com/scambier/tic80-typescript)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fscambier%2Ftq-bundler","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fscambier%2Ftq-bundler","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fscambier%2Ftq-bundler/lists"}