Briscola — rules & protocol
How to play classic two-player Briscola, plus how scores are published to Nostr so anyone can verify they came from this app. The rules and pass-and-play work fully offline.
How to play Briscola
Overview
Briscola is a traditional Italian trick-taking card game. This app uses the classic two-player rules with a 40-card Italian deck. The goal is to capture more card points than your opponent. There are 120 points in the deck; more than 60 wins, exactly 60 is a draw.
Players & deal
- Two players sit opposite each other.
- The 40-card deck is shuffled. Each player is dealt 3 cards.
- The next card is turned face-up: that suit is the briscola (trump) for the whole hand. The rest of the deck sits on top of it as the draw pile.
- The non-dealer (or the host in this app) leads the first trick.
The deck
Four suits — Bastoni (clubs), Coppe (cups), Denari (coins), Spade (swords) — each with ranks 1–7, Fante (jack), Cavallo (knight), Re (king).
Card points
Only five ranks score. The rest are worth 0. Total of all cards = 120.
| Card | Points |
|---|---|
| Asso (Ace / 1) | 11 |
| Tre (3) | 10 |
| Re (King / 10) | 4 |
| Cavallo (Knight / 9) | 3 |
| Fante (Jack / 8) | 2 |
| 7, 6, 5, 4, 2 | 0 |
Strength order (within a suit)
From strongest to weakest: Asso → Tre → Re → Cavallo → Fante → 7 → 6 → 5 → 4 → 2. Note that the 3 beats everything except the Ace, even though the King is higher in “face” rank.
Playing a trick
- Players alternate. The leader plays any card from hand.
- In classic two-player Briscola there is no obligation to follow suit — the second player may play any card.
- The trick is won by: (1) the highest trump if any trump was played; otherwise (2) the highest card of the suit that was led. An off-suit non-trump never wins.
- The winner of the trick takes both cards into their captured pile and leads the next trick.
- While cards remain in the draw pile, each player draws one card after the trick — winner first, then the other player. The face-up briscola is drawn last.
End of the hand
- When the draw pile is empty, play continues with the remaining cards in hand until none are left.
- Add up the points in each player’s captured cards.
- More than 60 points wins. Exactly 60 is a draw. (A common target in social play is “best of” several hands.)
Tips
- Save trumps and high cards (Ace, 3) for when they can take valuable opponents’ points.
- Leading a low card of a plain suit can force information about the opponent’s hand.
- Remember what high cards have already been played — especially Aces and 3s of each suit.
- The briscola under the deck is public knowledge; plan around that suit.
Nostr score events
After a match, the app can publish a single score for a username. Events are signed with a fixed app identity so anyone can verify they originated from Briscola — not from random posters. Offline, scores stay on this device until you publish.
Quick facts
- Kind
- 31250
- NIP
- NIP-01 + NIP-33
- Default relay
- https://nostr.relay.hedwig.sh
- App tag
- briscola-score
- App pubkey (hex)
- 79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798
What is stored
Content is intentionally minimal — only the player’s username and their score for that match (0–120 points), plus a schema version field. No hand history, no opponent name, no room code.
{
"v": 1,
"username": "alice",
"score": 72
}How to verify origin
- Check event.kind matches the Briscola kind
- Check event.pubkey equals the app public key
- Check the app tag is present
- Validate the Nostr signature (NIP-01) against the app pubkey
- Parse content JSON and require v === 1
The private key lives only on the server. Clients call a signed-in server function to publish; they never hold the app secret. Filtering on the public key is enough to ignore forgeries that claim to be scores.
79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798Tags
[
[
"d",
"alice"
],
[
"app",
"briscola-score"
],
[
"username",
"alice"
],
[
"score",
"72"
]
]d— NIP-33 identifier; lowercased username. One latest score per user.app— always the app tag valuebriscola-scoreusername/score— indexed copies for relay filters
Example event shape
{
"kind": 31250,
"pubkey": "79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
"created_at": 1710000000,
"tags": [
[
"d",
"alice"
],
[
"app",
"briscola-score"
],
[
"username",
"alice"
],
[
"score",
"72"
]
],
"content": "{\"v\":1,\"username\":\"alice\",\"score\":72}"
}Relay filter (REQ)
[
"REQ",
"briscola-scores",
{
"kinds": [
31250
],
"authors": [
"79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"
],
"#app": [
"briscola-score"
],
"limit": 50
}
]Default relay WebSocket: wss://nostr.relay.hedwig.sh
Multiplayer
Tables use WebRTC data channels (host-authoritative rules). Signaling uses short-lived room codes — ideal for playing with someone you trust. Pass-and-play and the rules docs work fully offline via the service worker cache.