Skip to main content

What's new

New SDK and platform features, newest first.

May 2026

SDK

Unity and Godot: recurring subscriptions (beta)

The Unity and Godot SDKs now support recurring subscriptions, mirroring the HTML5 subscription API. Call GetSubscriptions() / get_subscriptions() on startup to read the catalog and each subscription's current "active" / "inactive" entitlement, then call BeginSubscription(sku) / begin_subscription(sku) to open the checkout flow. Cancellation is handled via CancelSubscription(sku) / cancel_subscription(sku), which opens a platform confirmation dialog. This feature is in beta — the API may change without notice. Contact the Jest team before shipping subscriptions to production.

Responses include a signed JWT (SubscriptionSigned / subscription_signed, Signed / signed) for server-side entitlement verification — see the HTML5 subscriptions docs for verification examples.

See Unity subscriptions and Godot subscriptions. Subscriptions are configured in the Developer Console.

SDK

HTML5: recurring subscriptions (beta)

The HTML5 SDK now supports recurring subscriptions via JestSDK.payments.getSubscriptions() and JestSDK.payments.beginSubscription({ subscriptionSku }). This feature is in beta — the API may change without notice. Contact the Jest team before shipping a subscription to production. Subscriptions are configured per game in the Developer Console (under Manage Game > Subscriptions) and returned alongside the wallet's current "active" / "inactive" entitlement, so a single startup call tells your game both what's on offer and what the player already has. Like one-off purchases, every response is also returned as a signed JWT (signed / subscriptionSigned) for server-side verification.

const { subscriptions } = await JestSDK.payments.getSubscriptions();
for (const subscription of subscriptions) {
if (subscription.status === "active") {
unlockFeaturesFor(subscription.sku);
}
}

See HTML5 subscriptions SDK and Manage subscriptions.

SDK

Referral notification templates in Unity and Godot SDKs

OpenDialogOptions.NotificationTemplates (Unity) and JestReferralOptions.notification_templates (Godot) let you attach notification templates to a referral campaign. When an invited player converts, the platform looks up the template with the highest MinConversionCount / min_conversion_count that the referrer has reached and sends a randomly selected variant from within it — so you can send a different message for a referrer's first conversion versus their fifth.

Each template variant takes a body, optional title, optional image_reference, and a cta_text. Templates are evaluated server-side at conversion time; no SDK call is needed on the referrer's side.

See Unity referrals and Godot referrals.

SDK

Unity and Godot: GetProfile() returns username and avatar URL

Unity (2.0.0) and Godot (1.5.0) expose JestSDK.Instance.Social.GetProfile(avatarSize) / JestSDK.social.get_profile(avatar_size) for player profile data, mirroring the HTML5 SDK's social.getProfile(). The method returns a typed Social.PlayerProfile (Unity) / JestPlayerProfile (Godot) object with both Username/username and AvatarUrl/avatar_url in one call. Avatar URLs are Cloudflare-proxied and available at five sizes (64, 128, 256, 512, or 1000 px). Returns null for guests and registered players who haven't set up a profile yet.

// Unity
Social.PlayerProfile profile = JestSDK.Instance.Social.GetProfile(128);
if (profile != null)
{
nameLabel.text = profile.Username;
// load profile.AvatarUrl with UnityWebRequestTexture
}
# Godot
var profile: JestPlayerProfile = JestSDK.social.get_profile(128)
if profile != null and not profile.avatar_url.is_empty():
# load profile.avatar_url
pass

GetPlayerAvatar() / get_player_avatar() is deprecated — migrate to GetProfile(). See Unity social and Godot social.

Dev console

Add a hero video to your store listing

Game listings on the Explore page can now show a looping hero video instead of the static hero image. Upload a video showcase asset (MP4 or MOV) in your game's Image Library, then open the Overview tab, click Edit, and select it in the new Hero Video (Optional) field. The video auto-plays when the card scrolls into view and falls back to the hero image on any playback error. Library cards always use the hero image.

To remove a previously set video, click Clear next to the picker. Videos that are currently assigned as the hero video are protected from archiving.

See Manage games.

SDK

Social module — player profile and bot avatars

JestSDK.social is a new module for player-facing social data. social.getProfile() returns the current player's username and avatar URL; request the avatar at one of five sizes (64, 128, 256, 512, or 1000 px) to fit your UI and keep network use lean. Both fields may be null for guests and players who haven't set up a profile yet.

const url = JestSDK.social.getBotAvatar({ username: "bot", size: 128 });

const profile = JestSDK.social.getProfile({ avatarSize: 128 });
const username = profile?.username ?? "You";
const avatarUrl = profile?.avatarUrl ?? placeholderUrl;

See Social. Equivalent bot avatar helpers are also available in the Unity and Godot SDKs with the same size options and deterministic username-to-avatar mapping.

Notifications

Notifications: assetReference, critical priority, and changed default

Three changes to scheduleNotification in the HTML5 SDK:

  • assetReference is now the preferred field for attaching a notification asset. Unlike the deprecated imageReference, it accepts both images and videos from your asset library. Update existing calls to use assetReference; imageReference still works as a fallback but will be removed in a future release.
  • 'critical' is now a valid priority level alongside 'low', 'medium', and 'high'.
  • Default priority has changed from 'medium' to 'low'. If your code omits priority and relied on the 'medium' default, add an explicit priority: 'medium' to preserve the previous behavior.

See the HTML5 notifications reference.

Dev console

Register self-hosted game URLs as versions

You can now register an externally hosted URL as a game version instead of uploading a ZIP bundle. In the Versions tab, click Add Version and choose Add self-hosted URL, then enter your version number and the full URL where your game is served. The platform loads that URL verbatim in the iframe.

Self-hosted versions behave identically to bundled versions: you can activate them immediately on create, set them active later from the Versions tab, and preview them before going live. Versions list rows show a Self-hosted badge and display the registered URL on hover.

Dev console

Game description capped at 110 characters

The game Description field now enforces a 110-character limit. The Developer Console returns a validation error if you submit a description longer than 110 characters when creating or updating a game.

Descriptions that were saved before this limit was introduced will be automatically truncated to 110 characters when displayed to players in the Explore section and on the game info popup. If your game's current description is longer than 110 characters, shorten it in the Developer Console to control exactly how it reads after truncation.

Dev console

Store listing logo and hero image now use the asset library

The Logo and Hero image fields in the game edit form now draw from your asset library instead of accepting a direct file upload. Open the picker, select any approved showcase image with the matching crop — 1:1 for the logo, 16:9 for the hero — or upload a new showcase asset inline and it will be available to select once processing completes.

Showcase images auto-approve on upload, so there is no manual review wait before you can apply one to your store listing. Assets currently in use as a logo or hero are protected from archiving until you replace them.

See Manage games and Manage images.

Notifications

Updated character limits on notification fields

Three character limits on scheduleNotification have changed:

  • ctaText — raised from 25 to 50 characters.
  • title — new cap of 200 characters (previously unlimited).
  • body — new cap of 2000 characters (previously unlimited).

The SDK enforces all three at call time and throws INVALID_ARGUMENTS when a value exceeds its limit. If you build notification content dynamically, check that title and body values stay within the new bounds. See the HTML5, Unity, and Godot notification references.

Dev console

Simulator pre-loads real products and assets for existing games

When you open the Simulator for an existing game, it now automatically loads your real product catalog and asset library from the platform. Previously you had to register asset references and configure products by hand in the Config panel at the start of each session. For existing games that manual step is no longer needed — the checklist's asset-reference validation runs against your live library with no setup required. See Testing with the Simulator.

Dev console

Run any build in the Simulator directly from the Versions tab

Each version in the Versions tab now has a Run in simulator button. Clicking it opens the Simulator with that build pre-loaded — no need to open the Simulator separately and re-select the game and version by hand. This is separate from the Self Review action: use it for quick test-drives where you don't need a recorded play-through. See Testing with the Simulator.

Dev console

Submitting for review now routes through the Simulator

When you click Submit for review on a game's edit page, the console now routes you through a dedicated Simulator page instead of submitting immediately. Play through your game's must-have flows there, optionally record the session, and then confirm submission — the recording and any notes you add are attached to the version and visible to reviewers alongside the build.

The Simulator checklist is now organized into two tiers: Must-have (required to publish on Jest.com) and Highly recommended (required for Jest Games Fund applicants; strongly recommended for everyone). New must-have rules cover: no unhandled SDK errors, calling getPlayer() or getPlayerSigned(), checking for incomplete purchases on startup, and completing recovered purchases. A new recommended rule checks that each scheduled notification includes an imageReference or assetReference.

See Testing with the Simulator and Submit a game for review.

April 2026

Payments

Products and purchases now expose price and currency

PurchaseData and product objects returned by the SDK now include two new fields: price (the purchase amount as a decimal in the stated currency) and currency (ISO 4217 code, e.g. "USD"). Use these to display prices correctly rather than deriving them from credits.

The credits field is deprecated and will be removed in a future release. Migrate your price display logic to use price + currency:

// HTML5
const products = await JestSDK.payments.getProducts();
products.forEach((p) => {
displayPrice(p.price, p.currency); // e.g. 9.99, "USD"
});

See the HTML5, Unity, and Godot payments references for the updated field tables.

SDK

Unity SDK 1.7.0 and Godot SDK 1.3.0

Follow-ups to the custom registration overlay landing in the engine wrappers:

  • onClose callback in overlay options — the Unity RegistrationOverlay.Options.OnClose and Godot JestRegistrationOverlayOptions.on_close mirror the HTML5 SDK's onClose option. Wires straight into the options object so you don't need a separate handle.OnClose / handle.closed subscription.
  • Convenience wrappersJestSDK.Instance.ShowRegistrationOverlay() (Unity) and JestSDK.show_registration_overlay() (Godot) are shorter paths to the same flow. Both forms remain supported.
  • Unity guardShow() (and the new wrapper) now throw InvalidOperationException when the player is already registered, matching the HTML5 SDK.

See the Unity and Godot platform login guides for usage.

SDK

Unity SDK 1.6.0 and Godot SDK 1.2.0

The engine wrappers are caught up with the client SDK. Highlights:

  • Notification title — new optional title line shown above the body.
  • Notification assetReference / asset_reference — preferred replacement for imageReference / image_reference. The old field is still honored but marked deprecated.
  • critical notification priority — joins low, medium, high.
  • Custom registration overlayJestSDK.Instance.RegistrationOverlay.Show() (Unity) and JestSDK.registration_overlay.show() (Godot) bring the game-rendered registration flow from the HTML5 SDK to both engine wrappers. See the Unity and Godot platform login guides for usage.

Full notes in the Unity CHANGELOG and Godot CHANGELOG.

Docs

Virality guide

A new guide covering how referrals, invites, and social hooks work together on Jest — written for teams thinking about how their game spreads rather than just which API to call. See Guides → Virality.

Docs

Launch checklist

A single checklist of everything we recommend you verify before submitting a game for review — SDK init, notifications, payments, assets, sandbox testing. Run it as a final pass before you go live. See Launch checklist.

SDK

Player profiles

Player profile data — username and avatarUrl — is accessible via JestSDK.social.getProfile(). Guests and players who haven't set up a profile return null. Request the avatar at 64, 128, 256, 512, or 1000 px to suit your UI. See Social.

Notifications

Dynamic Open Graph image for notification link previews

When a notification link is unfurled (in SMS previews, share sheets, or social clients), the platform now generates a matching Open Graph image dynamically per notification rather than reusing one generic image — your notifications look right wherever the link gets shared. See the notifications SDK guide.

Dev console

Spot sandbox purchases at a glance

In the developer console's transactions list, rows from sandbox users are now tinted and the player ID carries a tooltip calling it out. There's also a new Hide sandbox transactions filter so you can look at real revenue only. Useful when you're mid-QA and don't want test purchases crowding the view you'd show a stakeholder — see Sandbox users.

SDK

Build your own registration overlay

You can now replace Jest's default sign-up popup with a custom overlay rendered by your game — handy when you want the sign-up moment to feel native rather than like a modal. Your overlay is responsible for collecting input and calling back into the SDK to complete registration; the full reference covers the overlay hooks, the callback contract, and how to fall back to Jest's default UI. See Platform login.

Notifications

Auto-generated image ratios for notification assets

Upload one image per notification and the platform now generates the other required aspect ratios for you. No more exporting 1:1, 16:9, and 3:2 copies by hand — upload your best frame and we'll crop and fit the rest. You can still upload each ratio manually if you want full control; see the notifications SDK guide.

Payments

Guests can purchase without signing up

Guest players now have their own wallet, so a purchase no longer requires a completed sign-up. The purchase attaches to the guest wallet, and if the guest later signs up, the wallet is merged into the registered account automatically.

If your game gates products behind isRegistered, you can drop that check for paid products — the payment flow handles guests on its own. See the Payments SDK guide for the updated flow.

Godot SDK

Godot SDK documentation is live

If you're building with Godot, the SDK integration guide is now published alongside the HTML5 and Unity references. Covers player identity, notifications, entry payloads, referrals, payments, and the loading screen. Head to SDK → Godot to get started.

March 2026

Unity SDK

Unity: compressed builds and new InitOptions

Two things for the Unity SDK this week:

  • Compressed Unity builds are now supported end-to-end — you can ship smaller build artifacts without special handling in the host page.
  • InitOptions is documented, including the new autoLoginReminders flag that controls whether the SDK schedules abandonment reminders automatically.

See SDK → Unity3D for the updated init surface.

SDK

Opt out of auto-triggered login popups

Some games want to control exactly when the login prompt appears — for example, after a first level ends rather than on load. The SDK now takes an option to disable its automatic platform login popups, leaving you to trigger sign-in manually via the usual SDK call. Set the flag at init() time; see Platform login for the exact option name and default.

Dev console

Asset Library now handles video

The old Image Library has been renamed Asset Library and learned to store videos alongside images. Upload an MP4 in the same place you used to upload PNGs; downstream consumers pick the right asset by type. See Manage images for the updated upload flow.

SDK

Revenue share estimate on product purchase

The SDK's product-purchase view now surfaces an estimated revenue share alongside price, so you can show players (or yourself) what a given product nets at a glance. The number is an estimate — final attribution runs server-side. See the Payments SDK guide.

Dev console

Financial reports on your game page

A new Financials tab on each game page lists transactions with stat cards up top (gross, net, by period) and date-range context on every row. The grouping and table design were reworked at the same time — same data, much easier to read. See Manage games.

Notifications

Notifications now carry a title

Notifications have a title property in addition to the body text, and the field is wired through the whole pipeline — scheduling, rendering, and analytics. Set it when composing a notification to give the preview a distinct headline. See the notifications SDK guide.

Dev console

Keywords on games

You can now tag games with keywords from the developer console. Keywords feed discovery and categorization downstream — pick a handful that describe the game's core fantasy and genre. See Manage games.

SDK

Expose game transitioning to the SDK

Games can now observe transition events (when a player moves between games on the platform) through the SDK, so you can pause audio, persist state, or pre-fetch on incoming handoff. See the Player API reference for the event hooks.

SDK

getPlayerSigned works for guests

getPlayerSigned() no longer throws for guest players — it returns a signed payload for whichever identity is available, guest or registered. If you were branching on isRegistered before calling it, you can drop that guard. See the Player API reference.

Dev console

Categories on games

Games now have a category field alongside keywords. Pick one from the predefined list when you create or edit a game; it feeds the same discovery surfaces keywords do. See Manage games.