Skip to content
Go to file

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time


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.

You can’t perform that action at this time.