HomeGamesUpdatesPricingMethodology
Steam News15 December 20256mo ago

Update 14.0 - Engine Upgrade, Feature Additions & Performance Improvements

Tabletop Simulator v14.0 - Engine Upgrade, Feature Additions & Performance Improvements! A quick note from the team: We know it’s been a long time since the last big update.

Full notes

Full Tabletop Simulator update

Read the full published notes in a cleaner layout. The original post stays linked below.

What changed

70 fixes41 additions29 changes2 removals
  • Performance
  • Compatibility
  • Gameplay
  • UI and audio
  • Workshop
  • Security
changedTabletop Simulator v14.0 - Engine Upgrade, Feature Additions & Performance Improvements!A quick note from the team: We know it’s been a long time since the last big update. Behind the scenes we’ve been doing a lot of groundwork on the engine and tools, and this patch is the first step to a renewed focus on regular updates and improvements to TTS . Thank you for your patience and for sticking with us ❤️
addedRead First (Important Changes)New minimum OS / platform requirements : Windows: 64-bit Windows 10 21H1+ (Windows 11 supported) macOS: 11 Big Sur+ Linux: Ubuntu 22.04 / 24.04 (64-bit)
removedRead First (Important Changes)Win 32-bit builds are no longer supported.
changedRead First (Important Changes)Keybind behavior changed: keybinds now use physical key location instead of character (better across keyboard layouts). Keybinds have been reset due to this change.
addedRead First (Important Changes)Image pipeline update: your RAW image cache will be cleared with this update due to image pipeline changes and new translucency support.
changedRead First (Important Changes)Voice chat: if you are the host and disable voice chat, it disables voice chat for all players .
Fixed depth limit for JSON load128256Fixed depth limit for JSON load increased, buff

Tabletop Simulator v14.0 - Engine Upgrade, Feature Additions & Performance Improvements!

A quick note from the team: We know it’s been a long time since the last big update. Behind the scenes we’ve been doing a lot of groundwork on the engine and tools, and this patch is the first step to a renewed focus on regular updates and improvements to TTS. Thank you for your patience and for sticking with us ❤️

Thanks to everyone who tried out this update in the public beta—your feedback was invaluable in helping us make it as good as it is. A lot of the new features and fixes came directly from what you shared with us.

Read First (Important Changes)

  • New minimum OS / platform requirements:

    • Windows: 64-bit Windows 10 21H1+ (Windows 11 supported)

    • macOS: 11 Big Sur+

    • Linux: Ubuntu 22.04 / 24.04 (64-bit)

  • Win 32-bit builds are no longer supported.

  • Keybind behavior changed: keybinds now use physical key location instead of character (better across keyboard layouts). Keybinds have been reset due to this change.

  • Image pipeline updateyour RAW image cache will be cleared with this update due to image pipeline changes and new translucency support.
  • Voice chat: if you are the host and disable voice chat, it disables voice chat for all players.

Gameplay, rules, and your saves are unchanged. This is primarily an engine + quality-of-life update.

Summary

  • Engine & platform

    • Engine upgrade to Unity 6 LTS for smoother performance, better stability, and faster loading in many cases. Over 5 years of engine improvements!

    • Native Apple Silicon support on macOS with a universal app (Apple Silicon + Intel), using Metal by default on Apple Silicon.

    • The game executable is now code signed, improving trust with Windows and reducing false positives with antivirus.

  • Rendering & mod assets

    • New Vulkan graphics API option on Windows & Linux (experimental) for potentially better performance in heavy scenes.

    • New rendering & image upgrades: higher quality PCSS shadows, optional image translucency, and WebP image support for more efficient mods.

  • Quality of life

    • Camera movement improvements, deal from bottom of deck, keyboard layout–friendly keybind behavior, turns system improvements, controller pointer smoothing, music player overhaul, notepad improvements, grid tools, erase-all controls, Cloud Manager upgrades, and new console options.

  • Lua / creators

    • Lua upgrades including a new turn-order API, improved deck dealing controls (including “deal from bottom”), [c]putObject[/c] index support, plus stability fixes for scripting and drafting/hand selection workflows.

Engine, Platform & Security

  • Updated TTS to Unity 6 LTS.

  • Updated all plugins to their latest compatible versions.

  • The game executable is now code signed, improving trust with Windows and reducing false positives with antivirus.

New OS / Platform Requirements

  • Windows

    • 64-bit only.

    • Minimum: Windows 10 version 21H1 (build 19043) or newer.

    • Windows 11 fully supported.

  • macOS

    • Minimum: macOS 11 Big Sur or newer.

    • Ships as a universal app that runs on both Intel and Apple Silicon (M-series).

    • On Apple Silicon, TTS runs natively (no Rosetta required).

  • Linux

    • Officially supported/tested: Ubuntu 22.04 / 24.04, 64-bit.

    • Wayland and X11 supported (behavior may vary by distro/driver).

If you're on an older OS than the above, TTS may not launch after this update. Please update your system.

Graphics APIs

  • macOS (Apple Silicon)

    • Metal is now the default graphics API when running on Apple Silicon.

    • If you're not on Apple Silicon, the game uses OpenGLCore by default.

  • Windows & Linux

    • Added Vulkan as a new experimental graphics API.

    • In very demanding scenes, Vulkan can offer better performance on supported hardware.

    • If you hit visual glitches or stability problems, switch back to the default renderer.

Security

  • Includes the latest Unity 6 security fixes, addressing known file-loading vulnerabilities in older engine versions.

  • Combined with code signing, this should reduce security prompts and exploit risk.

General & Performance

  • Greatly increased snappiness of WASD camera movement with less "floaty" gravity.

  • Keybinds now use physical key location instead of character, so bindings line up across different keyboard layouts.

  • Turn order UI now updates dynamically in the top-right player list whenever turn order changes.

  • Controller input for moving pointers should now feel slightly smoother.

  • Greatly optimized network serialization on CPU via more efficient bitpacking.

  • Image loading improvements

    • Loading new (uncached) images is now more performant.

    • Improved image quality in many cases.

    • Reduced likelihood of crashes when large or many new images are being loaded.

  • Added support for WebP images, a more efficient image format than JPG or PNG. (Feedback #2273)

  • Voice chat improvements:

    • Disabling voice chat in the configuration menu properly stops all voice chat processes.

    • This can fix audio issues with some Bluetooth headsets.

    • If you are the host and disable voice chat, it disables voice chat for all players.

    • Added an error message when trying to use voice chat when it isn't connected.

  • UI theme can now automatically follow your system theme if none is manually selected.

Rendering Options

  • Added a higher quality shadow setting PCSS, which gives more realistic shadows and blurs based on distance.

  • Added a new console command [c]Translucency[/c] that allows images to support partial translucency (EXPERIMENTAL, please send us feedback on this!).

Connectivity & Session Safety

  • Added a popup when disconnecting while players are still connected to offer them host migration. (Feedback #2663)

Note: Your RAW image cache will be cleared with this update due to image pipeline changes and new translucency support.

Music Player

  • Added search filter for playlists. (Feedback #2143)

  • Added Clear Playlist button.

  • Added Export Playlist and Import Playlist

    • Save your current playlist to a file.

    • Add a playlist file into your current playlist.

  • Added Upload Music Folder

    • Select a folder and upload all songs in it at once, with naming.

  • TTS will now suggest a name for a song when you provide a URL or file.

  • FixMusic player no longer breaks when loading a new mod. ( Feedback #2038 )
  • Fix: Music events no longer break when a song ends with no playlist active.

  • Fix: Music player no longer resets when loading a save file with no music saved on it.

Notepad (On-Screen Notes)

  • On-screen notes region is now resizable.

  • New notepad settings for:

    • Font

    • Font size

    • Text justification

  • New console commands:

    • [c]ui_notepad_edit[/c]

    • [c]ui_notepad_left_align[/c]

    • [c]ui_notepad_locked[/c]

    • [c]ui_notepad_fixed_width_font[/c]

    • [c]ui_notepad_font_size[/c]

    • [c]ui_notepad_size[/c]

    • [c]ui_notepad_text[/c]

Grid

  • While Grid settings are open, the grid now renders on top of everything, making adjustments easier.

    • Controlled via [c]ui_grid_highlight_when_editing[/c] (console / Misc setting).

  • New anchor & gizmo mode

    • Click the Gizmo button in the Grid window.

    • Select a component to center the grid on it.

    • Ctrl+click a second component to size the grid appropriately (using your snap settings). (Feedback #1871)

  • Added [c]measure_grid_multiplier[/c] command.

Erase All

  • Applies to drawn lines, text, and decals.

  • Non-promoted players

    • "Erase all" now only erases their own drawings/decals. (Feedback #1841)

  • Promoted players

    • Can erase everything

    • Can erase just their own

    • Can erase all content from a specific player

Cloud Manager

  • Cloud folder dropdown now has a"Select Folder"button that opens the Cloud Manager folder browser. (Feedback #711)

  • Starred folders

    • Folders can now be Starred (button next to folder name).

    • Starred folders show first in the folder browser dropdown. (Feedback #711)

  • Cloud search now restricts results to the current folder. (Feedback #1839)

  • FixResolved several file browser issues and cleaned up its underlying code to improve stability.

Dealing: Deal From Bottom

  • Holding ALT while dealing or drawing from a deck will now take the card from the bottom of the deck. (Feedback #2680)

  • The deck will do a small “hop” animation to make it clear when this happens.

  • Works both with the number keys and the GUI.

  • Dealing hand objects will now correctly deal to your new hand if you change the table.

Misc Features

  • Custom Figurine

  • Added Reset Scale to an object's scale context menu. (Feedback #2078)

  • Hotseat player names are now remembered between sessions. (Feedback #2070)

  • Added [c]vr_floor[/c] command / VR setting

    • Lets you turn off the floor independently of [c]fog[/c] / "Floor Of Mist". (Feedback #2173)

  • Server browser improvements

    • Player names now show in the server browser.

    • Your name is hidden if you are offline, invisible, or you untick the"Show Name In Server Browser"option.

Console Commands

New/updated commands:

  • [c]component_hotkey_state_change[/c]

    • When enabled, press number keys while hovering an object to change its State.

    • Appears in Misc Settings.

  • [c]ui_notebook[/c]

    • Shows the Notebook window.

  • [c]text_tool_default_font_size[/c]

  • [c]autorun_lua[/c]

    • Controls whether Lua automatically runs when updated.

  • [c]camera_reset_on_color_change[/c]

    • Controls whether the camera automatically moves to your seat when you change color. (Feedback #256)

  • [c]show_name_in_server_browser[/c]

    • Controls whether your name is listed in the server browser for public servers you join.

  • [c]measure_grid_multiplier[/c]

    • Applies a scale multiplier when the line measure tool is in Grid mode.

Fixes:

  • Fixed [c]help[/c] command not working on commands that have no arguments.

  • Removed old console commands related to global chat. (Feedback #2117)

Open Beta Fixes

  • Fixed a major networking issue where loading a save file could break the game state. (Feedback #2641)

  • Fixed rewinds and autosaves not working correctly. (Feedback #2656)

  • Fixed an issue where XML UI could be blocked by incorrect objects, including the invisible floor at [c]y = 1[/c]. (Feedback #2647)

  • Fixed a 64-depth issue when downloading and loading mods. (Feedback #2640)

  • Fixed hand selection working incorrectly with the new Lua drafting mechanic.

  • Fixed an issue where you could erase your drawn lines incorrectly. (Feedback #2702)

  • Fixed several HandSelectMode issues. (Feedback #2618)

  • Fixed a bug in [c]Lua Wait.collect[/c]. (Feedback #2635)

Fixes

  • Fixed an issue where XML UI would not be blocked by objects when it should.

  • Fixed XML UI not hiding in hidden zones. (Feedback #2673)

  • Fixed partial transparency when importing UI and decal images for the first time.

  • Fixed advancing the turn immediately after loading a game always going to the first player instead of the second.

  • Fixed a macOS issue where text could be entered while the Cmd modifier key was held. (Feedback #2636)

  • Fixed infinite bags visually breaking after Undo or Reload. (Feedback #2665)

  • Fixed drop indicator not showing color when dropping with Alt + Right Click for decks and stacks.

  • Fixed grid size inputs not allowing you to type a [c].[/c] at the end.

  • Fixed [c]onLoad[/c] not executing in Hot Seat Mode. (Feedback #2629)

  • Fixed RPG tileset snapping preview so it now displays correctly.

  • Fixed Flick and Combine sometimes requiring a double click when you are a client.

  • Fixed right click while drawing a line not canceling for everyone else. (Feedback #125)

Misc Fixes

  • You can now obtain the "Be Social" achievement using in-game chat. (Feedback #1895)

  • Fixed game crashing when trying to load a CMYK JPG.

  • Fixed line tool not converting to cm in component mode. (Feedback #1934)

  • Fixed"Showing Hand"button displaying incorrect color after seat swap.

  • Fixed on-screen hand blocking in-game UI. (Feedback #1757)

  • Fixed hotseat turn not being set to correct player on load. (Feedback #1960)

  • Fixed hotseat players being unable to drop cards in searched deck. (Feedback #1959)

  • Fixed hotseat turn incorrectly resetting when loading a Classic game.

  • When starting a hotseat game, the game now only picks larger tables, so all player colors are immediately selectable.

  • Fixed context menu not clamping to screen. (Feedback #1966)

  • Fixed context menu appearing in the wrong position when right-clicking a card in hand. (Feedback #2051)

  • Fixed unintuitive Text Tool placement behavior.

  • Fixed appearance of custom card aspect ratios when searching containers. (Feedback #2021)

  • Fixed cards merging incorrectly with a deck when the deck is on a snap point. (Feedback #2063)

  • Fixed left edge of search dialog not having a collider. (Feedback #2077)

  • Fixed Japanese language name in language select. (Feedback #2116)

  • Fixed shake detector triggering when the user spams Tap.

  • Fixed Random Domino/Card/Mahjong Tile not generating every possible object. (Feedback #2160, #2154)

  • Fixed rewind/forward ([c]rwd/fwd[/c]) not working correctly. (Feedback #2161)

  • Fixed game breaking on first launch but working on subsequent launches.

  • Fixed cards getting cut off onscreen when scaling very large hands.

  • Fixed deleting a folder in Cloud Manager not deleting all contained files.

  • Fixed issues when uploading PDF files via "Upload All" in the Cloud Manager.

  • Fixed a bug where objects with multiple assets (primary/secondary AssetBundles) could think they finished loading too early, breaking on-screen hands, highlighting, and Lua load completion.

  • Fixed dice behavior when picking up and dropping instantly, so dice now roll correctly in that scenario.

  • Fixed VR floor setting being inverted for the [c]vr_floor[/c] option.

Lua

New Lua functions and features for creators:

Object State Changes

  • Added [c]tryObjectStateChange(object, new_state_index, player_label)[/c] and [c]object.tryStateChange(new_state_index, player_label)[/c]. (Feedback #1822)

  • Limited [c]tryObjectStateChange[/c] and [c]tryStateChange[/c] to only trigger on valid state indices.

Turn Order & Input Modifiers

  • Added [c]Turns.getTurnOrder()[/c] which returns the current turn order, including automatic order (in automatic mode) and custom order (in custom mode).

  • Lua will now receive the ALT modifier on the events [c]onNumberTyped[/c] and [c]onObjectNumberTyped[/c].

Dealing API

  • Updated [c]obj.deal(int NumCards, string Color = Colour.SeatedLabel, int HandIndex = 1, bool DealFromBottom = false)[/c]

    • Now supports dealing from the bottom of the deck when [c]DealFromBottom = true[/c] (only works for decks).

Hand Select Mode

Automate drafting & hand selection:

  • [c]chooseInHand(label, minCount, maxCount, prompt, players) -> affectedPlayers[/c]

  • [c]chooseInHandOrCancel(label, minCount, maxCount, prompt, players) -> affectedPlayers[/c]

  • [c]clearChooseInHand(players) -> affectedPlayers[/c]

  • [c]currentChooseInHand(player) -> label[/c]

  • [c]onPlayerHandChoice(player_color, label, objects)[/c] → Callback triggered when a player confirms their selection.

[c] Wait.collect [/c]

  • Added [c]Wait.collect(table expected_ids, on_finished, on_add = nil, on_error = nil) -> {table expected, table results, add(id, ...), reset()}[/c].

[c]Wait.collect[/c] takes a list of expected ids and returns a [c]collect_table[/c]:

  • When the task for a given id is complete, call: [c]collect_table:add(id, ...)[/c].

    • The first time this happens for a given id:

      • [c]collect_table.results[id][/c] is set to the [c]...[/c] you passed in.

      • If you provided [c]on_add[/c], it is called as: [c]on_add(id, ...)[/c].

  • Error handling:

    • If you call [c]add[/c] more than once for the same id and you provided [c]on_error[/c], it is called as: [c]on_error(Wait.COLLECT_DUPLICATE, id, ...)[/c].

    • If you call [c]add[/c] with an id that was not expected and you provided [c]on_error[/c], it is called as: [c]on_error(Wait.COLLECT_UNKNOWN, id, ...)[/c].

When all expected ids have been added:

  • [c]on_finished(results)[/c] is called with the final [c]results[/c] table.

You can call:

  • [c]collect_table:reset()[/c] to zero out call counts and clear results so you can reuse the same collector.

Rewind State

Rewind states are stored periodically. If a store happens in the middle of a complex scripted change, you can end up with bad intermediate states. These helpers let you control when rewinds are saved. (Feedback #617)

  • [c]storeRewindState(closure andThen, block_further_stores)[/c]

    • Attempts to store a rewind state if there are unsaved changes, then calls: [c]andThen(success, didSave)[/c].

    • [c]success[/c]

      • [c]true[/c] → the call completed successfully.

      • [c]false[/c] → a rewind state could not be stored. You should always check this before continuing.

    • [c]didSave[/c]

      • [c]true[/c] → a new rewind state was actually written.

      • [c]false[/c] → call succeeded but there was nothing new to save.

    • If [c]block_further_stores[/c] is [c]true[/c] and [c]success[/c] is [c]true[/c], then no additional rewind states will be recorded until:

      • You call [c]storeRewindState[/c] again, or

      • You call [c]allowRewindStore()[/c], or

      • 60 seconds have passed.

  • [c]allowRewindStore()[/c]

    • Clears the block on storing rewind states.

Hand Zone Stash

Each player’s primary hand zone now has a “stash” where cards in the players hand can be stashed temporarily:

  • [c]player.drawHandStash()[/c] → draws all cards from stash into hand.

  • [c]player.setHandStashLocation(v3 position, int rotation)[/c] → set stash position & rotation.

  • [c]card.moveToHandStash()[/c] → moves a card in hand into its stash.

Use cases: drafting mechanics, temporary hidden piles, etc.

Lua API Addition

  • Lua added an optional index parameter to [c]putObject(Obj, index)[/c]. (Feedback #659)

Lua Fixes

  • Fixed an issue with [c]Lua GetData()[/c] involving the new Steam IDs.

  • Fixed [c]JSON.encode[/c] not working correctly with Unicode. (Feedback #1263)

v14.0.3 Hotfix 1

v14.0.3 Hotfix 2

  • Added a 'Community Chat' button to the chat menu that opens the Tabletop Simulator community group chat on Steam. Community Chat Rules need to be accepted before you can join.

v14.0.3 Hotfix 3

  • Added Lua Turns.endTurn() an easy way to end a players turn.

  • Changed json save file max depth to 1024...

  • Optimized the Wait class and fixed potential bugs with callback and calling stop().

  • Fixed "crashed" caused when deleting large RAWT cache after update (made deletion async, so it doesn't appear crashed).

  • Fixed not being able to pass turns for non admin players.

  • Fixed being able scale objects with locked Y scale to 1 to really small or big.

  • Fixed stacking distance for small cards and decks so that the spread action properly works with them.

  • Fixed autosaves happening when your server becomes disconnected.

Troubleshooting & Logs

For issues or feedback, post them here:

https://feedback.tabletopsimulator.com/

If you hit problems, attaching your Player.log helps us a lot:

  • Windows: [c]%USERPROFILE%\\AppData\\LocalLow\\Berserk Games\\Tabletop Simulator\\Player.log[/c]

  • macOS: [c]~/Library/Logs/Berserk Games\\Tabletop Simulator/Player.log[/c]

  • Linux: [c]~/.config/unity3d/Berserk Games\\Tabletop Simulator/Player.log[/c]

Enable logging with [c]/log[/c] in chat or the [c]-log[/c] launch option.

Thank you ❤️

Engine upgrades are big and tie in to every platform and a ton of unique hardware configurations. If you run into issues, please include with your report:

  • OS version

  • GPU + driver version

  • Player.log

  • Workshop link (if it's mod-related)

And again, thank you for your patience during the long gap of silence. This engine work sets us up for faster, more frequent updates going forward.

We have a big announcement coming soon - keep an eye out for around New Years!

Source

Steam News / 15 December 2025

Open original post

Changelog.gg summarizes and formats this update. How we read updates.