Are you happy with your logging solution? Would you help us out by taking a 30-second survey? Click here


Scala Binary Compatibility validation tool – "MiMa" for short

Subscribe to updates I use migration-manager

Statistics on migration-manager

Number of watchers on Github 175
Number of open issues 25
Average time to close an issue 3 months
Main language Scala
Average time to merge a PR 5 days
Open pull requests 15+
Closed pull requests 10+
Last commit over 1 year ago
Repo Created over 7 years ago
Repo Last Updated over 1 year ago
Size 1 MB
Organization / Authorlightbend
Latest Release0.1.18
Page Updated
Do you use migration-manager? Leave a review!
View open issues (25)
View migration-manager activity
View on github
Fresh, new opensource launches 🚀🚀🚀
Trendy new open source projects in your inbox! View examples

Subscribe to our mailing list

Evaluating migration-manager for your project? Score Explanation
Commits Score (?)
Issues & PR Score (?)

Migration Manager for Scala

A tool for diagnosing migration problems for Scala libraries

The Migration Manager for Scala (MiMa in short) is a tool for diagnosing binary incompatibilities for Scala libraries.

If you don't know how to use MiMa, please read the user documentation.

MiMa's Modules

MiMa is split into Several modules:

  • Core: Classes that are used for detection.
  • Reporter: Raw reporting classes and the command line interface.
  • SBT Plugin: The SBT plugin for usage inside SBT builds.


To use MiMa as an sbt plugin, see the sbt plugin wiki page.


Using sbt:

  $ sbt compile

This will recompile all MiMa's modules.

If you'd like to create distributable jar files for the CLI, run:

  $ sbt assembly

This will create reporter/target/mima-reporter-assembly-....jar jar file that can be used to launch the command line version of MiMa.

Launch MiMa Reporter CLI

Type the following command to run the MiMa Reporter command-line

$ sbt reporter/run

Alternatively, you can use the assembly jar to use the CLI as a standalone application:

    $ java -jar path/to/mima-reporter-assembly-....jar --prev LIB-v1.jar --curr LIB-v2.jar

MiMa Reporter: Functional Tests

The directory containing the MiMa Reporter module ('reporter') there is a 'functional-tests' folder that contains several functional tests exercising the system. All tests are executed as part of the build, therefore when running

$ sbt testFunctional

if one (or more) test fails the build is stop and no jar will not be produced.

To add a new functional test to the suite, create a new folder within 'functional-tests' directory with the following structure:

    | --> <your-new-test-folder> (folder for your new test)
        |-----> problems.txt (the expected list of reported errors - 1 line per error)
        |-----> v1 (folder containing sources @ version 1)
        |-----> v2 (folder containing sources @ version 2)

After doing that, reload if you are in a sbt console session (if that makes no sense to you, it means you are fine and you can run the test as usual).

Tests within the functional-tests folder should always pass.

Note: The problems.txt is the test oracle. Expected errors are declared using the MiMa's reporting output (i.e., the output of the tool and the expected errors should match perfectly). Admittedly, this coupling is an issue since the testing framework is highly coupled with the tool output used to report errors to the user. We should improve this and make the two independent. Until then, mind that by changing the output of the tool you will likely have to update some of the test oracles (i.e., problems.txt file). When running tests against Scala 2.12 or higher, problems-2.12.txt is preferred over problems.txt if the former exists.


java.lang.OutOfMemoryError - Java heap space: If you are experiencing out of memory exception you may need to increase the VM arguments for the initial heap size and the maximum heap size. The default values are -Xms64m for for the initial heap size and -Xmx256m for the maximum heap size.

Bugs and Feature requests

Use the GitHub project page for filing new tickets.


If you'd like to contribute to the MiMa project, please sign the contributor's licensing agreement.


Copyright 2012-2016 Lightbend, Inc.

Licensed under the Apache License, Version 2.0 (the License); you may not use this file except in compliance with the License. You may obtain a copy of the License at

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an AS IS BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

migration-manager open issues Ask a question     (View All Issues)
  • almost 3 years Adding method to value class breaks binary compatibility but is not reported
  • almost 3 years let's do a sweep and remove deprecated stuff
  • about 3 years disable publishing in root project and/or change release instructions
  • about 3 years mima failed to detect a removed inner object of an object
  • over 3 years Add support for Scala.js `%%%` dependencies in `previousArtifact`
  • over 3 years There is no inclusion filter
  • about 4 years Remove duplication between cli and sbt-plugin code
  • about 4 years IvyActions.update is deprecated
  • over 4 years MimaKeys.previousArtifact doesn't respect binary cross versioning
  • over 5 years Allow ignoring package private classes
  • about 6 years `NameTransformer.decode` can go awry on some names
  • over 6 years sbt plugin should let sbt resolve the previous artifact version
  • over 6 years MiMa doesn't check the generic signature of a class/method/field
  • over 6 years No warning reported for pattern matching evolution that can result in MatchError
  • over 6 years Wildcards in problem filters
  • over 6 years Methods with incompatible results type should not be always "fixable"
  • over 6 years Don't look at mirror classes in Problem Report
  • over 6 years Scala working mode
  • over 6 years CLI shouldn't depend on package from the compiler
  • over 6 years Cross version publishing
  • over 6 years SBT Plugin should *reflectively* pull in MIMA (and resolve it as such)
  • about 7 years Run MiMa from Maven
  • about 7 years Check for serialization compatibility (in the Java sense)
  • about 7 years Add a deprecation working-mode
  • over 7 years Group issues into categories
  • over 7 years Various levels of warning
migration-manager open pull requests (View All Pulls)
  • Add versioned issue filters
  • Support for backward/forward binary checking
  • Refactor functional tests to only one project and a command.
  • Add range checks to BufferReader
  • Report a problem when adding a new trait/class w/ abstract members. Fix #118
  • remove unused specs2 dependency
  • Specify that artifact.type must be jar. Fixes #124
  • Add Scala 2.12 support
  • Detect changes to inner modules
  • convert filter definitions to taskKeys
  • Report found problems as they are returned instead of collecting
  • #170 Add filter file support
  • Scripted test-case for wrong filter for new inherited method problem
  • bump versions of Scala, sbt, plugins
  • Unchanged parent class reported as having a missing method
migration-manager questions on Stackoverflow (View All Questions)
  • getting error with Maximo Migration Manager with primary keys
  • Plesk Migration Manager
  • Plesk Migration without Migration Manager
  • Is there a migration manager working with PLESK 11?
  • iCloud Setup Fails: Failed to migrate baseline, unable to create ubiquity migration manager
migration-manager list of languages used
migration-manager latest release notes


  • Switches to using sbt-compat to avoid runtime errors like


  • Fixes (re-fixes ) a backwards binary compatibility issue using sbt-mima-plugin 0.1.15/0.1.16 (for sbt 1) with Scala 2.12.3. #191/#190/#194 by @dwijnand


  • Fixes a backwards binary compatibility issue using sbt-mima-plugin 0.1.15 (for sbt 1) with Scala 2.12.3. #191/#190 by @dwijnand
  • Fixes a forwards binary compatibility issue using sbt-mima-plugin 0.1.15 (for sbt 0.13) with sbt < 0.13.16. #183/#190 by @dwijnand
Other projects in Scala