- Sashité for Developers
- Specifications
- PCN
- 1.0.0
- Examples
- Minimal Documents
Minimal Documents (PCN v1.0.0)
This page collects tiny, valid PCN documents you can copy/paste.
They illustrate the minimum required field (setup FEEN), then add small, optional parts: meta, sides, moves as [PAN, seconds], and status.
Time control lives per player. If
sides.{first|second}.periodsis omitted or[], that side has no time limit.
1) Absolute Minimum (Required Only)
Only the required setup (FEEN). No players, no moves, no status.
{
"setup": "8/8/8/8/8/8/8/8 / U/u"
}
2) Chess Starting Position (FEEN Only)
Starting position for chess, nothing else.
{
"setup": "+rnbq+kbn+r/+p+p+p+p+p+p+p+p/8/8/8/8/+P+P+P+P+P+P+P+P/+RNBQ+KBN+R / C/c"
}
3) Minimal With One Move (No Time Control)
Adds a single PAN move with time tuple (seconds is a float ≥ 0.0).
{
"setup": "+rnbq+kbn+r/+p+p+p+p+p+p+p+p/8/8/8/8/+P+P+P+P+P+P+P+P/+RNBQ+KBN+R / C/c",
"moves": [
["e2-e4", 0.0]
]
}
4) Minimal Metadata
Adds lightweight metadata; still no time control.
{
"meta": {
"name": "Casual Game",
"started_at": "2025-01-27T10:00:00Z"
},
"setup": "+rnbq+kbn+r/+p+p+p+p+p+p+p+p/8/8/8/8/+P+P+P+P+P+P+P+P/+RNBQ+KBN+R / C/c",
"moves": [
["e2-e4", 0.0],
["e7-e5", 0.0]
]
}
5) Minimal Players (No Time Control)
Defines sides with names (and optional styles), no periods.
{
"sides": {
"first": { "name": "Alice", "style": "CHESS" },
"second": { "name": "Bob", "style": "chess" }
},
"setup": "+rnbq+kbn+r/+p+p+p+p+p+p+p+p/8/8/8/8/+P+P+P+P+P+P+P+P/+RNBQ+KBN+R / C/c",
"moves": [
["g1-f3", 0.0]
]
}
6) Explicit “No Time Limit” (Empty Periods)
Same as above, but explicitly sets empty periods (equivalent to omitting them).
{
"sides": {
"first": { "name": "Human", "periods": [] },
"second": { "name": "Engine", "periods": [] }
},
"setup": "8/8/8/8/8/8/8/8 / U/u",
"moves": [
["...", 0.0]
]
}
7) Minimal With Simple Time Control (Fischer)
Adds per-player time control with one bank period + increment.
{
"sides": {
"first": {
"name": "Alice",
"periods": [
{ "time": 300, "inc": 3 }
]
},
"second": {
"name": "Bob",
"periods": [
{ "time": 300, "inc": 3 }
]
}
},
"setup": "+rnbq+kbn+r/+p+p+p+p+p+p+p+p/8/8/8/8/+P+P+P+P+P+P+P+P/+RNBQ+KBN+R / C/c",
"moves": [
["e2-e4", 8.0],
["e7-e5", 12.0]
]
}
8) Minimal Byōyomi (Per-Move Cap)
Bankless per-move example: every move must satisfy seconds ≤ time.
{
"sides": {
"first": { "periods": [ { "time": 30, "moves": 1 } ] },
"second": { "periods": [ { "time": 30, "moves": 1 } ] }
},
"setup": "8/8/8/8/8/8/8/8 / U/u",
"moves": [
["...", 3.2],
["...", 1.0]
]
}
Per-move rule: if any move has
seconds > time, the outcome should bestatus = "time_limit".
9) Minimal Canadian (Quota)
Single quota period that resets intrinsically when no next period exists.
{
"sides": {
"first": { "periods": [ { "time": 300, "moves": 25 } ] },
"second": { "periods": [ { "time": 300, "moves": 25 } ] }
},
"setup": "8/8/8/8/8/8/8/8 / U/u",
"moves": [
["...", 10.0]
]
}
10) Minimal With Status
Shows a declared status without needing time control.
{
"setup": "+rnbq+kbn+r/+p+p+p+p+p+p+p+p/8/8/8/8/+P+P+P+P+P+P+P+P/+RNBQ+KBN+R / C/c",
"moves": [
["e2-e4", 0.0]
],
"status": "resignation"
}
Quick Notes
- Required field:
setup(FEEN string). Everything else is optional. - Moves: each entry is exactly
[ "<PAN>", <seconds: float ≥ 0.0> ]. -
Time control: defined per player under
sides.{first|second}.periods.moves = null→ bank;incapplied at end of each move.moves = 1→ per-move cap; must satisfyseconds ≤ time.moves ≥ 2→ quota; when quota hits 0, reset if no next period, else transition.
- Active player: derived from FEEN + parity of
moves.length.
For end-to-end records, see Complete Game Records. For focused timing systems, see Time Control Systems.
