{
    "$schema": "http://json-schema.org/draft-07/schema",
    "$comment": "https://mutagen.io/documentation/introduction/configuration",
    "definitions": {
        "sync": {
            "type": "object",
            "properties": {
                "alpha": {
                    "type": "string"
                },
                "beta": {
                    "type": "string"
                },
                "mode": {
                    "type": "string",
                    "description": "https://mutagen.io/documentation/synchronization#modes",
                    "enum": [
                        "two-way-safe",
                        "two-way-resolved",
                        "one-way-safe",
                        "one-way-replica"
                    ],
                    "default": "two-way-safe"
                },
                "ignore": {
                    "type": "object",
                    "description": "https://mutagen.io/documentation/synchronization/ignores",
                    "properties": {
                        "paths": {
                            "type": "array"
                        },
                        "vcs": {
                            "type": "boolean",
                            "description": "https://mutagen.io/documentation/synchronization/version-control-systems",
                            "default": true
                        }
                    },
                    "additionalProperties": false
                },
                "permissions": {
                    "type": "object",
                    "properties": {
                        "defaultFileMode": {
                            "type": [
                                "string",
                                "integer"
                            ],
                            "description": "https://mutagen.io/documentation/synchronization/permissions#permissions"
                        },
                        "defaultDirectoryMode": {
                            "type": [
                                "string",
                                "integer"
                            ],
                            "description": "https://mutagen.io/documentation/synchronization/permissions#permissions"
                        },
                        "defaultOwner": {
                            "type": [
                                "string",
                                "integer"
                            ],
                            "description": "https://mutagen.io/documentation/synchronization/permissions#owners-and-groups"
                        },
                        "defaultGroup": {
                            "type": [
                                "string",
                                "integer"
                            ],
                            "description": "https://mutagen.io/documentation/synchronization/permissions#owners-and-groups"
                        }
                    },
                    "additionalProperties": false
                },
                "watch": {
                    "type": "object",
                    "description": "https://mutagen.io/documentation/synchronization/watching",
                    "properties": {
                        "mode": {
                            "type": "string",
                            "description": "https://mutagen.io/documentation/synchronization/watching#modes",
                            "enum": [
                                "portable",
                                "force-poll",
                                "no-watch"
                            ]
                        },
                        "pollingInterval": {
                            "type": "integer",
                            "description": "https://mutagen.io/documentation/synchronization/watching#polling-interval",
                            "default": 10
                        }
                    },
                    "additionalProperties": false
                },
                "symlink": {
                    "type": "string",
                    "description": "https://mutagen.io/documentation/synchronization/symbolic-links",
                    "enum": [
                        "ignore",
                        "portable",
                        "posix-raw"
                    ],
                    "default": "portable"
                },
                "stageMode": {
                    "type": "string",
                    "description": "https://mutagen.io/documentation/synchronization/staging",
                    "enum": [
                        "mutagen",
                        "neighboring"
                    ],
                    "default": "mutagen"
                },
                "probeMode": {
                    "type": "string",
                    "description": "https://mutagen.io/documentation/synchronization/probing-and-scanning",
                    "enum": [
                        "probe",
                        "assume"
                    ],
                    "default": "probe"
                },
                "scanMode": {
                    "type": "string",
                    "description": "https://mutagen.io/documentation/synchronization/probing-and-scanning",
                    "enum": [
                        "accelerated",
                        "full"
                    ],
                    "default": "accelerated"
                },
                "maxStagingFileSize": {
                    "type": "string",
                    "description": "https://mutagen.io/documentation/synchronization/size-limits",
                    "default": 0
                },
                "maxEntryCount": {
                    "type": "string",
                    "description": "https://mutagen.io/documentation/synchronization/size-limits",
                    "default": 0
                }
            },
            "additionalProperties": false
        },
        "forward": {
            "type": "object",
            "properties": {
                "source": {
                    "type": "string",
                    "description": "https://mutagen.io/documentation/forwarding"
                },
                "destination": {
                    "type": "string",
                    "description": "https://mutagen.io/documentation/forwarding"
                }
            },
            "additionalProperties": false
        }
    },
    "properties": {
        "beforeCreate": {
            "type": "array",
            "description": "https://mutagen.io/documentation/projects#setup-and-teardown"
        },
        "afterCreate": {
            "type": "array",
            "description": "https://mutagen.io/documentation/projects#setup-and-teardown"
        },
        "afterTerminate": {
            "type": "array",
            "description": "https://mutagen.io/documentation/projects#setup-and-teardown"
        },
        "commands": {
            "type": "object",
            "description": "Finally, to help with creating common workflows, you can also define commands in projects using the commands section. These commands can be run using the mutagen project run command, for example:\n commands:\n  web-shell: docker-compose exec web bash\n see https://mutagen.io/documentation/projects#custom-commands"
        },
        "sync": {
            "type": "object",
            "description": "https://mutagen.io/documentation/synchronization",
            "patternProperties": {
                "^[_a-zA-Z][a-zA-Z0-9_-]*$": {
                    "type": "object",
                    "$ref": "#/definitions/sync"
                }
            },
            "$ref": "#/definitions/sync"
        },
        "forward": {
            "type": "object",
            "description": "https://mutagen.io/documentation/forwarding",
            "patternProperties": {
                "^[_a-zA-Z][a-zA-Z0-9_-]*$": {
                    "type": "object",
                    "$ref": "#/definitions/forward"
                }
            }
        }
    },
    "additionalProperties": false
}