Guacamole is a Java program. It's basically a proxy between RDP/VLC and HTML5. Guacd (the java bits) connect to an RDP or VNC server on your behalf, and then you interact with the remote machine through guacd. Here's a simple text diagram
[Windows RDP server] <--RDP protocol--> [linux Guacamole server] <--HTTP or Websockets--> [HTML5 client in your browser]
That's the configuration I use. You can run guacamole directly on the target server if you want. I'm reluctant to expose my Windows machines directly to the wild internet, and I don't want to learn how to configure an HTTPS reverse-proxy in Microsoft's ecosystem. Having a dedicated guacamole box is nice because I expose port 80/443 on my Linux Guacamole machine, and then use it to connect to any number of Windows and Linux computers behind my firewall/NAT.
> guacamole-client is used to build the subprojects that make up Guacamole, and
> to provide a common central repository. Each project contained here is
> completely independent of guacamole-client and can be built separately, though
> the others may have to be built first. If all projects are built using
> guacamole-client, Maven will take care of the proper build order.
My reading of this is that the client repo also contains the server, which is written in java