{"id":15287006,"url":"https://github.com/synthetic-borealis/uwu-toolkit","last_synced_at":"2026-05-05T00:35:29.303Z","repository":{"id":51565091,"uuid":"450868157","full_name":"synthetic-borealis/uwu-toolkit","owner":"synthetic-borealis","description":"An UwU source-to-source compilation library for Node.js, Deno \u0026 web browsers.","archived":false,"fork":false,"pushed_at":"2023-01-24T13:35:08.000Z","size":1100,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-03T00:03:57.059Z","etag":null,"topics":["brainfuck","deno","esoteric-language","javascript","library","nodejs","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/synthetic-borealis.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-01-22T16:13:44.000Z","updated_at":"2023-04-11T15:44:05.000Z","dependencies_parsed_at":"2023-02-13T21:46:14.754Z","dependency_job_id":null,"html_url":"https://github.com/synthetic-borealis/uwu-toolkit","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/synthetic-borealis/uwu-toolkit","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/synthetic-borealis%2Fuwu-toolkit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/synthetic-borealis%2Fuwu-toolkit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/synthetic-borealis%2Fuwu-toolkit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/synthetic-borealis%2Fuwu-toolkit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/synthetic-borealis","download_url":"https://codeload.github.com/synthetic-borealis/uwu-toolkit/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/synthetic-borealis%2Fuwu-toolkit/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32631058,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-04T10:08:07.713Z","status":"ssl_error","status_checked_at":"2026-05-04T10:08:02.005Z","response_time":58,"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":["brainfuck","deno","esoteric-language","javascript","library","nodejs","typescript"],"created_at":"2024-09-30T15:20:16.717Z","updated_at":"2026-05-05T00:35:29.288Z","avatar_url":"https://github.com/synthetic-borealis.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# UwU Toolkit\n\n[![GitHub license](https://img.shields.io/github/license/synthetic-borealis/uwu-toolkit)](https://github.com/synthetic-borealis/uwu-toolkit/blob/main/LICENSE)\n[![npm version](https://badge.fury.io/js/uwu-toolkit.svg)](https://badge.fury.io/js/uwu-toolkit)\n![Tests](https://github.com/synthetic-borealis/uwu-toolkit/actions/workflows/test.yml/badge.svg)\n[![codecov](https://codecov.io/github/synthetic-borealis/uwu-toolkit/branch/main/graph/badge.svg?token=FNGQ35KT0M)](https://codecov.io/github/synthetic-borealis/uwu-toolkit)\n\nAn UwU source-to-source compilation library for web-browsers, Node.js \u0026 Deno.\n\n## Contents\n\n1. [What is Uwu](#what-is-uwu)\n2. [Installation](#installation)\n3. [Usage](#usage)\n4. [Supported output languages](#supported-output-languages)\n5. [Examples](#examples)\n\n## What is UwU?\n\nUwU is an esoteric programming language created by [Kira Rose](https://github.com/KiraDotRose). It\nis a member of the Brainfuck trivial substitution family of programming languages. An example\nprogram written in UwU, and a list of commands can be\nfound [here](https://github.com/KiraDotRose/UwU).\n\n## Installation\n\nRun `npm i uwu-toolkit` or `yarn add uwu-toolkit`.\n\n## Usage\n\n- Use `compileTo[LANGUAGE]()` where `[LANGUAGE]` is a supported output language/variant (\n  e.g. `compileToJsWeb()`).\n- The web variant of the JavaScript transpiler generates a function that returns an object\n  containing two members:\n  1. `output` - The output of the program.\n  2. `cells` - The array of cells that were used by the program.\n- See the [documentation](docs/API.md) for more information.\n\n## Supported Output Languages\n\n- Brainfuck.\n- C.\n- C++.\n- JavaScript.\n- Python.\n\n### Table 1: Supported Commands by Output Language\n\n| Language             |   OwO   |   °w°   |   UwU   |   QwQ   |   @w@   |   \u003ew\u003c   |  \\~w\\~  |   ¯w¯   | Memory Size    |\n|:---------------------| :-----: | :-----: | :-----: | :-----: | :-----: | :-----: | :-----: | :-----: | :------------: |\n| Brainfuck            | \u0026check; | \u0026check; | \u0026check; | \u0026check; | \u0026check; | \u0026check; | \u0026check; | \u0026check; | Not Applicable |\n| C                    | \u0026check; | \u0026check; | \u0026check; | \u0026check; | \u0026check; | \u0026check; | \u0026check; | \u0026check; | 30,000         |\n| C++                  | \u0026check; | \u0026check; | \u0026check; | \u0026check; | \u0026check; | \u0026check; | \u0026check; | \u0026check; | 30,000/Dynamic |\n| JavaScript (Web)     | \u0026check; | \u0026check; | \u0026check; | \u0026check; | \u0026check; | \u0026cross; | \u0026check; | \u0026check; | 30,000/Dynamic |\n| JavaScript (Node.js) | \u0026check; | \u0026check; | \u0026check; | \u0026check; | \u0026check; | \u0026check; | \u0026check; | \u0026check; | 30,000/Dynamic |\n| JavaScript (Deno)    | \u0026check; | \u0026check; | \u0026check; | \u0026check; | \u0026check; | \u0026check; | \u0026check; | \u0026check; | 30,000/Dynamic |\n| Python               | \u0026check; | \u0026check; | \u0026check; | \u0026check; | \u0026check; | \u0026check; | \u0026check; | \u0026check; | 30,000/Dynamic |\n\n## Examples\n\n### CommonJS (Node)\n\n```javascript\nconst uwuTK = require('uwu-toolkit');\n\nconst helloUwu = 'UwU UwU UwU UwU UwU UwU UwU UwU ~w~ OwO'\n  + 'UwU UwU UwU UwU ~w~ OwO UwU UwU OwO UwU UwU UwU OwO UwU UwU'\n  + 'UwU OwO UwU OwO UwU UwU UwU UwU °w° °w° °w° °w° °w° QwQ ¯w¯'\n  + 'OwO UwU OwO UwU OwO QwQ OwO OwO QwQ OwO UwU ~w~ °w° ¯w¯ °w°'\n  + 'QwQ ¯w¯ OwO OwO @w@ OwO QwQ QwQ QwQ @w@ OwO OwO OwO QwQ @w@'\n  + '@w@ °w° °w° °w° UwU UwU UwU UwU UwU UwU UwU UwU UwU UwU @w@'\n  + 'OwO OwO @w@ °w° QwQ @w@ °w° @w@ OwO OwO OwO @w@ @w@ °w° °w°'\n  + '°w° QwQ QwQ QwQ QwQ QwQ QwQ QwQ QwQ QwQ QwQ QwQ @w@ OwO OwO'\n  + 'UwU @w@ OwO OwO UwU UwU @w@';\n\ntry {\n  const helloJS = uwuTK.compileToJsWeb(helloUwu);\n  const hello = new Function(`${helloJS}return main().output;`);\n\n  console.log(hello());\n} catch (err) {\n  console.error(`Error: ${err.message}`);\n}\n```\n\n### Program Validation - CommonJS (Node)\n\n```javascript\nconst uwuTK = require('uwu-toolkit');\n\nconst helloUwu = 'UwU UwU UwU UwU UwU UwU UwU UwU ~w~ OwO'\n  + 'UwU UwU UwU UwU ~w~ OwO UwU UwU OwO UwU UwU UwU OwO UwU UwU'\n  + 'UwU OwO UwU OwO UwU UwU UwU UwU °w° °w° °w° °w° °w° QwQ ¯w¯'\n  + 'OwO UwU OwO UwU OwO QwQ OwO OwO QwQ OwO UwU ~w~ °w° ¯w¯ °w°'\n  + 'QwQ ¯w¯ OwO OwO @w@ OwO QwQ QwQ QwQ @w@ OwO OwO OwO QwQ @w@'\n  + '@w@ °w° °w° °w° UwU UwU UwU UwU UwU UwU UwU UwU UwU UwU @w@'\n  + 'OwO OwO @w@ °w° QwQ @w@ °w° @w@ OwO OwO OwO @w@ @w@ °w° °w°'\n  + '°w° QwQ QwQ QwQ QwQ QwQ QwQ QwQ QwQ QwQ QwQ QwQ @w@ OwO OwO'\n  + 'UwU @w@ OwO OwO UwU UwU @w@';\n\nconst invalidUwu = 'UwU UwU UwU UwU UwU UwU UwU UwU ~w~ OwO'\n  + 'UwU UwU UwU UwU ~w~ OwO UwU UwU OwO UwU UwU UwU OwO UwU UwU'\n  + 'UwU OwO UwU OwO UwU UwU UwU UwU °w° °w° °w° °w° °w° QwQ ¯w¯'\n  + 'OwO UwU OwO UwU OwO QwQ OwO OwO QwQ OwO UwU ~w~ °w° ¯w¯ °w°'\n  + 'QwQ ¯w¯ OwO OwO @w@ OwO QwQ QwQ QwQ @w@ OwO OwO OwO QwQ @w@'\n  + '@w@ °w° °w° °w° UwU UwU UwU UwU UwU UwU UwU UwU UwU UwU @w@'\n  + 'OwO OwO @w@ °w° QwQ @w@ °w° @w@ OwO OwO OwO @w@ @w@ °w° °w°'\n  + '°w° QwQ QwQ QwQ QwQ QwQ QwQ ¯w¯ QwQ QwQ QwQ QwQ @w@ OwO OwO'\n  + 'UwU @w@ OwO OwO UwU UwU @w@';\n\nconst validSourceArray = uwuTK.tokenizeUwuSource(helloUwu);\nconst invalidSourceArray = uwuTK.tokenizeUwuSource(invalidUwu);\n\nconsole.log(uwuTK.isValidProgram(validSourceArray)); // true\nconsole.log(uwuTK.isValidProgram(invalidSourceArray)); // false\n```\n\n### ESM (Node)\n\n```javascript\nimport * as uwuTK from 'uwu-toolkit';\n\nconst helloUwu = 'UwU UwU UwU UwU UwU UwU UwU UwU ~w~ OwO'\n  + 'UwU UwU UwU UwU ~w~ OwO UwU UwU OwO UwU UwU UwU OwO UwU UwU'\n  + 'UwU OwO UwU OwO UwU UwU UwU UwU °w° °w° °w° °w° °w° QwQ ¯w¯'\n  + 'OwO UwU OwO UwU OwO QwQ OwO OwO QwQ OwO UwU ~w~ °w° ¯w¯ °w°'\n  + 'QwQ ¯w¯ OwO OwO @w@ OwO QwQ QwQ QwQ @w@ OwO OwO OwO QwQ @w@'\n  + '@w@ °w° °w° °w° UwU UwU UwU UwU UwU UwU UwU UwU UwU UwU @w@'\n  + 'OwO OwO @w@ °w° QwQ @w@ °w° @w@ OwO OwO OwO @w@ @w@ °w° °w°'\n  + '°w° QwQ QwQ QwQ QwQ QwQ QwQ QwQ QwQ QwQ QwQ QwQ @w@ OwO OwO'\n  + 'UwU @w@ OwO OwO UwU UwU @w@';\n\ntry {\n  const helloJS = uwuTK.compileToJsWeb(helloUwu);\n  const hello = new Function(`${helloJS}return main().output;`);\n\n  console.log(hello());\n} catch (err) {\n  console.error(`Error: ${err.message}`);\n}\n```\n\n### ESM (Deno)\n\n```javascript\nimport * as uwuTK from \"https://jspm.dev/uwu-toolkit\";\n\nconst helloUwu = \"UwU UwU UwU UwU UwU UwU UwU UwU ~w~ OwO\"\n  + \"UwU UwU UwU UwU ~w~ OwO UwU UwU OwO UwU UwU UwU OwO UwU UwU\"\n  + \"UwU OwO UwU OwO UwU UwU UwU UwU °w° °w° °w° °w° °w° QwQ ¯w¯\"\n  + \"OwO UwU OwO UwU OwO QwQ OwO OwO QwQ OwO UwU ~w~ °w° ¯w¯ °w°\"\n  + \"QwQ ¯w¯ OwO OwO @w@ OwO QwQ QwQ QwQ @w@ OwO OwO OwO QwQ @w@\"\n  + \"@w@ °w° °w° °w° UwU UwU UwU UwU UwU UwU UwU UwU UwU UwU @w@\"\n  + \"OwO OwO @w@ °w° QwQ @w@ °w° @w@ OwO OwO OwO @w@ @w@ °w° °w°\"\n  + \"°w° QwQ QwQ QwQ QwQ QwQ QwQ QwQ QwQ QwQ QwQ QwQ @w@ OwO OwO\"\n  + \"UwU @w@ OwO OwO UwU UwU @w@\";\n\ntry {\n  const helloJS = uwuTK.compileToJsWeb(helloUwu);\n  const hello = new Function(`${helloJS}return main().output;`);\n\n  console.log(hello());\n} catch (err) {\n  console.error(`Error: ${err.message}`);\n}\n```\n\n### TypeScript (Deno)\n\n```typescript\nimport * as uwuTK from \"https://cdn.jsdelivr.net/gh/synthetic-borealis/uwu-toolkit/deno/index.ts\";\n\nconst helloUwu = \"UwU UwU UwU UwU UwU UwU UwU UwU ~w~ OwO\" +\n  \"UwU UwU UwU UwU ~w~ OwO UwU UwU OwO UwU UwU UwU OwO UwU UwU\" +\n  \"UwU OwO UwU OwO UwU UwU UwU UwU °w° °w° °w° °w° °w° QwQ ¯w¯\" +\n  \"OwO UwU OwO UwU OwO QwQ OwO OwO QwQ OwO UwU ~w~ °w° ¯w¯ °w°\" +\n  \"QwQ ¯w¯ OwO OwO @w@ OwO QwQ QwQ QwQ @w@ OwO OwO OwO QwQ @w@\" +\n  \"@w@ °w° °w° °w° UwU UwU UwU UwU UwU UwU UwU UwU UwU UwU @w@\" +\n  \"OwO OwO @w@ °w° QwQ @w@ °w° @w@ OwO OwO OwO @w@ @w@ °w° °w°\" +\n  \"°w° QwQ QwQ QwQ QwQ QwQ QwQ QwQ QwQ QwQ QwQ QwQ @w@ OwO OwO\" +\n  \"UwU @w@ OwO OwO UwU UwU @w@\";\n\ntry {\n  const helloJS = uwuTK.compileToJsWeb(helloUwu);\n  const hello = new Function(`${helloJS}return main().output;`);\n\n  console.log(hello());\n} catch (err) {\n  console.error(`Error: ${err.message}`);\n}\n```\n\n### Web\n\n```html\n\u003c!DOCTYPE html\u003e\n\u003chtml lang=\"en\"\u003e\n  \u003chead\u003e\n    \u003cmeta charset=\"UTF-8\"\u003e\n    \u003cmeta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\"\u003e\n    \u003cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"\u003e\n    \u003ctitle\u003eHewwo Wowwd!\u003c/title\u003e\n    \u003cscript src=\"https://unpkg.com/uwu-toolkit@2.0.1/dist/uwu-toolkit.js\"\u003e\u003c/script\u003e\n  \u003c/head\u003e\n  \u003cbody\u003e\n    \u003cp\u003e\n      \u003ctextarea id=\"output-box\" readonly rows=\"8\" style=\"width: 90%;\"\u003e\u003c/textarea\u003e\n    \u003c/p\u003e\n    \u003cbutton id=\"run-button\"\u003eRun\u003c/button\u003e\n\n    \u003cscript\u003e\n      const runButton = document.getElementById('run-button');\n      const outputBox = document.getElementById('output-box');\n      const helloUwu = 'UwU UwU UwU UwU UwU UwU UwU UwU ~w~ OwO'\n        + 'UwU UwU UwU UwU ~w~ OwO UwU UwU OwO UwU UwU UwU OwO UwU UwU'\n        + 'UwU OwO UwU OwO UwU UwU UwU UwU °w° °w° °w° °w° °w° QwQ ¯w¯'\n        + 'OwO UwU OwO UwU OwO QwQ OwO OwO QwQ OwO UwU ~w~ °w° ¯w¯ °w°'\n        + 'QwQ ¯w¯ OwO OwO @w@ OwO QwQ QwQ QwQ @w@ OwO OwO OwO QwQ @w@'\n        + '@w@ °w° °w° °w° UwU UwU UwU UwU UwU UwU UwU UwU UwU UwU @w@'\n        + 'OwO OwO @w@ °w° QwQ @w@ °w° @w@ OwO OwO OwO @w@ @w@ °w° °w°'\n        + '°w° QwQ QwQ QwQ QwQ QwQ QwQ QwQ QwQ QwQ QwQ QwQ @w@ OwO OwO'\n        + 'UwU @w@ OwO OwO UwU UwU @w@';\n\n      outputBox.value = '';\n      runButton.addEventListener('click', () =\u003e {\n        try {\n          const helloWorldProgram = uwuTK.compileToJsWeb(helloUwu);\n          const helloWorld = new Function(`${helloWorldProgram} return main().output;`);\n\n          outputBox.value += helloWorld();\n        } catch (err) {\n          outputBox.value += `Error: ${err.message}`;\n        }\n      });\n    \u003c/script\u003e\n  \u003c/body\u003e\n\u003c/html\u003e\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsynthetic-borealis%2Fuwu-toolkit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsynthetic-borealis%2Fuwu-toolkit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsynthetic-borealis%2Fuwu-toolkit/lists"}