{
  "$id": "https://scalacenter.github.io/bloop/docs/assets/bloop-schema.json",
  "type": "object",
  "title": "Bloop configuration file ",
  "description": "The JSON Schema for the bloop configuration file.",
  "definitions": {
    "sourcesGlobs": {
      "$id": "/properties/project/properties/sourcesGlobs",
      "type": "object",
      "properties": {
        "directory": {
          "$id": "/properties/project/properties/sourcesGlobs/properties/directory",
          "title": "The Directory Schema",
          "type": "string",
          "examples": [
            "/home/code/src"
          ]
        },
        "walkDepth": {
          "$id": "/properties/project/properties/sourcesGlobs/properties/walkDepth",
          "title": "The WalkDepth Schema",
          "type": "number",
          "examples": [
            1
          ]
        },
        "includes": {
          "$id": "/properties/project/properties/sourcesGlobs/properties/includes",
          "title": "The Includes Schema",
          "type": "string",
          "examples": [
            "glob:*.scala"
          ]
        },
        "excludes": {
          "$id": "/properties/project/properties/sourcesGlobs/properties/excludes",
          "title": "The Excludes Schema",
          "type": "string",
          "examples": [
            "glob:*Test.scala"
          ]
        }
      }
    },
    "jvmPlatform": {
      "$id": "/properties/project/properties/jvmPlatform",
      "type": "object",
      "properties": {
        "name": {
          "$id": "/properties/project/properties/jvmPlatform/properties/name",
          "title": "The Name Schema ",
          "const": "jvm"
        },
        "config": {
          "$id": "/properties/project/properties/jvmPlatform/properties/config",
          "type": "object",
          "properties": {
            "home": {
              "$id": "/properties/project/properties/jvmPlatform/properties/config/properties/home",
              "type": "string",
              "title": "The Java Home Schema ",
              "default": "",
              "examples": [
                "/usr/lib/jvm/java-8-jdk"
              ]
            },
            "options": {
              "$id": "/properties/project/properties/jvmPlatform/properties/config/properties/options",
              "type": "array",
              "title": "The JVM Options Schema",
              "default": "",
              "examples": [
                "-Xms2g",
                "-Xmx6g",
                "-XX:MaxInlineLevel=20",
                "-XX:ReservedCodeCacheSize=512m"
              ]
            }
          }
        },
        "mainClass": {
          "$id": "/properties/project/properties/jvmPlatform/properties/mainClass",
          "type": "array",
          "items": {
            "$id": "/properties/project/properties/jvmPlatform/properties/mainClass/items",
            "type": "string",
            "title": "An example of a main class ",
            "default": "",
            "examples": [
              "your.app.Main"
            ]
          }
        },
        "runtimeConfig": {
          "$id": "/properties/project/properties/jvmPlatform/properties/runtimeConfig",
          "type": "object",
          "properties": {
            "home": {
              "$id": "/properties/project/properties/jvmPlatform/properties/runtimeConfig/properties/home",
              "type": "string",
              "title": "The Java Home Schema ",
              "default": "",
              "examples": [
                "/usr/lib/jvm/java-8-jdk"
              ]
            },
            "options": {
              "$id": "/properties/project/properties/jvmPlatform/properties/runtimeConfig/properties/options",
              "type": "array",
              "title": "The JVM Options Schema",
              "default": "",
              "examples": [
                "-Xms2g",
                "-Xmx6g",
                "-XX:MaxInlineLevel=20",
                "-XX:ReservedCodeCacheSize=512m"
              ]
            }
          }
        },
        "classpath": {
          "$id": "/properties/project/properties/jvmPlatform/properties/classpath",
          "type": "array",
          "items": {
            "$id": "/properties/project/properties/jvmPlatform/properties/classpath/items",
            "type": "string",
            "title": "An example of a runtime JVM classpath item",
            "default": "",
            "examples": [
              "/home/user/.ivy/cache/jsoniter-scala.jar",
              "/home/user/.ivy/cache/cats.jar",
              "/home/user/.ivy/cache/monix.jar"
            ]
          }
        },
        "resources": {
          "$id": "/properties/project/properties/jvmPlatform/properties/resources",
          "type": "array",
          "items": {
            "$id": "/properties/project/properties/jvmPlatform/properties/mainClass/resources",
            "type": "string",
            "title": "An example of a runtime JVM resource item",
            "default": "",
            "examples": [
              "/home/user/my-project/resources/log4j2.properties",
              "/home/user/my-project/resources/logback.xml"
            ]
          }
        }
      }
    },
    "jsPlatform": {
      "$id": "/properties/project/properties/jsPlatform",
      "type": "object",
      "properties": {
        "name": {
          "$id": "/properties/project/properties/jsPlatform/properties/name",
          "title": "The Name Schema ",
          "const": "js"
        },
        "config": {
          "$id": "/properties/project/properties/jsPlatform/properties/config",
          "type": "object",
          "properties": {
            "version": {
              "type": "string",
              "title": "The Version Schema ",
              "default": "",
              "examples": [
                "0.6.19"
              ]
            },
            "mode": {
              "$id": "/properties/project/properties/jsPlatform/properties/config/properties/mode",
              "title": "The Mode Schema ",
              "default": "debug",
              "enum": [
                "debug",
                "release"
              ]
            },
            "kind": {
              "$id": "/properties/project/properties/jsPlatform/properties/config/properties/kind",
              "title": "The Kind Schema ",
              "default": "none",
              "enum": [
                "none",
                "commonjs"
              ]
            },
            "emitSourceMaps": {
              "$id": "/properties/project/properties/jsPlatform/properties/config/properties/emitSourceMaps",
              "type": "boolean",
              "title": "The Emitsourcemaps Schema ",
              "default": false,
              "examples": [
                false
              ]
            },
            "toolchain": {
              "$id": "/properties/project/properties/jsPlatform/properties/config/properties/toolchain",
              "type": "array"
            }
          }
        },
        "mainClass": {
          "$id": "/properties/project/properties/jsPlatform/properties/mainClass",
          "type": "array",
          "items": {
            "$id": "/properties/project/properties/platform/properties/mainClass/items",
            "type": "string",
            "title": "An example of a main class ",
            "default": "",
            "examples": [
              "your.app.Main"
            ]
          }
        }
      }
    },
    "nativePlatform": {
      "$id": "/properties/project/properties/nativePlatform",
      "type": "object",
      "properties": {
        "name": {
          "$id": "/properties/project/properties/nativePlatform/properties/name",
          "title": "The Name Schema ",
          "const": "js"
        },
        "config": {
          "$id": "/properties/project/properties/platform/properties/config",
          "type": "object",
          "properties": {
            "version": {
              "$id": "/properties/project/properties/platform/properties/config/properties/version",
              "type": "string",
              "title": "The Version Schema ",
              "default": "",
              "examples": [
                "0.3.6"
              ]
            },
            "mode": {
              "$id": "/properties/project/properties/platform/properties/config/properties/mode",
              "title": "The Mode Schema ",
              "default": "debug",
              "enum": [
                "debug",
                "release"
              ]
            },
            "gc": {
              "$id": "/properties/project/properties/platform/properties/config/properties/gc",
              "title": "The Gc Schema ",
              "enum": [
                "immix",
                "boehm",
                "none"
              ]
            },
            "targetTriple": {
              "$id": "/properties/project/properties/platform/properties/config/properties/targetTriple",
              "type": "string",
              "title": "The Targettriple Schema ",
              "default": "",
              "examples": [
                ""
              ]
            },
            "nativelib": {
              "$id": "/properties/project/properties/platform/properties/config/properties/nativelib",
              "type": "string",
              "title": "The Nativelib Schema ",
              "default": "",
              "examples": [
                "/home/jvican/.ivy2/cache/org.scala-native/nativelib_native0.3_2.11/jars/nativelib_native0.3_2.11-0.3.6.jar"
              ]
            },
            "clang": {
              "$id": "/properties/project/properties/platform/properties/config/properties/clang",
              "type": "string",
              "title": "The Clang Schema ",
              "default": "",
              "examples": [
                "/usr/sbin/clang37"
              ]
            },
            "clangpp": {
              "$id": "/properties/project/properties/platform/properties/config/properties/clangpp",
              "type": "string",
              "title": "The Clangpp Schema ",
              "default": "",
              "examples": [
                "/usr/sbin/clang++38"
              ]
            },
            "options": {
              "$id": "/properties/project/properties/platform/properties/config/properties/options",
              "type": "object",
              "properties": {
                "linker": {
                  "$id": "/properties/project/properties/platform/properties/config/properties/options/properties/linker",
                  "type": "array",
                  "items": {
                    "$id": "/properties/project/properties/platform/properties/config/properties/options/properties/linker/items",
                    "type": "string",
                    "title": "Examples of Scala Native linker options ",
                    "default": "",
                    "examples": [
                      "-L/usr/local/lib",
                      "-L/usr/lib"
                    ]
                  }
                },
                "compiler": {
                  "$id": "/properties/project/properties/platform/properties/config/properties/options/properties/compiler",
                  "type": "array",
                  "items": {
                    "$id": "/properties/project/properties/platform/properties/config/properties/options/properties/compiler/items",
                    "type": "string",
                    "title": "Examples of Scala Native compiler options ",
                    "default": "",
                    "examples": [
                      "-I/usr/local/include",
                      "-I/usr/include",
                      "-Qunused-arguments"
                    ]
                  }
                }
              }
            },
            "linkStubs": {
              "$id": "/properties/project/properties/platform/properties/config/properties/linkStubs",
              "type": "boolean",
              "title": "The Linkstubs Schema ",
              "default": false,
              "examples": [
                false,
                true
              ]
            },
            "toolchain": {
              "$id": "/properties/project/properties/platform/properties/config/properties/toolchain",
              "type": "array"
            }
          }
        },
        "mainClass": {
          "$id": "/properties/project/properties/nativePlatform/properties/mainClass",
          "type": "array",
          "items": {
            "$id": "/properties/project/properties/platform/properties/mainClass/items",
            "type": "string",
            "title": "An example of a main class ",
            "default": "",
            "examples": [
              "your.app.Main"
            ]
          }
        }
      }
    }
  },
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "version": {
      "$id": "/properties/version",
      "type": "string",
      "title": "The Version Schema ",
      "default": "",
      "examples": [
        "1.0.0"
      ]
    },
    "project": {
      "$id": "/properties/project",
      "type": "object",
      "properties": {
        "name": {
          "$id": "/properties/project/properties/name",
          "type": "string",
          "title": "The Name Schema ",
          "default": "",
          "examples": [
            "foo"
          ]
        },
        "directory": {
          "$id": "/properties/project/properties/directory",
          "type": "string",
          "title": "The Directory Schema ",
          "default": "",
          "examples": [
            "/code/foo"
          ]
        },
        "sources": {
          "$id": "/properties/project/properties/sources",
          "type": "array",
          "items": {
            "$id": "/properties/project/properties/sources/items",
            "type": "string",
            "title": "An example of a source file or directory",
            "default": "",
            "examples": [
              "/code/foo/src/main/scala",
              "/code/foo/src/main/java",
              "/code/foo/src/main/scala-2.12",
              "/code/foo/src/main/scala-2.12/foo/Foo.scala"
            ]
          }
        },
        "sourcesGlobs": {
          "$id": "/properties/project/properties/sourcesGlobs",
          "type": "array",
          "items": {
            "$ref": "#/definitions/sourcesGlobs"
          }
        },
        "dependencies": {
          "$id": "/properties/project/properties/dependencies",
          "type": "array",
          "items": {
            "$id": "/properties/project/properties/dependencies/items",
            "type": "string",
            "title": "An example of a project dependency",
            "default": "",
            "examples": [
              "bar",
              "baz"
            ]
          }
        },
        "classpath": {
          "$id": "/properties/project/properties/classpath",
          "type": "array",
          "items": {
            "$id": "/properties/project/properties/classpath/items",
            "type": "string",
            "title": "An example of a classpath item",
            "default": "",
            "examples": [
              "/home/user/.ivy/cache/scala-library.jar",
              "/home/user/.ivy/cache/circe.jar",
              "/home/user/.ivy/cache/cats.jar",
              "/home/user/.ivy/cache/scalaz.jar"
            ]
          }
        },
        "out": {
          "$id": "/properties/project/properties/out",
          "type": "string",
          "title": "The Out Schema ",
          "default": "",
          "examples": [
            "/code/foo/target"
          ]
        },
        "classesDir": {
          "$id": "/properties/project/properties/classesDir",
          "type": "string",
          "title": "The Classes Dir Schema ",
          "default": "",
          "examples": [
            "/code/foo/target/scala-2.12/classes"
          ]
        },
        "scala": {
          "$id": "/properties/project/properties/scala",
          "type": "object",
          "properties": {
            "organization": {
              "$id": "/properties/project/properties/scala/properties/organization",
              "type": "string",
              "title": "The Organization Schema ",
              "default": "",
              "examples": [
                "org.scala-lang",
                "ch.epfl.lamp"
              ]
            },
            "name": {
              "$id": "/properties/project/properties/scala/properties/name",
              "type": "string",
              "title": "The Name Schema ",
              "default": "",
              "examples": [
                "scala-compiler",
                "dotty-compiler_0.8"
              ]
            },
            "version": {
              "$id": "/properties/project/properties/scala/properties/version",
              "type": "string",
              "title": "The Version Schema ",
              "default": "",
              "examples": [
                "2.12.6",
                "2.11.11"
              ]
            },
            "options": {
              "$id": "/properties/project/properties/scala/properties/options",
              "type": "array",
              "items": {
                "$id": "/properties/project/properties/scala/properties/options/items",
                "type": "string",
                "title": "An example of an option for the Scala compiler",
                "default": "",
                "examples": [
                  "-warn"
                ]
              }
            },
            "jars": {
              "$id": "/properties/project/properties/scala/properties/jars",
              "type": "array",
              "title": "Several examples of typical Scala Jars",
              "default": "",
              "examples": [
                "/home/user/.ivy2/cache/scala-compiler.jar",
                "/home/user/.ivy2/cache/scala-library.jar",
                "/home/user/.ivy2/cache/scala-reflect.jar",
                "/home/user/.ivy2/cache/jline2.jar"
              ]
            },
            "analysis": {
              "$id": "/properties/project/properties/scala/properties/analysis",
              "type": "string",
              "title": "An example of an analysis file path",
              "default": "",
              "examples": [
                "/code/foo/target/analysis.out"
              ]
            },
            "setup": {
              "$id": "/properties/project/properties/scala/properties/setup",
              "type": "object",
              "properties": {
                "order": {
                  "$id": "/properties/project/properties/scala/properties/setup/properties/order",
                  "enum": [
                    "mixed",
                    "java->scala",
                    "scala->java"
                  ],
                  "title": "The compile order for Java and Scala sources ",
                  "default": "mixed"
                },
                "addLibraryToBootClasspath": {
                  "$id": "/properties/project/properties/scala/properties/setup/properties/addLibraryToBootClasspath",
                  "type": "boolean",
                  "title": "The classpath option boot Schema ",
                  "default": true
                },
                "addCompilerToClasspath": {
                  "$id": "/properties/project/properties/scala/properties/setup/properties/addCompilerToClasspath",
                  "type": "boolean",
                  "title": "The classpath option compiler Schema ",
                  "default": false
                },
                "addExtraJarsToClasspath": {
                  "$id": "/properties/project/properties/scala/properties/setup/properties/addExtraJarsToClasspath",
                  "type": "boolean",
                  "title": "The classpath option Extra Schema ",
                  "default": false
                },
                "manageBootClasspath": {
                  "$id": "/properties/project/properties/scala/properties/setup/properties/manageBootClasspath",
                  "type": "boolean",
                  "title": "The classpath option Autoboot Schema ",
                  "default": true
                },
                "filterLibraryFromClasspath": {
                  "$id": "/properties/project/properties/scala/properties/setup/properties/filterLibraryFromClasspath",
                  "type": "boolean",
                  "title": "The classpath option filter library Schema ",
                  "default": true
                }
              }
            }
          }
        },
        "java": {
          "$id": "/properties/project/properties/java",
          "type": "object",
          "properties": {
            "options": {
              "$id": "/properties/project/properties/java/properties/options",
              "type": "array",
              "items": {
                "$id": "/properties/project/properties/java/properties/options/items",
                "type": "string",
                "title": "An example of an option for the Java compiler",
                "default": "",
                "examples": [
                  "-version"
                ]
              }
            }
          }
        },
        "sbt": {
          "$id": "/properties/project/properties/sbt",
          "type": "object",
          "properties": {
            "sbtVersion": {
              "$id": "/properties/project/properties/sbt/properties/sbtVersion",
              "type": "string",
              "title": "The Sbt version Schema ",
              "default": "",
              "examples": [
                "1.1.0"
              ]
            },
            "autoImports": {
              "$id": "/properties/project/properties/sbt/properties/autoImports",
              "type": "array"
            }
          }
        },
        "test": {
          "$id": "/properties/project/properties/test",
          "type": "object",
          "properties": {
            "frameworks": {
              "$id": "/properties/project/properties/test/properties/frameworks",
              "type": "array",
              "title": "The Test Framework Schema",
              "description": "The Scala and Java test frameworks supported by this project",
              "items": {
                "$id": "/properties/project/properties/test/properties/frameworks/items",
                "type": "string",
                "title": "Several examples of Scala and Java test frameworks",
                "default": "",
                "examples": [
                  "org.scalacheck.ScalaCheckFramework",
                  "org.scalatest.tools.Framework",
                  "org.scalatest.tools.ScalaTestFramework",
                  "com.github.sbt.junit.jupiter.api.JupiterFramework"
                ]
              }
            },
            "options": {
              "$id": "/properties/project/properties/test/properties/options",
              "type": "object",
              "properties": {
                "excludes": {
                  "$id": "/properties/project/properties/test/properties/options/properties/excludes",
                  "type": "array",
                  "title": "The Exclude Schema",
                  "description": "The fully qualified names of any test suite to be excluded",
                  "examples": [
                    "foo.bar.MyTestSuite"
                  ]
                },
                "arguments": {
                  "$id": "/properties/project/properties/test/properties/options/properties/arguments",
                  "type": "array",
                  "title": "The Test Argument Schema",
                  "description": "The test arguments",
                  "examples": [
                    "-z",
                    "--verbose"
                  ]
                }
              }
            }
          }
        },
        "platform": {
          "$id": "/properties/project/properties/platform",
          "type": "object",
          "anyOf": [
            {
              "$ref": "#/definitions/jvmPlatform"
            },
            {
              "$ref": "#/definitions/jsPlatform"
            },
            {
              "$ref": "#/definitions/nativePlatform"
            }
          ]
        },
        "tags": {
          "$id": "/properties/project/properties/tags",
          "type": "array",
          "title": "The Tags Schema",
          "description": "The tags associated with that project",
          "examples": [
              ["test"],
              ["library", "cross-platform"]
          ],
          "items": {
            "$id": "/properties/project/properties/tags/items",
            "type": "string",
            "title": "A tag associated with that project",
            "examples": [
              "test",
              "library"
            ]
          }
        }
      },
      "sourceGenerators": {
        "$id": "/properties/project/properties/sourceGenerators",
        "type": "array",
        "title": "The SourceGenerators Schema",
        "description": "The source generators used by this project",
        "items": {
          "$id": "/properties/project/properties/sourceGenerators/items",
          "type": "object",
          "properties": {
            "sourcesGlobs": {
              "$id": "/properties/project/properties/sourceGenerators/properties/sourcesGlobs",
              "type": "array",
              "items": {
                "$ref": "#/definitions/sourcesGlobs"
              }
            },
            "outputDirectory": {
              "$id": "/properties/project/properties/sourceGenerators/properties/outputDirectory",
              "type": "string",
              "examples": [
                "/home/code/generated-sources"
              ]
            },
            "command": {
              "$id": "/properties/project/properties/sourceGenerators/properties/command",
              "type": "array",
              "items": {
                "type": "string"
              },
              "examples": [
                ["/bin/my-generator.sh", "arg0", "arg1"]
              ]
            }
          }
        }
      }
    }
  },
  "required": [
    "name",
    "directory",
    "sources",
    "dependencies",
    "classpath",
    "out",
    "classesDir"
  ]
}
