Quicx
§ 01.02Getting Started

Quick Start

Start the daemon with quicx start, pull the Java client from Maven Central, and submit your first task. End-to-end in under a minute.

  1. Step01

    Start the daemon

    Quicx needs a configuration file to know which TCP port to bind and how to carve up the PMAD pool. The installer writes a sensible default to ~/.config/quicx/quicx.conf.

    ~ $
    user@host ~ $ quicx start --config /etc/quicx/quicx.conf
    config loaded: /etc/quicx/quicx.conf
    quicx v1.0.2 starting
      port:    16381
      classes: 32 64 128 256 512 1024
    quicx listening on port 16381 [kqueue]
    quicx cli socket: /tmp/quicx.sock
  2. Step02

    Add the Java client to your build

    The client lives on Maven Central under dev.quicx:quicx-client. It’s a tiny jar (no transitive dependencies) that speaks the Quicx binary protocol directly.

    pom.xml
    <dependency>
      <groupId>dev.quicx</groupId>
      <artifactId>quicx-client</artifactId>
      <version>1.0.0</version>
    </dependency>
  3. Step03

    Submit your first task

    QuicxClient is a stateless, thread-safe producer handle. Every submit() opens a connection, sends MSG_SUBMIT, reads the acknowledgment, and closes.

    Producer.java
    import dev.quicx.QuicxClient;
    
    public class Producer {
        public static void main(String[] args) throws Exception {
            try (QuicxClient client = new QuicxClient("localhost", 16381)) {
                int taskId = client.submit(
                    "send_email",
                    "{\"to\":\"user@gmail.com\"}"
                );
                System.out.println("accepted task id = " + taskId);
            }
        }
    }
  4. Step04

    Run a worker

    QuicxWorker connects, announces itself with MSG_READY and then blocks receiving MSG_TASK frames. The worker reconnects automatically on daemon restarts.

    EmailWorker.java
    import dev.quicx.QuicxWorker;
    
    public class EmailWorker {
        public static void main(String[] args) throws Exception {
            new QuicxWorker("localhost", 16381)
                .handle("send_email", payload -> {
                    String body = new String(payload, "UTF-8");
                    System.out.println("delivering: " + body);
                    // ... do the work ...
                })
                .start();   // blocks — runs until the process is killed
        }
    }
PERFORMANCEWhat just happened?
The producer opened a short-lived TCP connection, framed a MSG_SUBMIT with a 6‑byte header and a typed payload, then waited for a 4‑byte task_id. The daemon allocated every scratch buffer out of the PMAD pool — no malloc, no GC pause — and handed the task to an idle worker. One daemon. No moving parts.