I came across this Opening tree graph question where a very elegant Opening tree as displayed. text

  1. Is there a way I could make a personal opening book in this format? If yes, then which software should (preferentially free) I use?
  2. If yes, how do you handle transposition?
  3. If no, is there some there some other efficient way of storing personal opening line ?

Clarification : Maybe by question was misleading but I was searching for something as a tool to create a opening lines guide by manually entering the moves rather than from a database.

  • lichess analysis board creates a tree automatically yo start making moves on the board the you can download the pgn
    – Felix Too
    Nov 9, 2023 at 16:15

2 Answers 2


Given various tell-tale signs, that graph was almost certainly generated with GraphViz. GraphViz is free, so you can produce similar diagrams yourself by downloading and installing it, or by using an online editor. If you want to mimic the style in the diagram you posted, start with a template that looks like this:

digraph chess_openings {
        node [shape=point];
        node [shape=box];

which creates two groups of nodes: one for positions, which will be shown as points, and one for moves, which will be shown as boxes.

For each of white's moves, you'll have to write code that looks something like this in the second group:

p0 -> p0_1e4 [label="Sicilian"]; p0_1e4 [label="1. e4"]; p0_1e4 -> p1;

which says that "from Position #0 (p0), white can play the Sicilian by moving "1. e4", which will result in Position #1 (p1)". Similarly, for black's moves, you'll have to write code that looks like this:

p1 -> p1_1c5 [label="Sicilian"]; p1_1c5 [label="1. … c5", style=filled]; p1_1c5 -> p2;

which says that "from Position #1, black can play the Sicilian by moving "1. … c5", which will result in Position #2". If you have a live preview running, the position numbers will be visible in the diagram as you write the moves. When you're ready to hide a position, add it to a list in the first group:

p0, p1, p2;

Below is a transcription of the graph in your question. You can play with the code here.

digraph chess_openings {
        node [shape=point];
        p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42;
        node [shape=box];
        p0 -> p0_1e4 [label="Sicilian"]; p0_1e4 [label="1. e4"]; p0_1e4 -> p1;
        p1 -> p1_1c5 [label="Sicilian"]; p1_1c5 [label="1. … c5", style=filled]; p1_1c5 -> p2;
        p2 -> p2_2Nf3 [label="Open Sicilian"]; p2_2Nf3 [label="2. Nf3"]; p2_2Nf3 -> p3;
        p3 -> p3_2d6 [label="Mainline"]; p3_2d6 [label="2. … d6", style=filled]; p3_2d6 -> p4;
        p4 -> p4_3d4 [label="Mainline"]; p4_3d4 [label="3. d4"]; p4_3d4 -> p5;
        p5 -> p5_3cxd4 [label="Mainline"]; p5_3cxd4 [label="3. … cxd4", style=filled]; p5_3cxd4 -> p6;
        p6 -> p6_4Nxd4 [label="Mainline"]; p6_4Nxd4 [label="4. Nxd4"]; p6_4Nxd4 -> p7;
        p7 -> p7_4Nf6 [label="Mainline"]; p7_4Nf6 [label="4. … Nf6", style=filled]; p7_4Nf6 -> p8;
        p8 -> p8_5Nc3 [label="Mainline"]; p8_5Nc3 [label="5. Nc3"]; p8_5Nc3 -> p9;
        p9 -> p9_5e6 [label="Scheveningen"]; p9_5e6 [label="5. … e6", style=filled]; p9_5e6 -> p10;
        p10 -> p10_6Be2 [label="Scheveningen"]; p10_6Be2 [label="6. Be2"]; p10_6Be2 -> p11;
        p11 -> p11_6a6 [label="Scheveningen"]; p11_6a6 [label="6. … a6", style=filled]; p11_6a6 -> p12;
        p9 -> p9_5a6 [label="Najdorf"]; p9_5a6 [label="5. … a6", style=filled]; p9_5a6 -> p13;
        p13 -> p13_6Be2 [label="Najdorf"]; p13_6Be2 [label="6. Be2"]; p13_6Be2 -> p14;
        p14 -> p14_6e6 [label="Najdorf → Scheveningen"]; p14_6e6 [label="6. … e6", style=filled]; p14_6e6 -> p12;
        p9 -> p9_5g6 [label="Dragon"]; p9_5g6 [label="5. … g6", style=filled]; p9_5g6 -> p15;
        p15 -> p15_6Be3 [label="Yugoslav"]; p15_6Be3 [label="6. Be3"]; p15_6Be3 -> p16;
        p15 -> p15_6Be2 [label="Dragon"]; p15_6Be2 [label="6. Be2"]; p15_6Be2 -> p17;
        p9 -> p9_5Nc6 [label="Classical"]; p9_5Nc6 [label="5. … Nc6", style=filled]; p9_5Nc6 -> p18;
        p18 -> p18_6Be2 [label="Classical"]; p18_6Be2 [label="6. Be2"]; p18_6Be2 -> p19;
        p3 -> p3_2Nc6 [label="Kalashnikov"]; p3_2Nc6 [label="2. … Nc6", style=filled]; p3_2Nc6 -> p20;
        p20 -> p20_3d4 [label="Kalashnikov"]; p20_3d4 [label="3. d4"]; p20_3d4 -> p21;
        p21 -> p21_3cxd4 [label="Kalashnikov"]; p21_3cxd4 [label="3. … cxd4", style=filled]; p21_3cxd4 -> p22;
        p22 -> p22_4Nxd4 [label="Kalashnikov"]; p22_4Nxd4 [label="4. Nxd4"]; p22_4Nxd4 -> p23;
        p23 -> p23_4g6 [label="Sveshnikov → Accelerated Dragon"]; p23_4g6 [label="4. … g6", style=filled]; p23_4g6 -> p24;
        p24 -> p24_5Nc3 [label="Accelerated Dragon"]; p24_5Nc3 [label="5. Nc3"]; p24_5Nc3 -> p25;
        p25 -> p25_5Bg7 [label="Accelerated Dragon"]; p25_5Bg7 [label="5. … Bg7", style=filled]; p25_5Bg7 -> p26;
        p26 -> p26_6Be3 [label="Accelerated Dragon"]; p26_6Be3 [label="6. Be3"]; p26_6Be3 -> p27;
        p23 -> p23_4e5 [label="Kalashnikov"]; p23_4e5 [label="4. … e5", style=filled]; p23_4e5 -> p28;
        p23 -> p23_4Nf6 [label="Sveshnikov"]; p23_4Nf6 [label="4. … Nf6", style=filled]; p23_4Nf6 -> p29;
        p29 -> p29_5Nc3 [label="Sveshnikov"]; p29_5Nc3 [label="5. Nc3"]; p29_5Nc3 -> p30;
        p30 -> p30_5d6 [label="Sveshnikov → Classic"]; p30_5d6 [label="5. … d6", style=filled]; p30_5d6 -> p18;
        p30 -> p30_5e6 [label="Sveshnikov → Four Knights"]; p30_5e6 [label="5. … e6", style=filled]; p30_5e6 -> p31;
        p23 -> p23_4e6 [label="Sveshnikov → Taimanov"]; p23_4e6 [label="4. … e6", style=filled]; p23_4e6 -> p32;
        p32 -> p32_5Nc3 [label="Taimanov"]; p32_5Nc3 [label="5. Nc3"]; p32_5Nc3 -> p33;
        p33 -> p33_5Nf6 [label="Taimanov → Four Knights"]; p33_5Nf6 [label="5. … Nf6", style=filled]; p33_5Nf6 -> p31;
        p33 -> p33_5a6 [label="Taimanov"]; p33_5a6 [label="5. … a6", style=filled]; p33_5a6 -> p34;
        p3 -> p3_2e6 [label="Four Knights"]; p3_2e6 [label="2. … e6", style=filled]; p3_2e6 -> p35;
        p35 -> p35_3d4 [label="Four Knights"]; p35_3d4 [label="3. d4"]; p35_3d4 -> p36;
        p36 -> p36_3cxd4 [label="Four Knights"]; p36_3cxd4 [label="3. … cxd4", style=filled]; p36_3cxd4 -> p37;
        p37 -> p37_4Nxd4 [label="Four Knights"]; p37_4Nxd4 [label="4. Nxd4"]; p37_4Nxd4 -> p38;
        p38 -> p38_4Nf6 [label="Four Knights"]; p38_4Nf6 [label="4. … Nf6", style=filled]; p38_4Nf6 -> p39;
        p39 -> p39_5Nc3 [label="Four Knights"]; p39_5Nc3 [label="5. Nc3"]; p39_5Nc3 -> p40;
        p40 -> p40_5Nc6 [label="Four Knights"]; p40_5Nc6 [label="5. … Nc6", style=filled]; p40_5Nc6 -> p31;
        p38 -> p38_4Nc6 [label="Taimanov"]; p38_4Nc6 [label="4. … Nc6", style=filled]; p38_4Nc6 -> p32;
        p38 -> p38_4a6 [label="Kan"]; p38_4a6 [label="4. … a6", style=filled]; p38_4a6 -> p41;
        p41 -> p41_5Nc3 [label="Kan"]; p41_5Nc3 [label="5. Nc3"]; p41_5Nc3 -> p42;
        p42 -> p42_5Nc6 [label="Kan → Taimanov"]; p42_5Nc6 [label="5. … Nc6", style=filled]; p42_5Nc6 -> p34;

This is what the output looks like:

enter image description here


https://tailuge.github.io/chess-o-tron/public/openings/openingtree.html and https://www.openingtree.com/ both create something similar from your games on lichess.org. I do not believe they take into account opening names or transpositions.

You could draw this on paper, or you could use a online drawing software such as Lucidchart or Google Drawings.

  • 1
    Thanks but I was searching for something as a tool to create a opening lines guideby manually entering the moves rather than from a database.
    – AKP2002
    Apr 18, 2020 at 9:56

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.