Zone visibility
A zone’s visibility decides who can see what is inside it. This is the one place taybl does more than describe a scene — it is engine-enforced. Everywhere else, taybl trusts players to resolve the rules by hand; here, the server actively hides what a player isn’t entitled to see.
Two fields work together: view controls who can see the zone’s contents, and
faceOnEnter controls how a component is turned when it lands in the zone.
view — who can see the contents
view defaults to public. The other two values hide contents based on who
owns the zone instance (for a perSeat zone, the seated player it belongs to):
view | Who sees the contents | Use it for |
|---|---|---|
public | Everyone (the default) | The board, a face-up discard, a shared tableau .optional() |
owner | The owner only — hidden from everyone else | A private hand; pair with scope: perSeat so each player sees only their own |
othersOnly | Everyone except the owner | Hanabi-style hands — you hold cards you can’t see but everyone else can |
This is enforced in server-side state redaction: before the game state is broadcast to each player, the contents of any zone that should be hidden from them are stripped out (the card face, its identity, and its position), leaving only a face-down placeholder and the count. A hidden card never crosses the wire to a player who shouldn’t see it, so even a curious or tampered client cannot recover it. (Activity-log snapshots and non-public reveals are redacted the same way, to close shuffle-correlation leaks.)
Because owner and othersOnly only mean something when a zone has an owner,
they imply a per-seat hand: set scope: perSeat so each seated player owns
their own copy — see zone scope.
It isn’t only cards this protects. A view: owner zone (plus
scope: perSeat) holding a sheet is how you build a private
notepad — a Clue deduction grid, a hidden score pad. The redaction above blanks
the pad’s written-in values for everyone but its owner, so what a player writes
on their own sheet is as private as the cards in their hand.
faceOnEnter — facing on entry
faceOnEnter (optional) sets which way a component turns the moment it enters
the zone — drawn, dealt, or dragged in. It is about facing, while view is
about who may see; the two often pair (a face-down draw pile, a face-up
discard).
faceOnEnter | Turns the component… | |
|---|---|---|
up | Face up — front visible | A face-up discard or reveal area .optional() |
down | Face down — back showing | A face-down draw pile or deck .optional() |
owner | Turned to face its owner | Drawing into a private hand .optional() |
othersOnly | Front to everyone except the owner | Hanabi — held facing outward .optional() |
keep | Leave the component’s current facing untouched | The default behaviour .optional() |
keep at setup — the role default
At setup there is no "current facing" to keep: the component was minted
moments earlier, and cards mint face-down. So on keep (or no
faceOnEnter at all) the zone’s role decides, matching a
physical table:
supply,discard,play→ face up. A stock of known goods, a spent pile, and a tableau all sit face-up. Without this a supply of cards would open face-down — and aview: publiczone redacts face-down cards, so the pile would come up hidden, showing only its back.- Any hidden zone (
view: ownerorothersOnly) → face up, whatever its role. It conceals by ownership — redaction strips it for everyone not entitled to it however its cards are turned — so the face is doing no hiding there and is better spent facing whoever may look. See “Facing inside a hidden zone” below. drawand everything else public → the creation default (face-down for a card, or a piece/token with back art).arrangement: bag→ always the creation default, whatever the role or view. A bag is concealed by definition, so a face-down reserve stays hidden.
Set faceOnEnter explicitly to override this — a face-down supply reserve
just needs Face down. This applies only at setup: once the game is
running, keep means keep, so dragging a face-down card into a discard
leaves it face-down.
Facing inside a hidden zone
Because a hidden zone hides by ownership, the facing of a card inside one is
free — and taybl gives it to the player. A card resting in a hand is turned
towards whoever holds it; turning it over (F, or right-click → Flip)
shows them its back, and makes it land face down when they play it out
to a keep zone. Nobody else sees any difference either way.
This is why a hand is not faceOnEnter: down. Both hide the card from the
table, but down spends the face on hiding something the zone was already
hiding — which leaves Flip with nothing to say and drops a card onto the table
face-down when the player meant to play it openly.
Both can change with the variant
A game with more than one way to play can change either field for a particular variation — hands that are open in the two-player game, a discard pile that rests face-up in the basic one. What you set here is the base reading; the variation is authored as an override on the zone itself, and players pick it on the pre-game setup screen. See zones that change with the variant.
How to edit in the Studio
Open your game → Layout tab → select a zone. In the Properties card,
the Visibility dropdown sets view — Everyone, Owner only, or
Everyone except owner — and the Face on enter dropdown sets
faceOnEnter. For an owner-only zone, also set Who uses it to Each
player so every player owns their own private copy.
Related
- Zones overview
- Zone scope — owner views imply per-seat hands
- Zone roles
- Cards — what gets flipped and hidden
- Sheets —
view: owner+perSeatmakes a private notepad - Zones that change with the variant —
viewandfaceOnEnterper variation