Version Matrix


Scodec-stream is a library for streaming binary encoding and decoding. It is built atop scodec and fs2. Here's a brief example of its use:

import scodec.codecs._
import scodec.bits._
import cats.effect.{Blocker, IO}
import fs2.Stream

val frames: StreamDecoder[ByteVector] = StreamDecoder.many(int32)
 .flatMap { numBytes => StreamDecoder.once(bytes(numBytes)) }

val filePath = java.nio.file.Paths.get("path/to/file")

val s: Stream[IO, ByteVector] =
  Stream.resource(Blocker[IO]).flatMap { blocker =>[IO](filePath, blocker, 4096).through(frames.toPipeByte)

When consumed, s will incrementally read chunks from "largefile.bin", then decode a stream of frames, where each frame is expected to begin with a number of bytes specified as a 32-bit signed int (the int32 codec), followed by a frame payload of that many bytes. Nothing happens until the s stream is consumed, and s will ensure the file is closed in the event of an error or normal termination of the consumer.

See the MPEG PCAP decoding example for a more sophisticated use case.



This project is licensed under a 3-clause BSD license.

People are expected to follow the Typelevel Code of Conduct when discussing scodec on the Github page, Gitter channel, mailing list, or other venues.

Concerns or issues can be sent to Michael Pilquist ( or to Typelevel.

Getting Binaries

See the releases page on the website.

Code of Conduct

See the Code of Conduct.