etl4s logo

etl4s

Powerful, whiteboard-style ETL

import etl4s._

/* Define your building blocks */
val fiveExtract = Extract(5)
val timesTwo    = Transform[Int, Int](_ * 2)
val exclaim     = Transform[Int, String](n => s"$n!")
val consoleLoad = Load[String, Unit](println(_))

/* Add config with .requires */
val dbLoad      = Load[String, Unit].requires[String] { dbType => s =>
  println(s"Saving to $dbType DB: $s")
}

/* Stitch your pipeline */
val pipeline =
  fiveExtract ~> timesTwo ~> exclaim ~> (consoleLoad &> dbLoad)

/* Provide config, then run*/
pipeline.provide("sqlite").unsafeRun(())

Whiteboard-style

Model pipelines like you think - with visual, readable chaining

Config-driven

Your pipelines are typed, declarative endpoints - easy to compose and trigger

Type-safe

Prevent bugs by catching type mismatches at compile time