Scala
made by https://0x3d.site
GitHub - com-lihaoyi/utest: A simple testing framework for ScalaA simple testing framework for Scala. Contribute to com-lihaoyi/utest development by creating an account on GitHub.
Visit Site
GitHub - com-lihaoyi/utest: A simple testing framework for Scala
µTest 0.8.4
uTest (pronounced micro-test) is a simple, intuitive testing library for Scala. Its key features are:
- Nicely formatted, colored, easy-to-read command-line test output
- Single uniform syntax for defining tests and grouping them together
- Single uniform syntax for running test suites and individual tests
- Single uniform syntax for Smart Asserts, instead of multiple
redundant
must_==
/must beEqual
/should be
opertors - Isolation-by-default for tests in the same suite
- Supports every version of Scala under the sun:
Scala.js and Scala-Native, Scala 2.13.0-M2,
projects using SBT or
standalone (e.g. via a
main
method, or in Ammonite Scripts)
Unlike traditional testing libraries for Scala (like Scalatest or Specs2) uTest aims to be simple enough you will never "get lost" in its codebase and functionality, so you can focus on what's most important: your tests.
While uTest has many fewer features than other libraries, the features that it does provide are polished and are enough to build and maintain test suites of any size. uTest is used for countless projects, from the 1-file test suite for Fansi to the 50-file 9,000-line test suite for Ammonite
If you use uTest and like it, please support it by donating to our Patreon:
Contents
- Getting Started
- Defining and Running a Test Suite
- Smart Asserts
- Test Utilities
- Configuring uTest
- Scala.js and Scala-Native
- Running uTest Standalone
- Why uTest
- Changelog
Getting Started
Most people coming to uTest will be running tests through
SBT. Add the following to your build.sbt
and you
can immediately begin defining and running tests programmatically.
libraryDependencies += "com.lihaoyi" %% "utest" % "0.8.4" % "test"
testFrameworks += new TestFramework("utest.runner.Framework")
To use it with Scala.js or Scala-Native:
libraryDependencies += "com.lihaoyi" %%% "utest" % "0.8.4" % "test"
testFrameworks += new TestFramework("utest.runner.Framework")
For Scala-Native, you will also need
nativeLinkStubs := true
Defining and Running a Test Suite
Put this in your src/test/scala/
folder:
package test.utest.examples
import utest._
object HelloTests extends TestSuite{
val tests = Tests{
test("test1"){
throw new Exception("test1")
}
test("test2"){
1
}
test("test3"){
val a = List[Byte](1, 2)
a(10)
}
}
}
You can then run this via
sbt myproject/test
Which should produce this output:
-------------------------------- Running Tests --------------------------------
Setting up CustomFramework
X test.utest.examples.HelloTests.test1 4ms
java.lang.Exception: test1
test.utest.examples.HelloTests$.$anonfun$tests$2(HelloTests.scala:7)
+ test.utest.examples.HelloTests.test2.inner 0ms 1
X test.utest.examples.HelloTests.test3 0ms
java.lang.IndexOutOfBoundsException: 10
scala.collection.LinearSeqOptimized.apply(LinearSeqOptimized.scala:63)
scala.collection.LinearSeqOptimized.apply$(LinearSeqOptimized.scala:61)
scala.collection.immutable.List.apply(List.scala:86)
test.utest.examples.HelloTests$.$anonfun$tests$5(HelloTests.scala:16)
Tearing down CustomFramework
Tests: 3, Passed: 1, Failed: 2
The tests are run one at a time, and any tests that fail with an exception have their stack trace printed. If the number of tests is large, a separate results-summary and failures-summary will be shown after all tests have run.
Nesting Tests
Note that tests within the suite can nested within each other, but only
directly. E.g. you cannot define tests within if
-statements or for
-loops.
uTest relies on the test structure to be statically known at compile time. They
can be nested arbitrarily deep:
package test.utest.examples
import utest._
object NestedTests extends TestSuite{
val tests = Tests{
val x = 1
test("outer1"){
val y = x + 1
test("inner1"){
assert(x == 1, y == 2)
(x, y)
}
test("inner2"){
val z = y + 1
assert(z == 3)
}
}
test("outer2"){
test("inner3"){
assert(x > 1)
}
}
}
}
Here, we have a tree of nested blocks, with three tests at the inner-most blocks
of this tree: innerest
, inner2
and inner3
. Test blocks can be nested
arbitrary deeply to help keep things neat, and only the inner-most blocks are
considered to be tests.
When this suite is run with
sbt myproject/test
, it is those three tests that get executed:
------------------------------- Running Tests -------------------------------
+ test.utest.examples.NestedTests.outer1.inner1 21ms (1,2)
+ test.utest.examples.NestedTests.outer1.inner2 0ms
+ test.utest.examples.NestedTests.outer2.inner3 0ms
You can see also that test.utest.examples.NestedTests.outer1.inner1
displays
the value of (x, y)
returned from the test: (1,2)
. Returning a value from a
test is useful if you want to skim the test's results after a run to perform
manual sanity-checks on some computed value.
If you find yourself wanting to define a test in a for, loop, e.g.
// Doesn't work!
val tests = Tests{
for(fileName <- Seq("hello", "world", "i", "am", "cow")){
fileName - {
// lots of code using fileName
}
}
}
You can instead factor out the common code into a function, and call that from each distinct test case:
// Works!
val tests = Tests{
def runTestChecks(fileName: String) = {
// lots of code using fileName
}
test("hello"){ runTestChecks("hello") }
test("world"){ runTestChecks("world") }
test("i"){ runTestChecks("i") }
test("am"){ runTestChecks("am") }
test("cow"){ runTestChecks("cow") }
}
Or even using the TestPath that is available implicitly to every
test, you can remove the duplication between the test name and the call to
runTestChecks()
:
# Also works!
val tests = Tests{
def runTestChecks()(implicit path: utest.framework.TestPath) = {
val fileName = path.value.last
// lots of code using fileName
}
test("hello"){ runTestChecks() }
test("world"){ runTestChecks() }
test("i"){ runTestChecks() }
test("am"){ runTestChecks() }
test("cow"){ runTestChecks() }
}
Running Tests
Apart from running all tests at once using
sbt myproject/test
You can also run individual tests using their full path e.g.
sbt 'myproject/test-only -- test.utest.examples.NestedTests.outer1.inner1'
sbt 'myproject/test-only -- test.utest.examples.NestedTests.outer2.inner2'
sbt 'myproject/test-only -- test.utest.examples.NestedTests.outer2.inner3'
You can also wrap the test selector in double quotes, which lets you run test whose path segments contain spaces or other special characters:
sbt 'myproject/test-only -- "test.utest.examples.NestedTests.segment with spaces.inner"'
You can run groups of tests by providing the path to the block enclosing all of them:
# runs both tests `inner1` and `inner2`
sbt 'myproject/test-only -- test.utest.examples.NestedTests.outer1'
# runs all tests in the `NestedTests` test suite
sbt 'myproject/test-only -- test.utest.examples.NestedTests'
# runs all tests in `NestedTests` and any other suites within `test.utest.examples`
sbt 'myproject/test-only -- test.utest.examples'
You can also use the {foo,bar}
syntax to specify exactly which tests you would
like to run:
# runs both tests `inner2` and `inner3`, explicitly
sbt 'myproject/test-only -- test.examples.NestedTests.outer1.{inner1,inner2}'
# runs `outer1.inner1` and `outer2.inner3` but not `outer1.inner2`
sbt 'myproject/test-only -- test.examples.NestedTests.{outer1.inner1,outer2.inner3}'
# also runs `inner1` and `innerest` (and any other test inside `inner1`) but not `inner2`
sbt 'myproject/test-only -- test.examples.NestedTests.{outer1.inner1,outer2}'
The same syntax can be used to pick and choose specific TestSuite
s to run, or
tests within those test suites:
# Run every test in `HelloTests` and `NestedTests`
sbt 'myproject/test-only -- test.examples.{HelloTests,NestedTests}'
# Runs `HelloTests.test1`, `NestedTests.outer1.inner2` and `NestedTests.outer2.inner3`
sbt 'myproject/test-only -- test.examples.{HelloTests.test1,NestedTests.outer2}'
sbt 'myproject/test-only -- {test.examples.HelloTests.test1,test.examples.NestedTests.outer2}'
In general, it doesn't really matter if you are running individual tests, groups
of tests within a TestSuite
, individual TestSuite
s, or packages containing
TestSuite
. These all form one a single large tree of tests that you can run,
using the same uniform syntax.
By default, SBT runs multiple test suites in parallel, so the output from
those suites may be interleaved. You can set parallelExecution in Test := false
in your SBT config to make the tests execute sequentially, so the output from
each suite will be grouped together in the terminal.
uTest defaults to emitting ANSI-colored terminal output describing the test run.
You can configure the colors by
overriding methods on your test suite, or disable it
altogether with override def formatColor = false
.
Sharing Setup Code, and Sharing Setup Objects
As you saw in the previous section, you can define blocks tests to group them
together, and have them share common initialization code in the enclosing block.
You can also define mutable values, or "fixtures" in the shared initialization
code, and each nested test with a Tests
block gets its own copy of any mutable
variables defined within it:
package test.utest.examples
import utest._
object SeparateSetupTests extends TestSuite{
val tests = Tests{
var x = 0
test("outer1"){
x += 1
test("inner1"){
x += 2
assert(x == 3) // += 1, += 2
x
}
test("inner2"){
x += 3
assert(x == 4) // += 1, += 3
x
}
}
test("outer2"){
x += 4
test("inner3"){
x += 5
assert(x == 9) // += 4, += 5
x
}
}
}
}
Here, you can see that the x
available in each inner test block (inner1
,
inner2
, inner3
) is separate and independent: each test gets a new copy of
x
, modified only by that test's enclosing blocks. This helps avoid inter-test
interference (where a test ends up implicitly depending on some state
initialized by another test running earlier in the block) while still making it
convenient to share common setup code between the various tests in your suite.
If you want the mutable fixtures to really-truly be shared between individual
tests (e.g. because they are expensive to repeatedly initialize) define it
outside the Tests{}
block in the enclosing object:
package test.utest.examples
import utest._
object SharedFixturesTests extends TestSuite{
var x = 0
val tests = Tests{
test("outer1"){
x += 1
test("inner1"){
x += 2
assert(x == 3) // += 1, += 2
x
}
test("inner2"){
x += 3
assert(x == 7) // += 1, += 2, += 1, += 3
x
}
}
test("outer2"){
x += 4
test("inner3"){
x += 5
assert(x == 16) // += 1, += 2, += 1, += 3, += 4, += 5
x
}
}
}
}
Here you see that the changes to x
are being shared between the invocations of
all the tests. If you are initializing something expensive to share between
tests, this allows you to avoid paying that cost multiple times, but you need to
be careful the tests aren't mutating shared state that could cause other tests
to fail!
Other Ways of Naming tests
You can also use the test("symbol") -
syntax, if your tests are simply forwarding
to a separate helper method to do the real testing:
test("test1") - processFileAndCheckOutput("input1.txt", "expected1.txt")
test("test2") - processFileAndCheckOutput("input2.txt", "expected2.txt")
test("test3") - processFileAndCheckOutput("input3.txt", "expected3.txt")
The test("string"){...}
and test("symbol")...
syntaxes are equivalent.
The last way of defining tests is with the utest.*
symbol, e.g. these tests
from the Fansi
project:
test("parsing"){
def check(frag: fansi.Str) = {
val parsed = fansi.Str(frag.render)
assert(parsed == frag)
parsed
}
test{ check(fansi.Color.True(255, 0, 0)("lol")) }
test{ check(fansi.Color.True(1, 234, 56)("lol")) }
test{ check(fansi.Color.True(255, 255, 255)("lol")) }
test{
(for(i <- 0 to 255) yield check(fansi.Color.True(i,i,i)("x"))).mkString
}
test{
check(
"#" + fansi.Color.True(127, 126, 0)("lol") + "omg" + fansi.Color.True(127, 126, 0)("wtf")
)
}
test{ check(square(for(i <- 0 to 255) yield fansi.Color.True(i,i,i))) }
}
Tests defined using the *
symbol are give the numerical names "0", "1", "2",
etc.. This is handy if you have a very large number of very simple test cases,
don't really care what each one is called, but still want to be able to run them
and collect their result separately.
Asynchronous Tests
val tests = Tests {
test("testSuccess"){
Future {
assert(true)
}
}
test("testFail"){
Future {
assert(false)
}
}
test("normalSuccess"){
assert(true)
}
test("normalFail"){
assert(false)
}
}
TestRunner.runAsync(tests).map { results =>
val leafResults = results.leaves.toSeq
assert(leafResults(0).value.isSuccess) // root
assert(leafResults(1).value.isSuccess) // testSuccess
assert(leafResults(2).value.isFailure) // testFail
assert(leafResults(3).value.isSuccess) // normalSuccess
}
You can have tests which return (have a last expression being) a Future[T]
instead of a normal value. You can run the suite using .runAsync
to return a
Future
of the results, or you can continue using .run
which will wait for
all the futures to complete before returning.
In Scala.js, calling .run
on a test suite with futures in it throws an error
instead of waiting, since you cannot wait for asynchronous results in Scala.js.
When running the test suites from SBT, you do not need worry about any of this
run
vs runAsync
stuff: the test runner will handle it for you and provide
the correct results.
Smart Asserts
val x = 1
val y = "2"
assert(
x > 0,
x == y
)
// utest.AssertionError: x == y
// x: Int = 1
// y: String = 2
uTest comes with a macro-powered smart assert
s that provide useful debugging
information in the error message. These take one or more boolean expressions,
and when they fail, will print out the names, types and values of any local
variables used in the expression that failed. This makes it much easier to see
what's going on than Scala's default assert
, which gives you the stack trace
and nothing else.
uTest also wraps any exceptions thrown within the assert, to help trace what went wrong:
val x = 1L
val y = 0L
assert(x / y == 10)
// utest.AssertionError: assert(x / y == 10)
// caused by: java.lang.ArithmeticException: / by zero
// x: Long = 1
// y: Long = 0
The origin exception is stored as the cause
of the utest.AssertionError
, so
the original stack trace is still available for you to inspect.
uTest's smart asserts live on the utest
package, and are brought into scope
via import utest._
. If you want to continue using the built-in Scala asserts,
e.g. if you want custom messages if the assert fails, those remain available as
Predef.assert
.
Arrow Asserts
1 ==> 1 // passes
Array(1, 2, 3) ==> Array(1, 2, 3) // passes
try{
1 ==> 2 // throws
}catch{case e: java.lang.AssertionError =>
e
}
You can use a ==> b
as a shorthand for assert(a == b)
. This results in
pretty code you can easily copy-paste into documentation.
Intercept
val e = intercept[MatchError]{
(0: Any) match { case _: String => }
}
println(e)
// scala.MatchError: 0 (of class java.lang.Integer)
intercept
allows you to verify that a block raises an exception. This
exception is caught and returned so you can perform further validation on it,
e.g. checking that the message is what you expect. If the block does not raise
one, an AssertionError
is raised.
As with assert
, intercept
adds debugging information to the error messages
if the intercept
fails or throws an unexpected Exception.
Eventually and Continually
val x = Seq(12)
eventually(x == Nil)
// utest.AssertionError: eventually(x == Nil)
// x: Seq[Int] = List(12)
In addition to a macro-powered assert
, uTest also provides macro-powered
versions of eventually
and continually
. These are used to test asynchronous
concurrent operations:
eventually(tests: Boolean*)
: ensure that the boolean values oftests
all become true at least once within a certain period of time.continually(tests: Boolean*)
: ensure that the boolean values oftests
all remain true and never become false within a certain period of time.
These are implemented via a retry-loop, with a default retry interval of 0.1
second and retries up to a total of 1 second. If you want to change this
behavior, you can shadow the implicit values retryInterval
and retryMax
, for
example this:
implicit val retryMax = RetryMax(300.millis)
implicit val retryInterval = RetryInterval(50.millis)
Would set the retry-loop to happen every 50ms up to a max of 300ms.
Together, these two operations allow you to easily test asynchronous operations. You can use them to help verify Liveness properties (that condition must eventually be met) and Safety properties (that a condition is never met)
As with assert
, eventually
and continually
add debugging information to
the error messages if they fail.
Assert Match
assertMatch(Seq(1, 2, 3)){case Seq(1, 2) =>}
// AssertionError: Matching failed Seq(1, 2, 3)
assertMatch
is a convenient way of checking that a value matches a particular
shape, using Scala's pattern matching syntax. This includes support for use of
|
or _
or if
-guards within the pattern match. This gives you additional
flexibility over a traditional assert(a == Seq(1, 2))
, as you can use _
as a
wildcard e.g. using assertMatch(a){case Seq(1, _)=>}
to match any 2-item Seq
whose first item is 1
.
As with assert
, assertMatch
adds debugging information to the error messages
if the value fails to match or throws an unexpected Exception while evaluating.
Compile Error
compileError("true * false")
// CompileError.Type("value * is not a member of Boolean")
compileError("(}")
// CompileError.Parse("')' expected but '}' found.")
compileError
is a macro that can be used to assert that a fragment of code
(given as a literal String) fails to compile.
- If the code compiles successfully,
compileError
will fail the compilation run with a message. - If the code fails to compile,
compileError
will return an instance ofCompileError
, one ofCompileError.Type(pos: String, msgs: String*)
orCompileError.Parse(pos: String, msgs: String*)
to represent typechecker errors or parser errors
In general, compileError
works similarly to intercept
, except it does its
checks (that a snippet of code fails) and errors (if it doesn't fail) at
compile-time rather than run-time. If the code fails as expected, the failure
message is propagated to runtime in the form of a CompileError
object. You can
then do whatever additional checks you want on the failure message, such as
verifying that the failure message contains some string you expect to be there.
The compileError
macro compiles the given string in the local scope and
context. This means that you can refer to variables in the enclosing scope, i.e.
the following example will fail to compile because the variable x
exists.
val x = 0
compileError("x + x"),
// [error] compileError check failed to have a compilation error
The returned CompileError
object also has a handy .check
method, which takes
a position-string indicating where the error is expected to occur, as well as
zero-or-more messages which are expected to be part of the final error message.
This is used as follows:
compileError("true * false").check(
"""
compileError("true * false").check(
^
""",
"value * is not a member of Boolean"
)
Note that the position-string needs to exactly match the line of code the
compile-error occured on. This includes any whitespace on the left, as well as
any unrelated code or comments sharing the same line as the compileError
expression.
Test Utilities
uTest provides a range of test utilities that aren't strictly necessary, but aim to make your writing of tests much more convenient and DRY.
TestPath
package test.utest.examples
import utest._
object TestPathTests extends TestSuite{
val tests = Tests{
'testPath{
'foo {
assert(implicitly[utest.framework.TestPath].value == Seq("testPath", "foo"))
}
}
}
}
uTest exposes the path to the current test to the body of the test via the
utest.framework.TestPath
implicit. This can be used to print debugging
information while the test is running ("test foo.bar.baz 50% done") or to
avoid repetition between the test name and test body.
One example is the Fastparse test suite, which uses the name of the test to provide the repository that it needs to clone and parse:
def checkRepo(filter: String => Boolean = _ => true)
(implicit testPath: utest.framework.TestPath) = {
val url = "https://github.com/" + testPath.value.last
import sys.process._
val name = url.split("/").last
if (!Files.exists(Paths.get("target", "repos", name))){
println("CLONING")
Seq("git", "clone", url, "target/repos/"+name, "--depth", "1").!
}
checkDir("target/repos/"+name, filter)
}
"lihaoyi/fastparse" - checkRepo()
"scala-js/scala-js" - checkRepo()
"scalaz/scalaz" - checkRepo()
"milessabin/shapeless" - checkRepo()
"akka/akka"- checkRepo()
"lift/framework" - checkRepo()
"playframework/playframework" - checkRepo()
"PredictionIO/PredictionIO" - checkRepo()
"apache/spark" - checkRepo()
This allows us to keep the tests DRY - avoiding having to repeat the name of the repo in the name of the test for every test we define - as well as ensuring that they always stay in sync.
If you need additional metadata such as line-numbers or file-paths or class or package names, you can use the SourceCode library's implicits to pull them in for you.
Local Retries
object LocalRetryTests extends utest.TestSuite{
val flaky = new FlakyThing
def tests = Tests{
test("hello") - retry(3){
flaky.run
}
}
}
You can wrap individual tests, or even individual expressions, in a retry
block to make them retry a number of times before failing. That is very useful
for dealing with small points of flakiness within your test suite. A retry
block simply retries its body up to the specified number of times; the first run
that doesn't throw an exception returns the value returned by that run.
You can also use Suite Retries if you want to configure retries more globally across your test suite.
Configuring uTest
Per-Run Setup/Teardown, and other test-running Config
To configure things which affect an entire test run, and not any individual
TestSuite
object, you can create your own subclass of utest.runner.Framework
and override the relevant methods.
For example, if you need to perform some action (initialize a database, cleanup
the filesystem, etc.) not just per-test but per-run, you can do that by defining
a custom utest.runner.Framework
and overriding the setup
and teardown
methods:
class CustomFramework extends utest.runner.Framework{
override def setup() = {
println("Setting up CustomFramework")
}
override def teardown() = {
println("Tearing down CustomFramework")
}
}
And then telling SBT to run tests using the custom framework:
testFrameworks += new TestFramework("test.utest.CustomFramework"),
This is handy for setup/teardown that is necessary but too expensive to do before/after every single test, which would be the case if you used Test Wrapping to do it.
Apart from setup and teardown, there are other methods on
utest.runner.Framework
that you can override to customize:
/**
* Override to run code before tests start running. Useful for setting up
* global databases, initializing caches, etc.
*/
def setup() = ()
/**
* Override to run code after tests finish running. Useful for shutting
* down daemon processes, closing network connections, etc.
*/
def teardown() = ()
/**
* How many tests need to run before uTest starts printing out the test
* results summary and test failure summary at the end of a test run. For
* small sets of tests, these aren't necessary since all the output fits
* nicely on one screen; only when the number of tests gets large and their
* output gets noisy does it become valuable to show the clean summaries at
* the end of the test run.
*/
def showSummaryThreshold = 30
/**
* Whether to use SBT's test-logging infrastructure, or just println.
*
* Defaults to println because SBT's test logging doesn't seem to give us
* anything that we want, and does annoying things like making a left-hand
* gutter and buffering input by default
*/
def useSbtLoggers = false
def resultsHeader = BaseRunner.renderBanner("Results")
def failureHeader = BaseRunner.renderBanner("Failures")
def startHeader(path: String) = BaseRunner.renderBanner("Running Tests" + path)
Output Formatting
You can control how the output of tests gets printed via overriding methods on
the Framework
class, described above. For example, this snippet overrides the
exceptionStackFrameHighlighter
method to select which stack frames in a stack
trace are more relevant to you, so they can be rendered more brightly:
class CustomFramework extends utest.runner.Framework{
override def exceptionStackFrameHighlighter(s: StackTraceElement) = {
s.getClassName.contains("utest.")
}
}
This results in stack traces being rendered as such:
the utest.runner.Framework
provides a wide range of hooks you can use to
customize how the uTest output is colored, wrapped, truncated or formatted:
def formatColor: Boolean = true
def formatTruncateHeight: Int = 15
def formatWrapWidth: Int = 100
def formatValue(x: Any) = testValueColor(x.toString)
def toggledColor(t: ufansi.Attrs) = if(formatColor) t else ufansi.Attrs.Empty
def testValueColor = toggledColor(ufansi.Color.Blue)
def exceptionClassColor = toggledColor(ufansi.Underlined.On ++ ufansi.Color.LightRed)
def exceptionMsgColor = toggledColor(ufansi.Color.LightRed)
def exceptionPrefixColor = toggledColor(ufansi.Color.Red)
def exceptionMethodColor = toggledColor(ufansi.Color.LightRed)
def exceptionPunctuationColor = toggledColor(ufansi.Color.Red)
def exceptionLineNumberColor = toggledColor(ufansi.Color.LightRed)
def exceptionStackFrameHighlighter(s: StackTraceElement) = true
def formatResultColor(success: Boolean) = toggledColor(
if (success) ufansi.Color.Green
else ufansi.Color.Red
)
def formatMillisColor = toggledColor(ufansi.Bold.Faint)
Any methods overriden on your own custom Framework
apply to every TestSuite
that is run. If you want to further customize how a single TestSuite
's output
is formatted, you can override utestFormatter
on that test suite.
Note that uTest uses an internal copy of the
Fansi library, vendored at
utest.ufansi
, in order to avoid any compatibility problems with any of your
other dependencies. You can use ufansi
to construct the colored ufansi.Str
s
that these methods require, or you could just return colored java.lang.String
objects containing ANSI escapes, created however you like, and they will be
automatically parsed into the correct format.
Suite Retries
You can mix in the TestSuite.Retries
trait to any TestSuite
and define the
utestRetryCount
int to enable test-level retries for all tests within a suite:
object SuiteRetryTests extends TestSuite with TestSuite.Retries{
override val utestRetryCount = 3
val flaky = new FlakyThing
def tests = Tests{
'hello{
flaky.run
}
}
}
You can also use Local Retries if you want to only retry within specific tests or expressions instead of throughout the entire suite.
Running code before and after test cases
uTest offers the utestBeforeEach
and utestAfterEach
methods that you can
override on any TestSuite
, these methods are invoked before and after running
each test.
def utestBeforeEach(path: Seq[String]): Unit = ()
def utestAfterEach(path: Seq[String]): Unit = ()
These are equivalent to utestWrap
but easier to use for simple cases.
package test.utest.examples
import utest._
object BeforeAfterEachTest extends TestSuite {
var x = 0
override def utestBeforeEach(path: Seq[String]): Unit = {
println(s"on before each x: $x")
x = 0
}
override def utestAfterEach(path: Seq[String]): Unit =
println(s"on after each x: $x")
val tests = Tests{
test("outer1"){
x += 1
test("inner1"){
x += 2
assert(x == 3) // += 1, += 2
x
}
test("inner2"){
x += 3
assert(x == 4) // += 1, += 3
x
}
}
test("outer2"){
x += 4
test("inner3"){
x += 5
assert(x == 9) // += 4, += 5
x
}
}
}
}
-------------------------------- Running Tests --------------------------------
Setting up CustomFramework
on before each x: 0
on after each x: 3
+ test.utest.examples.BeforeAfterEachTest.outer1.inner1 22ms 3
on before each x: 3
on after each x: 4
+ test.utest.examples.BeforeAfterEachTest.outer1.inner2 1ms 4
on before each x: 4
on after each x: 9
+ test.utest.examples.BeforeAfterEachTest.outer2.inner3 0ms 9
Tearing down CustomFramework
Tests: 3, Passed: 3, Failed: 0
Both utestBeforeEach
and utestAfterEach
runs inside utestWrap
's body
callback.
If you need something fancier than what utestBeforeEach
or utestAfterEach
provide, e.g. passing initialized objects into the main test case or tearing
them down after the test case has completed, feel free to define your test
wrapper/initialization function and use it for each test case:
def myTest[T](func: Int => T) = {
val fixture = 1337 // initialize some value
val res = func(fixture) // make the value available in the test case
assert(fixture == 1337) // properly teardown the value later
res
}
test("test") - myTest{ fixture =>
// do stuff with fixture
}
The above myTest
function can also take a TestPath implicit if it
wants access to the current test's path.
Running code before and after test suites
If you're looking for something like utestBeforeAll
, you can add your code to
the object body, and you can also use lazy val to delay the initialization until
the test suite object is created.
uTest offers the utestAfterAll
method that you can override on any
test suite, this method is invoked after running the entire test suite.
def utestAfterAll(): Unit = ()
package test.utest.examples
import utest._
object BeforeAfterAllSimpleTests extends TestSuite {
println("on object body, aka: before all")
override def utestAfterAll(): Unit = {
println("on after all")
}
val tests = Tests {
test("outer1"){
test("inner1"){
1
}
test("inner2"){
2
}
}
}
}
-------------------------------- Running Tests --------------------------------
Setting up CustomFramework
on object body, aka: before all
+ test.utest.examples.BeforeAfterAllSimpleTests.outer1.inner1 2ms 1
+ test.utest.examples.BeforeAfterAllSimpleTests.outer1.inner2 0ms 2
on after all
Test Wrapping
uTest exposes the utestWrap
function that you can override on any test suite:
def utestWrap(path: Seq[String], runBody: => concurrent.Future[Any])
(implicit ec: ExecutionContext): concurrent.Future[Any]
This is a flexible function that wraps every test call; you can use it to:
- Perform initialization before evaluating
runBody
- Perform cleanup after the completion of
runBody
viarunBody.onComplete
- Perform retries by executing
runBody
multiple times - Log the start and end times of each test, along with the
path
of that test, e.g.Seq("outer", "inner1", "innerest")
for the testouter.inner1.innerest
Generally, if you want to perform messy before/after logic around every
individual test, override utestWrap
. Please remember to call the
utestBeforeEach
and utestAfterEach
methods when needed.
runBody
is a future to support asynchronous testing, which is the only way to
test things like Ajax calls in Scala.js
Scala.js and Scala-Native
uTest is completely compatible with Scala.js and Scala-Native: the above sections on defining a test suite, asserts and the test-running API all work unchanged under ScalaJS, with minor differences:
- ScalaJS does not support parallelism, and as such only single-threaded
ExecutionContexts
likeutest.ExecutionContext.runNow
orscala.scalajs.concurrent.JSExecutionContext.runNow
work. When run via SBT,--parallel
has no effect. - Eventually and Continually are not supported, as they rely on a blocking retry-loop whereas you can't block in ScalaJS.
Apart from these differences, there should be no problem compiling uTest TestSuites via Scala.js and running them on Node.js, in the browser, or (with Scala-Native) on LLVM.
Note that Scala-Native support, like Scala-Native, is experimental. While it is
tested in a few projects (uTest's own test suite runs in Scala-Native), it does
have it's own quirks (e.g. NullPointerException
s appear to be fatal) and does
not have the weight of third-party usage that the Scala-JVM and Scala.js
versions of uTest have.
Running uTest Standalone
uTest exposes a straightforward API that allows you to run tests, receive results and format them in a nice way when used standalone, without using SBT's test integration. The following code snippet demonstrates how to define tests and run them directly:
import utest._
val tests = Tests{
test("test1"){
// throw new Exception("test1")
}
test("test2"){
test("inner"){
1
}
}
test("test3"){
val a = List[Byte](1, 2)
// a(10)
}
}
// Run and return results
val results1 = TestRunner.run(tests)
The TestRunner.run
call can be customized with additional arguments to control
how the code is run, or can be replaced with .runAsync
to handle asynchronous
testing, or .runAndPrint
/.runAndPrintAsync
if you want to print the results
of tests as they complete using the normal output formatter:
// Run, return results, and print streaming output with the default formatter
val results2 = TestRunner.runAndPrint(
tests,
"MyTestSuiteA"
)
// Run, return results, and print output with custom formatter and executor
val results3 = TestRunner.runAndPrint(
tests,
"MyTestSuiteA",
executor = new utest.framework.Executor{
override def utestWrap(path: Seq[String], runBody: => Future[Any])
(implicit ec: ExecutionContext): Future[Any] = {
println("Getting ready to run " + path.mkString("."))
utestBeforeEach()
runBody.andThen {
case _ => utestAfterEach()
}
}
},
formatter = new utest.framework.Formatter{
override def formatColor = false
}
)
Lastly, you can also run TestSuite
objects in the same way:
// Run `TestSuite` object directly without using SBT, and use
// its configuration for execution and output formatting
object MyTestSuite extends TestSuite{
val tests = Tests{
test("test1"){
// throw new Exception("test1")
}
test("test2"){
test("inner"){
1
}
}
test("test3"){
val a = List[Byte](1, 2)
// a(10)
}
}
}
val results4 = TestRunner.runAndPrint(
MyTestSuite.tests,
"MyTestSuiteB",
executor = MyTestSuite,
formatter = MyTestSuite
)
uTest provides helpers to render the standard summary reports at the end of a test run, once all your results are in:
// Show summary and exit
val (summary, successes, failures) = TestRunner.renderResults(
Seq(
"MySuiteA" -> results1,
"MySuiteA" -> results2,
"MySuiteA" -> results3,
"MySuiteB" -> results4
)
)
if (failures > 0) sys.exit(1)
You can thus use uTest anywhere you can run Scala code, even when not using SBT:
in a normal main
method, within Ammonite scripts, or
elsewhere.
Why uTest
uTest aims to give you the things that everyone needs to run tests, giving you one obvious way to do common tasks while testing. uTest is simple and compact, letting you avoid thinking about it so you can focus on what's most important: you tests.
Hence uTest provides:
-
A simple, uniform syntax for delimiting tests and grouping tests together as blocks:
test("test"){ ... }
-
A simple, uniform syntax for running tests:
foo.BarTests
,foo.BarTests.baz.qux
,foo.BarTests.{baz,qux}
orfoo.{BarTests,BazTests}
-
A simple, uniform syntax for Smart Asserts, that save you the day-to-day drudgery of printing out the value of variables when things fail
-
Isolation of tests within the same suite, to avoid inter-test interference due to mutable state
uTest tries to provide things that every developer needs, in their minimal, essential form. It intentionally avoids redundant/unnecessary features or syntaxes that bloat the library and make it harder to developers to pick up, which I find to be common in other popular testing libraries like Scalatest or Specs2:
-
Fluent English-like code: matchers like
shouldBe
orshould not be
ormustbe_==
don't really add anything, and it doesn't really matter whether you name each test block usingshould
,when
,can
,must
,feature("...")
orit should "..."
-
Multiple redundant ways of defining test suites, individual tests and blocks of related tests
-
Legacy code, like ScalaTests time package, now obsolete with the introduction of scala.concurrent.duration.
While uTest has and will continue to slowly grow and add more features, it is unlikely that it will ever reach the same level of complexity that other testing libraries are currently at.
Changelog
0.8.4
- Avoid crashing if test logs have invalid ANSI escape codes #344
0.8.3
- Support for Scala-Native 0.5.0
0.8.2
- Fix compiler warning when using
utest.framework.TestPath
#309
0.8.1
- Add
++
toTests
so that test suites can be concatenated - Add
.prefix(name: String)
toTests
to nest all of its tests under a single test group with a given name
0.8.0
- Drop support for Scala.js 0.6
- Bump Scala.js to 1.10 (minimum version supported is 1.8)
- Bump Scala versions to latest (2.12.16, 2.13.8, 3.1.3)
0.7.11
- Add support for Scala 3 on Scala Native
0.7.10
- Add support for Scala 3.0.0
0.7.9
- Add support for Scala 3.0.0-RC3
- Bump Scala.js from 1.4.0 to 1.5.1
0.7.8
- Add support for Scala 3.0.0-RC2
- Support Scala 3 on Scala.js
0.7.7
- Re-publish to maven central only. The version 0.7.6 broke binary compatibility with JDK 8.
0.7.6
- Support for Scala-Native 0.4.x
0.7.4
- Add support for Scala.js 1.0.0
0.7.3
- Add support for Scala.js 1.0.0-RC2
0.7.2
- Add support for Scala.js 1.0.0-RC1
0.7.1
- Changed test syntax to
test("foo"){...}
,test{...}
. Old syntax is now deprecated.
0.6.9
- Added support for Scala 2.13.0 Final
- Dropped support for Scala 2.10.x, 2.11.x
- Temporarily dropped support for Scala.js 1.0.0-M8, Scala-native 0.4.0-M2
0.6.7
- Add support for Scala 2.13.0-RC1
- Use IndexedSeq instead of Array in
Tests
macro
0.6.6
- Add support for Scala 2.13.0-M5
- Upgrade Scala 2.13.0-M2 to 2.13.0-M3
- Upgrade Scala.JS 0.6.22 to 0.6.25
- Upgrade Scala.JS 1.0.0-M3 to 1.0.0-M5
- Upgrade Scala Native 0.3.6 to 0.3.7
- Replace Scala.JS' deprecated
TestUtils
with portable-scala-reflect
0.6.5
- Bugfix where sometimes all tests would pass but report as failed (thanks @eatkins)
- By default, don't cut-off and wrap output
- (Hopefully) fix intermittent
IllegalStateException: Unknown opcode 5
exceptions occuring with Scala.JS.
0.6.4
- Returning
null
from a test case no longer blows up - Added
utest.runner.MillFramework
0.6.3
- Added support for Scala.js 1.0.0-M2.
0.6.2
- Fix cross-publishing for Scala.js, which was borked in 0.6.0
- Ensure utestAfterEach be executed regardless of a test failure
0.6.0
-
Migrate formatting-related configuration options from
utest.TestSuite
onto theutest.runner.Framework
, as described here. -
Added the
exceptionStackFrameHighlighter
formatting hook, letting you choose which stack frames in an exception are of interest to you so they can be rendered more brightly.
0.5.4
- Added hooks for Running code before and after test cases and Running code before and after test suites, thanks to Diego Alvarez
0.5.3
-
Cross-publish for Scala 2.13.0-M2, Scala.js 0.6.20, Scala-Native 0.3.3
-
Stack traces for chained exceptions (i.e. those with a
.getCause != null
) are now properly displayed when tests fail -
Portions of stack traces caused by the internals of the
assert
macros are now hidden, since they aren't relevant to any failure in user code -
Revamped test output format, motivated by drhumlen's PR 113, which should be much easier to read and skim
-
Much smarter test-output-value truncation, now based on lines-of-output (including wrapping) rather than number-of-characters
-
Line-wrapping of output is now indentation aware: it wraps to the next line with the same indentation, preserving the outline of indentation on the left making it easier to skim
-
How long tests take (im milliseconds) is now displayed in the standard test output format
-
Hierarchical test summary and failure-summary are now only shown when you have a large number of tests, since it's not use when running individual or small numbers of tests. The default threshold is 20, which can be configured by defining a custom framework overriding
showSummaryThreshold
-
Revamped test-query system, now allowing you to run multiple groups of tests at once via
test-only -- mypackage.{foo,bar,baz}
or{mypackage, myotherpackage}
ormypackage.{foo,bar.{baz,qux}}
-
Overhauled the execution model of test suites: now only the inner-most blocks within your
TestSuite{...}
block count as tests, and the surrounding blocks do not. Thus the surrounding blocks no longer show pass/fail status, return a test result-value, or get run independently. -
Various user errors (non-existent test, non-existing test suite, invalid test query syntax) now give slightly more friendly error messages
-
Using uTest with
fork in Test := true
in SBT no longer gives an incorrect results summmary -
Fix problem with lazy vals in test blocks crashing the compiler #67. Note that the issue is only fixed on 2.12.3, and not on Scala 2.10.x or 2.11.x.
-
Deprecated the
'foo{...}
syntax for defining tests. We should standardize ontest("foo"){...}
ortest("foo"){...}
-
The
TestSuite{...}
for defining a block of tests is now deprecated; it never actually defined aTestSuite
object, so the name was pretty misleading. The new syntax isTests{...}
-
Remove the
MultipleErrors
wrapper when you test more than one expression in anassert
and multiple of them fail. Now only the first expression in theassert
call which fails will have it's exception thrown. -
Moved smart asserts from being embedded into the
TestSuite
objects directly onto theutest
package, so they are pulled in by theimport utest._
import.
0.4.8
- Scala Native support.
0.4.7
- Scala 2.13 support
- Compile for Scala 2.12 with method optimisations (
-opt:l:method
)
0.4.6
- Upgrade Scala.JS to 0.6.16.
- Upgrade Scala to 2.11.11 and 2.12.2.
- Avoid using
getStackTraceString
deprecated in Scala 2.13
0.4.5
- Catch Fatal exceptions like ClassCasts in Scala.JS.
0.4.4
- Scala 2.12 support
0.4.3
- Generalize
==>
asserts to work onArray
s - Shiny new CI build and Gitter Chat
0.4.2
- Move errors into
utest.*
fromutest.framework.*
- Removed
acyclic
hack variable
0.4.1
- Fix usage of by-name function calls within tests #55
0.4.0
-
foo: @Show
annotation lets you tell uTest to print out arbitrary expressions within the test suite when things fail, in addition to the default of local variables -
You can use
a ==> b
to assert equality within a test suite, in a form that's pretty enough to use as documentation -
compileError
now properly passes when an expression would fail to compile due to@compileTimeOnly
annotations -
Configuring uTest has been overhauled.
-
Scala
2.12.0-M3
support -
Fix some warnings appearing when the
-Ydead-code
flag is used -
Added TestPath implicit to make the path to the current test available for usage inside the test body or helpers.
0.3.1
- Published for Scala.js 0.6.1
0.3.0
- Published for Scala.js 0.6.0
- Removed
JsCrossBuild
now that Scala.js supports cross-building viacrossProject
compileTimeOnly
has been re-introduced, so invalid use of test DSL should fail with nice errors- Removed
--throw
flag in favor of "native" SBT error reporting
0.2.4
- Added support for asynchronous tests which return a
Future
.
0.2.3
- Updated to work against ScalaJS 0.5.4
0.2.2
- Introduced
CompileError.check(pos: String, msgs: String*)
to simplify the common pattern of checking that the error occurs in the right place and with the message you expect. - Changed the file layout expected by
JsCrossBuild
, to expect the shared files to be injs/shared/
andjvm/shared/
, rather than inshared/
. This is typically achieved via symlinks, and should make the cross-build play much more nicely with IDEs.
0.2.1
- Fix bug in
utestJsSettings
pulling in the wrong version of uTest
0.2.0
- Introduced the
compileError
macro to allow testing of compilation errors. - Stack traces are now only shown for the user code, with the uTest/SBT internal stack trace ignored, making them much less spammy and noisy.
- Introduced the
*
symbol, which can be used in place of a test name to get sequentially numbered test names.
0.1.9
- ScalaJS version is now built against ScalaJS 0.5.3
- Fixed linking errors in ScalaJS version, to allow proper operation of the new optimization
0.1.8
- Fixed bug causing local-defs in assert macro to fail
0.1.7
- Extracted out
utestJvmSettings
andutestJsSettings
for use outside theJsCrossBuild
plugin, for people who don't want to use the plugin.
0.1.6
- Print paths of failing tests after completion to make C&P-ing re-runs more convenient
More Resourcesto explore the angular.
mail [email protected] to add your project or resources here 🔥.
- 1A toolkit for servicing HTTP requests in Scala
https://github.com/unfiltered/unfiltered
A toolkit for servicing HTTP requests in Scala. Contribute to unfiltered/unfiltered development by creating an account on GitHub.
- 2A Scala DSL for talking with databases with minimum verbosity and maximum type safety
https://github.com/squeryl/squeryl
A Scala DSL for talking with databases with minimum verbosity and maximum type safety - squeryl/squeryl
- 3Apache Flink
https://github.com/apache/flink
Apache Flink. Contribute to apache/flink development by creating an account on GitHub.
- 4Vert.x for Scala
https://github.com/vert-x3/vertx-lang-scala
Vert.x for Scala. Contribute to vert-x3/vertx-lang-scala development by creating an account on GitHub.
- 5Chromaprint/AcoustID audio fingerprinting for the JVM
https://github.com/mgdigital/Chromaprint.scala
Chromaprint/AcoustID audio fingerprinting for the JVM - mgdigital/Chromaprint.scala
- 6A macro library that converts native imperative syntax to scalaz's monadic expressions
https://github.com/ThoughtWorksInc/each
A macro library that converts native imperative syntax to scalaz's monadic expressions - ThoughtWorksInc/each
- 7Incredibly simple DI Scala library.
https://github.com/yakivy/jam
Incredibly simple DI Scala library. Contribute to yakivy/jam development by creating an account on GitHub.
- 8Security library for Play framework 2 in Java and Scala: OAuth, CAS, SAML, OpenID Connect, LDAP, JWT...
https://github.com/pac4j/play-pac4j
Security library for Play framework 2 in Java and Scala: OAuth, CAS, SAML, OpenID Connect, LDAP, JWT... - pac4j/play-pac4j
- 9laserdisc-io/mysql-binlog-stream
https://github.com/laserdisc-io/mysql-binlog-stream
Contribute to laserdisc-io/mysql-binlog-stream development by creating an account on GitHub.
- 10GNU Gettext .po file loader for Scala
https://github.com/xitrum-framework/scaposer
GNU Gettext .po file loader for Scala. Contribute to xitrum-framework/scaposer development by creating an account on GitHub.
- 11Light-weight convenience wrapper around Lucene to simplify complex tasks and add Scala sugar.
https://github.com/outr/lucene4s
Light-weight convenience wrapper around Lucene to simplify complex tasks and add Scala sugar. - outr/lucene4s
- 12Workflow engine for exploration of simulation models using high throughput computing
https://github.com/openmole/openmole
Workflow engine for exploration of simulation models using high throughput computing - openmole/openmole
- 13PostgreSQL protocol support for Finagle
https://github.com/finagle/finagle-postgres
PostgreSQL protocol support for Finagle. Contribute to finagle/finagle-postgres development by creating an account on GitHub.
- 14Simple play module for authenticating against Google
https://github.com/guardian/play-googleauth
Simple play module for authenticating against Google - guardian/play-googleauth
- 15Extensible JOSE library for Scala
https://github.com/blackdoor/jose
Extensible JOSE library for Scala. Contribute to blackdoor/jose development by creating an account on GitHub.
- 16Large off-heap arrays and mmap files for Scala and Java
https://github.com/xerial/larray
Large off-heap arrays and mmap files for Scala and Java - xerial/larray
- 17A scala library for connecting to a redis server, or a cluster of redis nodes using consistent hashing on the client side.
https://github.com/debasishg/scala-redis
A scala library for connecting to a redis server, or a cluster of redis nodes using consistent hashing on the client side. - debasishg/scala-redis
- 18Idiomatic, typesafe, and reactive Scala client for Apache Pulsar
https://github.com/CleverCloud/pulsar4s
Idiomatic, typesafe, and reactive Scala client for Apache Pulsar - CleverCloud/pulsar4s
- 19Purely functional JSON parser and library in scala.
https://github.com/argonaut-io/argonaut
Purely functional JSON parser and library in scala. - argonaut-io/argonaut
- 20Modern Load Testing as Code
https://github.com/gatling/gatling
Modern Load Testing as Code. Contribute to gatling/gatling development by creating an account on GitHub.
- 21A Scala ORM library
https://github.com/kostaskougios/mapperdao
A Scala ORM library. Contribute to kostaskougios/mapperdao development by creating an account on GitHub.
- 22Docker containers for testing in scala
https://github.com/testcontainers/testcontainers-scala
Docker containers for testing in scala. Contribute to testcontainers/testcontainers-scala development by creating an account on GitHub.
- 23A scala diff/patch library for Json
https://github.com/gnieh/diffson
A scala diff/patch library for Json. Contribute to gnieh/diffson development by creating an account on GitHub.
- 24Testing tool in Scala for HTTP JSON API
https://github.com/agourlay/cornichon
Testing tool in Scala for HTTP JSON API. Contribute to agourlay/cornichon development by creating an account on GitHub.
- 25If you don't agree with the data
https://github.com/splink/veto
If you don't agree with the data. Contribute to splink/veto development by creating an account on GitHub.
- 26Software Specifications for Scala
https://github.com/etorreborre/specs2
Software Specifications for Scala. Contribute to etorreborre/specs2 development by creating an account on GitHub.
- 27The Couchbase Monorepo for JVM Clients: Java, Scala, io-core…
https://github.com/couchbase/couchbase-jvm-clients
The Couchbase Monorepo for JVM Clients: Java, Scala, io-core… - couchbase/couchbase-jvm-clients
- 28Salat is a simple serialization library for case classes.
https://github.com/salat/salat
Salat is a simple serialization library for case classes. - salat/salat
- 29Practical effect composition library based on abstract wrapping type and the free monad
https://github.com/ISCPIF/freedsl
Practical effect composition library based on abstract wrapping type and the free monad - ISCPIF/freedsl
- 30SevenZip library for Scala, easy to use.
https://github.com/gonearewe/SevenZ4S
SevenZip library for Scala, easy to use. . Contribute to gonearewe/SevenZ4S development by creating an account on GitHub.
- 31The super light testing library for Scala and Scala.js
https://github.com/monix/minitest
The super light testing library for Scala and Scala.js - monix/minitest
- 32A module that provides OAuth, OAuth2 and OpenID authentication for Play Framework applications
https://github.com/jaliss/securesocial
A module that provides OAuth, OAuth2 and OpenID authentication for Play Framework applications - jaliss/securesocial
- 33Compile-time Language Integrated Queries for Scala
https://github.com/zio/zio-quill
Compile-time Language Integrated Queries for Scala - zio/zio-quill
- 34Scala Scripting
https://github.com/com-lihaoyi/Ammonite
Scala Scripting. Contribute to com-lihaoyi/Ammonite development by creating an account on GitHub.
- 35Slick (Scala Language Integrated Connection Kit) is a modern database query and access library for Scala
https://github.com/slick/slick
Slick (Scala Language Integrated Connection Kit) is a modern database query and access library for Scala - slick/slick
- 36Property-based testing for Scala
https://github.com/typelevel/scalacheck
Property-based testing for Scala. Contribute to typelevel/scalacheck development by creating an account on GitHub.
- 37Simpler DynamoDB access for Scala
https://github.com/scanamo/scanamo
Simpler DynamoDB access for Scala. Contribute to scanamo/scanamo development by creating an account on GitHub.
- 38Type-Safe framework for defining, modifying, and querying SQL databases
https://github.com/outr/scalarelational
Type-Safe framework for defining, modifying, and querying SQL databases - outr/scalarelational
- 39ScalaFX simplifies creation of JavaFX-based user interfaces in Scala
https://github.com/scalafx/scalafx
ScalaFX simplifies creation of JavaFX-based user interfaces in Scala - scalafx/scalafx
- 40Performant database access in Scala
https://github.com/lucidsoftware/relate
Performant database access in Scala. Contribute to lucidsoftware/relate development by creating an account on GitHub.
- 41Scala library for boilerplate-free validation
https://github.com/krzemin/octopus
Scala library for boilerplate-free validation. Contribute to krzemin/octopus development by creating an account on GitHub.
- 42Connect a Scala REPL to running JVM processes without any prior setup
https://github.com/xitrum-framework/scalive
Connect a Scala REPL to running JVM processes without any prior setup - xitrum-framework/scalive
- 43A ZIO-based redis client
https://github.com/zio/zio-redis
A ZIO-based redis client. Contribute to zio/zio-redis development by creating an account on GitHub.
- 44Tiny Scala high-performance, async web framework, inspired by Sinatra
https://github.com/scalatra/scalatra
Tiny Scala high-performance, async web framework, inspired by Sinatra - scalatra/scalatra
- 45Reactive data-binding for Scala
https://github.com/ThoughtWorksInc/Binding.scala
Reactive data-binding for Scala. Contribute to ThoughtWorksInc/Binding.scala development by creating an account on GitHub.
- 46The Anorm database library
https://github.com/playframework/anorm
The Anorm database library. Contribute to playframework/anorm development by creating an account on GitHub.
- 47A module for the Play Framework to build highly modular applications
https://github.com/splink/pagelets
A module for the Play Framework to build highly modular applications - splink/pagelets
- 48I/O and Microservice library for Scala
https://github.com/tumblr/colossus
I/O and Microservice library for Scala. Contribute to tumblr/colossus development by creating an account on GitHub.
- 49Scala library to sign HTTP requests to AWS services.
https://github.com/ticofab/aws-request-signer
Scala library to sign HTTP requests to AWS services. - ticofab/aws-request-signer
- 50Next generation user interface and application development in Scala and Scala.js for web, mobile, and desktop.
https://github.com/outr/youi
Next generation user interface and application development in Scala and Scala.js for web, mobile, and desktop. - outr/youi
- 51Statistical Machine Intelligence & Learning Engine
https://github.com/haifengl/smile
Statistical Machine Intelligence & Learning Engine - haifengl/smile
- 52Microbenchmarking and performance regression testing framework for the JVM platform.
https://github.com/scalameter/scalameter
Microbenchmarking and performance regression testing framework for the JVM platform. - scalameter/scalameter
- 53A testing tool for Scala and Java developers
https://github.com/scalatest/scalatest
A testing tool for Scala and Java developers. Contribute to scalatest/scalatest development by creating an account on GitHub.
- 54:monorail: "Scala on Rails" - A full-stack web app framework for rapid development in Scala
https://github.com/skinny-framework/skinny-framework
:monorail: "Scala on Rails" - A full-stack web app framework for rapid development in Scala - skinny-framework/skinny-framework
- 55Molecule translates custom Scala code to database queries for multiple databases.
https://github.com/scalamolecule/molecule
Molecule translates custom Scala code to database queries for multiple databases. - scalamolecule/molecule
- 56Cryptographic primitives for Scala
https://github.com/input-output-hk/scrypto
Cryptographic primitives for Scala. Contribute to input-output-hk/scrypto development by creating an account on GitHub.
- 57A lightweight framework for writing REST services in Scala.
https://github.com/mesosphere/chaos
A lightweight framework for writing REST services in Scala. - mesosphere/chaos
- 58Async and clustered Scala web framework and HTTP(S) server
https://github.com/xitrum-framework/xitrum
Async and clustered Scala web framework and HTTP(S) server - xitrum-framework/xitrum
- 59A distributed tracing extension for Akka. Provides integration with Play framework, Spray and Akka HTTP.
https://github.com/levkhomich/akka-tracing
A distributed tracing extension for Akka. Provides integration with Play framework, Spray and Akka HTTP. - levkhomich/akka-tracing
- 60A simple FRP library and a web UI framework built on it
https://github.com/nafg/reactive
A simple FRP library and a web UI framework built on it - nafg/reactive
- 61Facebook's React on Scala.JS
https://github.com/japgolly/scalajs-react
Facebook's React on Scala.JS. Contribute to japgolly/scalajs-react development by creating an account on GitHub.
- 62Figaro Programming Language and Core Libraries
https://github.com/charles-river-analytics/figaro
Figaro Programming Language and Core Libraries. Contribute to charles-river-analytics/figaro development by creating an account on GitHub.
- 63Optimus is a mathematical programming library for Scala.
https://github.com/vagmcs/Optimus
Optimus is a mathematical programming library for Scala. - vagmcs/Optimus
- 64Fast JSON parser/generator for Scala
https://github.com/gzoller/ScalaJack
Fast JSON parser/generator for Scala. Contribute to gzoller/ScalaJack development by creating an account on GitHub.
- 65Apache Spark - A unified analytics engine for large-scale data processing
https://github.com/apache/spark
Apache Spark - A unified analytics engine for large-scale data processing - apache/spark
- 66scala SQL api
https://github.com/wangzaixiang/scala-sql
scala SQL api. Contribute to wangzaixiang/scala-sql development by creating an account on GitHub.
- 67Scala support library for integrating the JSON API spec with Spray, Play! or Circe
https://github.com/scala-jsonapi/scala-jsonapi
Scala support library for integrating the JSON API spec with Spray, Play! or Circe - scala-jsonapi/scala-jsonapi
- 68Scala code generator for Avro schemas.
https://github.com/malcolmgreaves/avro-codegen
Scala code generator for Avro schemas. Contribute to malcolmgreaves/avro-codegen development by creating an account on GitHub.
- 69Protocol buffer compiler for Scala.
https://github.com/scalapb/ScalaPB
Protocol buffer compiler for Scala. Contribute to scalapb/ScalaPB development by creating an account on GitHub.
- 70Functional JDBC layer for Scala.
https://github.com/tpolecat/doobie
Functional JDBC layer for Scala. Contribute to tpolecat/doobie development by creating an account on GitHub.
- 71CPU and GPU-accelerated Machine Learning Library
https://github.com/BIDData/BIDMach
CPU and GPU-accelerated Machine Learning Library. Contribute to BIDData/BIDMach development by creating an account on GitHub.
- 72Graph for Scala is intended to provide basic graph functionality seamlessly fitting into the Scala Collection Library. Like the well known members of scala.collection, Graph for Scala is an in-memory graph library aiming at editing and traversing graphs, finding cycles etc. in a user-friendly way.
https://github.com/scala-graph/scala-graph
Graph for Scala is intended to provide basic graph functionality seamlessly fitting into the Scala Collection Library. Like the well known members of scala.collection, Graph for Scala is an in-memo...
- 73Axle Domain Specific Language for Scientific Cloud Computing and Visualization
https://github.com/axlelang/axle
Axle Domain Specific Language for Scientific Cloud Computing and Visualization - axlelang/axle
- 74Lightweight and fast serialization library for Scala 2/3 based on Protocol Buffers with macros
https://github.com/zero-deps/proto
Lightweight and fast serialization library for Scala 2/3 based on Protocol Buffers with macros - zero-deps/proto
- 75Scala Uniquely Bound Classes Under Traits
https://github.com/dickwall/subcut
Scala Uniquely Bound Classes Under Traits. Contribute to dickwall/subcut development by creating an account on GitHub.
- 76Highly available distributed strong eventual consistent and sequentially consistent storage with feeds, sorting and search
https://github.com/zero-deps/kvs
Highly available distributed strong eventual consistent and sequentially consistent storage with feeds, sorting and search - zero-deps/kvs
- 77Single Page Applications running on the server side.
https://github.com/fomkin/korolev
Single Page Applications running on the server side. - fomkin/korolev
- 78A foundational framework for distributed programming.
https://github.com/reactors-io/reactors
A foundational framework for distributed programming. - reactors-io/reactors
- 79A dimensional analysis library based on dependent types
https://github.com/to-ithaca/libra
A dimensional analysis library based on dependent types - to-ithaca/libra
- 80CSV handling library for Scala
https://github.com/nrinaudo/kantan.csv
CSV handling library for Scala. Contribute to nrinaudo/kantan.csv development by creating an account on GitHub.
- 81MessagePack serializer implementation for Scala / msgpack.org[Scala]
https://github.com/msgpack/msgpack-scala
MessagePack serializer implementation for Scala / msgpack.org[Scala] - msgpack/msgpack-scala
- 82uPickle: a simple, fast, dependency-free JSON & Binary (MessagePack) serialization library for Scala
https://github.com/com-lihaoyi/upickle
uPickle: a simple, fast, dependency-free JSON & Binary (MessagePack) serialization library for Scala - com-lihaoyi/upickle
- 83a simple Scala CLI parsing library
https://github.com/scallop/scallop
a simple Scala CLI parsing library. Contribute to scallop/scallop development by creating an account on GitHub.
- 84Add-on module for Jackson (https://github.com/FasterXML/jackson) to support Scala-specific datatypes
https://github.com/FasterXML/jackson-module-scala
Add-on module for Jackson (https://github.com/FasterXML/jackson) to support Scala-specific datatypes - FasterXML/jackson-module-scala
- 85Type-safe data migration tool for Slick, Git and beyond.
https://github.com/lastland/scala-forklift
Type-safe data migration tool for Slick, Git and beyond. - lastland/scala-forklift
- 86A tidy SQL-based DB access library for Scala developers. This library naturally wraps JDBC APIs and provides you easy-to-use APIs.
https://github.com/scalikejdbc/scalikejdbc
A tidy SQL-based DB access library for Scala developers. This library naturally wraps JDBC APIs and provides you easy-to-use APIs. - scalikejdbc/scalikejdbc
- 87Scala compiler plugin that acts like GNU xgettext command to extract i18n strings in Scala source code files to Gettext .po file
https://github.com/xitrum-framework/scala-xgettext
Scala compiler plugin that acts like GNU xgettext command to extract i18n strings in Scala source code files to Gettext .po file - xitrum-framework/scala-xgettext
- 88REScala - distributed and reactive programming embedded in OO and FP programs.
https://github.com/rescala-lang/REScala
REScala - distributed and reactive programming embedded in OO and FP programs. - rescala-lang/REScala
- 89Scala classpath scanner
https://github.com/xitrum-framework/sclasner
Scala classpath scanner. Contribute to xitrum-framework/sclasner development by creating an account on GitHub.
- 90Iteratees for Cats
https://github.com/travisbrown/iteratee
Iteratees for Cats. Contribute to travisbrown/iteratee development by creating an account on GitHub.
- 91Fast, secure JSON library with tight ZIO integration.
https://github.com/zio/zio-json
Fast, secure JSON library with tight ZIO integration. - zio/zio-json
- 92Schema registry for CSV, TSV, JSON, AVRO and Parquet schema. Supports schema inference and GraphQL API.
https://github.com/indix/schemer
Schema registry for CSV, TSV, JSON, AVRO and Parquet schema. Supports schema inference and GraphQL API. - indix/schemer
- 93Play2.x Authentication and Authorization module
https://github.com/t2v/play2-auth
Play2.x Authentication and Authorization module. Contribute to t2v/play2-auth development by creating an account on GitHub.
- 94Jawn is for parsing jay-sawn (JSON)
https://github.com/typelevel/jawn
Jawn is for parsing jay-sawn (JSON). Contribute to typelevel/jawn development by creating an account on GitHub.
- 95An ONNX (Open Neural Network eXchange) API and backend for typeful, functional deep learning and classical machine learning in Scala 3
https://github.com/EmergentOrder/onnx-scala
An ONNX (Open Neural Network eXchange) API and backend for typeful, functional deep learning and classical machine learning in Scala 3 - EmergentOrder/onnx-scala
- 96Labeled records for Scala based on structural refinement types and macros.
https://github.com/scala-records/scala-records
Labeled records for Scala based on structural refinement types and macros. - scala-records/scala-records
- 97Breeze is a numerical processing library for Scala.
https://github.com/scalanlp/breeze
Breeze is a numerical processing library for Scala. - scalanlp/breeze
- 98Scala Library for Reading Flat File Data (CSV/TSV/XLS/XLSX)
https://github.com/frugalmechanic/fm-flatfile
Scala Library for Reading Flat File Data (CSV/TSV/XLS/XLSX) - frugalmechanic/fm-flatfile
- 99Platform to build distributed, scalable, enterprise-wide business applications
https://github.com/annetteplatform/annette
Platform to build distributed, scalable, enterprise-wide business applications - annetteplatform/annette
- 100Cassovary is a simple big graph processing library for the JVM
https://github.com/twitter/cassovary
Cassovary is a simple big graph processing library for the JVM - twitter/cassovary
- 101A concurrent reactive programming framework.
https://github.com/storm-enroute/reactors
A concurrent reactive programming framework. Contribute to storm-enroute/reactors development by creating an account on GitHub.
- 102Library to register and lookup actors by names in an Akka cluster
https://github.com/xitrum-framework/glokka
Library to register and lookup actors by names in an Akka cluster - xitrum-framework/glokka
- 103:cake: doddle-model: machine learning in Scala.
https://github.com/picnicml/doddle-model
:cake: doddle-model: machine learning in Scala. Contribute to picnicml/doddle-model development by creating an account on GitHub.
- 104A Scala API for Apache Beam and Google Cloud Dataflow.
https://github.com/spotify/scio
A Scala API for Apache Beam and Google Cloud Dataflow. - spotify/scio
- 105A mini Scala utility library
https://github.com/scala-hamsters/hamsters
A mini Scala utility library. Contribute to scala-hamsters/hamsters development by creating an account on GitHub.
- 106Powerful new number types and numeric abstractions for Scala.
https://github.com/typelevel/spire
Powerful new number types and numeric abstractions for Scala. - typelevel/spire
- 107A Persistence Framework for Scala and NoSQL
https://github.com/longevityframework/longevity
A Persistence Framework for Scala and NoSQL. Contribute to longevityframework/longevity development by creating an account on GitHub.
- 108Async lightweight Scala web framework
https://github.com/dvarelap/peregrine
Async lightweight Scala web framework. Contribute to dvarelap/peregrine development by creating an account on GitHub.
- 109CSV Reader/Writer for Scala
https://github.com/tototoshi/scala-csv
CSV Reader/Writer for Scala. Contribute to tototoshi/scala-csv development by creating an account on GitHub.
- 110A Thrift parser/generator
https://github.com/twitter/scrooge
A Thrift parser/generator. Contribute to twitter/scrooge development by creating an account on GitHub.
- 111N-dimensional / multi-dimensional arrays (tensors) in Scala 3. Think NumPy ndarray / PyTorch Tensor but type-safe over shapes, array/axis labels & numeric data types
https://github.com/SciScala/NDScala
N-dimensional / multi-dimensional arrays (tensors) in Scala 3. Think NumPy ndarray / PyTorch Tensor but type-safe over shapes, array/axis labels & numeric data types - SciScala/NDScala
- 112A JSR-310 port of nscala_time
https://github.com/chronoscala/chronoscala
A JSR-310 port of nscala_time. Contribute to chronoscala/chronoscala development by creating an account on GitHub.
- 113Lightweight Scala Dependency Injection Library
https://github.com/scaldi/scaldi
Lightweight Scala Dependency Injection Library. Contribute to scaldi/scaldi development by creating an account on GitHub.
- 114A fault tolerant, protocol-agnostic RPC system
https://github.com/twitter/finagle
A fault tolerant, protocol-agnostic RPC system. Contribute to twitter/finagle development by creating an account on GitHub.
- 115Scala library for accessing various file, batch systems, job schedulers and grid middlewares.
https://github.com/openmole/gridscale
Scala library for accessing various file, batch systems, job schedulers and grid middlewares. - openmole/gridscale
- 116JVM - Java, Kotlin, Scala image processing library
https://github.com/sksamuel/scrimage
JVM - Java, Kotlin, Scala image processing library - sksamuel/scrimage
- 117A group of neural-network libraries for functional and mainstream languages
https://github.com/mrdimosthenis/Synapses
A group of neural-network libraries for functional and mainstream languages - mrdimosthenis/Synapses
- 118Alpakka Kafka connector - Alpakka is a Reactive Enterprise Integration library for Java and Scala, based on Reactive Streams and Akka.
https://github.com/akka/alpakka-kafka
Alpakka Kafka connector - Alpakka is a Reactive Enterprise Integration library for Java and Scala, based on Reactive Streams and Akka. - akka/alpakka-kafka
- 119Productivity-oriented collection of lightweight fancy stuff for Scala toolchain
https://github.com/7mind/izumi
Productivity-oriented collection of lightweight fancy stuff for Scala toolchain - 7mind/izumi
- 120Real Time Analytics and Data Pipelines based on Spark Streaming
https://github.com/Stratio/sparta
Real Time Analytics and Data Pipelines based on Spark Streaming - Stratio/sparta
- 121C4E, a JVM friendly library written in Scala for both local and distributed (Spark) Clustering.
https://github.com/Clustering4Ever/Clustering4Ever
C4E, a JVM friendly library written in Scala for both local and distributed (Spark) Clustering. - Clustering4Ever/Clustering4Ever
- 122Scala extensions for Google Guice
https://github.com/codingwell/scala-guice
Scala extensions for Google Guice. Contribute to codingwell/scala-guice development by creating an account on GitHub.
- 123Purely functional genetic algorithms for multi-objective optimisation
https://github.com/openmole/mgo
Purely functional genetic algorithms for multi-objective optimisation - openmole/mgo
- 124A composable command-line parser for Scala.
https://github.com/bkirwi/decline
A composable command-line parser for Scala. Contribute to bkirwi/decline development by creating an account on GitHub.
- 125ABANDONED Pure Scala serialization library with annotations
https://github.com/fomkin/pushka
ABANDONED Pure Scala serialization library with annotations - fomkin/pushka
- 126Modify deeply nested case class fields
https://github.com/softwaremill/quicklens
Modify deeply nested case class fields. Contribute to softwaremill/quicklens development by creating an account on GitHub.
- 127Non-blocking, ultra-fast Scala Redis client built on top of Akka IO, used in production at Livestream
https://github.com/Livestream/scredis
Non-blocking, ultra-fast Scala Redis client built on top of Akka IO, used in production at Livestream - Livestream/scredis
- 128RxScala – Reactive Extensions for Scala – a library for composing asynchronous and event-based programs using observable sequences
https://github.com/ReactiveX/RxScala
RxScala – Reactive Extensions for Scala – a library for composing asynchronous and event-based programs using observable sequences - ReactiveX/RxScala
- 129Asynchronous, Reactive Programming for Scala and Scala.js.
https://github.com/monix/monix
Asynchronous, Reactive Programming for Scala and Scala.js. - monix/monix
- 130Easy way to create Free Monad using Scala macros with first-class Intellij support.
https://github.com/Thangiee/Freasy-Monad
Easy way to create Free Monad using Scala macros with first-class Intellij support. - Thangiee/Freasy-Monad
- 131Eff monad for cats - https://atnos-org.github.io/eff
https://github.com/atnos-org/eff
Eff monad for cats - https://atnos-org.github.io/eff - atnos-org/eff
- 132The missing MatPlotLib for Scala + Spark
https://github.com/vegas-viz/Vegas
The missing MatPlotLib for Scala + Spark. Contribute to vegas-viz/Vegas development by creating an account on GitHub.
- 133Scala extensions for the Kryo serialization library
https://github.com/twitter/chill
Scala extensions for the Kryo serialization library - twitter/chill
- 134Minimal, type-safe RPC Scala library.
https://github.com/yakivy/poppet
Minimal, type-safe RPC Scala library. Contribute to yakivy/poppet development by creating an account on GitHub.
- 135Reactive Microservices for the JVM
https://github.com/lagom/lagom
Reactive Microservices for the JVM. Contribute to lagom/lagom development by creating an account on GitHub.
- 136A scala extension for Project Reactor's Flux and Mono
https://github.com/spring-attic/reactor-scala-extensions
A scala extension for Project Reactor's Flux and Mono - spring-attic/reactor-scala-extensions
- 137Scala testing library with actionable errors and extensible APIs
https://github.com/scalameta/munit
Scala testing library with actionable errors and extensible APIs - scalameta/munit
- 138Scala wrapper for SnakeYAML
https://github.com/jcazevedo/moultingyaml
Scala wrapper for SnakeYAML. Contribute to jcazevedo/moultingyaml development by creating an account on GitHub.
- 139SynapseGrid is a framework for constructing dynamic low latency data flow systems.
https://github.com/Primetalk/SynapseGrid
SynapseGrid is a framework for constructing dynamic low latency data flow systems. - Primetalk/SynapseGrid
- 140Distributed NoSQL Database
https://github.com/stephenmcd/curiodb
Distributed NoSQL Database. Contribute to stephenmcd/curiodb development by creating an account on GitHub.
- 141Abstract Algebra for Scala
https://github.com/twitter/algebird
Abstract Algebra for Scala. Contribute to twitter/algebird development by creating an account on GitHub.
- 142Spark package to "plug" holes in data using SQL based rules ⚡️ 🔌
https://github.com/indix/sparkplug
Spark package to "plug" holes in data using SQL based rules ⚡️ 🔌 - GitHub - indix/sparkplug: Spark package to "plug" holes in data using SQL based rules ⚡️ 🔌
- 143A simple testing framework for Scala
https://github.com/com-lihaoyi/utest
A simple testing framework for Scala. Contribute to com-lihaoyi/utest development by creating an account on GitHub.
- 144Scalable Image Analysis and Shape Modelling
https://github.com/unibas-gravis/scalismo
Scalable Image Analysis and Shape Modelling. Contribute to unibas-gravis/scalismo development by creating an account on GitHub.
- 145Web-based notebook that enables data-driven, interactive data analytics and collaborative documents with SQL, Scala and more.
https://github.com/apache/zeppelin
Web-based notebook that enables data-driven, interactive data analytics and collaborative documents with SQL, Scala and more. - apache/zeppelin
- 146Mutation testing for Scala
https://github.com/stryker-mutator/stryker4s
Mutation testing for Scala. Contribute to stryker-mutator/stryker4s development by creating an account on GitHub.
- 147Streaming MapReduce with Scalding and Storm
https://github.com/twitter/summingbird
Streaming MapReduce with Scalding and Storm. Contribute to twitter/summingbird development by creating an account on GitHub.
- 148A library that toggles Scala code at compile-time, like #if in C/C++
https://github.com/ThoughtWorksInc/enableIf.scala
A library that toggles Scala code at compile-time, like #if in C/C++ - ThoughtWorksInc/enableIf.scala
- 149Casbah is now officially end-of-life (EOL).
https://github.com/mongodb/casbah
Casbah is now officially end-of-life (EOL). Contribute to mongodb/casbah development by creating an account on GitHub.
- 150Build highly concurrent, distributed, and resilient message-driven applications on the JVM
https://github.com/akka/akka
Build highly concurrent, distributed, and resilient message-driven applications on the JVM - akka/akka
- 151A framework to create embedded Domain-Specific Languages in Scala
https://github.com/ThoughtWorksInc/Dsl.scala
A framework to create embedded Domain-Specific Languages in Scala - ThoughtWorksInc/Dsl.scala
- 152Scala library for boilerplate-free, type-safe data transformations
https://github.com/scalalandio/chimney
Scala library for boilerplate-free, type-safe data transformations - scalalandio/chimney
- 153Interactive and Reactive Data Science using Scala and Spark.
https://github.com/spark-notebook/spark-notebook
Interactive and Reactive Data Science using Scala and Spark. - spark-notebook/spark-notebook
- 154TensorFlow API for the Scala Programming Language
https://github.com/eaplatanios/tensorflow_scala
TensorFlow API for the Scala Programming Language. Contribute to eaplatanios/tensorflow_scala development by creating an account on GitHub.
- 155numsca is numpy for scala
https://github.com/botkop/numsca
numsca is numpy for scala. Contribute to botkop/numsca development by creating an account on GitHub.
- 156A cohesive & pragmatic framework of FP centric Scala libraries
https://github.com/frees-io/freestyle
A cohesive & pragmatic framework of FP centric Scala libraries - frees-io/freestyle
- 157Build software better, together
https://github.com/Sciss/ScalaCollider
GitHub is where people build software. More than 100 million people use GitHub to discover, fork, and contribute to over 420 million projects.
- 158A lightweight, clean and simple JSON implementation in Scala
https://github.com/spray/spray-json
A lightweight, clean and simple JSON implementation in Scala - spray/spray-json
- 159A new Scala wrapper for Joda Time based on scala-time
https://github.com/nscala-time/nscala-time
A new Scala wrapper for Joda Time based on scala-time - nscala-time/nscala-time
- 160Convenient and performant logging library for Scala wrapping SLF4J.
https://github.com/lightbend-labs/scala-logging
Convenient and performant logging library for Scala wrapping SLF4J. - lightbend-labs/scala-logging
- 161Blindsight is a Scala logging API with DSL based structured logging, fluent logging, semantic logging, flow logging, and context aware logging.
https://github.com/tersesystems/blindsight
Blindsight is a Scala logging API with DSL based structured logging, fluent logging, semantic logging, flow logging, and context aware logging. - tersesystems/blindsight
- 162Command Line Interface Scala Toolkit
https://github.com/backuity/clist
Command Line Interface Scala Toolkit. Contribute to backuity/clist development by creating an account on GitHub.
- 163command line options parsing for Scala
https://github.com/scopt/scopt
command line options parsing for Scala. Contribute to scopt/scopt development by creating an account on GitHub.
- 164Schema safe, type-safe, reactive Scala driver for Cassandra/Datastax Enterprise
https://github.com/outworkers/phantom
Schema safe, type-safe, reactive Scala driver for Cassandra/Datastax Enterprise - outworkers/phantom
- 165A Scala API for Cascading
https://github.com/twitter/scalding
A Scala API for Cascading. Contribute to twitter/scalding development by creating an account on GitHub.
- 166The fastest logging library in the world. Built from scratch in Scala and programmatically configurable.
https://github.com/outr/scribe
The fastest logging library in the world. Built from scratch in Scala and programmatically configurable. - outr/scribe
- 167State of the Art Natural Language Processing
https://github.com/JohnSnowLabs/spark-nlp
State of the Art Natural Language Processing. Contribute to JohnSnowLabs/spark-nlp development by creating an account on GitHub.
- 168Essential Building Blocks for Scala
https://github.com/wvlet/airframe
Essential Building Blocks for Scala. Contribute to wvlet/airframe development by creating an account on GitHub.
- 169ZIO — A type-safe, composable library for async and concurrent programming in Scala
https://github.com/zio/zio
ZIO — A type-safe, composable library for async and concurrent programming in Scala - zio/zio
- 170Lightweight, modular, and extensible library for functional programming.
https://github.com/typelevel/cats
Lightweight, modular, and extensible library for functional programming. - typelevel/cats
- 171Scala validation library
https://github.com/jap-company/fields
Scala validation library. Contribute to jap-company/fields development by creating an account on GitHub.
- 172Cask: a Scala HTTP micro-framework
https://github.com/com-lihaoyi/cask
Cask: a Scala HTTP micro-framework. Contribute to com-lihaoyi/cask development by creating an account on GitHub.
- 173Slick extensions for PostgreSQL
https://github.com/tminglei/slick-pg
Slick extensions for PostgreSQL. Contribute to tminglei/slick-pg development by creating an account on GitHub.
- 174First class syntax support for type classes in Scala
https://github.com/typelevel/simulacrum
First class syntax support for type classes in Scala - typelevel/simulacrum
- 175Persist-Json, a Fast Json Parser Written in Scala
https://github.com/nestorpersist/json
Persist-Json, a Fast Json Parser Written in Scala. Contribute to nestorpersist/json development by creating an account on GitHub.
- 176Refinement types for Scala
https://github.com/fthomas/refined
Refinement types for Scala. Contribute to fthomas/refined development by creating an account on GitHub.
- 177Generic programming for Scala
https://github.com/milessabin/shapeless
Generic programming for Scala. Contribute to milessabin/shapeless development by creating an account on GitHub.
- 178Lift Framework
https://github.com/lift/framework
Lift Framework. Contribute to lift/framework development by creating an account on GitHub.
- 179Fast, testable, Scala services built on TwitterServer and Finagle
https://github.com/twitter/finatra
Fast, testable, Scala services built on TwitterServer and Finagle - twitter/finatra
- 180Build software better, together
https://github.com/wireapp/wire-signals
GitHub is where people build software. More than 100 million people use GitHub to discover, fork, and contribute to over 420 million projects.
- 181The Opinionated RabbitMQ Library for Scala and Akka
https://github.com/SpinGo/op-rabbit
The Opinionated RabbitMQ Library for Scala and Akka - SpinGo/op-rabbit
- 182JSON typeclasses that know the difference between null and absent fields
https://github.com/nrktkt/ninny-json
JSON typeclasses that know the difference between null and absent fields - nrktkt/ninny-json
- 183Scala macros for compile-time generation of safe and ultra-fast JSON codecs + circe booster
https://github.com/plokhotnyuk/jsoniter-scala
Scala macros for compile-time generation of safe and ultra-fast JSON codecs + circe booster - plokhotnyuk/jsoniter-scala
- 184LoMRF is an open-source implementation of Markov Logic Networks
https://github.com/anskarl/LoMRF
LoMRF is an open-source implementation of Markov Logic Networks - anskarl/LoMRF
- 185property based testing library for Scala
https://github.com/scalaprops/scalaprops
property based testing library for Scala. Contribute to scalaprops/scalaprops development by creating an account on GitHub.
- 186Yet another JSON library for Scala
https://github.com/circe/circe
Yet another JSON library for Scala. Contribute to circe/circe development by creating an account on GitHub.
- 187Native Scala mocking framework
https://github.com/paulbutcher/ScalaMock
Native Scala mocking framework. Contribute to paulbutcher/ScalaMock development by creating an account on GitHub.
- 188OAuth 2.0 server-side implementation written in Scala
https://github.com/nulab/scala-oauth2-provider
OAuth 2.0 server-side implementation written in Scala - nulab/scala-oauth2-provider
- 189A small, convenient, dependency-free library for command-line argument parsing in Scala
https://github.com/com-lihaoyi/mainargs
A small, convenient, dependency-free library for command-line argument parsing in Scala - com-lihaoyi/mainargs
- 190Scala + Druid: Scruid. A library that allows you to compose queries in Scala, and parse the result back into typesafe classes.
https://github.com/ing-bank/scruid
Scala + Druid: Scruid. A library that allows you to compose queries in Scala, and parse the result back into typesafe classes. - ing-bank/scruid
- 191akka-persistence-gcp-datastore is a journal and snapshot store plugin for akka-persistence using google cloud firestore in datastore mode.
https://github.com/innFactory/akka-persistence-gcp-datastore
akka-persistence-gcp-datastore is a journal and snapshot store plugin for akka-persistence using google cloud firestore in datastore mode. - GitHub - innFactory/akka-persistence-gcp-datastore: akk...
- 192Mirror of Apache Kafka
https://github.com/apache/kafka
Mirror of Apache Kafka. Contribute to apache/kafka development by creating an account on GitHub.
- 193:leaves: Non-blocking, Reactive MongoDB Driver for Scala
https://github.com/ReactiveMongo/ReactiveMongo
:leaves: Non-blocking, Reactive MongoDB Driver for Scala - ReactiveMongo/ReactiveMongo
- 194Scala GraphQL implementation
https://github.com/sangria-graphql/sangria
Scala GraphQL implementation. Contribute to sangria-graphql/sangria development by creating an account on GitHub.
- 195Functional, stream-based CSV processor for Scala
https://github.com/fingo/spata
Functional, stream-based CSV processor for Scala. Contribute to fingo/spata development by creating an account on GitHub.
- 196ActiveRecord-like ORM library for Scala
https://github.com/aselab/scala-activerecord
ActiveRecord-like ORM library for Scala. Contribute to aselab/scala-activerecord development by creating an account on GitHub.
- 197A Future-free Fs2 native pure FP Redis client
https://github.com/laserdisc-io/laserdisc
A Future-free Fs2 native pure FP Redis client. Contribute to laserdisc-io/laserdisc development by creating an account on GitHub.
- 198Scala framework for building beautiful and maintainable web applications.
https://github.com/UdashFramework/udash-core
Scala framework for building beautiful and maintainable web applications. - UdashFramework/udash-core
- 199Main Portal page for the Jackson project
https://github.com/FasterXML/jackson
Main Portal page for the Jackson project. Contribute to FasterXML/jackson development by creating an account on GitHub.
- 200Library to read, analyze, transform and generate Scala programs
https://github.com/scalameta/scalameta
Library to read, analyze, transform and generate Scala programs - scalameta/scalameta
- 201Compositional, streaming I/O library for Scala
https://github.com/typelevel/fs2
Compositional, streaming I/O library for Scala. Contribute to typelevel/fs2 development by creating an account on GitHub.
- 202The Community Maintained High Velocity Web Framework For Java and Scala.
https://github.com/playframework/playframework
The Community Maintained High Velocity Web Framework For Java and Scala. - playframework/playframework
- 203Scala lightweight, type-safe, asynchronous driver for neo4j
https://github.com/neotypes/neotypes
Scala lightweight, type-safe, asynchronous driver for neo4j - GitHub - neotypes/neotypes: Scala lightweight, type-safe, asynchronous driver for neo4j
- 204Type-safe general-cryptography library - https://jmcardon.github.io/tsec/
https://github.com/jmcardon/tsec
Type-safe general-cryptography library - https://jmcardon.github.io/tsec/ - jmcardon/tsec
- 205JSON library
https://github.com/json4s/json4s
JSON library. Contribute to json4s/json4s development by creating an account on GitHub.
- 206Web & mobile client-side akka-http sessions, with optional JWT support
https://github.com/softwaremill/akka-http-session
Web & mobile client-side akka-http sessions, with optional JWT support - softwaremill/akka-http-session
- 207Lightweight and Nonintrusive Scala Dependency Injection Library
https://github.com/softwaremill/macwire
Lightweight and Nonintrusive Scala Dependency Injection Library - softwaremill/macwire
- 208Rings: efficient JVM library for polynomial rings
https://github.com/PoslavskySV/rings
Rings: efficient JVM library for polynomial rings. Contribute to PoslavskySV/rings development by creating an account on GitHub.
- 209Typesafe, purely functional Computational Intelligence
https://github.com/ciren/cilib
Typesafe, purely functional Computational Intelligence - ciren/cilib
- 210An experimental library for Functional Reactive Programming in Scala
https://github.com/lihaoyi/scala.rx
An experimental library for Functional Reactive Programming in Scala - lihaoyi/scala.rx
- 211New ReactiveCouchbase driver using reactive-streams
https://github.com/ReactiveCouchbase/reactivecouchbase-rs-core
New ReactiveCouchbase driver using reactive-streams - ReactiveCouchbase/reactivecouchbase-rs-core
- 212Simple, safe and intuitive Scala I/O
https://github.com/pathikrit/better-files
Simple, safe and intuitive Scala I/O. Contribute to pathikrit/better-files development by creating an account on GitHub.
- 213Reactive type-safe Scala driver for SQL databases
https://github.com/outworkers/morpheus
Reactive type-safe Scala driver for SQL databases. Contribute to outworkers/morpheus development by creating an account on GitHub.
- 214Lamma schedule generator for Scala is a professional schedule generation library for periodic schedules like fixed income coupon payment, equity deravitive fixing date generation etc.
https://github.com/maxcellent/lamma
Lamma schedule generator for Scala is a professional schedule generation library for periodic schedules like fixed income coupon payment, equity deravitive fixing date generation etc. - GitHub - m...
- 215Tiny High Performance HTTP Server for Scala
https://github.com/analogweb/analogweb-scala
Tiny High Performance HTTP Server for Scala . Contribute to analogweb/analogweb-scala development by creating an account on GitHub.
- 216A test framework that runs everything in parallel.
https://github.com/disneystreaming/weaver-test
A test framework that runs everything in parallel. - GitHub - disneystreaming/weaver-test: A test framework that runs everything in parallel.
- 217Clickhouse Scala Client with Reactive Streams support
https://github.com/crobox/clickhouse-scala-client
Clickhouse Scala Client with Reactive Streams support - crobox/clickhouse-scala-client
- 218Memcached client for Scala
https://github.com/monix/shade
Memcached client for Scala. Contribute to monix/shade development by creating an account on GitHub.
- 219A schema-aware Scala library for data transformation
https://github.com/galliaproject/gallia-core
A schema-aware Scala library for data transformation - galliaproject/gallia-core
- 220Efficient CBOR and JSON (de)serialization in Scala
https://github.com/sirthias/borer
Efficient CBOR and JSON (de)serialization in Scala - sirthias/borer
- 221A purely functional Scala client for CouchDB
https://github.com/beloglazov/couchdb-scala
A purely functional Scala client for CouchDB. Contribute to beloglazov/couchdb-scala development by creating an account on GitHub.
- 222The Play JSON library
https://github.com/playframework/play-json
The Play JSON library. Contribute to playframework/play-json development by creating an account on GitHub.
- 223Image comparison by hash codes
https://github.com/poslegm/scala-phash
Image comparison by hash codes. Contribute to poslegm/scala-phash development by creating an account on GitHub.
- 224Avro schema generation and serialization / deserialization for Scala
https://github.com/sksamuel/avro4s
Avro schema generation and serialization / deserialization for Scala - sksamuel/avro4s
- 225Scala combinator library for working with binary data
https://github.com/scodec/scodec
Scala combinator library for working with binary data - scodec/scodec
- 226Minimal, idiomatic, customizable validation Scala library.
https://github.com/yakivy/dupin
Minimal, idiomatic, customizable validation Scala library. - yakivy/dupin
- 227An implementation of an OAuth2 server designed for mocking/testing
https://github.com/zalando-stups/OAuth2-mock-play
An implementation of an OAuth2 server designed for mocking/testing - zalando-stups/OAuth2-mock-play
- 228A type-safe, reflection-free, powerful enumeration implementation for Scala with exhaustive pattern match warnings and helpful integrations.
https://github.com/lloydmeta/enumeratum
A type-safe, reflection-free, powerful enumeration implementation for Scala with exhaustive pattern match warnings and helpful integrations. - lloydmeta/enumeratum
- 229Optics library for Scala
https://github.com/optics-dev/Monocle
Optics library for Scala. Contribute to optics-dev/Monocle development by creating an account on GitHub.
- 230Scala etcd client implementing V3 APIs
https://github.com/mingchuno/etcd4s
Scala etcd client implementing V3 APIs. Contribute to mingchuno/etcd4s development by creating an account on GitHub.
- 231An asynchronous programming facility for Scala
https://github.com/scala/scala-async
An asynchronous programming facility for Scala. Contribute to scala/scala-async development by creating an account on GitHub.
- 232Accord: A sane validation library for Scala
https://github.com/wix/accord
Accord: A sane validation library for Scala. Contribute to wix-incubator/accord development by creating an account on GitHub.
- 233A data access library for Scala + Postgres.
https://github.com/tpolecat/skunk
A data access library for Scala + Postgres. Contribute to typelevel/skunk development by creating an account on GitHub.
- 234tinylog is a lightweight logging framework for Java, Kotlin, Scala, and Android
https://github.com/tinylog-org/tinylog
tinylog is a lightweight logging framework for Java, Kotlin, Scala, and Android - tinylog-org/tinylog
- 235A purely functional library to build distributed and event-driven systems
https://github.com/parapet-io/parapet
A purely functional library to build distributed and event-driven systems - parapet-io/parapet
- 236Non-blocking, Reactive Redis driver for Scala (with Sentinel support)
https://github.com/etaty/rediscala
Non-blocking, Reactive Redis driver for Scala (with Sentinel support) - etaty/rediscala
- 237Wonderful reusable code from Twitter
https://github.com/twitter/util
Wonderful reusable code from Twitter. Contribute to twitter/util development by creating an account on GitHub.
- 238The Scala API for Quantities, Units of Measure and Dimensional Analysis
https://github.com/typelevel/squants
The Scala API for Quantities, Units of Measure and Dimensional Analysis - typelevel/squants
- 239Squid – type-safe metaprogramming and compilation framework for Scala
https://github.com/epfldata/squid
Squid – type-safe metaprogramming and compilation framework for Scala - epfldata/squid
- 240Principled Functional Programming in Scala
https://github.com/scalaz/scalaz
Principled Functional Programming in Scala. Contribute to scalaz/scalaz development by creating an account on GitHub.
- 241sbt plugin that generates Scala case classes for easy, statically typed and implicit access of JSON data e.g. from API responses
https://github.com/battermann/sbt-json
sbt plugin that generates Scala case classes for easy, statically typed and implicit access of JSON data e.g. from API responses - battermann/sbt-json
- 242Accelerate local LLM inference and finetuning (LLaMA, Mistral, ChatGLM, Qwen, Baichuan, Mixtral, Gemma, Phi, MiniCPM, etc.) on Intel CPU and GPU (e.g., local PC with iGPU, discrete GPU such as Arc, Flex and Max); seamlessly integrate with llama.cpp, Ollama, HuggingFace, LangChain, LlamaIndex, GraphRAG, DeepSpeed, vLLM, FastChat, Axolotl, etc.
https://github.com/intel-analytics/BigDL
Accelerate local LLM inference and finetuning (LLaMA, Mistral, ChatGLM, Qwen, Baichuan, Mixtral, Gemma, Phi, MiniCPM, etc.) on Intel CPU and GPU (e.g., local PC with iGPU, discrete GPU such as Arc,...
- 243Mockito for Scala language
https://github.com/mockito/mockito-scala
Mockito for Scala language. Contribute to mockito/mockito-scala development by creating an account on GitHub.
- 244High-performance SLF4J wrapper for Scala.
https://github.com/Log4s/log4s
High-performance SLF4J wrapper for Scala. Contribute to Log4s/log4s development by creating an account on GitHub.
- 245🔍 Elasticsearch Scala Client - Reactive, Non Blocking, Type Safe, HTTP Client
https://github.com/sksamuel/elastic4s
🔍 Elasticsearch Scala Client - Reactive, Non Blocking, Type Safe, HTTP Client - Philippus/elastic4s
- 246aossie / Agora · GitLab
https://gitlab.com/aossie/Agora/
An Electronic Voting Library implemented in Scala
- 247aossie / Scavenger · GitLab
https://gitlab.com/aossie/Scavenger
A theorem prover based on the conflict resolution calculus
- 248SBT plugin for tweaking various IDE settings
https://github.com/JetBrains/sbt-ide-settings
SBT plugin for tweaking various IDE settings. Contribute to JetBrains/sbt-ide-settings development by creating an account on GitHub.
- 249An HTTP Server and Client library for Scala.
https://github.com/criteo/lolhttp
An HTTP Server and Client library for Scala. Contribute to criteo/lolhttp development by creating an account on GitHub.
- 250Scalafmt · Code formatter for Scala
https://scalameta.org/scalafmt/
Code formatter for Scala
- 251sbt plugin that can check Maven and Ivy repositories for dependency updates
https://github.com/rtimush/sbt-updates
sbt plugin that can check Maven and Ivy repositories for dependency updates - rtimush/sbt-updates
- 252Scala command-line wrapper around ffmpeg, ffprobe, ImageMagick, and other tools relating to media.
https://github.com/outr/media4s
Scala command-line wrapper around ffmpeg, ffprobe, ImageMagick, and other tools relating to media. - outr/media4s
- 253friendly little parsers
https://github.com/tpolecat/atto
friendly little parsers. Contribute to tpolecat/atto development by creating an account on GitHub.
- 254simple combinator-based parsing for Scala. formerly part of the Scala standard library, now a separate community-maintained module
https://github.com/scala/scala-parser-combinators
simple combinator-based parsing for Scala. formerly part of the Scala standard library, now a separate community-maintained module - scala/scala-parser-combinators
Related Articlesto learn about angular.
- 1Introduction to Scala: Beginner’s Guide
- 2Understanding Scala’s Type System: Types and Generics
- 3Functional Programming with Scala
- 4Advanced Functional Programming in Scala: Monads, Functors, and More
- 5Building RESTful APIs with Scala and Akka HTTP: A Beginner’s Guide
- 6Play Framework for Scala Web Development: A Step-by-Step Guide
- 7Concurrency in Scala: Mastering Futures and Promises
- 8Optimizing Scala Performance: Tips for High-Performance Scala Applications
- 9Developing a Scala-based Chat Application: From Concept to Deployment
- 10Creating a Scala-based Data Processing Pipeline: Handling Big Data Efficiently
FAQ'sto learn more about Angular JS.
mail [email protected] to add more queries here 🔍.
- 1
can scala do functional programming
- 2
is scala worth learning in 2023
- 3
is scala popular
- 4
is scala a popular language
- 5
why was scala created
- 6
is scala better than python
- 7
can scala use java libraries
- 8
what is the paradigm of the scala programming language
- 9
why use scala programming language
- 10
should i learn scala
- 11
is scala a good language
- 12
is scala a programming language
- 13
where is la scala opera house located
- 14
when was scala created
- 15
how does scala work
- 16
where is scala installed on windows
- 17
why scala is called functional programming language
- 18
does scala use jvm
- 19
where is scala programming language used
- 20
what is scala software
- 21
why learn scala
- 22
why scala over java
- 23
why scala over python
- 24
- 25
where scala is used
- 26
how to learn scala programming
- 27
is scala a popular programming language
- 28
where is la scala located
- 30
who developed scala
- 31
what is scala code
- 32
why scala is not popular
- 33
- 34
- 35
which of the following programming paradigm does scala support
- 36
- 37
can i use scala code in java
- 38
how is scala different from python
- 39
who created scala
- 40
when scala spark
- 41
is scala dead 2023
- 42
who invented scala
- 43
where is la scala located in italy
- 44
- 45
why scala is functional programming language
- 46
is scala open source
- 47
what is scala mostly used for
- 48
is scala written in java
- 49
is scala a dying language
- 50
what is scala programming language used for
- 51
is scala a good programming language
- 52
why scala is better than java
- 53
what is scala programming
- 54
when to use scala
- 55
can i learn scala without java
- 56
does scala compile to java
- 57
why scala is used
- 58
what is functional programming in scala
- 59
should i learn scala reddit
- 60
should i learn java or scala
- 61
how to pronounce scala programming language
- 63
does scala run on jvm
- 64
what is scala programming used for
- 65
who uses scala programming language
- 66
is scala functional programming
More Sitesto check out once you're finished browsing here.
https://www.0x3d.site/
0x3d is designed for aggregating information.
https://nodejs.0x3d.site/
NodeJS Online Directory
https://cross-platform.0x3d.site/
Cross Platform Online Directory
https://open-source.0x3d.site/
Open Source Online Directory
https://analytics.0x3d.site/
Analytics Online Directory
https://javascript.0x3d.site/
JavaScript Online Directory
https://golang.0x3d.site/
GoLang Online Directory
https://python.0x3d.site/
Python Online Directory
https://swift.0x3d.site/
Swift Online Directory
https://rust.0x3d.site/
Rust Online Directory
https://scala.0x3d.site/
Scala Online Directory
https://ruby.0x3d.site/
Ruby Online Directory
https://clojure.0x3d.site/
Clojure Online Directory
https://elixir.0x3d.site/
Elixir Online Directory
https://elm.0x3d.site/
Elm Online Directory
https://lua.0x3d.site/
Lua Online Directory
https://c-programming.0x3d.site/
C Programming Online Directory
https://cpp-programming.0x3d.site/
C++ Programming Online Directory
https://r-programming.0x3d.site/
R Programming Online Directory
https://perl.0x3d.site/
Perl Online Directory
https://java.0x3d.site/
Java Online Directory
https://kotlin.0x3d.site/
Kotlin Online Directory
https://php.0x3d.site/
PHP Online Directory
https://react.0x3d.site/
React JS Online Directory
https://angular.0x3d.site/
Angular JS Online Directory