Snailgun is a Nailgun client written in Scala that can be used as a library and/or compile to native. Snailgun aims to be a flexible, cross-platform and zero-dependency nailgun client you can embed in any tool.
Nailgun is a useful protocol to communicate lightweight, short-lived clients with long-running servers.
Developers have traditionally used Nailgun to communicate native-like clients with services running on the JVM. However, there are many use cases that require JVM clients connect to Nailgun servers and those are currently unsupported.
Snailgun is an alternative implementation to the default Python and C clients of the Nailgun protocol that intends to be extensible, fast and support both JVM and Native clients.
- It provides a simple API that for any JVM-based programming language.
- It can be compiled to a Native binary that is 10x faster than the Python client through GraalVM's Native Image.
Snailgun's major use cases are:
- You need a client that talks the Nailgun protocol but you need to customize it.
- You need to communicate with a Nailgun server implemented in another language.
- You need to communicate a JVM client with a Nailgun server on the JVM. For example, if the server cannot be compiled to native or synchronizes concurrent clients.
The API is meant to be simple and extensible. The
snailgun-core
directory that hosts the implementation. The
entrypoint is Client
and the full protocol implementation is Protocol
.
Snailgun is published to Maven Central. Add it to your project with:
libraryDependencies += "me.vican.jorge" %% "snailgun" % "SNAILGUN_VERSION"
where SNAILGUN_VERSION
is the latest git tag in this repository.
You can generate a Snailgun binary by following the steps described in the GraalVM Native Image guide.
To generate a native binary out of this repository, run
snailgun-cli/graalvm-native-image:packageBin
in a machine that has GraalVM
and native-image
installed.