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!

Mac Release & 50% Discount!

The Mac version for Tabletop Playground is now out of beta and officially available!

To celebrate the Mac release we’ve also put the game on discount, for 50% off!! Grab on Steam with the discount before it runs out on May 15th:

Tabletop Playground On Steam

The new update also adds more options to create complex user interfaces through scripting. It features a new category of UI widgets that group other widgets. `VerticalBox` and `HorizontalBox` give a quick way to create lists of widgets, and `Canvas` gives you complete freedom about where you want to position your widgets.

As an example of how the new widgets can be used, we’ve implemented a Dungeons & Dragons character sheet! Check it out here: If you want to create your own complex UIs, have a look at the new tutorial:

• Add `VerticalBox` container widget
• Add `HorizontalBox` container widget
• Add `Canvas` container widget
• Add `MultilineTextBox` widget
• Allow setting font size on all widgets that contain text
• Execute `On…Changed` callbacks on widgets when the respective values are changed from scripts (with player parameter `undefined`)
• Text boxes with number input types are now allowed to be temporarily empty while editing, making it easier to enter new numbers
• Removed “Reload Scripts” action because it could lead to confusing states and even crashes. Renamed the “Reset Scripting” action to “Reload Scripting” to emphasize that modified scripts are reloaded. Removed `GameWorld.reloadScripts`.

• Fixed crash that could occur when playing with more than two players and players who joined first left the game
• Script UI buttons now play sound when pressed
• Latest Unreal hotfix version for Windows and Mac (can help with Unreal related issues)

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!

All About Cards Update

A new update is here for Tabletop Playground and it is all about cards! With web textures and flipped stack cards come two highly requested new features, and several further convenience improvements:

• Web textures for cards: You can now configure card-type objects in the editor to allow overriding their front image in-game by an image URL on the internet. The scripting API for cards also has new methods to work with texture overrides. This can be useful for loading maps during an RPG session, or creating a package that automatically loads card images from the internet using scripting.

• New standard object: The web image object is now available in the object library. It uses the web texture functionality to offer an easy way to add online images to a running game.

• Flipped cards in stack: You can now configure card stacks in the editor to allow flipped cards within the stack. Instead of auto-rotating to the stack rotation, cards dropped on such stacks will remain face up or face down as they were. You can’t mix cards from decks that allow and don’t allow flipped cards in the same stack. The scripting API for cards has been enhanced to allow working with flipped cards in stacks.

• The “Peek / Slide Under” key now also works when holding it while dragging from a card stack or “stack” type container: you will draw from the bottom instead of from the top.

• Support rotating the object zoom in 90° increments with the keys for rotating highlighted objects (Q/E by default). Does not rotate the zoom for objects that auto-rotate.

• The object zoom key now works while using the card stack explorer to instantly show the large image tooltip

• Allow even thinner measure lines in the settings, and lower height of the lines depending on their size

• Cards didn’t show changes in editor when changing texture
• Object zoom for cards did not take into account changed scale
• Objects with shapes generated from images were not copied properly in the editor
• Objects with collisions generated from images did not work correctly with containers
• Remove crash when trying to load an invalid texture
• Mac: Ask for permission to use Microphone to make in-game voice chat work

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!

2021 Tabletop Playground New Year Update

Happy New Year Tabletop gamers 🎆 It is time to recap the latest updates we’ve released over the last few months for Tabletop Playground!

Buy Tabletop Playground

From engine updates that improve the overall performance of the game, to more specific features such as creating 3D shapes from transparent images.

Dominos, PDF Support, More Players And Biggest Discount Yet!

Since our last development blog, the developer took a well deserved break before continuing to add more features and improvements to flesh out the game even more. We’ll be covering updates from the past three months and our biggest discount sale yet!

Grab Tabletop Playground 33% Off

We’re excited to be part of the Steam Digital Tabletop Festival and to be running our largest discount yet! You and your friends can grab Tabletop Playground for 33% off!

The discount will run until the end of the festival on the 26th of October. So get in quick and grab some copies for your friends, so they can join you for some board games online. Check out all the other great games on sale as part of the Steam Digital Tabletop Festival.

Dominos Enters The Game

Speaking of games, a whole new classic game has been added in our latest update. Along with knocking off another two items from the development roadmap and several other improvements!

Find the full list of enhancements, VR additions and bug fixes for each update at the end of blog.

More Players & Color Options

More players, more colors, more customization update, which came out a couple of weeks ago. There are now 18 available player colors, and the maximum number of players per game has been increased from 8 to 16.

The default set of colors is optimized so players with color blindness are able to distinguish between them, but you can also set your own colors: While creating or playing a game, you can now change the player colors from the session options. Modified colors are stored in the game state, so you can decide what colors the players in your game should have!

You now also have more flexibility with using colors for cards and card-like objects, and scripts are able to access the internet!

PDF Support Has Arrived

You can now use PDF files with multistate objects to easily create rulebooks, guides, and similar objects. This was one of the earliest requested features from our avid community members and developers, so we were ecstatic to get it into the game!

Card Deck Splits And More Enhancements

Card deck splits and saving/loading data from scripts! You can take a number of cards from the top of a deck, split into a number equal sized decks or into decks with a fixed number of cards.

Check out the full list of enhancements and bug fixes we’ve added over the past three months below:

• Add new context menu option for splitting card decks: you can take a number of cards from the top, split into a number equal sized decks or into decks with a fixed number of cards.
• Improved physics stability for object stacks
• Added snap points to poker chips to make them easier to stack
• Add chat message when player is peeking at the underside of a card
• When editing a card template in preview mode, don’t reload the stack so you can edit a partial stack without resetting it to full size. Don’t allow editing single cards in a card stack from preview mode because it gives inconsistent results
• Multistate objects now support PDF files: you can select a pdf instead of a texture, and each page will become a state
• New object type “Book”: When you create a new object, select Book and choose a PDF file to create a new Multistate object with the correct size for the PDF.

• Card objects now have an option in the editor to use their primary color for the sides of the stack. If enabled, the color can be changed in the editor and in the game. Cards with different side colors cannot be stacked.
• You can now create cards without a texture: The primary color is used as the front of the card, the secondary color is used as the back.

• You can now switch to a “screen” style cursor in the interface settings: the 3D cursor isn’t shown and you only use the regular hardware mouse cursor. You can select multiple objects using a rectangle on the screen instead of a 3D box.

• The lower right corner of the screen now has a switchable dynamic input guide: click on the keyboard icon to toggle hints on what actions you can do using hotkeys in the current context.

• Containers can now have an owner, similar to card holders. The container will show the color of the owner, and only the owner can use the container explorer to look at the contents. This allows you to use containers as hidden storage for players, similar to card holders but for any type of object.

• You can now set snap points for an object to global from the object properties in the editor. When snap points are global, they cursor does not need to be on the object in order for its snap points to be active. This is useful for tile laying games when you use snap points that are not on the object, for example with Domino pieces.

• When an object has a fixed zoom direction for the object zoom (also set in the object properties), the direction will be reversed when the object is lying upside down. Also, the “Below” key allows you to look at the opposite side, like with cards. This is useful for 3D objects that are used in a similar way to cards, with an open and a hidden side, like Domino pieces.

• You probably saw where this is going: Domino is now part of the included games!

• Added object thumbnails for all included games so the object library loads a bit faster

• Added some missing German translations

• Fixed a bug where items in a container could get duplicated when the same game was loaded multiple times


• GameObject.attachUI and GameWorld.addUI now return the index of the added UI element
• UI elements that have been removed can now be added again
• Add SetSavedData and GetSavedData methods to GameObject and GameWorld. These methods allow you to store arbitrary information in game states.
• Add Card.Split and Card.Divide for splitting card decks

• HTTP requests are now supported using the HttpRequest class and the fetch() function. Players will be asked to allow internet access from scripts.


• New setting to allow enlarging or shrinking free cursor orb
• Separate bindings for grabbing and UI clicks, allowing you to bind them to different buttons. By default, they remain on the same button.
• Allow scrolling in UI using the main hand analog stick

• Context menu did not show the correct state when changing multistate object state on clients
• Standard chat message (e.g. player using card stack explorer) were displayed in the configured language of the player who caused the message, instead of the locally configured language.
• Object UI remained after changing object script
• Objects that were flipped while in hand while directly on top of the table (with minimal hold height) were dragging against the table

• Could not select no resource in editor (e.g. resetting texture to no texture) when using German translation

These updates were some of the many features on the early access development roadmap for Tabletop Playground, which you can check out on Trello here. Sign up for a Trello account and you can vote on which features we should focus on next.

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! Until the next monthly development update, we hope you have many fun and great tabletop sessions in Tabletop Playground.