https://github.com/wonderlandengine/upsdk
Universal Platform SDK for Web Game Platforms.
https://github.com/wonderlandengine/upsdk
Last synced: 11 months ago
JSON representation
Universal Platform SDK for Web Game Platforms.
- Host: GitHub
- URL: https://github.com/wonderlandengine/upsdk
- Owner: WonderlandEngine
- License: mit
- Created: 2025-07-11T10:40:01.000Z (12 months ago)
- Default Branch: main
- Last Pushed: 2025-07-11T11:11:53.000Z (12 months ago)
- Last Synced: 2025-07-11T13:29:38.675Z (12 months ago)
- Language: TypeScript
- Size: 111 KB
- Stars: 4
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
UPSDK radically speeds up your publishing process, because you can integrate it once
and publish your game to each new platform by adding 2 lines of code.
```ts
import {
advertising,
analytics
extra,
leaderboards,
purchases,
saveGame,
user,
} from '@wonderlandengine/upsdk';
async function main() {
analytics.trackGameplayStart();
/* Get username/profile picture/avatar of logged in users */
if(!user.isLoggedIn()) await user.requestLogin();
console.log('Welcome,', user.user.name);
/* Post scores and read from leaderboards */
leaderboards.postScore('my-leaderboard', 9001);
/* Use cloud saves (or fall back to cookie/local storage) */
saveGame.save({level: 42, exp: 123013, nickname: 'Neo'})
/* Show ads - rewarded or midroll! */
document.queryElement('#watch-ad').addEventListener('click', e => {
if(!advertising.hasAd()) return;
advertising.showRewardedAd(e)
.then(giveReward)
.catch(handleAdError);
});
/* Make in-app purchases! */
purchases.purchaseItem('dev-speed-potion', 100);
analytics.trackGameplayStop();
/* Use special platform features! */
extra.celebrate();
}
```
## Providers
Providers implement the interfaces provided in this package for the individual platforms.
Find a list of all available providers below:
[i]: ## "Implemented."
[n]: ## "Not implemented."
[u]: ## "Used in production."
| **Platform** | **Advertising** | **Analytics** | **Extra** | **Leaderboards** | **Purchases** | **SaveGame** | **User** |
| ------------------------------------------------------------------------------------------- | -------------- | -------------- | --------- | ---------------- | ------------- | ------------ | -------- |
| [HeyVR](https://www.npmjs.com/package/@wonderlandengine/upsdk-provider-heyvr) | [✅][u] | | | [✅][u] | [✅][u] | [✅][u] | [✅][u] |
| [CrazyGames](https://www.npmjs.com/package/@wonderlandengine/upsdk-provider-crazygames) | [✅][u] | [✅][u] | [✅][u] | N/A | [❌][n] | [✅][u] | [✅][u] |
| [Poki](https://www.npmjs.com/package/@wonderlandengine/upsdk-provider-poki) | [🟡][i] | [🟡][i] | | | | | |
| [Viverse](https://www.npmjs.com/package/@wonderlandengine/upsdk-provider-viverse) | N/A | N/A | N/A | N/A | N/A | N/A | [✅][u] |
| [AdInPlay](https://www.npmjs.com/package/@wonderlandengine/upsdk-provider-adinplay) | [🟡][i] | N/A | N/A | N/A | N/A | N/A | N/A |
| [Applixir](https://www.npmjs.com/package/@wonderlandengine/upsdk-provider-applixir) | [🟡][i] | N/A | N/A | N/A | N/A | N/A | N/A |
| [Yandex Games](https://www.npmjs.com/package/@wonderlandengine/upsdk-provider-yandexgames) | [🟡][i] | [❌][n] | [❌][n] | [❌][n] | [❌][n] | [❌][n] | [❌][n] |
| [Telegram](https://www.npmjs.com/package/@wonderlandengine/upsdk-provider-telegram) | | | | | | | [🟡][i] |
| [Cookie](https://www.npmjs.com/package/@wonderlandengine/upsdk-provider-cookie) | | | | | | [✅][u] | |
| [LocalStorage](https://www.npmjs.com/package/@wonderlandengine/upsdk-provider-localstorage) | | | | | | [🟡][i] | |
| Discord Activities | | | | | | | |
## How to Use
The SDK is designed to allow multiple platforms at the same time, choosing whichever is available
and providing fallbacks, e.g. save games with cookies or local storage, if no service is available.
Each service you want to support needs to be registered with "global providers".
These global providers can be used from anywhere in the code:
```ts
import {saveGame} from '@wonderlandengine/upsdk';
saveGame.save({level: 42});
```
### Register Providers
To register a provider, run this code as early as possible:
```ts
import {saveGame, user, leaderboards} from '@wonderlandengine/upsdk';
import {HeyVRProvider} from '@wonderlandengine/upsdk-provider-heyvr';
import {CookieSaveGameProvider} from '@wonderlandengine/upsdk-provider-cookie';
/* Registering a provider is simple */
saveGame.register(new CookieSaveGameProvider());
/* Many providers support multiple services, register them to the ones you use: */
const heyVR = new HeyVRProvider('your-game-id');
saveGame.register(heyVR);
user.register(heyVR);
leaderboards.register(heyVR);
```
## Technical
### NPM Scripts
- `npm run clean:tsc` cleans all typescript build artifacts
- `npm run build --workspaces` => builds all
- `npm pack --workspaces` => creates all packages
- `npm publish --workspaces --access public` => publishes all packages
# LICENSE
MIT, see LICENSE file.