OPEN SPECIFICATION · VERSION 1 · 17 SEPTEMBER 2026
Gomoku Party SGF profile
This profile, gomoku-party-sgf-1, describes our public game archives. It builds on the existing Smart Game Format FF[4]. SGF already assigns GM[4] to Gomoku and Renju. This is a documented publishing profile, not a claim to have invented SGF or the first Gomoku file format.
Scope and month boundaries
Version 1 includes only completed games with mode=RANKED, rated=true and ruleset=FREESTYLE. Freestyle here means a 15 × 15 board, alternating black and white moves, and five or more consecutive stones to win. It is not the exact-five ruleset sometimes called “standard Gomoku”. Renju, Swap2, Pente, Ninuki Renju, Caro, tournaments, puzzles, friendly games, private games, challenges and rematches are outside this collection.
A game's UTC finish timestamp selects its month: the first day at 00:00:00 is inclusive and the following month's first day is exclusive. A game started in July and finished in August belongs to August. Only closed months are published, starting with August 2026. Each archive is independent, not cumulative.
Aborted, empty, incomplete or invalid records are excluded. Before publication, every move is replayed to validate turn order, board bounds, occupied intersections and the recorded result. Counts and exclusion reasons appear in the manifest. An archive describes the available backend records at publication time; older games missing from the backend cannot be reconstructed.
Container and encoding
Files use .sgf.gz: gzip-compressed UTF-8, with no byte-order mark. Decompression yields an SGF collection. Each game tree occupies one LF-terminated line. There are no variations, comments, setup stones, pass moves or captures. Games are ordered by finish timestamp, then game UUID. Gzip has a fixed zero timestamp and no filename header; identical records produce identical archive bytes with the same exporter/runtime.
Download names contain the month and the first 16 hexadecimal characters of the archive's SHA-256. The backend generates and stores each archive, and exposes it through the public download API. The manifest stores the full hash; a companion .sha256 file can be checked with shasum -a 256 -c FILE.sha256. On Linux, sha256sum -c FILE.sha256 works too. A rebuilt month receives a new name when its content changes. Consumers should discover the current file from the manifest.
Root properties
| Property | Meaning |
|---|---|
FF[4] GM[4] CA[UTF-8] | SGF version, Gomoku/Renju game family, encoding. |
AP[GomokuParty:1.0] SZ[15] | Exporter/profile implementation and square board size. |
RU[Gomoku Freestyle] | Five or more wins; no forbidden moves or opening swaps. |
GN | Stable game UUID. Not a player ID or an authenticated replay token. |
PC / SO | Site URL / database URL. |
DT | UTC start date, YYYY-MM-DD. See XST/XET for full timestamps. |
PB[Black] PW[White] | Fixed anonymous labels, not account identities. |
BR / WR | Black/white pre-game rating, formatted as an integer followed by “ Elo”. Historical stored ratings are preserved. |
RE | B+ / W+ for a line win; B+R / W+R for resignation; B+T / W+T for timeout; 0 for a full-board draw. |
CP[CC0-1.0] | Dataset dedication. |
Profile extensions
These uppercase properties extend SGF without changing its grammar. Readers that do not understand an extension can ignore it and still recover the board moves. Writers using this profile must preserve its documented semantics.
| Property | Meaning |
|---|---|
XGP[gomoku-party-sgf-1] | Versioned profile identifier. |
XRT[rated] | Game was marked rated in the authoritative backend. |
XTC | Integer seconds allowed for each move, 10–600. It is not total thinking time; SGF TM is deliberately omitted. |
XST / XET | Start/finish timestamps in ISO 8601 UTC, ending in Z, with optional fractional seconds. |
XER | FIVE_IN_ROW, RESIGNATION, TIMEOUT or DRAW. |
Coordinates and moves
Black plays first. Each non-root node contains exactly one B or W move. A coordinate is two lowercase ASCII letters a through o: column first, row second, both counted from the top-left. Thus aa is top-left, oa top-right, ao bottom-left, and hh the centre. Move coordinates use intersections. Consumers must not reverse row and column.
SGF values escape \ as \\ and ] as \]. The profile's text values contain no literal line breaks. Parsers should follow the SGF grammar rather than splitting blindly on semicolons or brackets.
Complete example
This synthetic example ends when White resigns after three moves; it is documentation only and is not included in the downloadable dataset.
(;FF[4]GM[4]CA[UTF-8]AP[GomokuParty:1.0]SZ[15]RU[Gomoku Freestyle]GN[00000000-0000-4000-8000-000000000001]PC[https://gomokuparty.com]DT[2026-08-12]PB[Black]PW[White]BR[1200 Elo]WR[1210 Elo]RE[B+R]SO[https://gomokuparty.com/database/]CP[CC0-1.0]XGP[gomoku-party-sgf-1]XRT[rated]XTC[60]XST[2026-08-12T12:00:00Z]XET[2026-08-12T12:02:00Z]XER[RESIGNATION];B[hh];W[ih];B[ii])
Manifest contract
manifest.json (GET /api/v1/database) is UTF-8 JSON with schemaVersion: 1, profile, license, scope, totalGames and months ordered newest first. Each month contains month, games, file (download filename), downloadUrl and checksumUrl (absolute API paths), bytes, uncompressedBytes, sha256, publishedAt, candidateGames, excludedGames, exclusions (reason counts) and results (termination counts). Counts include zero-game months. Clients should ignore unknown fields. A breaking profile or manifest change requires a new version.
Public API
GET /api/v1/database returns the archive manifest. GET /api/v1/database/manifest.json is an alias. Use each entry’s downloadUrl to download the gzip file and checksumUrl for its SHA-256 file. Downloads support HEAD, Content-Length, Content-Disposition and conditional requests with ETag / If-None-Match. Archive URLs include a content hash and can be cached indefinitely. Unknown or unpublished files return 404. Only read access is public: visitors cannot trigger an export.
A dedicated backend worker starts after application startup and checks for missing completed UTC months every six hours. Archives are stored persistently in PostgreSQL in 256 KiB chunks and become visible only after successful generation. The worker uses its own scheduler and a database lock, so game clocks and multiple server instances remain independent of the export.
Reuse and privacy
The dataset and this profile are available under CC0 1.0 Universal. Game records expose no player names, account IDs, contact details, chat, device information, anti-cheat signals or private replay tokens. Black and White labels are not linkable player pseudonyms. Published archive copies may be retained by downloaders.
Inspired by the monthly download model of the Lichess open database. SGF is an existing, independently maintained standard. This profile is maintained by Gomoku Party; contact us about format or data issues.