{"id":27312924,"url":"https://github.com/pixeldesu/tinkaton","last_synced_at":"2025-09-13T21:23:01.999Z","repository":{"id":285154884,"uuid":"954827906","full_name":"pixeldesu/tinkaton","owner":"pixeldesu","description":"Library to extract information from frontend frameworks","archived":false,"fork":false,"pushed_at":"2025-04-07T17:49:19.000Z","size":566,"stargazers_count":6,"open_issues_count":4,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-12T06:49:41.211Z","etag":null,"topics":["frontend-frameworks","reverse-engineering"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pixeldesu.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":".github/CONTRIBUTING.md","funding":".github/FUNDING.yml","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},"funding":{"github":"pixeldesu"}},"created_at":"2025-03-25T17:16:42.000Z","updated_at":"2025-04-01T00:28:30.000Z","dependencies_parsed_at":"2025-03-29T22:25:02.324Z","dependency_job_id":null,"html_url":"https://github.com/pixeldesu/tinkaton","commit_stats":null,"previous_names":["pixeldesu/tinkaton"],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pixeldesu%2Ftinkaton","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pixeldesu%2Ftinkaton/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pixeldesu%2Ftinkaton/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pixeldesu%2Ftinkaton/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pixeldesu","download_url":"https://codeload.github.com/pixeldesu/tinkaton/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248530605,"owners_count":21119595,"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":["frontend-frameworks","reverse-engineering"],"created_at":"2025-04-12T06:49:44.965Z","updated_at":"2025-04-12T06:49:47.005Z","avatar_url":"https://github.com/pixeldesu.png","language":"TypeScript","funding_links":["https://github.com/sponsors/pixeldesu"],"categories":[],"sub_categories":[],"readme":"\u003cdiv align='center'\u003e\n  \u003cimg width=250px src='.github/images/tinkaton.png?raw=true'\u003e\n\n  \u003ch1\u003eTinkaton\u003c/h1\u003e\n  \u003cp\u003eTinkaton is a library that can be used to extract information from popular frontend framework entrypoints on websites.\u003c/p\u003e\n\u003c/div\u003e\n\n\u003e [!IMPORTANT]\n\u003e Tinkaton is a project made to tinker with web projects in an exploratory fashion, so it should be only used for educational purposes!\n\n## Installation\n\nYou can get Tinkaton via NPM:\n\n```shell\n$ npm install tinkaton\n```\n\nOr directly in the browser:\n\n```html\n\u003c!-- IIFE build --\u003e\n\u003cscript src=\"https://unpkg.com/tinkaton/dist/tinkaton.global.js\"\u003e\u003c/script\u003e\n```\n\n## Usage\n\n```js\n// If you want to use the ESM build, import Tinkaton\nimport Tinkaton from \"https://unpkg.com/tinkaton/dist/tinkaton.js\";\n\nconst tinkaton = new Tinkaton();\ntinkaton.run(); // returns an array with extracted data for each entrypoint found\n```\n\nIf you use the IIFE build `tinkaton.global.js`, you do the following:\n\n```js\n// Assuming you loaded tinkaton.global.js beforehand, either importing it through a script or another way\nconst tinkaton = new Tinkaton.default();\ntinkaton.run(); \n```\n\n## Supported Frameworks\n\n| Framework | How is it detected?                                                  | What is extracted?                                             |\n|-----------|----------------------------------------------------------------------|----------------------------------------------------------------|\n| Alpine.js | Elements with the `x-data` attribute                                 | The data instance proxy                                        |\n| Livewire  | Elements with the `wire:id` attribute                                | Livewire snapshot information (from the `__livewire` property) |\n| Vue 2     | `#app` elements with a `__vue__` property                            | The entire root component                                      |\n| Vue 3     | `#app` elements with a `__vue_app__` property                        | The global properties of the Vue instance                      |\n| React     | Elements with `_reactRootContainer` or `__reactContainer` properties | All properties passed to components down the element tree      |\n| Stimulus  | `window.Stimulus` being defined                                      | The global Stimulus instance (`window.Stimulus`)               |\n| Turbo     | `window.Turbo` being defined                                         | The global Turbo instance (`window.Turbo`)                     |\n| Ember     | `window.Ember` being defined                                         | The global Ember instance (`window.Ember`)                     |\n| Backbone  | `window.Backbone` being defined                                      | The global Backbone instance (`window.Backbone`)               |\n| Knockout  | `window.ko` being defined                                            | The global Knockout instance (`window.ko`)                     |\n\nAll element-focused extractors also support being passed a custom selector that will be tested for matching properties!\n\n## Development\n\nTo work on Tinkaton locally, you need a current version of Node.js and NPM on your development environment.\n\n* Install required dependencies using `npm install`.\n* Build the project files using `npm run build`.\n* Check the project code style using:\n  * `npm run lint` for ESLint\n  * `npm run format-check` for Prettier\n\n## Contributing\n\nIf you want to contribute to the project, please check out the [Contribution Guidelines](/.github/CONTRIBUTING.md)!\n\n## License\n\ntinkaton is licensed under [aGPL v3](./LICENSE).\n\n_This project is not affiliated with Game Freak or the Pokémon Company and Tinkaton is solely used as a project name/mascot while all trademarks and copyrights are with their respective holders._","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpixeldesu%2Ftinkaton","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpixeldesu%2Ftinkaton","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpixeldesu%2Ftinkaton/lists"}