Cyril Kato's blog

Introducing FEEN: A Simple, Canonical Notation for Board Positions

In the course of studying different chess variants—shogi, xiangqi, makruk—I often found myself limited by existing standards for representing board positions. Formats like FEN are well-established for Western chess, but their structure is deeply tied to chess-specific rules: castling rights, en passant squares, the fifty-move counter. This makes them less suited for other games, or for hybrid and experimental configurations.

With this in mind, I designed FEEN (Field Expression Encoding Notation): a minimalistic, rule-agnostic format aimed at capturing static board positions in a canonical, compact, and game-neutral way. The name reflects its purpose—a concise textual expression of the game field, independent of any particular rule set or move history.


Why a new format?

I should be clear: FEEN is not meant to replace FEN. It addresses different needs.

FEN encodes assumptions about what is legal, what state the game is in, and how it should proceed. FEEN takes a different stance: it simply describes what is on the board, without implying anything about how the game should be played. This rule independence means that equivalent board positions always produce exactly the same FEEN string—important for storage, comparison, and reproducibility.

FEEN also supports scenarios that FEN was never designed for: games where each player uses a different piece set, boards with arbitrary dimensions, and pieces held in reserve (as in shogi, where captured pieces can return to play).


How FEEN works

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

<PIECE-PLACEMENT> <HANDS> <STYLE-TURN>

The first field describes the current board using simple characters, with consecutive empty squares compressed into numbers. The second field lists pieces not on the board but available for future placement—relevant for drop-capable games. The third field identifies the style (movement tradition) associated with each player and indicates whose move it is, which allows hybrid games where opponents play by different rules.

The format is compact and, with some practice, human-readable. It is equally straightforward for software to parse.

A complete specification is available here, and you can experiment with the notation using the FEEN Viewer.


Potential applications

Although I created FEEN with chess variants in mind, it could serve other purposes: databases of board positions across different games, position sharing for research or casual play, experimental games with custom or blended rules, and educational tools introducing students to abstract game structures.


Limitations

FEEN is designed for static positions only. It does not verify whether a position is legal, encode move sequences or game history, or handle rule-dependent states like repetition or perpetual check. This is deliberate—FEEN stays below the rules level, merely recording the state of the board at a given moment.


Conclusion

FEEN will 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.

A Ruby implementation is available here, with more language bindings planned over time. I welcome any feedback or suggestions for improvements.