diff --git a/README.software.txt b/README.software.txt
new file mode 100644
index 0000000000000000000000000000000000000000..894711bccaac9f79e206bda20cbe949735c5741a
--- /dev/null
+++ b/README.software.txt
@@ -0,0 +1,129 @@
+Instance descriptors
+====================
+
+.. contents::
+
+Abstract
+--------
+
+Instances generated from software release take parameters (typically to
+customise instantiation and instance behaviour) and publish results
+(typically allowing access to requester). This also applies not only to
+the root software instance, but to any instance requested by another
+instance.
+
+The structure of these values is constrained by how the Software Release
+was implemented, and must be documented so it can be used. Instance
+descriptors are intended to provide such documentation in a form
+allowing automated generation of a user interface to consult and provide
+parameters, and to consult published results.
+
+Specification
+-------------
+
+Instance parameters (=requests) and published results (=responses) are
+specified using json schemas, as defined in the following resources:
+
+- http://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.20
+- http://tools.ietf.org/html/draft-zyp-json-schema-04
+- http://json-schema.org/
+
+These schema MUST ignore any technical overhead, such as
+serialisation-format-imposed layers (such as
+``<?xml ...?><instance></instance>`` level in ``xml`` serialisation,
+or the ``<prameter id="_">`` level in ``json-in-xml`` serialisation).
+
+Rules to define access to request & response schemas for a given
+software release and software type should be provided in a file whose
+name is deduced from the software release URL by appending ".json" to
+its path component. Components preceding path (scheme & netloc) MUST
+be preserved, components succeeding path (query & fragment) SHOULD be
+preserved. If a file actually resides at such URL, it MUST be valid
+json syntax and satisfy the following json schema::
+
+  {
+    "$schema": "http://json-schema.org/draft-04/schema#",
+    "description": "Slapos Software Release instantiation descriptor",
+    "additionalProperties": false,
+    "properties": {
+      "name": {
+        "description": "A short human-friendly name for the sofware release",
+        "type": "string"
+      },
+      "description": {
+        "description": "A short description of the sofware release",
+        "type": "string"
+      },
+      "serialisation": {
+        "description": "How the parameters and results are serialised",
+        "required": true,
+        "enum": ["xml", "json-in-xml"],
+        "type": "string"
+      },
+      "software-type": {
+        "description": "Existing software types",
+        "required": true,
+        "patternProperties": {
+          ".*": {
+            "description": "Software type declaration",
+            "additionalProperties": false,
+            "properties": {
+              "description": {
+                "description": "A human-friendly description of the software type",
+                "type": "string"
+              },
+              "serialisation": {
+                "description": "How the parameters and results are serialised, if different from global setting",
+                "enum": ["xml", "json-in-xml"],
+                "type": "string"
+              },
+              "request": {
+                "required": true,
+                "description": "URL, relative to Software Release base path, of a json schema for values expected by instance of current software type",
+                "type": "string"
+              },
+              "response": {
+                "required": true,
+                "description": "URL, relative to Software Release base path, of a json schema for values published by instance of current software type",
+                "type": "string"
+              },
+              "index": {
+                "description": "Value to use instead of software type id to sort them (in order to display most relevant software types earlier in a list, for example)",
+                "type": "any"
+              }
+            },
+            "type": "object"
+          }
+        },
+        "type": "object"
+      }
+    },
+    "type": "object"
+  }
+
+Error handling
+--------------
+
+If instantiation descriptor does not exist, is not valid json or does
+not conform to this schema, it is ignored and a fall-back
+representation is used. Likewise, if a software type of an existing
+instance is not defined in software-type object or referenced schema
+does not exist or is invalid, the same fall-back representation is used
+for considered software type.
+
+A fall-back representation must allow full control to the user, without
+any guided editing: user is expected to serialise on his own and
+provides & receives raw strings as request and responses, respectively.
+
+Request schemas, when present and valid, MAY be used to validate user
+input.
+
+It SHOULD be made possible for user to violate the schema just as it is
+possible for existing instances to already violate schemas. These
+violation should be represented in a way which makes as much sense as
+possible: displaying recursively all object properties and iteratively
+all list items with as appropriate as possible fields, with a fall-back
+on free text input. These extra fields generated from existing data or
+created on-the-fly by the user MUST NOT prevent schema-conforming
+fields from being displayed and functional.
+
diff --git a/schema.json b/schema.json
new file mode 100644
index 0000000000000000000000000000000000000000..13c1766b5bdb6731b98009c1f87d0c5da9441891
--- /dev/null
+++ b/schema.json
@@ -0,0 +1,60 @@
+{
+  "$schema": "http://json-schema.org/draft-04/schema#",
+  "description": "Slapos Software Release instantiation descriptor",
+  "additionalProperties": false,
+  "properties": {
+    "name": {
+      "description": "A short human-friendly name for the sofware release",
+      "type": "string"
+    },
+    "description": {
+      "description": "A short description of the sofware release",
+      "type": "string"
+    },
+    "serialisation": {
+      "description": "How the parameters and results are serialised",
+      "required": true,
+      "enum": ["xml", "json-in-xml"],
+      "type": "string"
+    },
+    "software-type": {
+      "description": "Existing software types",
+      "required": true,
+      "patternProperties": {
+        ".*": {
+          "description": "Software type declaration",
+          "additionalProperties": false,
+          "properties": {
+            "description": {
+              "description": "A human-friendly description of the software type",
+              "type": "string"
+            },
+            "serialisation": {
+              "description": "How the parameters and results are serialised, if different from global setting",
+              "enum": ["xml", "json-in-xml"],
+              "type": "string"
+            },
+            "request": {
+              "required": true,
+              "description": "URL, relative to Software Release base path, of a json schema for values expected by instance of current software type",
+              "type": "string"
+            },
+            "response": {
+              "required": true,
+              "description": "URL, relative to Software Release base path, of a json schema for values published by instance of current software type",
+              "type": "string"
+            },
+            "index": {
+              "description": "Value to use instead of software type id to sort them (in order to display most relevant software types earlier in a list, for example)",
+              "type": "any"
+            }
+          },
+          "type": "object"
+        }
+      },
+      "type": "object"
+    }
+  },
+  "type": "object"
+}
+
diff --git a/sla.schema.json b/sla.schema.json
new file mode 100644
index 0000000000000000000000000000000000000000..849f5f8bde4913c69e49a00d91deb0a25941a921
--- /dev/null
+++ b/sla.schema.json
@@ -0,0 +1,15 @@
+{
+  "$schema": "http://json-schema.org/draft-04/schema#",
+  "description": "Slapos Software Release instantiation descriptor",
+  "additionalProperties": false,
+  "properties": {
+    "instance_guid": {
+      "description": "XXX",
+      "type": "string"
+    },
+    "computer_guid": {
+      "description": "XXX",
+      "type": "string"
+    }
+  }
+}
\ No newline at end of file
diff --git a/software/slaprunner/schema.json b/software/slaprunner/schema.json
index bea70149e897a7b6646e69d77602d5996c0ebf68..ee7d919fe04e14b6b4964c69d9799fd458564185 100644
--- a/software/slaprunner/schema.json
+++ b/software/slaprunner/schema.json
@@ -1,88 +1,101 @@
 {
-        "$schema": "http://json-schema.org/draft-04/schema#",
-                "properties": {
-                        "user-authorized-key": {
-                                "description" : "SSH public key in order to connect to the SSH server of this runner instance",
-                                "type": "string"
-                        },
-                        "instance-amount": {
-                                "description": "number of slappart to deploy inside the runner. Needs instance to be restarted.",
-                                "type": "integer",
-                                "default": 10
-                        },
-                        "slapos-software": {
-                                "description": "a relative path from the slapos git repo to a folder containing a software release, which will be automaticaly deployed while the runner instanciation, and only if the parameter auto-deploy is set to 'true'. For example: 'software/helloworld",
-                                "type": "string"
-                        },
-                        "auto-deploy": { "description": "authorizes the software declared with 'slapos-software' to be automatically deployed, or not. Needs instance to be restarted.",
-                                "type": "boolean",
-                                "default": "false"
-                        },
-                        "slapos-repository": {
-                                "description": "url of the default git repository that will be download by the runner while its instanciation. Will be cloned in a directory named 'slapos'",
-                                "type": "string",
-                                "default": "http://git.erp5.org/repos/slapos.git"
-                        },
-                        "slapos-reference": {
-                                "description": "commit reference on which the default repository will checkout",
-                                "type": "string",
-                                "default": "master"
-                        },
-                        "auto-deploy-instance": {
-                                "description": "prevent the runner from deploying and starting instances. Needs instance to be restarted.",
-                                "type": "boolean",
-                                "default": "true, but is set to false for instances of type 'import' in resiliency"
-                        },
-                        "autorun": {
-                                "description": "let automaticaly build and run a declared software with 'slapos-software'. Only works if 'slapos-software' is set, and 'auto-deploy' is true. Needs instance to be restarted.",
-                                "type": "boolean",
-                                "default": "false"
-                        },
-                        "slapos-software-type": {
-                                "description": "Software type of your instance inside the runner",
-                                "type": "string"
-                        },
-                        "parameter-*": {
-                                "description": "'*' is a parameter which will be used to configure the instance inside the runner.",
-                                "type": "string"
-                        },
-                        "custom-frontend-backend-url": {
-                                "description": "return an ipv4 frontend of the given ipv6(+optional port)",
-                                "type": "string"
-                        },
-                        "custom-frontend-backend-type": {
-                                "description": "The type of the frontend slave instance to ask",
-                                "type": "string"
-                        },
-                        "custom-frontend-basic-auth": {
-                                "description": "if the ip given with 'custom-frontend-backend-url' is secure, set it to true for the promise do not fail",
-                                "type": "boolean",
-                                "default": "false"
-                        },
-                        "custom-frontend-instance-guid": {
-                                "description": "Instance guid of the frontend you whish to use",
-                                "type": "string",
-                                "default": "none"
-                        },
-                        "custom-frontend-software-type": {
-                                "description": "SoftwareType of the frontend you request",
-                                "default": "RootSoftwareInstance",
-                                "type": "string"
-                        },
-                        "custom-frontend-software-url": {
-                                "description": "Software Url of the frontend you request",
-                                "default": "http://git.erp5.org/gitweb/slapos.git/blob_plain/HEAD:/software/apache-frontend/software.cfg",
-                                "type": "string"
-                        },
-                        "monitor-port": {
-                                "description": "allow to manually change the port on wich the apache server running monitoring interface is listening. The default value for the webrunner is different from the default value of the standalone stack-monitor server",
-                                "type": "integer",
-                                "default": 9684
-                        },
-                        "resilient-clone-number": {
-                                "description": "is the number of clones to be deployed when a resilient runner is ordered. Its value can be 1 or 2",
-                                "type": "integer",
-                                "default" : 1
-                        }
-                }
+    "$schema": "http://json-schema.org/draft-04/schema#",
+    "properties": {
+        "user-authorized-key": {
+            "title": "User Authorized Key",
+            "description": "SSH public key in order to connect to the SSH server of this runner instance.",
+            "type": "string",
+        },
+        "instance-amount": {
+            "title": "Partition Amount",
+            "description": "Number of slappart to deploy inside the runner (default is 10). Needs instance to be restarted.",
+            "type": "integer",
+            "minimum": 1,
+            "maximum": 40,
+        },
+        "slapos-software": {
+            "title": "Pre-selected Software Release",
+            "description": "a relative path from the slapos git repo to a folder containing a software release, which will be automaticaly deployed while the runner instanciation, and only if the parameter auto-deploy is set to 'true'. For example: 'software/helloworld",
+            "type": "string",
+        },
+        "auto-deploy": {
+            "title": "Automatically Deploy Software",
+            "description": "Authorizes the software declared with 'slapos-software' to be automatically deployed, or not. Needs instance to be restarted. (default is false)",
+            "type": "boolean",
+        },
+        "slapos-repository": {
+            "title": "SlapOS Git Repository URL",
+            "description": "url of the default git repository that will be download by the runner while its instanciation. Will be cloned in a directory named 'slapos' (default is http://git.erp5.org/repos/slapos.git)",
+            "type": "string",
+            "format": "uri",
+            "pattern": "^(http|https|ftp)://",
+        },
+        "slapos-reference": {
+            "title": "SlapOS Git Branch Name",
+            "description": "Branch or hash on which the default repository will checkout (default is master)",
+            "type": "string",
+        },
+        "auto-deploy-instance": {
+            "title": "Automatically Deploy Instances",
+            "description": "Prevent the runner from deploying and starting instances. Needs instance to be restarted. It is set to false for instances of type 'import' in resiliency in any case (default is false)",
+            "type": "boolean",
+        },
+        "autorun": {
+            "title": "Automatically Run Sofware/Instance",
+            "description": "Let automaticaly build and run a declared software with 'slapos-software'. Only works if 'slapos-software' is set, and 'auto-deploy' is true. Needs instance to be restarted. (default is false)",
+            "type": "boolean",
+        },
+        "slapos-software-type": {
+            "title": "Deployed Instance Software Type" ,
+            "description": "Software type of your instance inside the runner",
+            "type": "string",
+        },
+        "custom-frontend-backend-url": {
+            "title": "Custom Frontend Backend URL",
+            "description": "return an ipv4 frontend of the given ipv6(+optional port)",
+            "type": "string",
+            "format": "uri",
+        },
+        "custom-frontend-backend-type": {
+            "title": "Custom Frontend Backend Type",
+            "description": "The type of the frontend slave instance to ask",
+            "type": "string",
+            "enum": ["zope"],
+        },
+        "custom-frontend-basic-auth": {
+            "title": "Custom Frontend Basic Auth",
+            "description": "if the ip given with 'custom-frontend-backend-url' is secure, set it to true for the promise do not fail",
+            "type": "boolean",
+        },
+        "custom-frontend-instance-guid": {
+            "title": "Custom Frontend Instance GUID",
+            "description": "Instance guid of the frontend you whish to use",
+            "type": "string",
+        },
+        "custom-frontend-software-type": {
+            "title": "Custom Frontend Software Type",
+            "description": "SoftwareType of the frontend you request (default is RootSoftwareInstance)",
+            "type": "string",
+            "enum": ["RootSoftwareInstance", "default"],
+        },
+        "custom-frontend-software-url": {
+            "title": "Custom Frontend Software URL",
+            "description": "Software Url of the frontend you request (ie.: http://git.erp5.org/gitweb/slapos.git/blob_plain/HEAD:/software/apache-frontend/software.cfg)",
+            "type": "string",
+            "format": "uri",
+        },
+        "monitor-port": {
+            "title": "Monitor Port",
+            "description": "Allow to manually change the port on wich the apache server running monitoring interface is listening. The default value for the webrunner is different from the default value of the standalone stack-monitor server (default 9684)",
+            "type": "integer",
+            "minimum": 9683,
+            "exclusiveMinimum": true,
+        },
+        "resilient-clone-number": {
+            "title": "Number of Resilient Clones",
+            "description": "Number of clones to be deployed when a resilient runner, if missing a single clone is provided. Its value can be 1 or 2",
+            "type": "integer",
+            "enum": [1, 2],
+        }
+    }
 }
diff --git a/software/slaprunner/software.cfg.json b/software/slaprunner/software.cfg.json
new file mode 100644
index 0000000000000000000000000000000000000000..2d8861f30b906fe71cbf1ebc2851572053e65d80
--- /dev/null
+++ b/software/slaprunner/software.cfg.json
@@ -0,0 +1,19 @@
+{
+  "name": "Web Runner",
+  "description": "Web Runner",
+  "serialisation": "xml",
+  "software-type": {
+    "default": {
+      "description": "Recommended for production use.",
+      "request": "instance-erp5-input-schema.json",
+      "response": "instance-erp5-output-schema.json",
+      "index": 0
+    },
+    "resilience": {
+      "description": "Automated creation of ERP5Site instance, for easy deployment. Usage in production discouraged due to the increased risk of data loss.",
+      "request": "instance-erp5-input-schema.json",
+      "response": "instance-erp5-output-schema.json",
+      "index": 1
+    }
+  }
+}