Sashité for Developers
  1. Sashité for Developers
  2. Specifications
  3. PCN
  4. 1.0.0
  5. Examples
  6. Minimal Documents

Minimal Documents (PCN v1.0.0)

This page collects tiny, valid PCN documents you can copy/paste. They illustrate the minimum required section (setup), then progressively add optional parts: meta, sides, periods, plies, and outcome.

All examples are shown in both TOML and JSON formats.


1. Absolute Minimum (Required Only)

Only the required setup section with a FEEN position. Nothing else.

TOML

[setup]
feen = "8/8/8/8/8/8/8/8 / C/c"

JSON

{
  "setup": {
    "feen": "8/8/8/8/8/8/8/8 / C/c"
  }
}

2. Chess Starting Position

Standard chess starting position, nothing else.

TOML

[setup]
feen = "-rnbqk^bn-r/+p+p+p+p+p+p+p+p/8/8/8/8/+P+P+P+P+P+P+P+P/-RNBQK^BN-R / C/c"

JSON

{
  "setup": {
    "feen": "-rnbqk^bn-r/+p+p+p+p+p+p+p+p/8/8/8/8/+P+P+P+P+P+P+P+P/-RNBQK^BN-R / C/c"
  }
}

3. Minimal With One Ply

Adds a single move. No timing, no metadata.

TOML

[setup]
feen = "-rnbqk^bn-r/+p+p+p+p+p+p+p+p/8/8/8/8/+P+P+P+P+P+P+P+P/-RNBQK^BN-R / C/c"

[[plies]]
pmn = "e2-e4"

JSON

{
  "setup": {
    "feen": "-rnbqk^bn-r/+p+p+p+p+p+p+p+p/8/8/8/8/+P+P+P+P+P+P+P+P/-RNBQK^BN-R / C/c"
  },
  "plies": [
    { "pmn": "e2-e4" }
  ]
}

4. Minimal Metadata

Adds lightweight metadata.

TOML

[meta]
name = "Casual Game"
started_at = 2025-01-27T10:00:00Z

[setup]
feen = "-rnbqk^bn-r/+p+p+p+p+p+p+p+p/8/8/8/8/+P+P+P+P+P+P+P+P/-RNBQK^BN-R / C/c"

[[plies]]
pmn = "e2-e4"

[[plies]]
pmn = "e7-e5"

JSON

{
  "meta": {
    "name": "Casual Game",
    "started_at": "2025-01-27T10:00:00Z"
  },
  "setup": {
    "feen": "-rnbqk^bn-r/+p+p+p+p+p+p+p+p/8/8/8/8/+P+P+P+P+P+P+P+P/-RNBQK^BN-R / C/c"
  },
  "plies": [
    { "pmn": "e2-e4" },
    { "pmn": "e7-e5" }
  ]
}

5. Minimal Players

Defines players with names and variants.

TOML

[sides.first]
name = "Alice"
variant = "Chess"

[sides.second]
name = "Bob"
variant = "Chess"

[setup]
feen = "-rnbqk^bn-r/+p+p+p+p+p+p+p+p/8/8/8/8/+P+P+P+P+P+P+P+P/-RNBQK^BN-R / C/c"

[[plies]]
pmn = "g1-f3"

JSON

{
  "sides": {
    "first": {
      "name": "Alice",
      "variant": "Chess"
    },
    "second": {
      "name": "Bob",
      "variant": "Chess"
    }
  },
  "setup": {
    "feen": "-rnbqk^bn-r/+p+p+p+p+p+p+p+p/8/8/8/8/+P+P+P+P+P+P+P+P/-RNBQK^BN-R / C/c"
  },
  "plies": [
    { "pmn": "g1-f3" }
  ]
}

6. Minimal With Time Control (Fischer)

Adds Match-wide time control: 5 minutes + 3 seconds increment per ply. Both players share this budget.

TOML

[[periods]]
duration_ms = 300000
increment_ms = 3000

[setup]
feen = "-rnbqk^bn-r/+p+p+p+p+p+p+p+p/8/8/8/8/+P+P+P+P+P+P+P+P/-RNBQK^BN-R / C/c"

[[plies]]
pmn = "e2-e4"
elapsed_ms = 8000

[[plies]]
pmn = "e7-e5"
elapsed_ms = 12000

JSON

{
  "periods": [
    { "duration_ms": 300000, "increment_ms": 3000 }
  ],
  "setup": {
    "feen": "-rnbqk^bn-r/+p+p+p+p+p+p+p+p/8/8/8/8/+P+P+P+P+P+P+P+P/-RNBQK^BN-R / C/c"
  },
  "plies": [
    { "pmn": "e2-e4", "elapsed_ms": 8000 },
    { "pmn": "e7-e5", "elapsed_ms": 12000 }
  ]
}

7. Minimal Byōyomi (Per-Ply)

30 seconds per move, no main time bank. Both players share this budget.

TOML

[[periods]]
duration_ms = 30000
plies = 1

[setup]
feen = "-rnbqk^bn-r/+p+p+p+p+p+p+p+p/8/8/8/8/+P+P+P+P+P+P+P+P/-RNBQK^BN-R / C/c"

[[plies]]
pmn = "e2-e4"
elapsed_ms = 15000

JSON

{
  "periods": [
    { "duration_ms": 30000, "plies": 1 }
  ],
  "setup": {
    "feen": "-rnbqk^bn-r/+p+p+p+p+p+p+p+p/8/8/8/8/+P+P+P+P+P+P+P+P/-RNBQK^BN-R / C/c"
  },
  "plies": [
    { "pmn": "e2-e4", "elapsed_ms": 15000 }
  ]
}

8. Minimal With Outcome

Adds a match result.

TOML

[setup]
feen = "-rnbqk^bn-r/+p+p+p+p+p+p+p+p/8/8/8/8/+P+P+P+P+P+P+P+P/-RNBQK^BN-R / C/c"

[[plies]]
pmn = "e2-e4"

[[plies]]
pmn = "e7-e5"

[outcome]
result = "1-0"

JSON

{
  "setup": {
    "feen": "-rnbqk^bn-r/+p+p+p+p+p+p+p+p/8/8/8/8/+P+P+P+P+P+P+P+P/-RNBQK^BN-R / C/c"
  },
  "plies": [
    { "pmn": "e2-e4" },
    { "pmn": "e7-e5" }
  ],
  "outcome": {
    "result": "1-0"
  }
}

9. Minimal Draw by Agreement

Draw offer accepted by both players.

The negotiation protocol: when the second player sets draw_offer: true, they offer a draw; when the first player sets draw_offer: true on their subsequent ply, they accept.

TOML

[setup]
feen = "-rnbqk^bn-r/+p+p+p+p+p+p+p+p/8/8/8/8/+P+P+P+P+P+P+P+P/-RNBQK^BN-R / C/c"

[[plies]]
pmn = "e2-e4"

[[plies]]
pmn = "e7-e5"
draw_offer = true

[[plies]]
pmn = "g1-f3"
draw_offer = true

[outcome]
result = "1/2-1/2"

JSON

{
  "setup": {
    "feen": "-rnbqk^bn-r/+p+p+p+p+p+p+p+p/8/8/8/8/+P+P+P+P+P+P+P+P/-RNBQK^BN-R / C/c"
  },
  "plies": [
    { "pmn": "e2-e4" },
    { "pmn": "e7-e5", "draw_offer": true },
    { "pmn": "g1-f3", "draw_offer": true }
  ],
  "outcome": {
    "result": "1/2-1/2"
  }
}

10. Minimal With Checkmate

A very short game ending in checkmate (Scholar’s Mate pattern).

TOML

[setup]
feen = "-rnbqk^bn-r/+p+p+p+p+p+p+p+p/8/8/8/8/+P+P+P+P+P+P+P+P/-RNBQK^BN-R / C/c"

[[plies]]
pmn = "e2-e4"

[[plies]]
pmn = "e7-e5"

[[plies]]
pmn = "f1-c4"

[[plies]]
pmn = "b8-c6"

[[plies]]
pmn = "d1-h5"

[[plies]]
pmn = "g8-f6"
assessment = "blunder"

[[plies]]
pmn = "h5+f7"
check = true
mate = true

[outcome]
result = "1-0"

JSON

{
  "setup": {
    "feen": "-rnbqk^bn-r/+p+p+p+p+p+p+p+p/8/8/8/8/+P+P+P+P+P+P+P+P/-RNBQK^BN-R / C/c"
  },
  "plies": [
    { "pmn": "e2-e4" },
    { "pmn": "e7-e5" },
    { "pmn": "f1-c4" },
    { "pmn": "b8-c6" },
    { "pmn": "d1-h5" },
    { "pmn": "g8-f6", "assessment": "blunder" },
    { "pmn": "h5+f7", "check": true, "mate": true }
  ],
  "outcome": {
    "result": "1-0"
  }
}

Quick Reference

Top-level sections

Section Required Description
setup Yes Initial position (must contain at least feen)
meta No Match metadata (name, event, site, round, started_at, rule_system, comment)
links No External resource links (each entry requires rel and url)
periods No Time control — Match-wide and symmetric for both players
sides No Player information (name, variant, elo)
plies No Sequence of moves
outcome No Match result

Ply properties

Property Type Description
pmn string Move in PMN format
feen string Resulting position after this ply
elapsed_ms integer Thinking time in milliseconds
assessment enum "good", "mistake", "brilliant", "blunder", "interesting", "dubious"
check boolean Move delivers check
mate boolean Move delivers checkmate
draw_offer boolean Active player offers or accepts a draw
comment string Free-text annotation
variations array Alternative lines from this position (each with name?, comment?, plies)

Outcome result values

Value Description
"1-0" First player wins
"0-1" Second player wins
"1/2-1/2" Draw
"1/2-0" First player draws, second player forfeits
"0-1/2" First player forfeits, second player draws
"1-1/2" First player wins, second player takes half-point
"1/2-1" First player takes half-point, second player wins

See Also