Add new engine to pico chess

160 views
Skip to first unread message

Ro Bert

unread,
Dec 26, 2025, 2:58:14 AM12/26/25
to PicoChess
I just compiled PlentyChess 7.0.39 on my raspi 4 (Trixie) an it is responding on the command line.

Generated magics in 642ms

UCI thread running

uci

id name PlentyChess 7.0.37

id author Yoshie2000


option name Hash type spin default 16 min 1 max 1048576

option name Threads type spin default 1 min 1 max 4096

option name MultiPV type spin default 1 min 1 max 218

option name MoveOverhead type spin default 100 min 10 max 10000

option name UCI_Chess960 type check default false

option name Ponder type check default false

option name Datagen type check default false

option name Minimal type check default false

option name SyzygyPath type string default 

option name SyzygyProbeLimit type spin default 7 min 0 max 7


Now i want to add it to the picochess zoo. Is there some kind of documentation how to
do that?
christmas greetings
Robert

Johan Sjöblom

unread,
Dec 26, 2025, 6:07:24 AM12/26/25
to PicoChess
Hello Robert.

My small contribution is that I have a simple documentation in the readme file. Check the end of the paragraph here: https://github.com/JohanSjoblom/picochess?tab=readme-ov-file#how-to-add-more-engines

Ro Bert

unread,
Dec 26, 2025, 6:29:48 AM12/26/25
to PicoChess

Hi Johan,

i think that's what i did.

pi@pico:/opt/picochess/engines/aarch64 $ ls -l PlentyChess*

-rwxrwxr-x 1 pi pi 63280152 Dec 26 00:47 PlentyChess

-rw-r--r-- 1 pi pi      105 Dec 26 01:26 PlentyChess.uci

--------------------------------------------------------------

pi@pico:/opt/picochess/engines/aarch64 $ cat PlentyChess.uci 

[DEFAULT]

SyzygyPath = /opt/picochess/tablebases/syzygy

Threads = 1

UCI_Chess960 = false

Ponder = false


------------------------------------------------------------------------------

pi@pico:/opt/picochess/engines/aarch64 $ cat engines.ini

.....

[saruman]

name = Saruman

web = Saruman

small = Saruman

medium = Saruman

large = Saruman

elo = 1425

ccrl = 1467

levels = 0

cores = 1

ponder/brain = n

fischer chess960 support = n

comments: Use Game in X or Fisher time only, moves too fast


[PlentyChess]

name = PlentyChess

web = PlentyChess

small = PlentyChess

medium = PlentyChess

large = PlentyChess

elo = 3789

ccrl = 3642

levels = 0

cores = 1

ponder/brain = n

fischer chess960 support = n


[shashchess]

name = ShashChess 39

web = ShashChess 39

small = shash

medium = shash 39

large = ShashChess

elo = 3642

ccrl = 3642

levels = 20 + auto, 18 1 core, levels Elo@3000 and Elo@3100 2 cores, level Elo@3190 3 cores

ponder/brain = y

fischer chess960 support = y

comments: Specify NNUE network files in the <engine>.uci file. Uses embedded nets as default.

--------------------------------------


Or is it crucial to list the engines in alphabetical order?


Greetz

Robert


Johan Sjöblom

unread,
Dec 26, 2025, 6:40:37 AM12/26/25
to PicoChess
I dont think the order matters... but let me know if it doesnt work...
The picochess will read all engines from engines.ini (and favorites.ini and retro.ini) and make them available in the menu.
If you have problems, have log setting to debug in your picochess.ini and check the log what it complains about if PlentyChess does not start.
Happy gaming!

Ro Bert

unread,
Dec 26, 2025, 6:59:28 AM12/26/25
to PicoChess
Hi Johan,

that's what i get:

2025-12-26 12:53:52.370   DEBUG        pgn - message_consumer: received message from msg_queue: MSG_EXIT_MENU

2025-12-26 12:53:53.122    INFO     engine - __init__: mame parameters=-nothrottle

2025-12-26 12:53:53.122    INFO     engine - _open_local_engine: file /opt/picochess/engines/aarch64/PlentyChess

2025-12-26 12:53:53.123    INFO     engine - _open_local_engine: mfile ['/opt/picochess/engines/aarch64/PlentyChess']

2025-12-26 12:53:53.123    INFO     engine - _open_local_engine: opening engine locally

2025-12-26 12:53:53.740   ERROR base_events - default_exception_handler: Task exception was never retrieved

future: <Task finished name='Task-209' coro=<main.<locals>.MainLoop.process_main_events() done, defined at /opt/picochess/picochess.py:3514> exception=IndexError('pop from empty list')>

Traceback (most recent call last):

  File "/opt/picochess/picochess.py", line 3636, in process_main_events

    await self.engine.startup(event.options, self.state.rating)

  File "/opt/picochess/uci/engine.py", line 1445, in startup

    options = dict(parser[parser.sections().pop()])

                          ~~~~~~~~~~~~~~~~~~~~~^^

IndexError: pop from empty list

2025-12-26 12:53:54.037   DEBUG dispatcher - _stopped_maxtimer: processing delayed (web) tasks: [DGT_DISPLAY_TIME]

2025-12-26 12:53:54.037   DEBUG dispatcher - _stopped_maxtimer: (web) tasks has 1 members

2025-12-26 12:53:54.037   DEBUG dispatcher - _process_message: (web) handle DgtApi: DGT_DISPLAY_TIME

2025-12-26 12:53:54.037   DEBUG      iface - _process_message: (web) handle DgtApi: DGT_DISPLAY_TIME started

2025-12-26 12:53:54.038   DEBUG      iface - _process_message: (web) handle DgtApi: DGT_DISPLAY_TIME ended


-------------------------------------------------------------------------------------

i am not a coder so i can't imagine what' going wrong here. 

After firing up the engine via the webinterface picochess stalls and is not responding anymore.


Robert


Johan Sjöblom

unread,
Dec 26, 2025, 9:03:18 AM12/26/25
to pico...@googlegroups.com
I will take a look...

I guess you already checked, but do you have the executable file in /opt/picochess/engines/aarch64 folder with the exact name PlentyChess. And a file PlentyChess.uci.

And I guess you already tested running it from the command line.

--
You received this message because you are subscribed to the Google Groups "PicoChess" group.
To unsubscribe from this group and stop receiving emails from it, send an email to picochess+...@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/picochess/64df2e17-7fc5-4e9b-97eb-258dde33c1b4n%40googlegroups.com.

Johan Sjöblom

unread,
Dec 26, 2025, 9:24:49 AM12/26/25
to PicoChess
Found the problem. Thanks for the log.

It seems Picochess requires you to have at least one "selection" section in the file. Its not enough to have only [DEFAULT]. So add some choices like I have proposed below, you can name the choices whatever, and picochess will present you with these possibilities in the engine selection menu.

New uci file for you, add at least one [choice]

[DEFAULT]

SyzygyPath = /opt/picochess/tablebases/syzygy
Threads = 1
UCI_Chess960 = false
Ponder = false

[choice 1]
Threads = 1

[choice 2]
Threads = 2

Johan Sjöblom

unread,
Dec 26, 2025, 9:31:21 AM12/26/25
to PicoChess
I wonder if someone in the group would have a good description or document of the uci file content. My post above is not correct. Obviously you have to follow the standard of writing the choices like this, with a "@" separator in each level choice

[choice@01]
Threads = 1

[choice@02]
Threads = 2

The only document I found on this is probably quite old, but might be accurate still:

Ro Bert

unread,
Dec 26, 2025, 3:16:36 PM (14 days ago) 12/26/25
to PicoChess
Hello Johan,

great, that solved it. The @ is necessary.

Thanks
Robert 

Randy Reade

unread,
Dec 27, 2025, 9:21:21 PM (13 days ago) 12/27/25
to pico...@googlegroups.com
Well, we haven't been following that standard for a while as you probably noticed. The @ symbol does seem to make a difference in how the levels are presented and also how it shows after the engine name in the web display. It might also have some relevance in the PGN file but I didn't check. If you don't use the @ symbol then you are presented with the levels as written in the .uci file when selecting an engine via the menu (at least in English). I don't know where the .uci files are parsed but the @ symbol may have more significance.

Perhaps Dirk has some insight?

Randy

Dirk

unread,
Dec 28, 2025, 1:10:13 PM (12 days ago) 12/28/25
to PicoChess
Unfortunately no more insights regarding the @ symbol for the engine levels from my sight.

I just assumed that @ is used for default levels of  uci engines which do have these "standard" levels and the @ levels are  just used by the engine script for generating the uci files for these engines.

Dirk
Reply all
Reply to author
Forward
0 new messages