Skip to main content

Publishing Games

G3Engine makes it effortless to publish your game across multiple platforms. With one click, export your creation to X/Twitter, Telegram Mini Apps, standalone web URLs, and more.

Publishing Overview

When you publish a game, G3Engine:
  1. Serializes your scene to JSON format
  2. Uploads to decentralized storage (Arweave via Irys)
  3. Generates a permanent URL for your game
  4. Creates platform-specific metadata (Twitter Player Cards, Telegram manifests, etc.)
  5. Returns a shareable link instantly
Your game becomes playable directly in social media feeds, messaging apps, or standalone browsers.

The Publish Button

1
Access Publish Modal
2
  • Complete your game in the G3Engine editor
  • Click Publish in the Top Bar (top-right corner)
  • The Publish Modal opens
  • 3
    Choose Your Platform
    4
    The modal displays 6 publishing destinations:
    5
    🐦 X (Twitter) - Popular
    6
  • Publish as a Twitter Player Card
  • Game plays inline in Twitter feeds
  • No app download required
  • 7
    ✈️ Telegram
    8
  • Deploy as Telegram Mini App
  • Embedded in Telegram chats
  • Full-screen WebGL experience
  • 9
    🟠 Reddit
    10
  • Embed in Reddit posts
  • Playable widget in threads
  • 11
    🟣 Farcaster - Web3
    12
  • Share as Farcaster Frame
  • On-chain social gaming
  • 13
    🔵 Base App - Web3
    14
  • Deploy to Base ecosystem
  • Optimized for Base network
  • 15
    🌐 Web (URL)
    16
  • Standalone shareable URL
  • Works anywhere (Discord, email, websites)
  • 17
    Click a platform card to select it. The card highlights with a purple border and checkmark.
    18
    Publish
    19
  • Click 🚀 Publish button (bottom-right)
  • A loading spinner appears with “Publishing…”
  • Behind the scenes:
    • Your scene serializes to JSON
    • Assets upload to Arweave (permanent, decentralized storage)
    • Platform-specific metadata generates
    • Permanent URL creates
  • Success screen appears (10-30 seconds)
  • 21
    The success screen shows:
    22
    ✅ Published!
    
    Your game is live on X (Twitter)
    
    https://engine.gg/play/g_abc123
    
    [Copy] [Done]
    
    23
  • Copy - Copies the URL to clipboard
  • Done - Closes the modal
  • 24
    Your game is now live and shareable!

    Platform-Specific Publishing

    X (Twitter) Player Cards

    1
    What is a Twitter Player Card?
    2
    A Twitter Player Card embeds interactive content (like games) directly in tweets. When someone posts your game link:
    3
  • Twitter loads the URL
  • Detects Player Card metadata
  • Renders the game in an iframe
  • Users play without leaving Twitter
  • 4
    Publish to Twitter
    5
  • Click Publish → Select X (Twitter)
  • Click 🚀 Publish
  • Copy the generated URL
  • Post the URL in a tweet
  • The game embeds automatically
  • 6
    Twitter Metadata
    7
    G3Engine auto-generates:
    8
    <meta name="twitter:card" content="player" />
    <meta name="twitter:title" content="My Awesome Game" />
    <meta name="twitter:description" content="Play now!" />
    <meta name="twitter:player" content="https://engine.gg/play/g_abc123" />
    <meta name="twitter:player:width" content="800" />
    <meta name="twitter:player:height" content="600" />
    <meta name="twitter:image" content="https://engine.gg/thumbnails/g_abc123.png" />
    
    9
    Best Practices
    10
  • Keep game size under 10MB for fast loading
  • Design for 800×600 or 16:9 aspect ratios
  • Add a clear “How to Play” in the first 5 seconds
  • Mobile players can tap to fullscreen
  • Telegram Mini Apps

    1
    What are Telegram Mini Apps?
    2
    Telegram Mini Apps are web-based apps that run inside Telegram. They occupy the full chat window and feel like native apps.
    3
    Publish to Telegram
    4
  • Click Publish → Select Telegram
  • Click 🚀 Publish
  • Copy the URL
  • Share in any Telegram chat
  • Users click the link → Game opens in Telegram WebView
  • 5
    Telegram Optimizations
    6
    G3Engine automatically:
    7
  • Forces 100vw × 100vh viewport (fills the screen)
  • Removes all external UI chrome
  • Optimizes touch controls
  • Adds Telegram back button integration
  • 8
    Telegram-Specific Features
    9
    You can access Telegram APIs:
    10
  • User info (first name, username, avatar)
  • Share game to other chats
  • In-app purchases (Telegram Stars)
  • 11
    Telegram Mini Apps require HTTPS. G3Engine handles this automatically.

    Standalone Web URL

    1
    Universal Web Publishing
    2
  • Click Publish → Select Web (URL)
  • Click 🚀 Publish
  • You receive a permanent, shareable link:
    https://engine.gg/play/g_abc123
    
  • 3
    Where to Share Web URLs
    4
  • Discord - Paste in channels, game auto-embeds
  • Websites - Embed via iframe:
    <iframe 
      src="https://engine.gg/play/g_abc123" 
      width="800" 
      height="600" 
      frameborder="0"
    ></iframe>
    
  • Email - Send the link directly
  • Portfolio - Add to your game dev portfolio
  • Game jams - Submit to itch.io, Newgrounds, etc. (via embed)
  • 5
    Custom Domains
    6
    You can use a custom domain:
    7
  • Set up a CNAME record: games.yourdomain.comengine.gg
  • Contact G3Engine support to configure SSL
  • Your games appear at https://games.yourdomain.com/play/g_abc123
  • Farcaster Frames (Web3)

    1
    What are Farcaster Frames?
    2
    Farcaster Frames are interactive embeds on Farcaster (decentralized social network). Frames support:
    3
  • Interactive buttons
  • Transaction requests
  • On-chain actions
  • 4
    Publish to Farcaster
    5
  • Enable Web3 in your game (see Web3 Wallet Setup)
  • Click Publish → Select Farcaster
  • Click 🚀 Publish
  • Share on Warpcast or other Farcaster clients
  • 6
    Frame Features
    7
    Your game frame can:
    8
  • Connect wallets (one-click with Privy)
  • Request transactions (token rewards, NFT mints)
  • Display on-chain data (leaderboards, balances)
  • Base App (Web3)

    1
    Publishing to Base Ecosystem
    2
    Base is an Ethereum L2 network. Publishing to Base:
    3
  • Optimizes for Base RPC endpoints
  • Enables Base-specific wallet integrations
  • Registers your game in the Base app directory
  • 4
    Use Case: Games with EVM smart contracts, Base NFTs, or Base tokens

    Scene Export Format

    When you publish, your scene serializes to this JSON structure:
    {
      "version": 1,
      "exportedAt": "2026-03-04T10:30:00.000Z",
      "objects": [
        {
          "id": "uuid-1",
          "name": "Ground",
          "type": "plane",
          "position": { "x": 0, "y": 0, "z": 0 },
          "rotation": { "x": -1.5708, "y": 0, "z": 0 },
          "scale": { "x": 10, "y": 10, "z": 1 },
          "material": {
            "color": "#2a2a3e",
            "roughness": 0.8,
            "metalness": 0.0
          },
          "visible": true
        },
        {
          "id": "uuid-2",
          "name": "Player",
          "type": "box",
          "position": { "x": 0, "y": 0.5, "z": 0 },
          "rotation": { "x": 0, "y": 0, "z": 0 },
          "scale": { "x": 1, "y": 1, "z": 1 },
          "material": {
            "color": "#6366f1",
            "roughness": 0.4,
            "metalness": 0.1
          },
          "visible": true
        }
      ],
      "metadata": {
        "objectCount": 2,
        "hasLights": true,
        "hasWeb3": false
      }
    }
    
    This JSON:
    • Uploads to Arweave (permanent, immutable storage)
    • Generates a permanent URL (never expires, never changes)
    • Loads client-side in the published game player

    Decentralized Storage (Arweave)

    1
    Why Arweave?
    2
    G3Engine uses Arweave for game storage because:
    3
  • Permanent - Files stored forever (pay once, store forever)
  • Decentralized - No single point of failure
  • Immutable - Published games can’t be altered or censored
  • Free for users - G3Engine pays the storage fees (gasless uploads)
  • 4
    How It Works
    5
  • You click Publish
  • G3Engine backend receives your scene JSON
  • Backend signs the Arweave transaction (using platform wallet)
  • Scene uploads to Arweave via Irys (fast, scalable Arweave bundler)
  • Irys returns a permanent transaction ID
  • G3Engine generates your play URL: https://engine.gg/play/[txID]
  • 6
    Your game is now permanently on-chain and always accessible.
    7
    Verifying on Arweave
    8
    To verify your game is on Arweave:
    9
  • Extract the transaction ID from your URL
    • Example: https://engine.gg/play/g_abc123abc123
  • Visit Arweave Explorer
  • Search for the transaction ID
  • View the raw JSON data
  • Updating Published Games

    1
    Republish to Update
    2
    Arweave uploads are immutable (can’t be changed). To update a game:
    3
  • Make changes in the editor
  • Click Publish again
  • Choose the same platform
  • A new URL generates with the updated game
  • Share the new URL
  • 4
    The old URL remains live with the old version. Arweave never deletes data.
    5
    Version Control
    6
    G3Engine tracks your published versions:
    7
  • Dashboard → Your project → Published Versions
  • See all past publishes with timestamps
  • Click any version to get its URL
  • Restore an old version by publishing it again
  • Embedding Games

    1
    Iframe Embedding
    2
    Embed your game on any website:
    3
    <iframe 
      src="https://engine.gg/play/g_abc123" 
      width="800" 
      height="600" 
      frameborder="0"
      allowfullscreen
      allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
    ></iframe>
    
    4
    Responsive Embed:
    5
    <div style="position: relative; padding-bottom: 75%; height: 0; overflow: hidden;">
      <iframe 
        src="https://engine.gg/play/g_abc123" 
        style="position: absolute; top: 0; left: 0; width: 100%; height: 100%;"
        frameborder="0"
        allowfullscreen
      ></iframe>
    </div>
    
    6
    Permissions
    7
    Add these iframe allow attributes for full functionality:
    8
  • accelerometer - Device motion (for mobile tilt controls)
  • autoplay - Auto-play audio/video
  • clipboard-write - Copy game data to clipboard
  • encrypted-media - DRM content
  • gyroscope - Device orientation
  • picture-in-picture - PiP mode
  • web-share - Web Share API
  • xr-spatial-tracking - WebXR/VR (future)
  • Publishing Best Practices

    Test Before Publishing

    Always test your game thoroughly in Play mode before publishing. Published games are immutable.

    Optimize Asset Size

    Keep your game under 10MB for fast loading. Use optimized materials and limit object count.

    Add Instructions

    Include in-game tutorials or “How to Play” text. Not all platforms show external descriptions.

    Mobile-Friendly

    Test on mobile devices. Use larger touch targets and simplified controls for touch screens.

    Analytics and Tracking

    1
    View Game Stats
    2
  • Go to your Dashboard
  • Click your published game
  • See analytics:
    • Plays - Total play count
    • Unique Players - Distinct users
    • Avg. Session - Average play time
    • Platform Breakdown - Where players found your game
  • 3
    Embed Analytics Code
    4
    Add custom analytics (Google Analytics, Plausible, etc.):
    5
  • In Settings, add your tracking ID
  • G3Engine injects the tracking script into published games
  • Track events: game start, level complete, etc.
  • Troubleshooting

    Check that:
    • You have at least one object in the scene
    • You’re connected to the internet
    • Your project has been saved
    Wait 24-48 hours for Twitter to cache the metadata. Use Twitter Card Validator to debug.
    Verify:
    • Scene has a camera
    • Objects are visible (visible: true)
    • Scene has lighting (add Ambient + Directional Light)
    • Camera is positioned correctly
    Ensure:
    • Web3 is enabled (toggle in Top Bar)
    • Game published with web3Enabled: true
    • Players connect wallet before using Web3 features
    • Correct network (Devnet vs Mainnet)
    Optimize:
    • Reduce object count (< 100 objects)
    • Limit lights (2-3 max)
    • Disable expensive features (real-time shadows, etc.)
    • Use simpler materials (higher roughness)

    Example: Full Publishing Workflow

    1. Build game in editor
       ├─ Add objects, lights, camera
       ├─ Create visual scripts
       └─ Test in Play mode
    
    2. (Optional) Enable Web3
       ├─ Toggle Web3 on
       ├─ Launch token
       └─ Add reward nodes
    
    3. Publish
       ├─ Click Publish button
       ├─ Select X (Twitter)
       ├─ Click 🚀 Publish
       └─ Wait for success screen
    
    4. Share
       ├─ Copy URL
       ├─ Post on Twitter
       └─ Game embeds in feed
    
    5. Monitor
       ├─ Check Dashboard analytics
       ├─ Read player feedback
       └─ Iterate and republish
    

    Advanced: Custom Deployment

    For advanced users, you can self-host:
    1
    Export Scene JSON
    2
  • Click FileExport Scene
  • Download the .json file
  • Host it on your own server
  • 3
    Build Custom Player
    4
    Use the G3Engine runtime (open-source):
    5
    npm install @g3engine/runtime
    
    6
    import { G3Runtime } from '@g3engine/runtime';
    
    const runtime = new G3Runtime({
      sceneUrl: 'https://yourdomain.com/scene.json',
      container: document.getElementById('game-container')
    });
    
    runtime.load();
    runtime.play();
    
    7
    This gives you full control over:
    8
  • Custom domains
  • Custom UI/branding
  • Advanced analytics
  • Server-side logic
  • Next Steps

    Congratulations! You’ve published your game to the world. What’s next:
    • Share your game on social media
    • Gather player feedback
    • Iterate on your design
    • Build more complex games
    • Explore Web3 monetization
    • Join the G3Engine community
    Continue Learning:

    Build docs developers (and LLMs) love