{"id":28238626,"url":"https://github.com/gly-engine/core-native-html5","last_synced_at":"2026-05-29T12:02:05.777Z","repository":{"id":283116440,"uuid":"934894225","full_name":"gly-engine/core-native-html5","owner":"gly-engine","description":"create your own game-engine with just javascript or lua","archived":false,"fork":false,"pushed_at":"2025-11-17T19:04:40.000Z","size":53,"stargazers_count":1,"open_issues_count":2,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-11-17T19:22:32.723Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","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/gly-engine.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/funding.yml","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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"rodrigodornelles"}},"created_at":"2025-02-18T15:20:49.000Z","updated_at":"2025-11-17T19:02:19.000Z","dependencies_parsed_at":"2025-04-04T14:27:42.876Z","dependency_job_id":"9394ddba-30b0-4272-9aae-cc3148e044e6","html_url":"https://github.com/gly-engine/core-native-html5","commit_stats":null,"previous_names":["gamelly/core-native-html5","gly-engine/core-native-html5"],"tags_count":14,"template":false,"template_full_name":null,"purl":"pkg:github/gly-engine/core-native-html5","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gly-engine%2Fcore-native-html5","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gly-engine%2Fcore-native-html5/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gly-engine%2Fcore-native-html5/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gly-engine%2Fcore-native-html5/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gly-engine","download_url":"https://codeload.github.com/gly-engine/core-native-html5/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gly-engine%2Fcore-native-html5/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33650712,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-29T02:00:06.066Z","response_time":107,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":[],"created_at":"2025-05-19T01:13:12.922Z","updated_at":"2026-05-29T12:02:05.771Z","avatar_url":"https://github.com/gly-engine.png","language":"TypeScript","funding_links":["https://github.com/sponsors/rodrigodornelles"],"categories":[],"sub_categories":[],"readme":"# core-native-html5\n\n[![npm](https://img.shields.io/npm/dy/@gamely/core-native-html5?logo=npm\u0026logoColor=fff\u0026label=npm%20downloads)](https://www.npmjs.com/package/@gamely/core-native-html5)\n[![cdn](https://img.shields.io/jsdelivr/npm/hy/@gamely/core-native-html5?logo=jsdelivr\u0026logoColor=fff\u0026label=cdn%20downloads)](https://www.jsdelivr.com/package/npm/@gamely/core-native-html5)\n\n\u003e create your own game-engine with just javascript or lua.\n\n### Built-in Modules\n\n| driver name     | description |\n| :-------------- | :---------- |\n| fengari         | lua vm in es6\n| wasmoon         | lua vm in wasm\n| keyboard        | inputs events\n| gamepad         | inputs events\n| runtime         | tick and draw events\n| resize          | auto resize width and height \n| player-fake     | fake video player using html element `\u003ccanvas\u003e`\n| player-html5    | video player using html  element `\u003cvideo\u003e`\n| player-videojs  | video player using videojs library\n| player-youtube  | video player using iframe youtube integration\n| fengari-check   | check for a lua virtual machine\u003cbr/\u003e_(also `wasmoon-check` `fengari-or-wasmoon-check`)_\n| fengari-jsonrxi | thirdy party library json for core native api\u003cbr/\u003e_(use string: \u003chttps://cdn.jsdelivr.net/gh/rxi/json.lua/json.lua\u003e)_\n\n### Third-party Libraries\n\n```html\n\u003c!-- fengari --\u003e\n\u003cscript src=\"https://cdn.jsdelivr.net/npm/fengari-web@latest/dist/fengari-web.min.js\"\u003e\u003c/script\u003e\n\n\u003c!-- wasmoon --\u003e\n\u003cscript type=\"module\"\u003e\nimport { LuaFactory, LuaMultiReturn } from 'https://cdn.jsdelivr.net/npm/wasmoon@1.16.0/+esm'\nwindow.LuaFactory = LuaFactory\nwindow.LuaMultiReturn = LuaMultiReturn\n\u003c/script\u003e\n\n\u003c!-- videojs --\u003e\n\u003cscript src=\"https://cdn.jsdelivr.net/npm/video.js@8.22.0/dist/video.min.js\"\u003e\u003c/script\u003e\n```\n\n## Gly Engine\n\nreplace `@latest` with the engine version you want.\n\n * \u003chttps://cdn.jsdelivr.net/npm/@gamely/gly-engine\u003e\n * \u003chttps://cdn.jsdelivr.net/npm/@gamely/gly-engine-lite\u003e\n * \u003chttps://cdn.jsdelivr.net/npm/@gamely/gly-engine-micro\u003e\n * \u003chttps://cdn.jsdelivr.net/npm/@gamely/gly-engine-nano\u003e\n\n```js\nconst gly = await CoreNativeHtml5()\n    .setElementRoot('main')\n    .setElementCanvas('#gameCanvas')\n    .addLibrary('wasmoon', LuaFactory, LuaMultiReturn)\n    .addLibrary('runtime', {uptime: false})\n    .addLibrary('keyboard')\n    .addLibrary('resize')\n    .setEngine('https://cdn.jsdelivr.net/npm/@gamely/gly-engine@latest/dist/main.lua')\n    .setGame('game.lua')\n    .build()\n```\n\n## Love2D\n\nsupport wasmoon and fengari!\n\n * \u003chttps://cdn.jsdelivr.net/npm/@gamely/love-engine\u003e\n\n```js\nconst keymap = [\n    ['KeyZ', 'a'],\n    ['KeyX', 'b'],\n    ['KeyC', 'c'],\n    ['KeyV', 'd'],\n    ['Enter', 'a'],\n    ['ArrowUp', 'up'],\n    ['ArrowDown', 'down'],\n    ['ArrowLeft', 'left'],\n    ['ArrowRight', 'right'],\n    ['ShiftLeft', 'menu'],\n];\n\nconst gly = await CoreNativeHtml5()\n    .setElementRoot('main')\n    .setElementCanvas('#gameCanvas')\n    .addLibrary('fengari', fengari)\n    .addLibrary('runtime', {unfocus_pause: true})\n    .addLibrary('keyboard', keymap)\n    .addLibrary('resize')\n    .setEngine('https://cdn.jsdelivr.net/npm/@gamely/love-engine@latest/dist/main.lua')\n    .setGame('main.lua')\n    .build()\n```\n\n## Engine writen in lua\n\n```js\nconst gly = await CoreNativeHtml5()\n    .setElementRoot('main')\n    .setElementCanvas('#gameCanvas')\n    .addLibrary('wasmoon', window.LuaFactory, window.LuaMultiReturn)\n    .addLibrary('fengari', window.fengari)\n    .addLibrary('fengari-jsonrxi', 'https://cdn.jsdelivr.net/gh/rxi/json.lua/json.lua')\n    .addLibrary('fengari-or-wasmoon-check')\n    .addLibrary('player-videojs', window.videojs)\n    .addLibrary('runtime')\n    .addLibrary('keyboard')\n    .addLibrary('resize')\n    .setEngine('engine.lua')\n    .setGame('game.lua')\n    .build()\n```\n\n## Baremetal javascript\n\n```js\nconst gly = await CoreNativeHtml5()\n    .setElementCanvas('#gameCanvas')\n    .build()\n\ngly.engine.on('draw', () =\u003e {\n    gly.backend.native_draw_color(0xFFFFFFFFF)\n    gly.backend.native_draw_rect(0, 50, 50, 50, 50)\n})\n\nfunction tick() {\n    gly.frontend.native_callback_loop()\n    gly.frontend.native_callback_draw()\n    window.requestAnimationFrame(tick)\n}\n\ngly.frontend.native_callback_init()\ntick();\n```\n\n## Custom engine javascript\n\n```js\nfunction awesome_game(loop, draw, keys) {\n    let color = 0x00FFFFFF\n\n    loop.callback(() =\u003e {\n\n    })\n    draw.callback(() =\u003e {\n        draw.color(color)\n        draw.rect(0, 10, 20, 30, 40)\n    })\n    keys.callback((key, press) =\u003e {\n        if (key == 'a' \u0026\u0026 press) {\n            color = 0xFF0000FF\n        }\n    })\n}\n```\n\n```js\nfunction awesome_engine(game) {\n    CoreNativeHtml5().setElementCanvas('#game').addLibrary('keyboard').addLibrary('runtime').build().then((gly) =\u003e {\n        const loop = {\n            callback: (f) =\u003e gly.on('loop', f)\n        }\n        const draw = {\n            color: gly.backend.native_draw_color,\n            rect: gly.backend.native_draw_rect,\n            callback: (f) =\u003e gly.on('draw', f)\n        }\n        const keys = {\n            callback: (f) =\u003e gly.on('keyboard', f)\n        }\n    \n        game(loop, draw, keys)\n    })\n}\n```\n\n```js\nawesome_engine(awesome_game)\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgly-engine%2Fcore-native-html5","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgly-engine%2Fcore-native-html5","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgly-engine%2Fcore-native-html5/lists"}