{"id":29571978,"url":"https://github.com/wonderlandengine/upsdk","last_synced_at":"2025-07-19T04:36:45.232Z","repository":{"id":304155609,"uuid":"1017940019","full_name":"WonderlandEngine/upsdk","owner":"WonderlandEngine","description":"Universal Platform SDK for Web Game Platforms.","archived":false,"fork":false,"pushed_at":"2025-07-11T11:11:53.000Z","size":114,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-07-11T13:29:38.675Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"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/WonderlandEngine.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"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,"zenodo":null}},"created_at":"2025-07-11T10:40:01.000Z","updated_at":"2025-07-11T11:11:57.000Z","dependencies_parsed_at":"2025-07-11T13:39:51.990Z","dependency_job_id":null,"html_url":"https://github.com/WonderlandEngine/upsdk","commit_stats":null,"previous_names":["wonderlandengine/upsdk"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/WonderlandEngine/upsdk","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WonderlandEngine%2Fupsdk","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WonderlandEngine%2Fupsdk/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WonderlandEngine%2Fupsdk/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WonderlandEngine%2Fupsdk/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/WonderlandEngine","download_url":"https://codeload.github.com/WonderlandEngine/upsdk/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WonderlandEngine%2Fupsdk/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265889162,"owners_count":23844539,"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":[],"created_at":"2025-07-19T04:36:44.668Z","updated_at":"2025-07-19T04:36:45.167Z","avatar_url":"https://github.com/WonderlandEngine.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003ca href=\"https://github.com/WonderlandEngine/upsdk/#readme\"\u003e\n    \u003cpicture\u003e\n      \u003cimg alt=\"UPSDK logo\" src=\"https://wonderlandengine.com/upsdk/upsdk-logo_256.png\" height=\"128\"\u003e\n    \u003c/picture\u003e\n  \u003c/a\u003e\n  \u003ch1\u003eUPSDK - Universal Platform SDK for Web Game Platform Services\u003c/h1\u003e\n\n\u003ca href=\"https://wonderlandengine.com\"\u003e\u003cimg alt=\"Wonderland Engine logo\" src=\"https://img.shields.io/badge/MADE%20BY%20Wonderland%20Engine-2b2b2b.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://www.npmjs.com/package/@wonderlandengine/upsdk\"\u003e\u003cimg alt=\"NPM version\" src=\"https://img.shields.io/npm/v/@wonderlandengine/upsdk.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://github.com/WonderlandEngine/upsdk/blob/main/LICENSE\"\u003e\u003cimg alt=\"License\" src=\"https://img.shields.io/npm/l/@wonderlandengine/upsdk.svg\"\u003e\u003c/a\u003e\n\n\u003c/div\u003e\n\nUPSDK radically speeds up your publishing process, because you can integrate it once\nand publish your game to each new platform by adding 2 lines of code.\n\n```ts\nimport {\n    advertising,\n    analytics\n    extra,\n    leaderboards,\n    purchases,\n    saveGame,\n    user,\n} from '@wonderlandengine/upsdk';\n\nasync function main() {\n    analytics.trackGameplayStart();\n\n    /* Get username/profile picture/avatar of logged in users */\n    if(!user.isLoggedIn()) await user.requestLogin();\n    console.log('Welcome,', user.user.name);\n\n    /* Post scores and read from leaderboards */\n    leaderboards.postScore('my-leaderboard', 9001);\n\n    /* Use cloud saves (or fall back to cookie/local storage) */\n    saveGame.save({level: 42, exp: 123013, nickname: 'Neo'})\n\n    /* Show ads - rewarded or midroll! */\n    document.queryElement('#watch-ad').addEventListener('click', e =\u003e {\n        if(!advertising.hasAd()) return;\n\n        advertising.showRewardedAd(e)\n            .then(giveReward)\n            .catch(handleAdError);\n    });\n\n    /* Make in-app purchases! */\n    purchases.purchaseItem('dev-speed-potion', 100);\n\n    analytics.trackGameplayStop();\n\n    /* Use special platform features! */\n    extra.celebrate();\n}\n```\n\n## Providers\n\nProviders implement the interfaces provided in this package for the individual platforms.\n\nFind a list of all available providers below:\n\n[i]: ## \"Implemented.\"\n[n]: ## \"Not implemented.\"\n[u]: ## \"Used in production.\"\n\n| **Platform**                                                                                | **Advertising** | **Analytics** | **Extra** | **Leaderboards** | **Purchases** | **SaveGame** | **User** |\n| ------------------------------------------------------------------------------------------- | -------------- | -------------- | --------- | ---------------- | ------------- | ------------ | -------- |\n| [HeyVR](https://www.npmjs.com/package/@wonderlandengine/upsdk-provider-heyvr)               | [✅][u]        |                |           | [✅][u]          | [✅][u]       | [✅][u]      | [✅][u]  |\n| [CrazyGames](https://www.npmjs.com/package/@wonderlandengine/upsdk-provider-crazygames)     | [✅][u]        | [✅][u]        | [✅][u]   | N/A              | [❌][n]       | [✅][u]      | [✅][u]  |\n| [Poki](https://www.npmjs.com/package/@wonderlandengine/upsdk-provider-poki)                 | [🟡][i]        | [🟡][i]        |           |                  |               |              |          |\n| [Viverse](https://www.npmjs.com/package/@wonderlandengine/upsdk-provider-viverse)           | N/A            | N/A            | N/A       | N/A              | N/A           | N/A          | [✅][u]  |\n| [AdInPlay](https://www.npmjs.com/package/@wonderlandengine/upsdk-provider-adinplay)         | [🟡][i]        | N/A            | N/A       | N/A              | N/A           | N/A          | N/A      |\n| [Applixir](https://www.npmjs.com/package/@wonderlandengine/upsdk-provider-applixir)         | [🟡][i]        | N/A            | N/A       | N/A              | N/A           | N/A          | N/A      |\n| [Yandex Games](https://www.npmjs.com/package/@wonderlandengine/upsdk-provider-yandexgames)  | [🟡][i]        | [❌][n]        | [❌][n]   |  [❌][n]         | [❌][n]       | [❌][n]      | [❌][n]  |\n| [Telegram](https://www.npmjs.com/package/@wonderlandengine/upsdk-provider-telegram)         |                |                |           |                  |               |              | [🟡][i]  |\n| [Cookie](https://www.npmjs.com/package/@wonderlandengine/upsdk-provider-cookie)             |                |                |           |                  |               | [✅][u]      |          |\n| [LocalStorage](https://www.npmjs.com/package/@wonderlandengine/upsdk-provider-localstorage) |                |                |           |                  |               | [🟡][i]      |          |\n| Discord Activities                                                                          |                |                |           |                  |               |              |          |\n\n## How to Use\n\nThe SDK is designed to allow multiple platforms at the same time, choosing whichever is available\nand providing fallbacks, e.g. save games with cookies or local storage, if no service is available.\n\nEach service you want to support needs to be registered with \"global providers\".\nThese global providers can be used from anywhere in the code:\n\n```ts\nimport {saveGame} from '@wonderlandengine/upsdk';\n\nsaveGame.save({level: 42});\n```\n\n### Register Providers\n\nTo register a provider, run this code as early as possible:\n\n```ts\nimport {saveGame, user, leaderboards} from '@wonderlandengine/upsdk';\nimport {HeyVRProvider} from '@wonderlandengine/upsdk-provider-heyvr';\nimport {CookieSaveGameProvider} from '@wonderlandengine/upsdk-provider-cookie';\n\n/* Registering a provider is simple */\nsaveGame.register(new CookieSaveGameProvider());\n\n/* Many providers support multiple services, register them to the ones you use: */\nconst heyVR = new HeyVRProvider('your-game-id');\nsaveGame.register(heyVR);\nuser.register(heyVR);\nleaderboards.register(heyVR);\n```\n\n## Technical\n\n### NPM Scripts\n\n- `npm run clean:tsc` cleans all typescript build artifacts\n- `npm run build --workspaces` =\u003e builds all\n- `npm pack --workspaces` =\u003e creates all packages\n- `npm publish --workspaces --access public` =\u003e publishes all packages\n\n# LICENSE\n\nMIT, see LICENSE file.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwonderlandengine%2Fupsdk","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwonderlandengine%2Fupsdk","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwonderlandengine%2Fupsdk/lists"}