You can support the project on Ko-fi or PayPal. A mere 4€ donation would currently support the platform for an entire day!
The website is free to use and doesn't run ads, and your data is not shared with any third party. And I'm intending to keep it that way. It's updated on a weekly basis (sometimes even daily, but mostly on weekends). Since I started the project 3 years ago, I've sunken hundreds of hours of coding — just for the fun of making a nice platform for Xiangqi players around the world, and to bring that wonderful game to a wider English-speaking audience.
It currently costs around 100€ per month to run, and I'm also paying for ads to increase visibility. This is all out of pocket (financed by my day job as a software developer). This cost is likely to increase in the future, as the platform (hopefully) grows in popularity.
If just 25 people donated 4€ per month, that would fully cover the current cost!
A sustainable stream of income would, for example, allow to rent dedicated servers (as of now, we're using "shared CPU" servers, which sometimes makes the website unresponsive, luckily this doesn't happen too often). With more budget, I could also duplicate the server in Asia to improve response time from there. At some point, I could also hire experts for specific tasks (data analysis, UI/UX improvements, better puzzle generation, cheating detection, editors to improve Database player profiles, translators for internationalization, etc.)
My goal is to make the platform financially self-sustainable, so it wouldn't be dependent on my other activities but would instead be powered by the community. I think this is the best way to monetize such a project, by letting anyone help willingly and according to their means while keeping it available for all.
If you want to see the platform improve and grow in the future, making a small donation is the best way to make that happen. Your support directly enables new features, better performance, and continued development and encourage independent projects like this one.
So if you can afford it, please consider supporting our project. Help keep elephantchess.io independent and ad-free! Even 1€ per month would help.
However, do not worry nor feel guilty if you can not afford to contribute financially. If you're tight on budget, prioritize your needs and wellbeing. The platform will remain free to use for everyone, regardless of their financial situation.
You can also check out the merch store for a cute t-shirt or a cool mug.
(Note that if you want to automatically appear as the latest supporter in the banner, you must use Ko-fi.)
You can use the webapp as a guest user. However, those sessions are tied to your device and are temporary (30 days long). By signing up, you will be able to:
Emails notifications can be enabled or disabled in your settings at any time.
If you want to obtain a new temporary session, you can simply delete the webapp cookies in your browser.
Cookies are a tool to store information on your computer that a website can read and write when you visit. We use them (1) to store your session information (so you don't have to log in every time you visit), (2) to save your preferences (piece style, move format, etc.) Cookies are also communicated to the server on requests but this information is not stored. Those cookies expire after 400 days (which is the maximum allowed). They are listed under the "Necessary" category in the cookie consent banner (or the cookies icon once you have accepted or refused).
You can easily find information online about how to list, visualize and delete cookies in your browser.
We also use Google Analytics (to get information about visitors) and Google Ads (to bring more traffic). Those tools also add their own cookies. Google Analytics is not that useful, so we might very well ditch it in the future - and we hope that some day we will have enough activity to get rid of Google Ads as well.
The YouTube videos embedded in the website also bring cookies (meaning for example that embedded videos you watch on this website will also appear in your YouTube history, if you have a YouTube account).
The annoying banner at the bottom of the page is from a third-party and is mandatory if we want to continue using Google Ads by complying with the GDPR and other privacy laws around the world.
Cookies are controversial because they potentially enable Google to track your activity online (since most websites use those tools, Google can track your browsing history, even if you don't use the Google search engine). By refusing the cookies in the banner, you prevent Google from adding elephantchess to the navigation history they associate with your customer profile (or more generally from collecting data about what you do on elephantchess).
On the other hand, the cookies added by elephantchess can not be used to track you outside the website.
One way to reduce and/or monitor tracking is to install Ghostery in your browser. You can also use I don't care about cookies to just automatically ignore those banners. To name just a few such tools.
We keep track of your session information (like the IP) to get information about where our users come from and when they were last online (which is required for some functionalities). It is planned to add functionality to list and delete your session data in your settings.
Chat messages are public and not encrypted. They can be reviewed by the admins and moderators.
We don't share your information (like your email or your activity) with anyone, however we use an external service to validate email addresses, to avoid getting bounced emails, which our email provider doesn't like and which could affect our ability to send legit emails.
Chess annotation symbols are a standard way of evaluating moves in chess. When using computer analysis, we compare 2 positions. The engine evaluation of a given position results in either a centi-pawns value (strength of a position in material equivalent, i.e. in 1/100 of pawns or centi-pawns), or a mate value (i.e. in how many plies a checkmate is possible).
When both positions evaluation contain a centi-pawn value, we calculate the delta. If this delta is above a certain value, we can classify the move as follows:
| Delta | Classification | Symbol |
|---|---|---|
| ≥ +300 | Brilliant | !! |
| ≥ +100 | Good | ! |
| ≥ +50 | Interesting | !? |
| ≤ -50 | Inaccuracy | ?! |
| ≤ -100 | Mistake | ? |
| ≤ -300 | Blunder | ?? |
Those thresholds are a common standard (source). However, we had to make a few simplifications to make this work:
Simplification: When a position doesn't contain a centi-pawn value but a mate value, we convert that mate value to a centi-pawn value following a heuristic: Since centi-pawn value of a position varies from [-7,706, +7,706] in the Pikafish engine, we assign to a "mate" evaluation a value above +7,706 (or below -7,706). We add a "bonus" (or subtract a "malus") on top of 7,706 — 312 for a mate in 1, 304 for a mate in 2, 296 for a mate in 3, etc. until a mate in 40 plies where we don't add anything. So 8 centi-pawns for each mate below 40.
In any case, computer analysis of games is just a tool, it is not perfect, and it can not replace an analysis made by master player or a teacher. But it can already help players identify blunders and mistakes.
The Analysis Board has a feature to import moves in various formats.
To use it, to go the Analysis Board and right-click on the empty list of moves, then select "Import moves". You can then paste the moves in one of the following formats:
Portable Game Notation with 0-based rank numbers.
[Event "Computer Chess Game"]
[Date "2023.01.26"]
[Round "-"]
[White "ElephantEye 3.1 (UCCI2WB)"]
[Black "Fairy-Stockfish 240123 LB"]
[Result "*"]
[TimeControl "600+15"]
[Variant "xiangqi"]
[Annotator "5. +0.02 1... -0.27"]
1. Cbe2 Hc7 {-0.27/28 29} 2. Hc2 Rb9 {-0.18/28 17} 3. Rb0 c5 {+0.00/29 32}
4. g4 Ch3 {+0.00/27 15} 5. Hg2 {+0.02/11 10} Hg7 {+0.00/29 12} 6. Rb4 Cxc3
{+0.07/32 25} 7. Ea2 Rh9 {+0.00/32 19} 8. Rh0 Rh3 {+0.12/30 45} 9. Hf4
{-0.05/11 15} Ca7 {+0.19/28 3} 10. Rxb9 {-0.07/11 12} Hxb9 {+0.59/27 18}
11. He1 {-0.09/12 32} Hc7 {+0.85/28 23} 12. Heg2 Cc2 {+0.97/31 21} 13. Ci2
{-0.06/12 16} Rf3 {+0.98/30 31} 14. Ce1 {-0.05/11 7} Cxi2 {+0.63/31 36} 15.
Exi2 Hb5 {+0.74/34 2:35} 16. Hxe6 {+0.07/12 7} Hxe6 {+1.87/28 19} 17. Cxe6
Hc7 {+1.84/31 31} 18. Ce5 {+0.13/13 16} Rg3 {+1.63/30 4} 19. Rh2
{+0.06/13 6} Hd5 {+1.75/32 20} 20. e4 Hc3 {+2.42/28 28} 21. He3
{+0.00/11 10} Cxa3 {+2.85/30 20} 22. Hf1 Rf3 {+2.92/32 21} 23. Rc2 Hxe4
{+4.13/28 25} 24. Re2 {-0.29/13 13} Hc3 {+4.25/29 18} 25. Rc2 Ha4
{+4.44/33 1:23} 26. Rb2 {-0.43/13 19} Cb3 {+4.77/26 20} 27. Rb1
{-0.35/13 10} Cb2 {+4.76/26 17} 28. Eg0 {-0.30/12 10} Rf2 {+4.88/27 10} 29.
i4 {-0.45/13 31} Ke8 {+5.21/28 22} 30. Hh0 Rh2 {+6.18/33 51} 31. Hi2
{-0.47/13 10} Hc3 {+6.24/29 6} 32. Rc1 {-0.49/13 17} Hxa2 {+6.35/30 6} 33.
Rxc5 {-0.39/12 8} Cb0+ {+8.87/25 20} 34. Ae1 Rb2 {+8.92/31 35} 35. Rc8+ Ke7
{+9.12/28 18} 36. Rc7+ {-1.35/12 11} Ke8 {+9.19/23 0.5} 37. Ad2
{-1.35/12 20} Ca0 {+9.72/29 22} 38. Ke1 Rb1+ {+9.68/30 19} 39. Ke2 Rf1
{+9.76/28 31} 40. Rc8+ {-1.81/13 19} Ke9 {+9.76/29 19} 41. Ade1
{-2.02/14 28} Rf5 {+10.54/25 17} 42. Ce4 Rf3 {+11.97/24 19} 43. Ad2 Re3+
{+13.96/23 17} 44. Kf2 {-1.51/1 0.1} Rxe4 {+1000.14/47 25} 45. Rf8
{-1.75/6 0.1} Ca1 {+1000.13/67 38} 46. Rxf9+ {-4.23/12 17} Ke8
{+1000.12/76 0.1} 47. Rf8+ {-98.78/13 18} Ke9 {+1000.11/79 0.1} 48. Hg3
{-3.73/12 7} Re3 {+1000.10/77 18} 49. Rf9+ Ke8 {+1000.09/75 0.4} 50. He4
{-98.87/10 1.1} Rxe4 {+1000.08/90 17} 51. Rf8+ Ke9 {+1000.08/128 16} 52.
Kf1 {-98.92/8 0.3} Re1+ {+1000.05/200 17} 53. Kf2 Hc1 {+1000.04/245 11} 54.
Rf9+ {-98.96/3 0.1} Ke8 {+1000.04/242 0.4} 55. Re9+ Kxe9 {+1000.02/245 0.4}
56. Adxe1 Hd3+ {+1000.01/245 0.5}
Portable Game Notation with 1-based rank numbers.
[Event "PyChess casual game"]
[Date "2023.02.25"]
[Round "-"]
[White "guest"]
[Black "Fairy-Stockfish"]
[Result "0-1"]
[TimeControl "900+20"]
[WhiteElo "1500?"]
[BlackElo "1500?"]
[Variant "Xiangqi"]
[FEN "rnbakabnr/9/1c5c1/p1p1p1p1p/9/9/P1P1P1P1P/1C5C1/9/RNBAKABNR w - - 0 1"]
[SetUp "1"]
1. Cbe3 Hc8 2. Pc5 Rb10 3. Hc3 Pg6 4. Hi3 Hg8 5. Rb1 Ri9 6. Ch7 Hh6 7. Cxc7 Ece8 8. Ri2 Rd9 9. Rb7 Rd4 10. Pi5 Ade9 11. Rf2 Ca8 12. Rxb10+ Hxb10 13. Rb2 Hd9 14. Cc9 Cc8 15. Hb5 Cb8 16. Pc6 Cxb2 17. Hxd4 Exc6 18. Hxc6 Ce8 19. Pe5 Cb5 20. Afe2 Hg8 21. Cg3 Hf6 22. Pg5 Ei8 23. Pxg6 Exg6 24. Ch3 Ch8 25. Ch5 Cxh5 26. Hxh5 Ee8 27. Hxf6 Exc6 28. Hg8 Ci8 29. Hxi7 Cxi5 30. Hg8 Pa6 31. Cb9 Pa5 32. Pxa5 Cxa5 33. Cb3 Ca8 34. Ci3 Af8 35. Hf6 Cc8 36. Ea3 A10e9 37. Ce3 Ce8 38. Hd7 Ad10 39. Kf1 Ce9 40. Af3 Kf10 0-1
Universal Chess Interface move format. Technically the most straightforward and less subjet to ambiguity. Usually 0-based.
1. b2e2 b9c7 2. b0c2 a9b9 3. a0b0 c6c5 4. b0b6 h9g7 5. h0g2 g6g5 6. g3g4 g5g4 7. i0i1 g4g3
8. e3e4 g3g2 9. h2i2 g2f2 10. e2e3 b7b8 11. i1g1 b8g8 12. b6b9 g8g1 13. b9b4 h7h0
14. e4e5 f2f1 15. b4h4 f1f0 16. e0e1 i9h9 17. h4h9 g7h9 18. e1f1 h9g7 19. e3e6 g7h5
20. i2e2 h5g3 21. f1f2 g1i1 22. e5f5 g3e2 23. f2e2 c7d5 24. e2f2 d5c3 25. f5e5 i1b1
26. g0i2 f0g0 27. c2e3 b1b5 28. i2g0 h0d0 29. f2f1 b5e5 30. e3g4 e5e4 31. g4f6 d0d8
32. e6e5 c5c4 33. i3i4 e4e3 34. f6d7 c4d4 35. a3a4 d4e4 36. d7f6 e3e5 37. f6d7 e5e7
38. c0a2 e4f4 39. i4i5 e7f7 40. d7f6 d8f8 41. a4a5 f8f6
The World Xiangqi Federation move notation uses specific letters to represent each piece. This notation is widely accepted and used in international competitions and literature.
However, moves can be ambiguous, so it can be hard to parse, even with an ambiguity resolution mechanism (which consists of branching off and entertain both hypotheses, until one of the branches finds a move that can't be played and therefore the branch can be discarded).
FORMAT WXF
GAME
RED Fairy Stockfish Winboard;;;
BLACK XieXiemaster;;;
DATE 24-12-2022
START{
1. C8.5 E3+5 2. H8+7 H8+7
3. R9.8 H2+4 4. H2+3 R1.2
5. R1+1! C2.3 6. R8+9 H4-2
7. P5+1 C8+4 8. H7+5 P7+1
9. P5+1 P5+1 10. C5+3 A6+5
11. R1.4 C3+4 12. H5+6 C3-2
13. C5-4 H2+4 14. H3+5 C8.5
15. H6-5 R9+1 16. R4+5 H7+8
17. R4.3! R9-1 18. H5+6 P7+1
19. P3+1 C3.2 20. C2.8! R9.8
21. R3.6 H8+7 22. R6+2 R8+7
23. E3+5 R8-1 24. R6.8 C2.3
25. R8-5 H7+5 26. R8.2 H5+7
27. C5.4 H7-8 28. H6+4 A5+6
29. H4+6 K5+1 30. C8.5! K5.4
31. C4.6 C3.4 32. H6-5 K4.5
33. H5-6 K5.6 34. C6+4!! H8+7
35. K5+1 H7-6 36. K5.4!! K6-1
37. C6.4 A6-5 38. C4.2 A5+6
39. H6+4 H6+8 40. K4.5 H8-7
41. C2+4 E7+9 42. H4+3! A4+5
43. H3+1! A5+4 44. C2-6! A6-5
45. H1+3 H7-5 46. C5+2!! H5+3
47. K5+1!! H3-5 48. C2.4 K6+1
49. C4+2 A5-4 50. H3-4 H5-6
51. H4+2
}END
1. C2=6 h8+7
2. H2+3 r9=8
3. P7+1 c2=3
4. H8+7 p3+1
5. H7+6 p3+1
6. H6+4 e3+5
7. C6+5 e5+3
8. C6-6 e7+5
9. R1=2 p7+1
10. H4+3 c3=7
11. R2+6 h2+3
12. E3+5 p3+1
13. C6=2 r1=2
14. C8=9 p3+1
15. P9+1 h3+4
16. R9+1 h4+6
17. R2=4 c8=9
18. R4-2 p3=2
19. R9=4 p2=1
20. R++2 a4+5
21. R+=1 r8+2
22. C2+5 r2+7
23. R4+3 p5+1
24. C2=5 p7+1
25. R4=3 p++1
26. P1+1 p+=2
27. P1+1 p2=3
28. P1=2 p3=4
29. P2+1 r8-1
30. A4+5 c7=6
31. R3=6 r2-4
32. C5=6 p4=5
33. A6+5 e5-7
34. P3+1 c6=4
35. C6=3 c9=5
36. P3+1 r8=6
37. R6+1 p5+1
38. P5+1 r2=5
39. R1-2 c4=2
40. P3=4 c2+7
41. E7+9 r5=2
42. P5+1 c5+5
43. K5=6 c5=3
44. R1=7 c3+2
45. K6+1 r2+5
46. K6+1 r2-1
47. K6-1 r2+1
1. C2.5 h8+7 2. H2+3 r9.8 3. R1+1 p7+1
4. R1.4 h2+3 5. P7+1 e3+5 6. C8.6 a4+5
7. H8+7 r1.4 8. C6+2 c2+4 9. C5.6 r4.2
10. E7+5 c2.7 11. R4+5 r2+6 12. A6+5 c8.9
13. R9.7 r8+8 14. R4-4 p7+1 15. K5.6 r8.6
16. E3+1 r6-1 17. A5+4 p7.8 18. A4-5 h7+6
19. C+.4 c9.6 20. C4+3 a5+6 21. P9+1 p8+1
22. H3-2 h6+5 23. H2+4 h5+3 24. R7+2 c7+2
25. P1+1 p5+1 26. R7.9 p5+1 27. P9+1 p5+1
28. E5+3 p5.6 29. C6.5 a6+5 30. C5+3 r2.4
31. R9.6 r4+1 32. A5+6 p6+1 33. P9+1 h3+1
34. A4+5 p6+1 35. A5+4 p8.7 36. C5.4 p7.6
37. A4-5 p-.5 38. A5+4 p5.6 39. A4-5 p-.5
40. A5+4 p5.6 41. A4-5 p+.5 42. A6-5 h1+2
43. K6.5 h2+3 44. E1-3 h3-5 45. C4.2 h5-3
46. C2+4 a5-6 47. C2-5 h3-5 48. E3-1 p3+1
49. E3+5 h5+4 50. C2-1 h4+3
Perpetual checking is a situation in which a player makes a series of moves giving check to the opponent General with one or several pieces. The series of checks is called perpetual depending on the applied rules. Currently, we apply the following rules set:
Our Perpetual checks indicator widget lists two labels for each color:
Games that were created but not joined by anyone will be auto-cancelled. This happens after 2 days for guests users and after 7 days for authenticated users.
PvB games that are idle for more than 24h are auto-resigned.