> ## Documentation Index
> Fetch the complete documentation index at: https://wireblast.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Wireblast

> A fast, easy-to-use AF_XDP traffic generator for Linux. The iPerf of packet generators.

Wireblast puts real Ethernet frames on a real NIC, as fast as the hardware will take them, and tells you exactly what it sent.

It's a single static Go binary. Run `sudo wireblast` with no arguments and a wizard walks you through picking an interface, a traffic pattern and a rate. Thirty seconds later you have numbers.

On a 100G Mellanox link it fills the pipe at every frame size, including **138 million packets a second** of the smallest frames, from one process. The [performance page](/concepts/performance) has the measured numbers.

<iframe src="https://www.youtube.com/embed/8EmxvaOR5uA" title="YouTube video player" frameborder="0" className="w-full aspect-video rounded-xl" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen />

## The gap it fills

You know this moment. `iperf` isn't cutting it any more. You need 64-byte frames, or ten thousand distinct flows, or a capture replayed back onto the wire. But you're nowhere near justifying a dedicated traffic-generation appliance, and you'd rather not spend a week learning DPDK.

That's the gap. Wireblast lives in it.

<CardGroup cols={3}>
  <Card title="iperf / netperf" icon="gauge-simple">
    TCP and UDP throughput between two hosts. Easy, but it can't shape frames, flows or rates the way a network test needs.
  </Card>

  <Card title="Wireblast" icon="bolt">
    Line-rate frames you fully control, from a Linux box you already have. No cgo, no DPDK, no kernel modules.
  </Card>

  <Card title="Test appliances" icon="server">
    Hardware timestamping, RFC 2544, latency histograms, certification-grade reporting. Also a purchase order.
  </Card>
</CardGroup>

## What it looks like

A live run, not a mockup:

```text theme={null}
Wireblast  running   elapsed 0:10 / -0:10
  interface  wb0  virtual · 1 queue(s) · native XDP · copy
  pattern    udp  fixed 512-byte frames
  rx filter  udp/9000
  rate       set 200kpps  actual 199.67 kpps

╭────────────────────────────────────────────────────╮  ╭────────────────────────────────────────────────────╮
│ TX                                                 │  │ RX                                                 │
│ ──                                                 │  │ ──                                                 │
│ Packets/sec                          199.67 kpps   │  │ Packets/sec                             150 kpps   │
│ Bits/sec  L1                       849.79 Mbit/s   │  │ Bits/sec  L1                        638.4 Mbit/s   │
│ Bits/sec  L2                       817.84 Mbit/s   │  │ Bits/sec  L2                        614.4 Mbit/s   │
│ ────────────────────────────────────────────────   │  │ ────────────────────────────────────────────────   │
│ Packets                                    1.9 M   │  │ Packets                                   1.43 M   │
│ Bytes                                  971.28 MB   │  │ Bytes                                  729.72 MB   │
│ Avg frame                                  512 B   │  │ Avg frame                                  512 B   │
│ UDP                                        1.9 M   │  │ UDP                                       1.43 M   │
│ TCP                                            0   │  │ TCP                                            0   │
│ Other                                          0   │  │ Other                                          0   │
│ Errors                                         0   │  │ Drops/errors                                   0   │
╰────────────────────────────────────────────────────╯  ╰────────────────────────────────────────────────────╯
  packets/sec · last 8s                                                                  peak 199.73 kpps
  TX                                                                              ▇▇▇▇▇▇█▇  199.67 kpps
  RX                                                                              ▆▆▆▆▆▆▆▆  150 kpps

space pause  ·  +/- rate ±10%  ·  g graph: bits  ·  r reset counters  ·  ? help  ·  q stop and quit
```

Everything on that screen is also a command-line flag, so anything you work out in the wizard can be pasted into a script.

## Start here

<CardGroup cols={2}>
  <Card title="Install" icon="download" href="/install">
    One binary, a couple of requirements, and the memlock setting that trips up first runs.
  </Card>

  <Card title="Quickstart" icon="rocket" href="/quickstart">
    Traffic on the wire in about a minute. No spare NIC needed.
  </Card>

  <Card title="Common tasks" icon="list-check" href="/recipes">
    Copy-paste recipes: benchmark a link, run IMIX, replay a capture, stress a firewall.
  </Card>

  <Card title="FAQ" icon="circle-question" href="/reference/faq">
    Short answers to the things people ask first.
  </Card>
</CardGroup>

## What it does

<CardGroup cols={2}>
  <Card title="Five traffic patterns" icon="shapes" href="/patterns/overview">
    UDP, stateless TCP SYN, IMIX, raw Ethernet, and PCAP replay.
  </Card>

  <Card title="Deterministic flows" icon="arrows-split-up-and-left" href="/patterns/flows">
    The same config always produces the same tuples, in the same order, whatever the queue count.
  </Card>

  <Card title="100G line rate" icon="gauge" href="/concepts/performance">
    Fills a 100G link at every frame size, measured on real Mellanox hardware.
  </Card>

  <Card title="Honest numbers" icon="chart-line" href="/concepts/numbers">
    L1 and L2 bit rates, clearly labelled, plus why your monitoring tool reads slightly lower.
  </Card>

  <Card title="Safe on a live box" icon="shield-check" href="/concepts/receive">
    Transmit-only by default. Nothing is taken away from the kernel unless you ask for it.
  </Card>
</CardGroup>

## When not to use it

Worth knowing before you invest an afternoon.

* **You need latency numbers.** Wireblast counts packets and bytes. It doesn't measure latency or jitter, and it has no hardware timestamping.
* **You need certification-grade results.** There's no RFC 2544 or RFC 3918 test suite, and no signed report at the end.
* **You need stateful TCP.** The TCP pattern is stateless SYNs. No handshake, no connection state, no retransmission.
* **You're not on Linux.** AF\_XDP is a Linux kernel facility, so there's no macOS or Windows build and there won't be.

## Built on go-afxdp

Wireblast is the friendly front end. The AF\_XDP machinery underneath, meaning UMEM management, the four rings, XDP program loading and the zero-copy paths, lives in [go-afxdp](https://github.com/atoonk/go-afxdp), a standalone Go library you can build your own tools on.

If you want the packet generator, use Wireblast. If you want to write something else that moves packets at line rate from Go, start with the library.
