A method of creating applications (145, 506) responsive to a request from a programmable device (110, 202, 204, 252, 254, 300) comprising: determining a base configuration of the programmable device (110, 202, 204, 252, 254, 300); presenting a user interface (308, 310) with a list of available applications (145, 506) compatible with the base configuration of the programmable device (110, 202, 204, 252, 254, 300); receiving user input relating to a selected application (145, 506) from the list of available applications (145, 506) for installation on the programmable device (110, 202, 204, 252, 254, 300); collecting in response to receiving the selected application a specific configuration corresponding to the programmable device (110, 202, 204, 252, 254, 300), wherein the specific configuration having configuration data of relevance to that application; constructing a request package at the programmable device (110, 202, 204, 252, 254, 300), the request package including component elements of the specific configuration including at least: an identifier of the selected application (145, 506), a script engine version identifier identifying a script execution engine on the programmable device (110, 202, 204, 252, 254, 300) that is configured to execute the selected application, and at least one of a device identifier and a device type identifier; sending the request package from the programmable device (110, 202, 204, 252, 254, 300) to a fulfillment center; receiving the request package at the fulfillment center; parsing the request package with the specific configuration of the programmable device (110, 202, 204, 252, 254, 300) into the component elements of the request package; creating a custom version of the selected application (145, 506) corresponding to the component elements of the request package; and sending the custom version of the selected application (145, 506) appropriate to the specific configuration information to the programmable device (110, 202, 204, 252, 254, 300). determining a base configuration of the programmable device (110, 202, 204, 252, 254, 300); presenting a user interface (308, 310) with a list of available applications (145, 506) compatible with the base configuration of the programmable device (110, 202, 204, 252, 254, 300); receiving user input relating to a selected application (145, 506) from the list of available applications (145, 506) for installation on the programmable device (110, 202, 204, 252, 254, 300); collecting in response to receiving the selected application a specific configuration corresponding to the programmable device (110, 202, 204, 252, 254, 300), wherein the specific configuration having configuration data of relevance to that application; constructing a request package at the programmable device (110, 202, 204, 252, 254, 300), the request package including component elements of the specific configuration including at least: an identifier of the selected application (145, 506), a script engine version identifier identifying a script execution engine on the programmable device (110, 202, 204, 252, 254, 300) that is configured to execute the selected application, and at least one of a device identifier and a device type identifier; an identifier of the selected application (145, 506), a script engine version identifier identifying a script execution engine on the programmable device (110, 202, 204, 252, 254, 300) that is configured to execute the selected application, and at least one of a device identifier and a device type identifier; sending the request package from the programmable device (110, 202, 204, 252, 254, 300) to a fulfillment center; receiving the request package at the fulfillment center; parsing the request package with the specific configuration of the programmable device (110, 202, 204, 252, 254, 300) into the component elements of the request package; creating a custom version of the selected application (145, 506) corresponding to the component elements of the request package; and sending the custom version of the selected application (145, 506) appropriate to the specific configuration information to the programmable device (110, 202, 204, 252, 254, 300).