API === The server exposes a `RESTful API `_, with the following endpoints (defined in ``explorer.py``):: GET: /api # get info about the api endpoints /trees # get info about all the existing trees /trees/ # get info about the given tree /trees//draw # get graphical commands to draw the tree /trees//layouts # get available layouts for the tree /trees//style # get tree style /trees//newick # get newick representation /trees//size # get inner width and height of the full tree /trees//properties # names of extra ones defined in any node /trees//nodecount # total count of nodes and leaves /trees//search # search for nodes PUT: /trees//sort # sort branches /trees//set_outgroup # set node as outgroup (1st child of root) /trees//move # move branch /trees//remove # prune branch /trees//rename # change the name of a node /trees//edit # edit any node property /trees//clear_searches # clear stored searches (free server memory) /trees//to_dendrogram # convert tree to dendogram (no distances) /trees//to_ultrametric # convert tree to ultrametric (equidistant leaves) POST: /trees # add a new tree DELETE: /trees/ # remove tree In addition to the api endpoints, the server has these other ones:: / # redirects to /static/gui.html?tree= /help # gives some pointers for using ete /static/ # all the static content, including javascript like gui.js The api can be directly queried with the browser (for some endpoints that accept a GET request), or with tools such as `curl `_ or `httpie `_. The frontend uses those endpoints to draw and manipulate the trees. It works as a web application, which mainly translates the list of graphical commands coming from ``/trees//draw`` into svgs. It is possible to use the same backend and write a different frontend (as a desktop application, or in a different language, or using a different graphics library), while still taking advantage of all the optimizations done for the drawing.