Linux Beta and many more updates

The latest update brings Tabletop Playground to Linux! Over the past months, a lot more has happened as well: Blindfolds, gizmos, and zones are now available along with a long list of convenience updates. In addition, scripting has received many more improvements. You can now create custom object actions, use images and image buttons in your UIs, play sounds, and much more. Here are all the changes since the last post – brace yourself, it’s a long list!

  • You can now put on a blindfold from the player options or by pressing a key. Blindfolded players can’t see anything that happens on the table, but they can still participate in the chat. Everyone can see who is currently blindfolded. Putting on a blindfold also works in VR.
  • Every player can now add packages to a running game. Previously this was only possible for the host. In addition, you can now add packages that other players don’t have yet, they will be asked to download it. Once all players have the package installed, it gets added to the game and is available immediately.
  • Shaking the mouse while holding objects now clumps them together. If you hold card a card stack and shake the mouse, it will be shuffled. Sensitivity can be changed in the game settings.
  • Added an option in the card editor (also used for tiles/tokens): When using image shapes, flipping the back image can now be turned off
  • Allow changing gravity in the session options
  • A new option in the advanced game settings allows you to use the object zoom on ground objects even when the cursor isn’t in ground mode
  • Allow showing names in container explorer, show and filter on template name if objects have no name
  • Don’t allow taking from or dropping to the underside of card decks when peeking is not permitted
  • Duplicating a package in the editor now keeps template filenames if they are different from the template GUID.
  • Transform Gizmos: When opening the object coordinates window for a single object, a gizmo appears: it can be switched between move, rotate, and scale modes and allows you to quickly change each using the mouse.
  • Allow moving camera while UI is open
  • Turn off physics for objects while coordinates are modified
  • You can now add favorite directories in the file browser
  • New option for camera angle snapping: in the game settings, you can set an angle increment (like 60° or 90°) to which the camera will snap when it gets close.
  • Don’t allow flipping cards in stack for image shape cards (can lead to visual issues)
  • Zones are now available! They allow you to change behavior in restricted parts of the playing area. Each zone behavior can be set to affect everyone, nobody, or only owners of the zone. You can set any player color to be an owner, and zones can have multiple owners. The available behavior switches are:
    Object visibility: Objects in the zone can be hidden.
    Object interaction: Objects in the zone can’t be interacted with (but they remain visible).
    Cursor visibility: Player cursors in the zone can be hidden from other players.
    Snapping: All snap points within the zone can be deactivated.
    Stacking: Adding cards to stacks within the zone can be disabled.
    Inserting: Inserting objects into containers within the zone can be disabled.
    Find out more in the knowledge base:
  • A new cursor mode allows you to create zones by dragging and edit existing zones by clicking or right clicking. You can enter zone mode through the player options or with a new keybinding (default ‘U’)
  • The Zone coordinates window allows you to change position, rotation, and size of zones. It also activates a gizmo tool on the selected zone and works like the regular object coordinates window.
  • In the zone properties window, you can switch shape and color of zones.
  • The zone behavior window is where you define the owners and behavior switches of your zone.
  • Zone mode can be forbidden in the session permissions.
  • A new Zone object is available for scripting. You can get zone objects by using world.getZoneById, world.getAllZones, or world.createZone
  • You can now switch off shadow casting for translucent models in the editor
  • Snapping can now be turned off by default for objects in the editor


  • Widgets can now be added again to containers (like Canvas) after they’ve been removed
  • Added Player.isBlindfolded and Player.setBlindfolded
  • Added Card.onInserted and Card.onRemoved callbacks
  • Added World.getGravityMultiplier and World.setGravityMultiplier
  • Removed deprecated Player.setPosition and Player.setRotation methods, use Player.setPositionAndRotation instead
  • New GameObject.addCustomAction and GameObject.removeCustomAction methods and GameObject.onCustomAction callback for using context menu items from scripts
  • Add Widget.setEnabled and Widget.isEnabled to allow disabling user interaction with widgets
  • Flipped the hideAnimation parameter to showAnimation in Container.insert, Container.Take, and Container.takeAt to make it consistent with animation parameters at other points in the API. This change can affect how existing scripts behave, but it only changes animations so it won’t break any games.
  • New GameObject.flipOrUpright method to flip cards and generally produce the same behavior as a user pressing “F” for a highlighted object
  • Call Card.onRemoved and Container.onRemoved when a player removes items in the stack or container explorer • Updated API definition to specify what functions can return undefined
  • Object events are now reset before the global script runs on loading a state, so you can subscribe to events from the global script (object scripts are unaffected)
  • Add Container.addObjects as an alias for Container.insert
  • You can now play sounds from scripts: The new Sound object can play sounds and music from your package or an online source. It supports WAV, MP3, and FLAC files.
  • New scripting UI widgets: ImageWidget and ImageButton allow you to display images from your package or from the internet
  • Add clear() command for the scripting console
  • Add refPackageId which contains the package id of the
  • Add GameObject.getSnappedToPoint to find the snap point that an object is snapped to
  • Add GameWorld.showPing to create ping events from scripts
  • Add GameWorld.getObjectsByTemplateId to get all objects with a particular template
  • Add GameWorld.getTemplatePackageId and GameWorld.getTemplateName to get more information about a template
  • Add Card.setCardIndexAt to allow changing cards from scripts
  • Add return value to Card.split and Card.divide: an array with the newly created card stacks
  • Don’t allow file:// protocol for http requests
  • Don’t copy description of stack to drawn cards


  • Remove slight aliasing for tokens and cards with one card per texture when the image had different colors on opposing borders
  • Remove typos in tooltip for cursor types (#45)
  • The object zoom for some objects (like dice and books) did not move with the player camera
  • Card front image was sometimes not updated immediately when combining cards from different decks into one stack
  • On Mac, “Browse Games” in main menu did not open web browser
  • Zoomed view of multistate objects did not update when state changed
  • Correct too large return values of GameObject.getCenterOfMass
  • Fix problems with using recent uploads on Mac
  • Lines on the side to indicate number of cards in a stack were not updated under some circumstances when adding cards from scripts
  • With the screen cursor, picking up an object the first time immediately after using chat or console did not work properly
  • Zone ids weren’t working consistently and zone events were not cleared when resetting scripting
  • Measure move mode could not be activated
  • The shuffling animation for image shape card stacks wasn’t working
  • “Mirror back” option in the editor did not work fro image shape cards with a separate back image
  • Cards couldn’t be flipped right after being dragged out of card explorer
  • Tooltip now resizes properly when showing long object descriptions
  • Mirror backs of image shape cards correctly when shown in object zoom
  • insertedCard parameter of Card.onInserted event did not contain the correct number of cards when adding cards to the front of a stack
  • Don’t remove scripting UI in preview mode when changing in settings while playing

These new updates we’ve added are just some of the many features on our early access development roadmap for Tabletop Playground, which you can check out on our Trello HERE.
Don’t forget to join our community Discord to chat with the dev team and give us your suggestions for new features for the game!