MaJerle/lwrb

Lightweight generic ring buffer manager library

C

1,541

393 commits

updated Oct 8, 2026

See the code

README

Lightweight ring buffer manager

LwRB is a generic FIFO (First In, First Out) buffer library optimized for embedded systems.

Open documentation

Features

  • Written in C (C11), compatible with stdint.h data types
  • Platform independent, no architecture specific code
  • FIFO (First In, First Out) buffer implementation
  • No dynamic memory allocation, data is static array
  • Uses optimized memory copy instead of loops to read/write data from/to memory
  • Thread and interrupt safe when used as pipe with single write and single read entries
  • Uses C11 atomic operations by default to keep reads and writes race-free, even on architectures whose native word size is smaller than size_t (AVR for instance); can be disabled with LWRB_DISABLE_ATOMIC
  • Suitable for DMA transfers from and to memory with zero-copy overhead between buffer and application memory
  • Supports data peek, skip for read and advance for write
  • Byte-sequence search within buffered data
  • Optional all-or-nothing read and write operations to avoid partial transfers
  • Optional per-buffer custom user argument storage
  • Implements support for event notifications
  • User friendly MIT license

Contribute

Fresh contributions are always welcome. Simple instructions to proceed:

  1. Fork Github repository
  2. Follow C style & coding rules and use clang-format to format the code
  3. Create a pull request to develop branch with new features or bug fixes

Alternatively you may:

  1. Report a bug
  2. Ask for a feature request
buffer
c
cyclic
cyclic-buffer
fifo
generic
library
manager
pipe
ring
ring-buffer

MaJerle/lwrb

Lightweight generic ring buffer manager library

C

1,541

393 commits

updated Oct 8, 2026

See the code

README

Lightweight ring buffer manager

LwRB is a generic FIFO (First In, First Out) buffer library optimized for embedded systems.

Open documentation

Features

  • Written in C (C11), compatible with stdint.h data types
  • Platform independent, no architecture specific code
  • FIFO (First In, First Out) buffer implementation
  • No dynamic memory allocation, data is static array
  • Uses optimized memory copy instead of loops to read/write data from/to memory
  • Thread and interrupt safe when used as pipe with single write and single read entries
  • Uses C11 atomic operations by default to keep reads and writes race-free, even on architectures whose native word size is smaller than size_t (AVR for instance); can be disabled with LWRB_DISABLE_ATOMIC
  • Suitable for DMA transfers from and to memory with zero-copy overhead between buffer and application memory
  • Supports data peek, skip for read and advance for write
  • Byte-sequence search within buffered data
  • Optional all-or-nothing read and write operations to avoid partial transfers
  • Optional per-buffer custom user argument storage
  • Implements support for event notifications
  • User friendly MIT license

Contribute

Fresh contributions are always welcome. Simple instructions to proceed:

  1. Fork Github repository
  2. Follow C style & coding rules and use clang-format to format the code
  3. Create a pull request to develop branch with new features or bug fixes

Alternatively you may:

  1. Report a bug
  2. Ask for a feature request
buffer
c
cyclic
cyclic-buffer
fifo
generic
library
manager
pipe
ring
ring-buffer

Significant stargazers

David Lechner

247 followers · starred Feb 2021

Kamil Kisiel

486 followers · starred Mar 2024

Randy

36 followers · starred Jun 2020

Shaun Struwig

25 followers · starred Feb 2023