{"id":27362600,"url":"https://github.com/wane/wane","last_synced_at":"2026-03-17T09:32:07.208Z","repository":{"id":32842849,"uuid":"137772464","full_name":"wane/wane","owner":"wane","description":"A framework/compiler/bundler for building front-end applications.","archived":false,"fork":false,"pushed_at":"2022-12-03T07:40:04.000Z","size":1585,"stargazers_count":9,"open_issues_count":51,"forks_count":1,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-09-29T11:32:13.192Z","etag":null,"topics":["bundler","compiler","framework","javascript","typescript","wane"],"latest_commit_sha":null,"homepage":"https://www.wane.app/","language":"TypeScript","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/wane.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}},"created_at":"2018-06-18T15:45:21.000Z","updated_at":"2023-01-29T21:44:24.000Z","dependencies_parsed_at":"2023-01-14T22:30:59.847Z","dependency_job_id":null,"html_url":"https://github.com/wane/wane","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/wane/wane","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wane%2Fwane","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wane%2Fwane/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wane%2Fwane/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wane%2Fwane/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/wane","download_url":"https://codeload.github.com/wane/wane/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wane%2Fwane/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30620673,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-17T08:10:05.930Z","status":"ssl_error","status_checked_at":"2026-03-17T08:10:04.972Z","response_time":56,"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","compiler","framework","javascript","typescript","wane"],"created_at":"2025-04-13T03:25:14.725Z","updated_at":"2026-03-17T09:32:07.182Z","avatar_url":"https://github.com/wane.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=center\u003e\n  \u003cimg align=center src=\"logo.svg\" alt=Wane width=200\u003e\n\u003c/p\u003e\n\n# Wane\n\n**Wane** is a framework, compiler and a bundler: all at the same time.\nIt aims to become the only tool you need to build a front-end application.\n\nSee what makes it special after the Hello World introduction below.\n\n**WARNING!** This is still just an early prototype.\nBeware of super experimental stuff ahead, including bugs and obvious missing features.\nFeel free to play around, ask questions and report bugs in the issues section.\n\n## Hello World\n\nTo get started, create an empty folder for your project and do the usual `yarn init` ceremony.\nThen, install `wane`, create a new folder `src`, and within it a file `index.ts`.\n\n```bash\n$ yarn add wane\n$ mkdir src\n$ touch src/index.ts\n```\n\nOpen it and write the following.\n\n```typescript\n// src/index.ts\n\nimport { Template } from 'wane'\n\n@Template(`Hello, {{ someone }}!`)\nexport default class App {\n  someone = 'World'\n}\n```\n\nSave the file and run the wane dev server.\n\n```bash\n$ yarn wane start\n```\n\nIf everything went fine, you're now running the dev server\nwhich will watch for changes you make to the source code,\nre-compile the app and reload the browser for you.\n\nYou can also create the production build.\n\n```bash\n$ yarn wane build\n```\n\nThe built app is contained within the newly created `dist` folder.\nOpen the `dist/index.html` file from your browser to see the app in action.\n\nThe generated JavaScript file is only **272 bytes**.\nYes, that's less than 0.3kB. \nIf you run that through gzip, you get **207 bytes**.\nWith brotli, you're down to only **166 bytes**.\nHere's it again: \n\n```text\n 272 index.js\n 207 index.js.gz\n 166 index.js.br\n``` \n\nAnd it can only get better.\n\nBelow is a short overview of how it's achieved.\n\n## How's it different\n\nThe thing is, there's no _framework_ in the traditional sense.\nIt just feels like one because it lets you write TypeScript, which you should be already comfortable with.\nAdd in some decorators and magic happens!\n\nHowever, behind the scenes, the code you write is treated as a string.\nWith help of the TypeScript compiler (and the awesome wrapper [`ts-simple-ast`](https://github.com/dsherret/ts-simple-ast)), it statically analyzes your code and completely code-generates everything.\n\nThis means that there is **no framework code** at all. \nAll code that makes it to the final bundle is **written just for your app**.\n\nIn theory, this means that there is nothing stopping Wane from generating the best possible code without any overhead and without any unnecessary code:\n\n- You have an output (an event) on a component that no component listens to? Let's remove it then.\n- There is no method that can update the string that you've used for interpolation (`someone` in the Hello World example above)? Then there will be no code generating for updating it: it will be the same as if you've written the value (`\"World\"`) right there in the template.\n- Your component can never be destroyed because it's not inside a `w:if` directive? Then it won't generate the `destroy` method for it.\n- Say when you fire an event, you change a variable. A variable that is not bound to the view. So let's not even run the change detection algorithm or re-render anything. Let's only update your model. \n\nAnd the best thing is, improvements like these are happening in the compiler.\nWhen a new feature is implemented, you could just run the compiler again over the same code and you could get a smaller bundle and a faster application.\n\n## How to explore\n\nUntil I (or someone else) gets around to writing examples and tutorials, your best shot at seeing what is currently implemented are apps created for end-to-end tests under [tests/e2e/apps](https://github.com/wane/wane/tree/master/tests/e2e/apps).\n\nThere's also a work-in-progress website: [wane.app](https://www.wane.app).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwane%2Fwane","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwane%2Fwane","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwane%2Fwane/lists"}