Cyril Kato's blog

Introducing FEEN: A Simple, Canonical Notation for Board Positions

In the course of studying different chess variants such as shogi, xiangqi, or makruk, I often found myself limited by existing standards for representing board positions. Formats like FEN are well-established for chess itself, but their structure is deeply tied to chess-specific rules — rooks, kingside castling, the fifty-move rule — making them less suited for other games, or for hybrid and experimental configurations.

With this in mind, I designed FEEN (Format for Encounter & Entertainment Notation): a minimalistic, rule-agnostic format aimed at capturing static board positions in a canonical, compact, and game-neutral way.

This article introduces FEEN modestly, with the hope that it may be useful to others who are exploring traditional board games, their variants, or even new designs.


Why a new format?

The intention behind FEEN is not to replace existing formats like FEN. Instead, it addresses different needs:

  • Rule independence: FEEN does not encode assumptions about what is legal or not. It simply describes "what is on the board," without implying anything about how the game should be played.
  • Canonical representation: Equivalent board positions always have exactly the same FEEN string. This is important for static storage, comparison, and reproducibility.
  • Cross-game flexibility: FEEN supports mixed or hybrid positions, where each player may use a different piece set or even play a different variant.
  • Support for multi-dimensional boards: Although most games are played in two dimensions, FEEN is designed from the start to handle arbitrary board dimensions.
  • Minimalist handling of "pieces in hand": For games like shogi where players can reuse captured pieces, FEEN includes a lightweight way to represent this.

How FEEN Works

A FEEN string consists of three fields, separated by spaces:

<PIECE-PLACEMENT> <GAMES-TURN> <PIECES-IN-HAND>

Each field serves a clear purpose:

  • Piece Placement describes the current board using simple characters, compressed where empty spaces occur.
  • Games Turn identifies the game type for each player and whose move it is, supporting hybrid games.
  • Pieces in Hand lists pieces that are not on the board but available for future placement.

The format is compact, human-readable after some practice, and equally easy for software to parse.

A complete, detailed specification is available here.


Potential Applications

Although FEEN was created with chess variants in mind, it could be applied in other contexts:

  • Databases of board positions across different games.
  • Position sharing for research or casual play without needing full game histories.
  • Experimental games with custom or blended rules, where standard formats are too restrictive.
  • Educational tools introducing students to abstract game structures.

Limitations

It's important to note that FEEN is designed for static positions only. It does not attempt to:

  • Verify the legality of a position.
  • Encode historical data or move sequences.
  • Handle complex rule-dependent states like repetition or perpetual check.

In this way, FEEN deliberately stays "below the rules" level — it merely records the state of the board at a given moment.


A Small Step

FEEN is a modest contribution. It will likely not fit every use case, nor was it intended to. But for those interested in exploring the diverse world of board games without being tied to a specific set of assumptions, it might offer a flexible, simple tool.

If you are interested, you can find a Ruby implementation here, with more planned as small utilities over time.

I welcome any feedback or suggestions for improvements.