Example of a complete app_info.json
To make it easier for you to create a correct JSON file, you can use the following JSON schema:
{
"$schema": "https://raw.githubusercontent.com/PLCnext/App-Info-Schema/refs/heads/main/app-info-schema.json",
"plcnextapp": {
...
}
}
If you use a code editor that supports JSON schema (e.g. Visual Studio® Code), autocomplete and descriptions of the properties are added. You can find more information on JSON schema at GitHub.
The following shows the contents of an app description file in which all types of app parts are configured as examples.
Note: In the following example, these are optional app parts entries. Don't use them if they are not needed or if their configured files do not exist in the app-container, otherwise the app installation on the target may be refused because of detected configuration errors.
{
"$schema": "https://raw.githubusercontent.com/PLCnext/App-Info-Schema/refs/heads/main/app-info-schema.json",
"plcnextapp": {
"name": "Full Multipart App",
"identifier": "00000000000000",
"version": "Full20.0 (112.12 DemoVersion)",
"target": "AXC F 2152",
"minfirmware_version": "20.0.0",
"manufacturer": "Phoenix Contact",
"licensetype": "Free"
},
"engineerapp": {
"folder": "/arp/PCWE"
},
"cmdtools":
[
{
"path" : "/bin/DemoCmdTool"
},
{
"path" : "<Path to cmd tool executable binary>"
}
],
"plcnextextensions" :
[
{
"acfconfigpath" : "/PLCnextRuntimeDaemon.acf.config"
},
{
"acfconfigpath" : "<path to PLCnext extension .acf.config file>"
}
],
"datastorage": {
"persistentdata": true,
"temporarydata" : true
},
"plcnextservices":
[
{
"service": "<Service ID>",
"action" : "EXCLUSIVE_ACCESS"
},
{
"service": "WBM",
"action" : "MUST_HAVE"
},
{
"service" : "OPCUA",
"action" : "MUST_NOT_HAVE"
}
],
"updateconfigs": {
"autoupdate_enabled": <true/false>,
"keep_persistentdata": <true/false>,
"keep_temporarydata": <true/false>,
"post_updatescript": "<Path to app update script>"
}
}
Note: Up to firmware version 2025.0, the app parts Linux Daemons and Shared Libraries were supported. If these app parts are included, the following entries also belong in the app_info.json:
"linuxdaemons":
[
{
"path": "/bin/daemon1exe",
"cmdargs" : "arg1 arg2 … argN",
"starttime": "40"
},
{
"path": "<Path to daemon executable binary>",
"cmdargs" : "<arg1 arg2 … argN>",
"starttime": "99",
"initScriptTemplate":"<Path to own template file>"
}
],
"sharedlibs":
[
{
"libpath" : "/lib/sharedlib1.so"
},
{ "libpath" : "<Path to shared library binary>"
}
],
See also
• Published/reviewed: 2025-12-18 • Revision 22 •