CODA now has a released page.

Discussion of anything and everything relating to chess playing software and machines.

Moderator: Ras

User avatar
Sylwy
Posts: 5309
Joined: Fri Apr 21, 2006 4:19 pm
Location: IAȘI - the historical capital of MOLDOVA
Full name: Silvian Rucsandescu

CODA now has a released page.

Post by Sylwy »

adamtwiss
Posts: 6
Joined: Mon Jul 06, 2026 9:33 pm
Full name: Adam Twiss

Re: CODA now has a released page.

Post by adamtwiss »

Sylwy beat me to it! I was already planning to send an announcement post here tonight anyway once my membership had been approved.

Announcing Coda — first public release (0.9.0)

Hi all — long-time lurker, first post. Please be nice, I'm new here :-)

Over the past few months I've been building a chess engine called Coda, and it's ready for a first public release. The unusual part: it's developed agentically — every line of code was written by Claude (Anthropic's AI), with me providing direction, testing, and review. I'd written a few hobby engines over the years and wanted to see how far this way of working could go. It started as a fun experiment and turned into a bit of a mission.

It has become reasonably strong. In my own testing (a 20-engine round robin, with all the usual caveats about self-run testing and mixed binary vintages), it currently holds its own against everything I've put it against except Stockfish and Reckless. It also plays on lichess as codabot and coda_bot if you'd like to see live games rather than take my word for it.

The essentials:

- From-scratch NNUE trained on Leela data with a customized Bullet trainer. The input layer includes ~67k explicit threat/x-ray features alongside the usual king-bucketed piece-square inputs — the net sees what pieces attack, not just where they stand.
- The standard modern alpha-beta search toolkit, with SPRT/SPSA testing on OpenBench behind every change.
- Lazy SMP, Syzygy, Polyglot books, pondering; runtime SIMD dispatch so one binary runs well across CPU generations (Linux/Windows/macOS binaries on the releases page).

It's only a few months old, so there will be bugs and rough edges — feedback, testing, and bug reports are very welcome. Coda owes a lot to this community: OpenBench, Bullet, the Leela project's data, and the many open engines whose published ideas are an education for anyone building one. Thank you for that.

Source (GPL-3.0-or-later) and pre-built binaries: https://github.com/adamtwiss/coda

Happy to answer any questions, or take any bug reports/issues/feedback!
Dicaste
Posts: 156
Joined: Mon Apr 16, 2012 7:23 pm
Location: Istanbul, TURKEY

Re: CODA now has a released page.

Post by Dicaste »

It looks amazing. Strong and fast. I love it.

[pgn]
[Event "2, Rapid 5.0min+30.0sec"]
[Site "?"]
[Date "2026.07.08"]
[Round "1.1"]
[White "Eonego 0.1.0"]
[Black "Coda 0.9.0"]
[Result "1/2-1/2"]
[Annotator "0.24;0.55"]
[ECO "C67"]
[WhiteFideId "-1"]
[BlackFideId "-1"]
[PlyCount "299"]
[GameId "2329738581471265"]
[EventDate "2026.07.08"]
[EventType "tourn"]
[SourceTitle "Fritz Engine Tournament"]
[TimeControl "300+30"]

{13th Gen Intel(R) Core(TM) i9-13980HX 2419 MHz W=55.8 plies; 9.813,00 kN/s; 280.441.616,00 TBAs B=50.1 plies; 12.890,00 kN/s} 1. e4 {[%eval 24,33] [%emt 0:02:12.06]} e5 {[%eval 55,34] [%emt 0:00:12.61]} 2. Nf3 {[%eval 31,31] [%emt 0:00:28.78]} Nc6 {[%eval 62,35] [%emt 0:00:21.44]} 3. Bb5 {[%eval 31,31] [%emt 0:01:31.64]} Nf6 {[%eval 55,37] [%emt 0:00:22.45]} 4. O-O {[%eval 30,34] [%emt 0:00:33.55]} Nxe4 {[%eval 51,36] [%emt 0:00:14.06]} 5. Re1 {[%eval 31,33] [%emt 0:01:05.66]} Nd6 {[%eval 54,38] [%emt 0:00:12.31]} 6. Nxe5 {[%eval 23,34] [%emt 0:00:32.79]} Be7 {[%eval 44,40] [%emt 0:00:34.50] (Nxe5)} 7. Bf1 {[%eval 17,36] [%emt 0:00:41.95]} Nxe5 {[%eval 44,34] [%emt 0:00:10.97]} 8. Rxe5 {[%eval 8,34] [%emt 0:00:19.42]} O-O {[%eval 39,39] [%emt 0:00:27.59]} 9. d4 {[%eval 14,33] [%emt 0:00:19.20]} Bf6 {[%eval 42,40] [%emt 0:00:33.07]} 10. Re1 {[%eval 16,33] [%emt 0:00:53.66]} Re8 {[%eval 41,31] [%emt 0:00:18.19]} 11. Bf4 {[%eval 12,32] [%emt 0:00:34.19] (c3)} Rxe1 {[%eval 27,36] [%emt 0:00:16.74]} 12. Qxe1 {[%eval 0,33] [%emt 0:00:25.11]} Ne8 {[%eval 22,37] [%emt 0:01:26.77]} 13. c3 {[%eval 0,34] [%emt 0:00:42.99] (Qe3)} d5 {[%eval 22,35] [%emt 0:00:50.81]} 14. Nd2 {[%eval 8,28] [%emt 0:00:39.66]} Bf5 {[%eval 26,33] [%emt 0:00:32.67]} 15. Qe3 {[%eval 10,29] [%emt 0:00:35.63] (Nb3)} Nd6 {[%eval 8,34] [%emt 0:00:49.42]} 16. Nf3 {[%eval 8,28] [%emt 0:00:23.03] (Re1)} Qd7 {[%eval 10,34] [%emt 0:00:44.98] (h6)} 17. Ne5 {[%eval 13,27] [%emt 0:00:23.41]} Qe6 {[%eval 7,37] [%emt 0:00:28.59] (Qa4)} 18. Re1 {[%eval 5,27] [%emt 0:00:25.22] (a4)} Re8 {[%eval 3,32] [%emt 0:00:16.22]} 19. Qc1 {[%eval 1,30] [%emt 0:00:40.84] (Qf3)} Qc8 {[%eval 0,36] [%emt 0:00:29.55]} 20. Nf3 {[%eval 0,29] [%emt 0:00:27.63] (Nd3)} Rxe1 {[%eval 0,39] [%emt 0:02:35]} 21. Qxe1 {[%eval 12,28] [%emt 0:00:31.27]} Ne4 {[%eval 0,39] [%emt 0:00:13.53] (Ne8)} 22. h3 {[%eval 27,24] [%emt 0:00:25.64] (Qe3)} h6 {[%eval 0,36] [%emt 0:00:18.35] (Qd7)} 23. Qe3 {[%eval 14,26] [%emt 0:00:38.39]} Qd7 {[%eval 0,37] [%emt 0:00:31.02] (c6)} 24. Bd3 {[%eval 17,25] [%emt 0:00:35.25] (Ne5)} c6 {[%eval 0,40] [%emt 0:00:36.97]} 25. Qe2 {[%eval 9,24] [%emt 0:00:19.19] (c4)} Qe6 {[%eval -2,35] [%emt 0:00:40.25] (Be7)} 26. Ne1 {[%eval 8,27] [%emt 0:00:33.88] (g4)} Bh4 {[%eval -6,35] [%emt 0:00:32.88] (Qc8)} 27. Be3 {[%eval 0,34] [%emt 0:00:24.40] (g3)} Be7 {[%eval -14,35] [%emt 0:00:42.33]} 28. Bf4 {[%eval 0,38] [%emt 0:00:38.04]} Bh4 {[%eval 0,40] [%emt 0:00:29.09]} 29. f3 {[%eval 8,31] [%emt 0:00:20.81] (Be3)} Nf2 {[%eval -37,43] [%emt 0:00:32.27] (Nc5)} 30. Qxe6 {[%eval -8,32] [%emt 0:00:38.64]} Bxe6 {[%eval -33,43] [%emt 0:00:20.46]} 31. Kf1 {[%eval -15,33] [%emt 0:00:19.94]} Nxd3 {[%eval -33,46] [%emt 0:00:27.16]} 32. Nxd3 {[%eval -15,29] [%emt 0:00:15.86]} Bf5 {[%eval -33,45] [%emt 0:00:35.93]} 33. Ne1 {[%eval -9,29] [%emt 0:00:33.92] (Ke2)} Bb1 {[%eval -51,41] [%emt 0:01:32.98]} 34. g3 {[%eval -16,31] [%emt 0:00:19.58] (a4)} Bd8 {[%eval -60,40] [%emt 0:01:08.06]} 35. a3 {[%eval -16,37] [%emt 0:00:47.25] (a4)} a5 {[%eval -78,40] [%emt 0:00:22.59]} 36. b4 {[%eval -16,38] [%emt 0:00:40.44] (Bd6)} a4 {[%eval -90,43] [%emt 0:00:28.16] (h5)} 37. Ng2 {[%eval -7,33] [%emt 0:00:36.43] (Bd6)} h5 {[%eval -82,40] [%emt 0:00:55.19] (Bf5)} 38. h4 {[%eval 0,39] [%emt 0:00:23.77] (Bd6)} Bd3+ {[%eval -38,41] [%emt 0:00:43.22] (Bc2)} 39. Ke1 {[%eval 0,44] [%emt 0:00:20.41]} g6 {[%eval -24,43] [%emt 0:00:20.66] (Ba6)} 40. Kd2 {[%eval 0,43] [%emt 0:00:22.53] (Ne3)} Bf1 {[%eval -23,42] [%emt 0:00:16.09] (Bb1)} 41. Ne3 {[%eval 0,51] [%emt 0:00:26.89]} Bc4 {[%eval -21,43] [%emt 0:00:26.72]} 42. Ke1 {[%eval 0,49] [%emt 0:00:44.45] (Bd6)} Bb5 {[%eval -21,42] [%emt 0:00:23.83] (Bd3)} 43. Ng2 {[%eval 0,46] [%emt 0:00:38.44] (Kd2)} Bd3 {[%eval -19,46] [%emt 0:00:52.44]} 44. Ne3 {[%eval 0,47] [%emt 0:00:25.36]} Bb5 {[%eval -16,41] [%emt 0:00:40.86] (Kf8)} 45. Nc2 {[%eval 0,45] [%emt 0:00:20.80] (Ng2)} f6 {[%eval -14,50] [%emt 0:00:37.25]} 46. Bb8 {[%eval 0,45] [%emt 0:00:27.45]} Kf7 {[%eval -14,48] [%emt 0:00:14.07] (g5)} 47. g4 {[%eval 0,51] [%emt 0:00:41.64] (Ne3)} hxg4 {[%eval -30,49] [%emt 0:00:40.94]} 48. fxg4 {[%eval 0,50] [%emt 0:00:16.80]} g5 {[%eval -30,49] [%emt 0:00:25.57]} 49. h5 {[%eval 0,54] [%emt 0:00:36.97]} Bd3 {[%eval -30,52] [%emt 0:00:38.34]} 50. Ne3 {[%eval 0,55] [%emt 0:00:39.64]} Be7 {[%eval -30,52] [%emt 0:00:34.04] (Be4)} 51. Bg3 {[%eval 0,50] [%emt 0:00:26.52] (Kf2)} Ke6 {[%eval -29,47] [%emt 0:00:23.13]} 52. Nd1 {[%eval 0,45] [%emt 0:00:37.24] (Kf2)} f5 {[%eval -29,51] [%emt 0:00:27.07] (Bb1)} 53. Be5 {[%eval 0,44] [%emt 0:00:34.03]} fxg4 {[%eval -30,48] [%emt 0:00:36.78]} 54. Nb2 {[%eval 0,46] [%emt 0:00:18.61]} Bc2 {[%eval -29,50] [%emt 0:00:19.67]} 55. Kd2 {[%eval 0,46] [%emt 0:00:37.24]} Bh7 {[%eval -28,42] [%emt 0:00:30.39] (Bb1)} 56. Nxa4 {[%eval -23,46] [%emt 0:00:26.39]} b5 {[%eval -18,43] [%emt 0:00:16.89] (g3)} 57. Nc5+ {[%eval 0,50] [%emt 0:00:24.81]} Bxc5 {[%eval -7,53] [%emt 0:00:19.56]} 58. bxc5 {[%eval 0,58] [%emt 0:00:30.25]} Kf5 {[%eval 0,57] [%emt 0:00:37.72] (Bg8)} 59. Ke2 {[%eval 0,53] [%emt 0:00:15.83] (Ke3)} Bg8 {[%eval 0,56] [%emt 0:00:26.05]} 60. Ke3 {[%eval 0,56] [%emt 0:00:25.70]} Bh7 {[%eval 0,55] [%emt 0:00:47.36]} 61. Bg3 {[%eval 0,59] [%emt 0:00:23.16]} Kf6 {[%eval 0,58] [%emt 0:00:30.45] (Ke6)} 62. Be5+ {[%eval 0,59] [%emt 0:00:25.90]} Kf7 {[%eval 0,57] [%emt 0:00:26.16] (Kf5)} 63. Ke2 {[%eval 0,59] [%emt 0:00:49.23] (Bh8)} Be4 {[%eval 0,58] [%emt 0:00:25.09]} 64. Kf2 {[%eval 0,59] [%emt 0:00:41.63]} g3+ {[%eval 0,59] [%emt 0:00:22.22] (Bc2)} 65. Kxg3 {[%eval 0,57] [%emt 0:00:16.86]} Bf5 {[%eval 0,56] [%emt 0:00:11.74]} 66. h6 {[%eval 0,57] [%emt 0:00:17.65] (Kf3)} Kg6 {[%eval 0,54] [%emt 0:00:18.84] (Bc2)} 67. Bg7 {[%eval 0,59] [%emt 0:00:22.60]} Bc2 {[%eval 0,56] [%emt 0:01:00.23] (Kh5)} 68. Bf8 {[%eval 0,63] [%emt 0:00:46.58]} Be4 {[%eval 0,55] [%emt 0:00:46.45] (Kf7)} 69. Be7 {[%eval 0,62] [%emt 0:00:43.66]} Kh5 {[%eval 0,54] [%emt 0:00:39.08]} 70. Bf8 {[%eval 0,62] [%emt 0:00:38.03] (Bf6)} Bd3 {[%eval 0,55] [%emt 0:00:20.24]} 71. Kf3 {[%eval 0,60] [%emt 0:00:18.24]} Bf5 {[%eval 0,53] [%emt 0:00:20.92]} 72. Ke2 {[%eval 0,63] [%emt 0:00:39.63] (Ke3)} Bg6 {[%eval 0,52] [%emt 0:00:43.23]} 73. Bg7 {[%eval 0,55] [%emt 0:00:15.86] (Kf2)} Bf5 {[%eval 0,53] [%emt 0:00:18.47] (Be4)} 74. Bf8 {[%eval 0,60] [%emt 0:00:21.10] (Kf2)} Kh4 {[%eval 0,52] [%emt 0:00:42.77]} 75. Bg7 {[%eval 0,56] [%emt 0:00:44.83] (Kf2)} Kh5 {[%eval 0,48] [%emt 0:00:36.77]} 76. Kd1 {[%eval 0,62] [%emt 0:00:25.68] (Ke3)} Kg4 {[%eval 0,56] [%emt 0:00:24.66] (Be4)} 77. Be5 {[%eval 0,61] [%emt 0:00:21.41]} Kh4 {[%eval 0,57] [%emt 0:00:35.86]} 78. Bd6 {[%eval 0,61] [%emt 0:00:38.73] (Ke1)} Bg4+ {[%eval 0,55] [%emt 0:00:29.69] (Kh5)} 79. Kc1 {[%eval 0,61] [%emt 0:00:40.83] (Kd2)} Bf5 {[%eval 0,53] [%emt 0:00:05.89]} 80. Be5 {[%eval 0,61] [%emt 0:00:36.43] (Kd2)} Kh5 {[%eval 0,58] [%emt 0:00:20.14] (Kg4)} 81. Bg7 {[%eval 0,63] [%emt 0:00:33.27]} Kg6 {[%eval 0,54] [%emt 0:00:19.91]} 82. Bf8 {[%eval 0,66] [%emt 0:00:32.43]} Bd3 {[%eval 0,52] [%emt 0:00:53.80] (Kh5)} 83. Kd1 {[%eval 0,61] [%emt 0:00:31.62] (Kd2)} Bf5 {[%eval 0,54] [%emt 0:00:17.88]} 84. Bg7 {[%eval 0,62] [%emt 0:00:15.80] (Kc1)} Bg4+ {[%eval 0,59] [%emt 0:00:48.27] (Kh5)} 85. Kc1 {[%eval 0,66] [%emt 0:00:36.42] (Kd2)} Bf3 {[%eval 0,61] [%emt 0:00:39.99] (Bf5)} 86. Bf8 {[%eval 0,64] [%emt 0:00:34.03]} Be4 {[%eval 0,53] [%emt 0:00:21.34]} 87. Bg7 {[%eval 0,65] [%emt 0:00:32.42] (Kd2)} Kh5 {[%eval 0,57] [%emt 0:00:21.71] (Bd3)} 88. Kd1 {[%eval 0,64] [%emt 0:00:31.23] (Kd2)} Kg6 {[%eval 0,53] [%emt 0:00:19.24] (Bf5)} 89. Kc1 {[%eval 0,67] [%emt 0:00:29.82] (Kd2)} Bd3 {[%eval 0,54] [%emt 0:00:24.13]} 90. Kd1 {[%eval 0,58] [%emt 0:00:30.84]} Bc4 {[%eval 0,59] [%emt 0:00:34.35] (Bb1)} 91. Bf8 {[%eval 0,63] [%emt 0:00:16.83] (Kc2)} Bb3+ {[%eval 0,57] [%emt 0:00:36.19] (Kh7)} 92. Kd2 {[%eval 0,66] [%emt 0:00:15.32] (Ke1)} Ba4 {[%eval 0,56] [%emt 0:00:37.83] (Bc4)} 93. Bg7 {[%eval 0,56] [%emt 0:00:18.30] (Kc1)} Bb3 {[%eval 0,57] [%emt 0:00:42.30] (Kh7)} 94. Bf8 {[%eval 0,67] [%emt 0:00:23.36] (Kd3)} Kh7 {[%eval 0,59] [%emt 0:00:26.36]} 95. Kc1 {[%eval 0,60] [%emt 0:00:28.96] (Ke3)} Ba4 {[%eval 0,57] [%emt 0:00:25.66] (Kg6)} 96. Bg7 {[%eval 0,63] [%emt 0:00:35.38] (Kd2)} Kg6 {[%eval 0,59] [%emt 0:00:19.88] (Bb3)} 97. Bf8 {[%eval 0,65] [%emt 0:00:15.97]} Bb3 {[%eval 0,63] [%emt 0:00:29.21]} 98. Bg7 {[%eval 0,69] [%emt 0:00:45.94] (Kd2)} g4 {[%eval 0,56] [%emt 0:00:45.52] (Bc4)} 99. Kd2 {[%eval 8,54] [%emt 0:00:18.61]} Ba4 {[%eval 0,56] [%emt 0:00:23.08] (g3)} 100. Kd3 {[%eval 0,56] [%emt 0:00:51.22] (Ke3)} Bd1 {[%eval 0,53] [%emt 0:00:21.60]} 101. Bf8 {[%eval 0,56] [%emt 0:00:22.16] (Ke3)} Kh7 {[%eval 0,53] [%emt 0:00:18.59] (Bb3)} 102. Bg7 {[%eval 0,60] [%emt 0:00:56.80] (Ke3)} g3 {[%eval 0,54] [%emt 0:00:44.42] (Kg6)} 103. Ke3 {[%eval 0,63] [%emt 0:00:26.03]} Kg6 {[%eval 0,53] [%emt 0:00:44.14] (g2)} 104. Be5 {[%eval 8,55] [%emt 0:00:16.20]} g2 {[%eval 0,53] [%emt 0:00:30.36] (Kxh6)} 105. Kf2 {[%eval 8,59] [%emt 0:00:30.34] (Bh2)} Kxh6 {[%eval 0,53] [%emt 0:00:35.94] (g1R)} 106. Kxg2 {[%eval 8,57] [%emt 0:00:27.22]} Kh5 {[%eval 0,51] [%emt 0:00:34.47] (Kg6)} 107. Kf2 {[%eval 0,52] [%emt 0:00:20.13] (Kg3)} Kg5 {[%eval 0,48] [%emt 0:00:32.64]} 108. Bg3 {[%eval 0,56] [%emt 0:00:19.83] (Bd6)} Ba4 {[%eval 0,50] [%emt 0:00:16.94]} 109. Bh2 {[%eval 0,61] [%emt 0:00:42.57] (Bc7)} Bd1 {[%eval 0,52] [%emt 0:00:37.23] (Kf5)} 110. Bg1 {[%eval 0,56] [%emt 0:00:17.44] (Bd6)} Kf5 {[%eval 0,53] [%emt 0:00:34] (Bg4)} 111. Ke3 {[%eval 0,62] [%emt 0:00:51.22]} Kg4 {[%eval 0,52] [%emt 0:00:15.52] (Bb3)} 112. c4 {[%eval 0,58] [%emt 0:00:18.59] (Kd2)} bxc4 {[%eval 0,58] [%emt 0:00:28.23]} 113. Bf2 {[%eval 0,65] [%emt 0:00:25.96]} Bc2 {[%eval 0,56] [%emt 0:00:20.64] (c3)} 114. Kd2 {[%eval 0,64] [%emt 0:00:22.16]} Ba4 {[%eval 0,54] [%emt 0:00:23.52]} 115. Be3 {[%eval 0,70] [%emt 0:00:18.47] (Kc3)} Kg3 {[%eval 0,58] [%emt 0:00:46.89] (Bb3)} 116. Kc3 {[%eval 0,74] [%emt 0:00:56.45] (Bg5)} Bd1 {[%eval 0,56] [%emt 0:00:20.16]} 117. Bg1 {[%eval 0,73] [%emt 0:00:46.03] (Bg5)} Kf3 {[%eval 0,57] [%emt 0:00:22.06] (Bb3)} 118. Bh2 {[%eval 0,71] [%emt 0:00:26.66]} Ba4 {[%eval 0,51] [%emt 0:00:24.72] (Ke2)} 119. Be5 {[%eval 0,76] [%emt 0:00:40.82] (Bg1)} Bb5 {[%eval 0,52] [%emt 0:00:49.66]} 120. Bd6 {[%eval 0,75] [%emt 0:00:28.36] (Bc7)} Ba4 {[%eval 0,53] [%emt 0:00:40.45]} 121. Bh2 {[%eval 0,78] [%emt 0:00:38.63] (Bc7)} Kf2 {[%eval 0,54] [%emt 0:00:26.66] (Bd1)} 122. Bf4 {[%eval 0,73] [%emt 0:00:33.88] (Bc7)} Kf3 {[%eval 0,57] [%emt 0:00:37.23] (Bd1)} 123. Bh2 {[%eval 0,80] [%emt 0:00:19.74] (Bd2)} Ke2 {[%eval 0,53] [%emt 0:00:17.06]} 124. Be5 {[%eval 0,77] [%emt 0:00:36.44] (Bc7)} Ke3 {[%eval 0,52] [%emt 0:00:40] (Bb3)} 125. Bh2 {[%eval 0,80] [%emt 0:00:33.63] (Bb8)} Bb5 {[%eval 0,58] [%emt 0:00:23.75] (Bd1)} 126. Bg1+ {[%eval 0,77] [%emt 0:00:32.43] (Be5)} Ke4 {[%eval 0,59] [%emt 0:00:22.90] (Ke2)} 127. Bh2 {[%eval 0,80] [%emt 0:00:31.24] (Kc2)} Kf3 {[%eval 0,60] [%emt 0:00:38.80] (Ke3)} 128. Bg1 {[%eval 0,79] [%emt 0:00:18.95] (Bb8)} Kg2 {[%eval 0,52] [%emt 0:00:37.69] (Kg3)} 129. Be3 {[%eval 0,83] [%emt 0:00:33.42]} Kf3 {[%eval 0,49] [%emt 0:00:15.77]} 130. Bc1 {[%eval 0,81] [%emt 0:00:23.52] (Bg1)} Ke4 {[%eval 0,56] [%emt 0:00:16.42]} 131. Bb2 {[%eval 0,77] [%emt 0:00:36.45] (Bg5)} Ba6 {[%eval 0,58] [%emt 0:00:19.09] (Ba4)} 132. a4 {[%eval 0,73] [%emt 0:00:40.38] (Ba1)} Bc8 {[%eval 0,53] [%emt 0:00:22.14]} 133. Bc1 {[%eval 0,72] [%emt 0:00:18.51] (Ba1)} Bf5 {[%eval 0,52] [%emt 0:00:16.44]} 134. Bd2 {[%eval 0,71] [%emt 0:00:34.45] (Bb2)} Bc8 {[%eval 0,49] [%emt 0:00:17.41]} 135. Bc1 {[%eval 0,74] [%emt 0:00:18.17]} Bb7 {[%eval 0,53] [%emt 0:01:07.59]} 136. Bb2 {[%eval 0,74] [%emt 0:00:15.42] (Bg5)} Ke3 {[%eval 0,56] [%emt 0:00:19.06]} 137. Bc1+ {[%eval 0,72] [%emt 0:00:20.83] (Kb4)} Ke2 {[%eval 0,57] [%emt 0:00:36.41] (Ke4)} 138. a5 {[%eval 0,76] [%emt 0:00:49.31]} Ba6 {[%eval 0,63] [%emt 0:00:20.82] (Bc8)} 139. Bd2 {[%eval 0,81] [%emt 0:00:30.86] (Bg5)} Bb5 {[%eval 0,64] [%emt 0:00:21.44] (Bb7)} 140. Bc1 {[%eval 0,84] [%emt 0:00:38.83] (Bh6)} Ba6 {[%eval 0,63] [%emt 0:00:34.07]} 141. Bd2 {[%eval 0,83] [%emt 0:00:17.36] (Bg5)} Kd1 {[%eval 0,61] [%emt 0:00:16.20]} 142. Bg5 {[%eval 0,89] [%emt 0:00:17.53] (Bh6)} Bb5 {[%eval 0,64] [%emt 0:00:21.02] (Ke2)} 143. Bd2 {[%eval 0,87] [%emt 0:00:37.46] (Be7)} Ba6 {[%eval 0,64] [%emt 0:01:08.11] (Ke2)} 144. Be3 {[%eval 0,89] [%emt 0:00:35.91] (Bg5)} Bb5 {[%eval 0,60] [%emt 0:00:16.14]} 145. Bd2 {[%eval 0,87] [%emt 0:00:40.03] (Bg5)} Ke2 {[%eval 0,61] [%emt 0:00:57.93]} 146. Bc1 {[%eval 0,94] [%emt 0:00:36.05] (Bg5)} Kf3 {[%eval 0,61] [%emt 0:00:15.80]} 147. Ba3 {[%eval 0,83] [%emt 0:00:33.63] (Bg5)} Ba6 {[%eval 0,61] [%emt 0:00:28.36] (Ke4)} 148. Bc1 {[%eval 0,83] [%emt 0:00:32.02]} Bc8 {[%eval 0,59] [%emt 0:00:40.92]} 149. Bd2 {[%eval 0,79] [%emt 0:00:31.22] (Bg5)} Ke4 {[%eval 0,59] [%emt 0:00:47.36]} 150. Bg5 {[%eval 0,80] [%emt 0:00:21.41] (Bc1) adjud.} 1/2-1/2


[/pgn]
Arzam
Posts: 9
Joined: Sat Jun 13, 2026 6:29 am
Full name: Arzam Sabd

Re: CODA now has a released page.

Post by Arzam »

adamtwiss wrote: Wed Jul 08, 2026 9:36 pm Sylwy beat me to it! I was already planning to send an announcement post here tonight anyway once my membership had been approved.

Announcing Coda — first public release (0.9.0)

Hi all — long-time lurker, first post. Please be nice, I'm new here :-)

Over the past few months I've been building a chess engine called Coda, and it's ready for a first public release. The unusual part: it's developed agentically — every line of code was written by Claude (Anthropic's AI), with me providing direction, testing, and review. I'd written a few hobby engines over the years and wanted to see how far this way of working could go. It started as a fun experiment and turned into a bit of a mission.

It has become reasonably strong. In my own testing (a 20-engine round robin, with all the usual caveats about self-run testing and mixed binary vintages), it currently holds its own against everything I've put it against except Stockfish and Reckless. It also plays on lichess as codabot and coda_bot if you'd like to see live games rather than take my word for it.

The essentials:

- From-scratch NNUE trained on Leela data with a customized Bullet trainer. The input layer includes ~67k explicit threat/x-ray features alongside the usual king-bucketed piece-square inputs — the net sees what pieces attack, not just where they stand.
- The standard modern alpha-beta search toolkit, with SPRT/SPSA testing on OpenBench behind every change.
- Lazy SMP, Syzygy, Polyglot books, pondering; runtime SIMD dispatch so one binary runs well across CPU generations (Linux/Windows/macOS binaries on the releases page).

It's only a few months old, so there will be bugs and rough edges — feedback, testing, and bug reports are very welcome. Coda owes a lot to this community: OpenBench, Bullet, the Leela project's data, and the many open engines whose published ideas are an education for anyone building one. Thank you for that.

Source (GPL-3.0-or-later) and pre-built binaries: https://github.com/adamtwiss/coda

Happy to answer any questions, or take any bug reports/issues/feedback!
Hello,

Thank you for your work on the Coda chess engine. I run a small Android chess engine tournament and have really enjoyed testing different engines.

If possible, I hope you might consider releasing an Android build and improving Android compatibility in the future, so more users can experience Coda on Android devices.

I completely understand if this isn't possible, but I wanted to express my interest. Thank you again, and I wish you all the best with the future development of Coda!
User avatar
Sylwy
Posts: 5309
Joined: Fri Apr 21, 2006 4:19 pm
Location: IAȘI - the historical capital of MOLDOVA
Full name: Silvian Rucsandescu

Re: CODA now has a released page.

Post by Sylwy »

adamtwiss wrote: Wed Jul 08, 2026 9:36 pm Sylwy beat me to it! I was already planning to send an announcement post here tonight anyway once my membership had been approved.

Announcing Coda — first public release (0.9.0)

Hi all — long-time lurker, first post. Please be nice, I'm new here :-)

Over the past few months I've been building a chess engine called Coda, and it's ready for a first public release. The unusual part: it's developed agentically — every line of code was written by Claude (Anthropic's AI), with me providing direction, testing, and review. I'd written a few hobby engines over the years and wanted to see how far this way of working could go. It started as a fun experiment and turned into a bit of a mission.

It has become reasonably strong. In my own testing (a 20-engine round robin, with all the usual caveats about self-run testing and mixed binary vintages), it currently holds its own against everything I've put it against except Stockfish and Reckless. It also plays on lichess as codabot and coda_bot if you'd like to see live games rather than take my word for it.

The essentials:

- From-scratch NNUE trained on Leela data with a customized Bullet trainer. The input layer includes ~67k explicit threat/x-ray features alongside the usual king-bucketed piece-square inputs — the net sees what pieces attack, not just where they stand.
- The standard modern alpha-beta search toolkit, with SPRT/SPSA testing on OpenBench behind every change.
- Lazy SMP, Syzygy, Polyglot books, pondering; runtime SIMD dispatch so one binary runs well across CPU generations (Linux/Windows/macOS binaries on the releases page).

It's only a few months old, so there will be bugs and rough edges — feedback, testing, and bug reports are very welcome. Coda owes a lot to this community: OpenBench, Bullet, the Leela project's data, and the many open engines whose published ideas are an education for anyone building one. Thank you for that.

Source (GPL-3.0-or-later) and pre-built binaries: https://github.com/adamtwiss/coda

Happy to answer any questions, or take any bug reports/issues/feedback!
CODA has been competing in my tournaments for a long time. A superb & powerful chess engine. Congratulations! The ancestor (GoChess) is the most powerful engine written in Go.

Image

Image

Image
adamtwiss
Posts: 6
Joined: Mon Jul 06, 2026 9:33 pm
Full name: Adam Twiss

Re: CODA now has a released page.

Post by adamtwiss »

Arzam wrote: Thu Jul 09, 2026 8:04 am Hello,

Thank you for your work on the Coda chess engine. I run a small Android chess engine tournament and have really enjoyed testing different engines.

If possible, I hope you might consider releasing an Android build and improving Android compatibility in the future, so more users can experience Coda on Android devices.

I completely understand if this isn't possible, but I wanted to express my interest. Thank you again, and I wish you all the best with the future development of Coda!
Hi Arzam - thanks for the suggestion. Happy to try and get you one, but I don't have the means to test.
Have you tried the existing linux-aarch64 binary? I am curious as to whether or not that will work out of the box on an ARM/Android? It's a static musl binary — fully self-contained, no dynamic libc — so it doesn't depend on Android's bionic libc and can execute directly on the Linux kernel under Termux. Static musl aarch64 ELFs run in Termux fairly often. If it works, we're done today. If that doesn't work, I can change the github actions to build an Android binary too.
Arzam
Posts: 9
Joined: Sat Jun 13, 2026 6:29 am
Full name: Arzam Sabd

Re: CODA now has a released page.

Post by Arzam »

adamtwiss wrote: Thu Jul 09, 2026 8:56 am
Arzam wrote: Thu Jul 09, 2026 8:04 am Hello,

Thank you for your work on the Coda chess engine. I run a small Android chess engine tournament and have really enjoyed testing different engines.

If possible, I hope you might consider releasing an Android build and improving Android compatibility in the future, so more users can experience Coda on Android devices.

I completely understand if this isn't possible, but I wanted to express my interest. Thank you again, and I wish you all the best with the future development of Coda!
Hi Arzam - thanks for the suggestion. Happy to try and get you one, but I don't have the means to test.
Have you tried the existing linux-aarch64 binary? I am curious as to whether or not that will work out of the box on an ARM/Android? It's a static musl binary — fully self-contained, no dynamic libc — so it doesn't depend on Android's bionic libc and can execute directly on the Linux kernel under Termux. Static musl aarch64 ELFs run in Termux fairly often. If it works, we're done today. If that doesn't work, I can change the github actions to build an Android binary too.
Hi Adam, thanks for the reply! I will test the Linux aarch64 binary right now and let you know if it works on Android.

Arzam.
Arzam
Posts: 9
Joined: Sat Jun 13, 2026 6:29 am
Full name: Arzam Sabd

Re: CODA now has a released page.

Post by Arzam »

adamtwiss wrote: Thu Jul 09, 2026 8:56 am
Arzam wrote: Thu Jul 09, 2026 8:04 am Hello,

Thank you for your work on the Coda chess engine. I run a small Android chess engine tournament and have really enjoyed testing different engines.

If possible, I hope you might consider releasing an Android build and improving Android compatibility in the future, so more users can experience Coda on Android devices.

I completely understand if this isn't possible, but I wanted to express my interest. Thank you again, and I wish you all the best with the future development of Coda!
Hi Arzam - thanks for the suggestion. Happy to try and get you one, but I don't have the means to test.
Have you tried the existing linux-aarch64 binary? I am curious as to whether or not that will work out of the box on an ARM/Android? It's a static musl binary — fully self-contained, no dynamic libc — so it doesn't depend on Android's bionic libc and can execute directly on the Linux kernel under Termux. Static musl aarch64 ELFs run in Termux fairly often. If it works, we're done today. If that doesn't work, I can change the github actions to build an Android binary too.
Hi Adam,

Thanks for the technical breakdown! I can confirm that the static musl linux-aarch64 binary of Coda works correctly on my Android device.

I tested it both in Analysis mode on DroidFish and ran a 4-game tournament in the ChessEngine Tournament GUI. It executed smoothly across both apps without any crashes or errors.

The only thing I noticed is that the engine's NPS (nodes per second) is quite low compared to most native Android engines I typically run. I thought it might be worth reporting in case it's an optimization quirk related to the static compilation or library handling on Android.

Thanks again for the great work on Coda!

Arzam.
adamtwiss
Posts: 6
Joined: Mon Jul 06, 2026 9:33 pm
Full name: Adam Twiss

Re: CODA now has a released page.

Post by adamtwiss »

Arzam wrote: Thu Jul 09, 2026 10:30 am Thanks for the technical breakdown! I can confirm that the static musl linux-aarch64 binary of Coda works correctly on my Android device.

I tested it both in Analysis mode on DroidFish and ran a 4-game tournament in the ChessEngine Tournament GUI. It executed smoothly across both apps without any crashes or errors.

The only thing I noticed is that the engine's NPS (nodes per second) is quite low compared to most native Android engines I typically run. I thought it might be worth reporting in case it's an optimization quirk related to the static compilation or library handling on Android.

Thanks again for the great work on Coda!

Arzam.
It's great that it worked. Over the weekend, I'll check the status of the ARM NEON SIMD stuff. I realy want ARM to be a first class architecture for Coda. There's two things that might be causing the lower NPS on ARM:
* Coda has pretty extensive threat-based feature inputs (richer than most other engines) that can hammer memory bandwidth on some platforms. It's quite possible on phone hardware (fast chips, but typically slower memory and smaller cache sizes) that this may make it worse. Can you let me know what hardware you're testing on.
* The ARM NEON SIMD support can sometimes lag slightly behind the x86 support, and has had slightly less optimisation work. Over the weekend I'll do some profiling here when I have access to my ARM-based Macbook.
Arzam
Posts: 9
Joined: Sat Jun 13, 2026 6:29 am
Full name: Arzam Sabd

Re: CODA now has a released page.

Post by Arzam »

adamtwiss wrote: Thu Jul 09, 2026 3:44 pm
Arzam wrote: Thu Jul 09, 2026 10:30 am Thanks for the technical breakdown! I can confirm that the static musl linux-aarch64 binary of Coda works correctly on my Android device.

I tested it both in Analysis mode on DroidFish and ran a 4-game tournament in the ChessEngine Tournament GUI. It executed smoothly across both apps without any crashes or errors.

The only thing I noticed is that the engine's NPS (nodes per second) is quite low compared to most native Android engines I typically run. I thought it might be worth reporting in case it's an optimization quirk related to the static compilation or library handling on Android.

Thanks again for the great work on Coda!

Arzam.
It's great that it worked. Over the weekend, I'll check the status of the ARM NEON SIMD stuff. I realy want ARM to be a first class architecture for Coda. There's two things that might be causing the lower NPS on ARM:
* Coda has pretty extensive threat-based feature inputs (richer than most other engines) that can hammer memory bandwidth on some platforms. It's quite possible on phone hardware (fast chips, but typically slower memory and smaller cache sizes) that this may make it worse. Can you let me know what hardware you're testing on.
* The ARM NEON SIMD support can sometimes lag slightly behind the x86 support, and has had slightly less optimisation work. Over the weekend I'll do some profiling here when I have access to my ARM-based Macbook.
Hi, Adam!

​Thank you so much for the detailed explanation about the extensive threat-based features and the ARM NEON SIMD optimizations. It’s exciting to hear you want to make ARM a first-class architecture for Coda!

​To answer your question, I tested the engine on two different devices to see how it handles different hardware generations:

1. ​Vivo Y11
◦ ​Specs: Android 11, Snapdragon 439 (Octa-core up to 1.95 GHz)

◦ ​Performance: In DroidFish analysis mode, Coda gets around 20k–25k NPS. For comparison, the absolute lowest I usually see on this device with Stockfish or other engines is 40k–50k NPS (on 1 core).

Despite the lower NPS, Coda plays surprisingly well in blitz and fast time controls (1+1 and 30s+0.5) without blundering.

2. ​Samsung A16 5G
◦ ​Specs: Android 16, MediaTek Dimensity 6100+ (Octa-core, 2.2–2.4 GHz)

◦ ​Performance: In DroidFish analysis, Coda reaches 100k–110k NPS. Other engines usually floor at a minimum of 150k NPS on this device.

​The Good News (Basic Stability Test):
The most common issue I face in my tournaments with unoptimized or buggy ARM ports is that they play erratically, make irregular/illegal moves, or perform significantly worse than older versions.

​Coda completely passed my baseline stability test here. Even with 100k NPS, it successfully defeated a stable 200k+ NPS engine in a test match. This tells me that its core logic and tactical strength are solid and functioning perfectly on Android, even if the memory bandwidth/cache limits on phones are currently bottlenecking the raw speed.

​Thank you again for looking into the NEON profiling over the weekend. I’m happy to run more tests on these devices whenever you have a new build to try!

​Best regards,
Arzam