{"id":13528925,"url":"https://github.com/katsaii/catspeak-lang","last_synced_at":"2025-04-01T14:33:37.435Z","repository":{"id":57968262,"uuid":"340559958","full_name":"katsaii/catspeak-lang","owner":"katsaii","description":"A cross-platform modding language for GameMaker games.","archived":false,"fork":false,"pushed_at":"2025-02-24T00:25:49.000Z","size":2106,"stargazers_count":98,"open_issues_count":11,"forks_count":6,"subscribers_count":8,"default_branch":"main","last_synced_at":"2025-02-24T01:25:21.083Z","etag":null,"topics":["compiler","domain-specific-language","dynamically-typed","gamemaker-studio-2","games","language","lexer-parser","programming-language"],"latest_commit_sha":null,"homepage":"https://www.katsaii.com/catspeak-lang/","language":"Game Maker Language","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/katsaii.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","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}},"created_at":"2021-02-20T04:19:22.000Z","updated_at":"2025-02-24T00:25:54.000Z","dependencies_parsed_at":"2023-09-28T04:33:42.448Z","dependency_job_id":"c275b9df-9f8a-4963-96ca-cb7b71899dbc","html_url":"https://github.com/katsaii/catspeak-lang","commit_stats":null,"previous_names":[],"tags_count":27,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/katsaii%2Fcatspeak-lang","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/katsaii%2Fcatspeak-lang/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/katsaii%2Fcatspeak-lang/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/katsaii%2Fcatspeak-lang/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/katsaii","download_url":"https://codeload.github.com/katsaii/catspeak-lang/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246655447,"owners_count":20812636,"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","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":["compiler","domain-specific-language","dynamically-typed","gamemaker-studio-2","games","language","lexer-parser","programming-language"],"created_at":"2024-08-01T07:00:28.656Z","updated_at":"2025-04-01T14:33:32.415Z","avatar_url":"https://github.com/katsaii.png","language":"Game Maker Language","funding_links":[],"categories":["Utilities"],"sub_categories":["Recommendations"],"readme":"\u003cpicture\u003e\r\n  \u003csource\r\n    media=\"(prefers-color-scheme: dark)\"\r\n    align=\"right\"\r\n    width=\"30%\"\r\n    height=\"30%\"\r\n    srcset=\"./catspeak-logo-dark.svg\"\u003e\r\n  \u003csource\r\n    media=\"(prefers-color-scheme: light)\"\r\n    align=\"right\"\r\n    width=\"30%\"\r\n    height=\"30%\"\r\n    srcset=\"./catspeak-logo.svg\"\u003e\r\n  \u003cimg\r\n    align=\"right\"\r\n    width=\"30%\"\r\n    height=\"30%\"\r\n    alt=\"Catspeak Logo\"\r\n    src=\"./catspeak-logo.svg\"\u003e\r\n\u003c/picture\u003e\r\n\r\n# The Catspeak Programming Language\r\n\r\nA **cross-platform** scripting language and compiler back-end for GameMaker\r\nprojects. Use Catspeak to implement, **fast** and **sandboxed modding support**\r\nby compiling and executing **arbitrary user code** from files or text prompt.\r\n\r\n_Developed and maintained by [Katsaii](https://www.katsaii.com/)._  \r\n_Logo design by [Mashmerlow](https://mashmerlow.github.io/)._  \r\n\r\n## Overview\r\n\r\nThe spiritual successor to the long dead `execute_string` function...\r\n\r\n```js\r\n// parse Catspeak code\r\nvar ir = Catspeak.parseString(@'\r\n  let catspeak = \"Catspeak\"\r\n\r\n  return \"hello! from within \" + catspeak\r\n');\r\n\r\n// compile Catspeak code into a callable GML function\r\nvar getMessage = Catspeak.compile(ir);\r\n\r\n// call the Catspeak code just like you would any other GML function!\r\nshow_message(getMessage());\r\n```\r\n\r\n...without any of the vulnerabilities from unrestricted access to your game\r\ncode:\r\n\r\n```js\r\nvar ir = Catspeak.parseString(@'\r\n  game_end(); -- heheheh, my mod will make your game close \u003e:3\r\n');\r\n\r\n// calling `badMod` will throw an error instead of calling the `game_end` function\r\ntry {\r\n  var badMod = Catspeak.compile(ir);\r\n  badMod();\r\n} catch (e) {\r\n  show_message(\"a mod did something bad!\");\r\n}\r\n```\r\n\r\n## Projects Using Catspeak\r\n\r\nIn no particular order:\r\n\r\n - [Rusted Moss](https://store.steampowered.com/app/1772830/Rusted_Moss/)\r\n\r\n_(If you have a project you would want to appear here, please [get in contact](https://github.com/katsaii/catspeak-lang/issues/new?template=iuseit.yml)!)_\r\n\r\n## Features\r\n\r\nIf you run into any issues using this project, please create a [GitHub issue](https://github.com/katsaii/catspeak-lang/issues/new/choose)\r\nor get in contact on Discord through the [GameMaker Kitchen](https://discord.gg/8krYCqr) server.\r\n\r\n### 📝 Minimal Setup Required\r\n\r\n - Self-contained and ready to use after installation.\r\n - No need to place a persistent God Object in the first room of your game!\r\n\r\n### ☯ Seamless GML-Catspeak Interoperability\r\n\r\n - Call GML code from Catspeak.\r\n - Call Catspeak code from GML.\r\n - Familiar syntax inspired by GML and JavaScript.\r\n\r\n### 🏃‍♀️ Performant Runtime\r\n\r\n - Optimising compiler generates performant code capable of competing with pure GML implementations.\r\n - At best, Catspeak code will be just as fast as GML.\r\n - On average, Catspeak code will be 5x slower than GML.\r\n\r\n### 👽 Cross-platform\r\n\r\n - Implemented in pure GML.\r\n - No external dependencies or platform-specific DLLs.\r\n - Mods should work on any target platform. _(Tested on Windows 10 using: VM, YYC, HTML5, and GMRT)_\r\n\r\n### 🔨 Customisable, Sandboxed Runtime Environment\r\n\r\n - Modders cannot gain access to parts of your game you don't want them to.\r\n - Expose only the functions and resources you feel comfortable with.\r\n - Impossible for modders to execute malicious code by default.\r\n - Detects infinite loops and recursion so the sly `while true { }` doesn't freeze your game, whether intentionally or unintentionally.\r\n\r\n### 💪 Built for Power Users\r\n\r\n - Full compiler back-end documented and available for experimentation.\r\n - Pre-compile your scripts to JSON, and cache them for later. Skip straight to code generation.\r\n - Parse your own domain-specific language into Catspeak IR, then let the code generator turn that into a GML compatibile representation:\r\n   - A custom UI language which supports running user-defined functions as button events.\r\n   - A custom data-specification language where certain keywords act as calls to GML functions.\r\n   - A simple shell-script language for a developer console.\r\n   - A custom scripting language for a programming game.\r\n\r\n### 🙀 Cute Name and Mascot\r\n\r\n## Acknowledgements\r\n\r\nThanks to [JujuAdams](https://www.jujuadams.com/) for giving important feedback\r\non aspects of the implementation, an important step towards making sure\r\nCatspeak is battle hardened.\r\n\r\nThanks to [TabularElf](https://github.com/tabularelf) for donating lots and lots\r\nof prototype code for new Catspeak features.\r\n\r\nThanks to anyone spreading the good name of Catspeak.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkatsaii%2Fcatspeak-lang","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkatsaii%2Fcatspeak-lang","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkatsaii%2Fcatspeak-lang/lists"}