Nomyx: 'Thanks for having participated in this social experiment'

Published on December 18, 2016

…Refreshments will be served. Nomyx Beta 7 has been running for a lonnnnng time: more than 2 years! Nomyx V1.0 is nearing completion. So it is time to archive this version, and draw some lessons learnt. The objective of this beta version was to show that an online, computerized version of a Nomic game is possible. It worked quite well, 200 players registered and 63 rules were proposed in the main game, called “Space Merchants”. Additionally 20 or some private games were created. Here is some feedback on the game mechanics.


The question of the winning is not yet completely solved. Now the “winning” is materialized by a flag that can be activated by a rule. When the flag is on, a message appears permanently on the screen. When someone wins, should we stop the game immediately? Some players want to continue playing even is there is a winning condition, because they invested a lot of time in the game. They don’t want to restart from scratch.

Furthermore, should we authorize group wins? If yes, the game mechanics may change because a coalition of players can form and force a win.

Game is stalling fast

It’s hard to keep players interested for a long time. I know this is also the case with paper games or mail games of Nomic. After some time the players looses interest and the game stales. Basically at this stage you can win the game by proposing an “I win” rule, that will be accepted by other players.

Nomyx V1.0 should solve this problem by proposing faster games, with pre-defined rules. As soon as a player wins, another game can start. The “opening moves” (democracy, winning condition, bank accounts…) can be played fast because they are in the library of rules.

Rules are hard to write

In the Beta version, the players needed to compose their rules in a text field in the web GUI, which was definitely cumbersome. For beginners in Haskell, this was obviously too hard. For advanced Haskellers, this process was also complex because they could not use their usual tools (e.g. vi, emacs…).

Nomyx V1.0 proposes a lot of pre-made rules that can be proposed immediately. Furthermore, this version proposes a command line client that allows to integrate the process with traditional tools (e.g. git), and IDEs.

Error messages

When submitting a rule, some error messages are hard to comprehend. This is a general problem with Haskell, in my opinion. Anyway, a recent simplification of the Nomyx language should remove some troublesome error messages.


The display is not very readable when there are a lot of rules displayed. The Beta 7 was displaying all the rules in one big table. The table grew quickly unreadable.

Nomyx V1.0 GUI will present each rule like a play card (think Magic the Gathering card). This card on one side shows the name of the rule, description, picture and also the input/output generated by the rule. On the reverse side, there will be the code of the rule. Rule cards can be edited, and played when ready.

Game language and engine

Internally, the game is based on a Complex Event Processing engine. This engine allows the rules that are submitted to have effects any time during the rest of the game. For example, take the rule that triggers voting when rules are proposed. This rule registers a callback on a “Rule Proposed” event. The callback will be called as soon as a new rule is proposed. The callback can then trigger some further effects, like displaying fields for a vote on the proposed rule. This CEP engine was quite efficient at managing all the rules effects.

For the communication between rules, a system of variables was used. Using global variables for rule communication is easy to understand for the players, but dangerous. Nomyx V1.0 will also propose rule communication via signals.


Now the rules are discussed in a separate mailing list. Some players pointed out that it would be more practical to be able to discuss them “in game” in a dedicated space.

Bugs and small changes in the rules

During this beta, many rules were submitted. However a lot of them contained bugs! Most of the time the rules were voted before the bug was discovered. Two things could be done to circumvent those bugs:

Rule versioning

In Beta 7, versioning the rules was cumbersome, because the player had to copy-paste the rules between the game and his personal workspace. We need to allow the player to maintain his own set of rules, improve them or share them with others. In order to do that, Nomxy V1.0 will allow to integrate with Git or other version systems. However, once a rule is accepted and in force, it seems impossible to update it without repealing it and proposing a new one.

Uploaded files

In this version, the player could upload Haskell files containing additional function that they could use as part of their rules. This was handy when the rules became big. However, the uploaded files were not subject of voting! So a player uploading a changed file could change the behavior of an active rule, which is of course not fair. All in all, the status of these uploaded files was not very clear. In Nomyx V1.0, the player can still upload files containing “declarations”. These declarations can be shared between several rules. However, when a rule is proposed and voted, the declaration file is copied and frozen. So its state cannot change after the vote has taken place.

Testing rules

Being able to test rules before proposing them is important. The game allows to check that a rules compiles, of course. It also proposed an additional mechanism: private games. You could create a new game for yourself, starting from scratch or cloning the current game. Cloning the current game is useful, because you inherit all the current state and rules. Even the players are copied as “ghosts”. So you will be able to test your rule exactly in the same environment than the original game. That will allow you, first to see if it works, and maybe also to see if it’s wise to propose it from a political point of view…