<!--
{
  "availability" : [
    "visionOS: 2.0 -"
  ],
  "documentType" : "symbol",
  "framework" : "TabletopKit",
  "identifier" : "/documentation/TabletopKit",
  "metadataVersion" : "0.1.0",
  "role" : "Framework",
  "symbol" : {
    "kind" : "Framework",
    "modules" : [
      "TabletopKit"
    ],
    "preciseIdentifier" : "TabletopKit"
  },
  "title" : "TabletopKit"
}
-->

# TabletopKit

Create multiplayer spatial games on a virtual table surface and use FaceTime to invite players.

## Overview

TabletopKit helps you create a spatial multiplayer game on a table surface for visionOS, where players join your game using SharePlay. TabletopKit provides support for designing your game, implementing rules, rendering effects, and syncing multiplayer game state.

![A representation of a tabletop game in spatial mode in visionOS.](images/com.apple.tabletopkit/tabletopkit-framework-hero~dark@2x.png)

Follow these steps to implement your TabletopKit game:

- Configure your game on the tabletop and create the game pieces or equipment that players interact with. You provide the renderer that draws your game and its pieces.
- Implement the game rules and player interactions with the equipment. TabletopKit processes and represents player gestures as interactions. You observe the interactions and append your game-specific actions.
- Add effects to the RealityKit entities of renderable equipment and trigger them during interactions. For example, play a sound effect when a player throws a piece or an animation when a player achieves a goal.
- Set up multiplayer using SharePlay. Start a Group Activities session and provide it to TabletopKit. Then customize the spatial experience of your game. For example,  place the players in their seats and spectators around the room.

To get started, create a [`TabletopGame`](/documentation/TabletopKit/TabletopGame) object that represents your game instance and a [`TableSetup`](/documentation/TabletopKit/TableSetup) object that represents your game layout and equipment.

## Topics

### Essentials

[Creating tabletop games](/documentation/TabletopKit/creating-tabletop-games)

Develop a spatial board game where multiple players interact with pieces on a table.

[Synchronizing group gameplay with TabletopKit](/documentation/TabletopKit/synchronizing-group-gameplay-with-tabletopkit)

Maintain game state across multiple players in a race to capture all the coins.

[`TabletopGame`](/documentation/TabletopKit/TabletopGame)

An object that manages the setup and gameplay of a tabletop game.

[`TableSetup`](/documentation/TabletopKit/TableSetup)

An object that represents the arrangement of seats, equipment, and counters around the game table.

[`Tabletop`](/documentation/TabletopKit/Tabletop)

A protocol for the table surface in your game.

[`EntityTabletop`](/documentation/TabletopKit/EntityTabletop)

A protocol for the table surface in your game when you render it using RealityKit.

[`TabletopShape`](/documentation/TabletopKit/TabletopShape)

An object that represents the physical properties of the table.

### Seats

[`TableState`](/documentation/TabletopKit/TableState)

The state of the table that can be queried and modified.

[`TableSeat`](/documentation/TabletopKit/TableSeat)

A protocol for seats at the table that players occupy.

[`EntityTableSeat`](/documentation/TabletopKit/EntityTableSeat)

A protocol for seats at the table that you render using RealityKit.

[`TableSeatIdentifier`](/documentation/TabletopKit/TableSeatIdentifier)

A unique identifier for seats.

[`TableSeatState`](/documentation/TabletopKit/TableSeatState)

The data associated with a seat that a player occupies.

[`SeatState`](/documentation/TabletopKit/SeatState)

A protocol for seat data that TabletopKit syncs between players.

### Equipment

[Implementing playing card overlap and physical characteristics](/documentation/TabletopKit/implementing-playing-card-overlap-and-physical-characteristics)

Add interactive card game behavior for a pile of playing cards with physically
realistic stacking and overlapping.

[`Equipment`](/documentation/TabletopKit/Equipment)

A protocol for equipment that players directly interact with in a game.

[`EquipmentCollection`](/documentation/TabletopKit/EquipmentCollection)

A collection of equipment whose state can be inspected and modified.

[`EntityEquipment`](/documentation/TabletopKit/EntityEquipment)

A protocol for equipment in a game that you render using RealityKit.

[`EquipmentIdentifier`](/documentation/TabletopKit/EquipmentIdentifier)

A unique identifier for equipment.

[`EquipmentState`](/documentation/TabletopKit/EquipmentState)

A protocol for the equipment data that TabletopKit syncs between players.

[`EquipmentStateCollection`](/documentation/TabletopKit/EquipmentStateCollection)

A collection of equipment states that can be inspected and modified.

[`BaseEquipmentState`](/documentation/TabletopKit/BaseEquipmentState)

A state for equipment that contains no equipment-specific data.

[`CustomEquipmentState`](/documentation/TabletopKit/CustomEquipmentState)

A specialized protocol for the equipment state that allows to accommodate custom data that TabletopKit syncs between players.

[`MutableEquipmentState`](/documentation/TabletopKit/MutableEquipmentState)

A protocol for equipment data that TabletopKit syncs between players, and that can be mutated.

[`CardState`](/documentation/TabletopKit/CardState)

A state for cards that contains face up and down information.

[`DieState`](/documentation/TabletopKit/DieState)

A state for dice that contains the current value.

[`RawValueState`](/documentation/TabletopKit/RawValueState)

A state for equipment that contains a game-specific value.

[`ControllingSeats`](/documentation/TabletopKit/ControllingSeats)

The seats that can manipulate or interact with the equipment.

### Equipment layout

[`EquipmentLayout`](/documentation/TabletopKit/EquipmentLayout)

A protocol for objects that describe the layout of equipment.

[`DefaultEquipmentLayout`](/documentation/TabletopKit/DefaultEquipmentLayout)

An object that provides a standard configuration for equipment layout.

[`EquipmentPose2D`](/documentation/TabletopKit/EquipmentPose2D)

An object that represents the position and rotation of equipment on the XZ plane.

[`EquipmentPose3D`](/documentation/TabletopKit/EquipmentPose3D)

An object that represents the 3D position and orientation of equipment on the table.

### Score counters

[`ScoreCounter`](/documentation/TabletopKit/ScoreCounter)

An object that keeps a score in a tabletop game.

[`CounterCollection`](/documentation/TabletopKit/CounterCollection)

A collection of score counters that can be inspected and modified.

### Players

[`Player`](/documentation/TabletopKit/Player)

A player in a tabletop game.

[`PlayerIdentifier`](/documentation/TabletopKit/PlayerIdentifier)

A unique identifier for players.

### Actions

[`TabletopAction`](/documentation/TabletopKit/TabletopAction)

A protocol for objects that describe an action in a tabletop game.

[`MoveEquipmentAction`](/documentation/TabletopKit/MoveEquipmentAction)

An action that moves a piece of equipment on the table or changes the grouping.

[`UpdateEquipmentAction`](/documentation/TabletopKit/UpdateEquipmentAction)

An action that updates properties of equipment on the table.

[`SetTurnAction`](/documentation/TabletopKit/SetTurnAction)

An action that sets the current seats participating in the current turn.

[`UpdateCounterAction`](/documentation/TabletopKit/UpdateCounterAction)

An action that updates the game counter.

[`CreateBookmarkAction`](/documentation/TabletopKit/CreateBookmarkAction)

An action that takes a snapshot of the game.

[`CustomAction`](/documentation/TabletopKit/CustomAction)

A protocol that represents an action whose behavior is implemented outside of TabletopKit.
A custom action that can be applied to a `TableState`.

### Interactions

[Simulating dice rolls as a component for your game](/documentation/TabletopKit/simulating-dice-rolls-as-a-component-for-your-game)

Create a physically realistic dice game by adding interactive rolling and scoring.

[`TabletopInteraction`](/documentation/TabletopKit/TabletopInteraction)

A protocol for objects that manage the entire flow of players interacting with equipment.

[`TossableRepresentation`](/documentation/TabletopKit/TossableRepresentation)

An object that represents geometric shapes that the player can throw
during gameplay, such as dice.

[`TableSnapshot`](/documentation/TabletopKit/TableSnapshot)

A snapshot of the current state of the table.

[`TableVisualState`](/documentation/TabletopKit/TableVisualState)

A structure that represents the appearance of an object on the table.

[`TableCursor`](/documentation/TabletopKit/TableCursor)

A cursor conveys information about one equipment that is currently being controlled by an interaction.

[`TableCursorIdentifier`](/documentation/TabletopKit/TableCursorIdentifier)

A unique identifier for cursors.

### Bookmarks

[`StateBookmark`](/documentation/TabletopKit/StateBookmark)

A snapshot of the game state at a point in time.

[`StateBookmarkIdentifier`](/documentation/TabletopKit/StateBookmarkIdentifier)

A unique identifier for bookmarks.

### Multiplayer network session

[`TabletopNetworkSession`](/documentation/TabletopKit/TabletopNetworkSession)

An object that coordinates network-related tasks in multiplayer games.

[`TabletopNetworkSessionCoordinator`](/documentation/TabletopKit/TabletopNetworkSessionCoordinator)

A protocol for objects that manage network sessions between peers.

[`TabletopSendMessageResult`](/documentation/TabletopKit/TabletopSendMessageResult)

The possible results of sending messages in a network session.

### Debugging

[`DebugDrawOptions`](/documentation/TabletopKit/DebugDrawOptions)

Types of items in a rendering that you want to debug.



---

Copyright &copy; 2026 Apple Inc. All rights reserved. | [Terms of Use](https://www.apple.com/legal/internet-services/terms/site.html) | [Privacy Policy](https://www.apple.com/privacy/privacy-policy)
