Skip to content

Releases: kevin-lee/extras

v0.50.1

27 Dec 02:44

Choose a tag to compare

0.50.1 - 2025-12-27

Bug Fixes

  • [extras-core] extras.core.syntax.all is missing predefs in Scala 2 (#599)

What's Changed

  • Update README and API docs: Rename Elvis Operator in Scala 2 to Crying Elvis Operator by @kevin-lee in #597
  • Update image alt text and link in changelog 0.50.0 by @kevin-lee in #598
  • Close #599: [extras-core] extras.core.syntax.all is missing predefs in Scala 2 by @kevin-lee in #600
  • extras v0.50.1 by @kevin-lee in #601

Full Changelog: v0.50.0...v0.50.1

v0.50.0

25 Dec 02:18

Choose a tag to compare

0.50.0 - 2025-12-25 🎄🎁

New Features

  • [extras-core] Add the Elvis operator (?:) to extras.core.syntax for Scala 3 (#580)

    Elvis Operator

    val a: String | Null = "blah"
    
    a ?: "Unknown"
    // String = "blah"
    val a: String | Null = null
    
    a ?: "Unknown"
    // String = "Unknown"
    val a: String | Null = "blah"
    
    a ?: { println("Hello!"); "Unknown" }
    // String = "blah"
    val a: String | Null = null
    
    a ?: { println("Hello!"); "Unknown" }
    // Hello!
    // String = "Unknown"

  • [extras-core] Add the Crying Elvis Operator (?:=) to extras.core.syntax for Scala 2 (#594)

    Crying Elvis Operator

    • Unlike Scala 3's extension methods, in Scala 2, extension methods are just regular methods in an implicit value class. As a result, method names ending with : are right-associative, so a ?: b is evaluated as b.?:(a).

      Since we need the possibly-null value (a) to be the receiver, the operator is provided as ?:= (not ending with :), so a ?:= b is evaluated as a.?:=(b).

    • Scala 2 doesn't have union types like A | Null, so this operates on a plain A value that may be null at runtime.

    • Also, for compatibility with Scala 2 code, Scala 3 predefs should have ?:= as an alias for ?:.

    val a = "blah"
    
    a ?:= "Unknown"
    // String = "blah"
    val a: String = null
    
    a ?:= "Unknown"
    // String = "Unknown"
    val a = "blah"
    
    a ?:= { println("Hello!"); "Unknown" }
    // String = "blah"
    val a: String = null
    
    a ?:= { println("Hello!"); "Unknown" }
    // Hello!
    // String = "Unknown"

Changes

  • Rename extras.core.syntax.string to extras.core.syntax.strings (#578)

    Also, replace the package object for extras.core.syntax with a package named extras.core.syntax.

Internal Housekeeping

  • Upgrade doobie for cats-effect 3 to 1.0.0-RC10 (#587)

  • Update libraries (#591)

    • Update cats to 2.13.0
    • Update cats-effect 3 to 3.6.3
    • Update kittens to 3.5.0
    • Update circe to 0.14.13
    • Update fs2 v3 to 3.12.2
    • Update hedgehog-extra to 0.19.0
    • Update embedded-postgres to 2.2.0
    • Update effectie to 2.3.0

What's Changed

Full Changelog: v0.49.0...v0.50.0

v0.49.0

19 Aug 14:57

Choose a tag to compare

0.49.0 - 2025-08-19

New Features

  • [extras-testing-tools] Support Scala Native (#572)
    • StubTools is not included because Thread.currentThread.getStackTrace.toList returns an empty List.

What's Changed

Full Changelog: v0.48.0...v0.49.0

v0.48.0

14 Aug 16:40

Choose a tag to compare

0.48.0 - 2025-08-15

New Features

  • Support Scala Native (#567)

What's Changed

Full Changelog: v0.47.0...v0.48.0

v0.47.0

06 Aug 13:34
a5ed14c

Choose a tag to compare

0.47.0 - 2025-08-06

New Features

  • [extras-testing-tools] Add Scala.js support (#560)

  • [extras-testing-tools] Add compile-time error check for Scala 2 (#562)

    CompileTimeError.from(
      "some Scala code causing a compile-time error"
    )
    // String = "compile-time error message"

What's Changed

Full Changelog: v0.46.1...v0.47.0

v0.46.1

27 Jul 11:49
65a9350

Choose a tag to compare

0.46.1 - 2025-07-27

Bug Fixed

  • [extras-render] .render extension method doesn't work well when there's a method with the same name exists in the context in Scala 3 (#554)

    • Version: 0.46.0
    • Scala Version: 3
    • Java Version: n/a

    The following code

    import extras.render.Render
    import extras.render.syntax.*
    
    final case class JdkByCs(
      version: JdkByCs.Version,
    ) derives CanEqual
    object JdkByCs {
    
      extension (jdkByCs: JdkByCs) {
        def render: String =
          s"JdkByCs(version=${jdkByCs.version.render})" // <= this .render fails!
      }
    
      type Version = Version.Type
      object Version extends Newtype[SemVer | DecVer | DotSeparatedVersion] {
    
        extension (version: Version) {
          def major: MajorVersion = version.value match {
            case SemVer(m, n, _, _, _) =>
              MajorVersion(if (m.value == 1) n.value else m.value)
    
            case DecVer(m, n, _, _) =>
              MajorVersion(if (m.value == 1) n.value else m.value)
    
            case DotSeparatedVersion(v, vs) =>
              val vNum = v.toInt
              MajorVersion(
                if vNum == 1 then
                  vs.take(1)
                    .headOption
                    .filter(_.forall(_.isDigit))
                    .fold(vNum)(_.toInt)
                else vNum
              )
          }
    
        }
    
        given renderVersion: Render[Version] with {
    
          def render(a: Version): String = a.value match {
            case v: SemVer => SemVer.render(v)
            case v: DecVer => DecVer.render(v)
            case DotSeparatedVersion(v, vs) => s"$v.${vs.mkString(".")}"
          }
        }
      }
    
    }

    fails in compilation with an error like

    [error] -- [E008] Not Found Error: /home/runner/work/jdk-sym-link/jdk-sym-link/modules/jdk-sym-link-core/src/main/scala/jdksymlink/cs/CoursierCmd.scala:90:103
    [error] 90 |        s"""JdkByCs(version=${jdkByCs.version.render})
    [error]    |                              ^^^^^^^^^^^^^^^^^^^^^^
    [error]    |value render is not a member of jdksymlink.cs.CoursierCmd.JdkByCs.Version.
    [error]    |An extension method was tried, but could not be fully constructed:
    [error]    |
    [error]    |    jdksymlink.cs.CoursierCmd.JdkByCs.render(jdkByCs.version)
    [error]    |
    [error]    |    failed with:
    [error]    |
    [error]    |        Found:    (jdkByCs.version : jdksymlink.cs.CoursierCmd.JdkByCs.Version)
    [error]    |        Required: jdksymlink.cs.CoursierCmd.JdkByCs
    
    
    • Cause:

      Although it's an extension method with the name render for JdkByCs, it looks like this extension method

          extension (jdkByCs: JdkByCs) {
            def render: String =
              s"""JdkByCs(version=${jdkByCs.version.render})" // <= this .render fails!
          }

      has precedence over the extension method of the same name for JdkByCs.Version.

    • Solution:

      Revert the render extension method for Scala 3 back to an implicit value class.

What's Changed

  • Fix #554: [extras-render] .render extension method doesn't work well when there's a method with the same name exists in the context in Scala 3 by @kevin-lee in #555
  • extras v0.46.1 by @kevin-lee in #556

Full Changelog: v0.46.0...v0.46.1

v0.46.0

27 Jul 06:49
830c6eb

Choose a tag to compare

0.46.0 - 2025-07-27

New Features

  • [extras-render] Add a new implementation of Render for Scala 3 using Scala 3 syntax (#543)

    • Get rid of implicit syntax
      • Use using and summon.
      • Use type-class syntax.
      • Use extension method syntax.
    • Use opaque type.
  • [extras-render] Provide an optional instance of cats.Contravariant[Render] (#545)

    • The instance of cats.Contravariant[Render] is available only if the cats library is included in the project. Without it, attempting to use or access the instance of the cats.Contravariant[Render] type class causes a "compile-time" error.
    • Although Render has a contramap extension method, it’s still a good idea to provide an instance of cats.Contravariant. Since I don’t want extras-render to depend on Cats by default, I want to make it optional using sbt’s Optional dependency feature.

Internal Housekeeping

  • Upgrade hedgehog and hedgehog-extra (#549)
    • hedgehog to 0.10.1
    • hedgehog-extra to 0.11.0

What's Changed

  • Remove package-lock.json by @kevin-lee in #538
  • Bump sbt-devoops to 3.2.1 by @kevin-lee in #539
  • Upgrade Docusaurus to version 3.8.1 and migrate to TypeScript by @kevin-lee in #540
  • Bump sbt to 1.11.3 by @kevin-lee in #541
  • Update docs: Replace outdated 47deg.com URLs with current xebia.com URLs by @kevin-lee in #542
  • Close #543: [extras-render] Add a new implementation of Render for Scala 3 using Scala 3 syntax by @kevin-lee in #544
  • Update Scala version from 2.13.10 to 2.13.12 in GitHub Actions config by @kevin-lee in #547
  • Close #545: [extras-render] Provide an optional instance of cats.Contravariant[Render] by @kevin-lee in #546
  • Update GitHub Actions: Refactor GitHub workflow triggers by @kevin-lee in #548
  • Close #549: Upgrade hedgehog and hedgehog-extra by @kevin-lee in #550
  • Update: GitHub Actions - Increase JVM heap size to 8G and consolidate coverage reporting by @kevin-lee in #551
  • Update: GitHub Actions - Add manual trigger to coverage workflow by @kevin-lee in #552
  • extras v0.46.0 by @kevin-lee in #553

Full Changelog: v0.45.0...v0.46.0

v0.45.0

23 Jun 01:49
18ed370

Choose a tag to compare

0.45.0 - 2025-06-23

Internal Housekeeping

  • Upgrade effectie to 2.0.0 (#526)
  • Upgrade effectie to 2.0.0-beta14 (#508)

New Features

  • Add Scala.js support (#522)

What's Changed

  • Update docs - cases.md - cases syntax from extras-string by @kevin-lee in #494
  • Update: docs - badge for extras-string by @kevin-lee in #495
  • Update docs - cases.md - Seq[String] to PascalCaseString by @kevin-lee in #496
  • Update docs - cases.md - Seq[String] to camelCaseString by @kevin-lee in #497
  • Update docs - cases.md - Seq[String] to Snake_Case_String by @kevin-lee in #498
  • Update docs - cases.md - Seq[String] to SNAKE_UPPER_CASE_STRING, snake_lower_case_string and Kebab-Case-String, by @kevin-lee in #499
  • Update docs - cases.md - Seq[String] to KEBAB-UPPER-CASE-STRING by @kevin-lee in #500
  • Update docs - cases.md - Seq[String] to kebab-lower-case-string by @kevin-lee in #501
  • Update docs - cases.md - more examples to case changes for Seq[String] by @kevin-lee in #502
  • Update docs - cases.md - Split String by PascalCase or cacmelCase by @kevin-lee in #503
  • Upgrade: Bump actions/setup-java from 3 to 4 by @dependabot[bot] in #504
  • Bump sbt to 1.9.8 by @kevin-lee in #506
  • Close #508 - Upgrade effectie to 2.0.0-beta14 by @kevin-lee in #509
  • Upgrade: Bump actions/cache from 3 to 4 by @dependabot[bot] in #510
  • Update docs: Add a logo image sized 96x96 by @kevin-lee in #511
  • Update docs by @kevin-lee in #512
  • Fix the broken mdoc build due to the missing "-Ymacro-annotations" in scalacOptions by @kevin-lee in #513
  • Update docs: Make the sidebar hidable by @kevin-lee in #514
  • Upgrade: Bump codecov/codecov-action from 3 to 4 by @dependabot[bot] in #515
  • Close #517 - Bump hedgehog-extra to 0.8.0 by @kevin-lee in #518
  • Upgrade: Bump TimonVS/pr-labeler-action from 4 to 5 by @dependabot[bot] in #516
  • Bump sbt to 1.9.9 by @kevin-lee in #519
  • Bump sbt-devoops to 3.1.0 / sbt-docusaur to 0.16.0 by @kevin-lee in #520
  • Upgrade: Bump scalacenter/sbt-dependency-submission from 2 to 3 by @dependabot[bot] in #521
  • Update GitHub Actions: Replace custom SBT cache setup with actions/setup-java's and add sbt/setup-sbt action to have sbt as well as increasing MaxMetaspaceSize to 2G by @kevin-lee in #524
  • Update .gitignore to exclude additional build tool files by @kevin-lee in #523
  • Updated sbt plugin and Scala versions, and refactored the rainbow color logic by @kevin-lee in #525
  • Close #526 - Upgrade effectie to 2.0.0 by @kevin-lee in #528
  • Upgrade: Bump codecov/codecov-action from 4 to 5 by @dependabot[bot] in #527
  • Update GitHub Actions: Add sbt/setup-sbt to dependency-graph workflow by @kevin-lee in #529
  • Bump sbt to 1.10.11 by @kevin-lee in #530
  • Update docs: Add documentation for Int.toOrdinal and Long.toOrdinal methods by @kevin-lee in #531
  • Update docs: Format Int.toOrdinal and Long.toOrdinal headings by @kevin-lee in #532
  • Update docs: Reorder strings syntax: Move commaAnd, serialCommaAnd, commaOr and serialCommaOr to before commaWith and serialCommaWith by @kevin-lee in #533
  • Upgrade sbt to 1.11.0 and the sbt-ci-release plugin to 1.11.1 / clean up unused build settings related to the old Maven Central (OSSRH). by @kevin-lee in #534
  • Bump sbt to 1.11.2 by @kevin-lee in #535
  • Close #522 - Support Scala.js by @kevin-lee in #536
  • extras v0.45.0 by @kevin-lee in #537

Full Changelog: v0.44.0...v0.45.0

v0.44.0

05 Nov 12:46
1f3269b

Choose a tag to compare

0.44.0 - 2023-11-05

New Features

  • [extras-string] Add extras.strings.syntax.all to have all strings syntax (#441)
    import extras.strings.syntax.all._
  • [extras-string] Add case conversion - string.toPascalCase (#443)
    import extras.strings.syntax.cases._
    // or
    import extras.strings.syntax.all._
    "Abc".toPascalCase
    // Abc
    "AbcDefGhi".toPascalCase
    // AbcDefGhi
    "abcDefGhi".toPascalCase
    // AbcDefGhi
    "abc".toPascalCase
    // Abc
    "ABC".toPascalCase
    // Abc
    "abc_def_ghi".toPascalCase
    // AbcDefGhi
    "abc-def-ghi".toPascalCase
    // AbcDefGhi
    "abc def ghi".toPascalCase
    // AbcDefGhi
  • [extras-string] Add case conversion - string.toOnePascalCase (#455)
    import extras.strings.syntax.cases._
    // or
    import extras.strings.syntax.all._
    "Abc".toOnePascalCase
    // Abc
    "AbcDef".toOnePascalCase
    // Abcdef
    "abcDef".toOnePascalCase
    // Abcdef
    "abc".toOnePascalCase
    // Abc
    "ABC".toOnePascalCase
    // Abc
  • [extras-string] Add case conversion - string.toCamelCase (#444)
    import extras.strings.syntax.cases._
    // or
    import extras.strings.syntax.all._
    "Abc".toCamelCase
    // abc
    "AbcDefGhi".toCamelCase
    // abcDefGhi
    "abcDefGhi".toCamelCase
    // abcDefGhi
    "abc".toCamelCase
    // abc
    "ABC".toCamelCase
    // abc
    "abc_def_ghi".toCamelCase
    // abcDefGhi
    "abc-def-ghi".toCamelCase
    // abcDefGhi
    "abc def ghi".toCamelCase
    // abcDefGhi
  • [extras-string] Add case conversion - string.toSnakeCase (#445)
    import extras.strings.syntax.cases._
    // or
    import extras.strings.syntax.all._
    "Abc".toSnakeCase
    // Abc
    "AbcDefGhi".toSnakeCase
    // Abc_Def_Ghi
    "abcDefGhi".toSnakeCase
    // abc_Def_Ghi
    "abc".toSnakeCase
    // abc
    "ABC".toSnakeCase
    // ABC
    "Abc_Def_Ghi".toSnakeCase
    // Abc_Def_Ghi
    "abc_def_ghi".toSnakeCase
    // abc_def_ghi
    "ABC_DEF_GHI".toSnakeCase
    // ABC_DEF_GHI
    "abc-def-ghi".toSnakeCase
    // abc_def_ghi
    "Abc-Def-Ghi".toSnakeCase
    // Abc_Def_Ghi
    "ABC-DEF-GHI".toSnakeCase
    // ABC_DEF_GHI
    "abc def ghi".toSnakeCase
    // abc_def_ghi
    "Abc Def Ghi".toSnakeCase
    // Abc_Def_Ghi
    "ABC DEF GHI".toSnakeCase
    // ABC_DEF_GHI
  • [extras-string] Add case conversion - string.toSnakeUpperCase (#465)
    import extras.strings.syntax.cases._
    // or
    import extras.strings.syntax.all._
    "Abc".toSnakeUpperCase
    // ABC
    "AbcDefGhi".toSnakeUpperCase
    // ABC_DEF_GHI
    "abcDefGhi".toSnakeUpperCase
    // ABC_DEF_GHI
    "abc".toSnakeUpperCase
    // ABC
    "ABC".toSnakeUpperCase
    // ABC
    "Abc_Def_Ghi".toSnakeUpperCase
    // ABC_DEF_GHI
    "abc_def_ghi".toSnakeUpperCase
    // ABC_DEF_GHI
    "ABC_DEF_GHI".toSnakeUpperCase
    // ABC_DEF_GHI
    "abc-def-ghi".toSnakeUpperCase
    // ABC_DEF_GHI
    "Abc-Def-Ghi".toSnakeUpperCase
    // ABC_DEF_GHI
    "ABC-DEF-GHI".toSnakeUpperCase
    // ABC_DEF_GHI
    "abc def ghi".toSnakeUpperCase
    // ABC_DEF_GHI
    "Abc Def Ghi".toSnakeUpperCase
    // ABC_DEF_GHI
    "ABC DEF GHI".toSnakeUpperCase
    // ABC_DEF_GHI
  • [extras-string] Add case conversion - string.toSnakeLowerCase (#466)
    import extras.strings.syntax.cases._
    // or
    import extras.strings.syntax.all._
    "Abc".toSnakeLowerCase
    // abc
    "AbcDefGhi".toSnakeLowerCase
    // abc_def_ghi
    "abcDefGhi".toSnakeLowerCase
    // abc_def_ghi
    "abc".toSnakeLowerCase
    // abc
    "ABC".toSnakeLowerCase
    // abc
    "Abc_Def_Ghi".toSnakeLowerCase
    // abc_def_ghi
    "abc_def_ghi".toSnakeLowerCase
    // abc_def_ghi
    "ABC_DEF_GHI".toSnakeLowerCase
    // abc_def_ghi
    "abc-def-ghi".toSnakeLowerCase
    // abc_def_ghi
    "Abc-Def-Ghi".toSnakeLowerCase
    // abc_def_ghi
    "ABC-DEF-GHI".toSnakeLowerCase
    // abc_def_ghi
    "abc def ghi".toSnakeLowerCase
    // abc_def_ghi
    "Abc Def Ghi".toSnakeLowerCase
    // abc_def_ghi
    "ABC DEF GHI".toSnakeLowerCase
    // abc_def_ghi
  • [extras-string] Add case conversion - string.toKebabCase (#446)
    import extras.strings.syntax.cases._
    // or
    import extras.strings.syntax.all._
    "Abc".toKebabCase
    // Abc
    "AbcDefGhi".toKebabCase
    // Abc-Def-Ghi
    "abcDefGhi".toKebabCase
    // abc-Def-Ghi
    "abc".toKebabCase
    // abc
    "ABC".toKebabCase
    // ABC
    "Abc_Def_Ghi".toKebabCase
    // Abc-Def-Ghi
    "abc_def_ghi".toKebabCase
    // abc-def-ghi
    "ABC_DEF_GHI".toKebabCase
    // ABC-DEF-GHI
    "abc-def-ghi".toKebabCase
    // abc-def-ghi
    "Abc-Def-Ghi".toKebabCase
    // Abc-Def-Ghi
    "ABC-DEF-GHI".toKebabCase
    // ABC-DEF-GHI
    "abc def ghi".toKebabCase
    // abc-def-ghi
    "Abc Def Ghi".toKebabCase
    // Abc-Def-Ghi
    "ABC DEF GHI".toKebabCase
    // ABC-DEF-GHI
  • [extras-string] Add case conversion - string.toKebabUpperCase (#467)
    import extras.strings.syntax.cases._
    // or
    import extras.strings.syntax.all._
    "Abc".toKebabUpperCase
    // ABC
    "AbcDefGhi".toKebabUpperCase
    // ABC-DEF-GHI
    "abcDefGhi".toKebabUpperCase
    // ABC-DEF-GHI
    "abc".toKebabUpperCase
    // ABC
    "ABC".toKebabUpperCase
    // ABC
    "Abc_Def_Ghi".toKebabUpperCase
    // ABC-DEF-GHI
    "abc_def_ghi".toKebabUpperCase
    // ABC-DEF-GHI
    "ABC_DEF_GHI".toKebabUpperCase
    // ABC-DEF-GHI
    "abc-def-ghi".toKebabUpperCase
    // ABC-DEF-GHI
    "Abc-Def-Ghi".toKebabUpperCase
    // ABC-DEF-GHI
    "ABC-DEF-GHI".toKebabUpperCase
    // ABC-DEF-GHI
    "abc def ghi".toKebabUpperCase
    // ABC-DEF-GHI
    "Abc Def Ghi".toKebabUpperCase
    // ABC-DEF-GHI
    "ABC DEF GHI".toKebabUpperCase
    // ABC-DEF-GHI
  • [extras-string] Add case conversion - string.toKebabLowerCase (#468)
    import extras.strings.syntax.cases._
    // or
    import extras.strings.syntax.all._
    "Abc".toKebabLowerCase
    // abc
    "AbcDefGhi".toKebabLowerCase
    // abc-def-ghi
    "abcDefGhi".toKebabLowerCase
    // abc-def-ghi
    "abc".toKebabLowerCase
    // abc
    "ABC".toKebabLowerCase
    // abc
    "Abc_Def_Ghi".toKebabLowerCase
    // abc-def-ghi
    "abc_def_ghi".toKebabLowerCase
    // abc-def-ghi
    "ABC_DEF_GHI".toKebabLowerCase
    // abc-def-ghi
    "abc-def-ghi".toKebabLowerCase
    // abc-def-ghi
    "Abc-Def-Ghi".toKebabLowerCase
    // abc-def-ghi
    "ABC-DEF-GHI".toKebabLowerCase
    // abc-def-ghi
    "abc def ghi".toKebabLowerCase
    // abc-def-ghi
    "Abc Def Ghi".toKebabLowerCase
    // abc-def-ghi
    "ABC DEF GHI".toKebabLowerCase
    // abc-def-ghi
  • [extras-string] Add case conversion - Seq[String].mkPascalCaseString (#447)
    import extras.strings.syntax.cases._
    // or
    import extras.strings.syntax.all._
    List("Abc", "Def").mkPascalCaseString
    // AbcDef
    List("AbcDef", "Ghi", "jkl", "MnoPqr").mkPascalCaseString
    // AbcDefGhiJklMnoPqr
    List("abcDef", "Ghi", "jkl", "MnoPqr").mkPascalCaseString
    // AbcDefGhiJklMnoPqr
    List("abc").mkPascalCaseString
    // Abc
    List("ABC").mkPascalCaseString
    // Abc
    List("Abc_Def_Ghi", "jkl_mno_Pqr").mkPascalCaseString
    // AbcDefGhiJklMnoPqr
    List("abc_def_ghi", "jkl_mno_pqr", "st_u").mkPascalCaseString
    // AbcDefGhiJklMnoPqrStU
    List("ABC_DEF_GHI", "JKL_MNO_PQR", "ST_U").mkPascalCaseString
    // AbcDefGhiJklMnoPqrStU
    List("Abc-Def-Ghi", "jkl-mno-Pqr").mkPascalCaseString
    // AbcDefGhiJklMnoPqr
    List("abc-def-ghi", "jkl-mno-pqr", "st-u").mkPascalCaseString
    // AbcDefGhiJklMnoPqrStU
    List("ABC-DEF-GHI", "JKL-MNO-PQR", "ST-U").mkPascalCaseString
    // AbcDefGhiJklMnoPqrStU
    List("Abc Def Ghi", "jkl mno Pqr").mkPascalCaseString
    // AbcDefGhiJklMnoPqr
    ...
Read more

v0.43.0

03 Oct 12:13
b014e6c

Choose a tag to compare

0.43.0 - 2023-10-03

Internal Housekeeping

  • Upgrade effectie to 2.0.0-beta13 (#438)

What's Changed

Full Changelog: v0.42.0...v0.43.0