Custom Applications
iX App Details
Added: 2024-09-10
Last Updated: 2025-04-23
Added: 2024-09-10
Last Updated: 2025-04-23
An application for deploying simple containers.
×
App Metadata (Raw File)
{
"1.1.14": {
"healthy": true,
"supported": true,
"healthy_error": null,
"location": "/__w/apps/apps/trains/stable/ix-app/1.1.14",
"last_update": "2025-04-23 17:40:39",
"required_features": [],
"human_version": "1.0.0_1.1.14",
"version": "1.1.14",
"app_metadata": {
"app_version": "1.0.0",
"capabilities": [],
"categories": [
"custom"
],
"date_added": "2024-09-10",
"description": "An application for deploying simple containers.",
"home": "https://www.truenas.com/",
"host_mounts": [],
"icon": "https://media.sys.truenas.net/apps/ix-chart/icons/icon.webp",
"keywords": [],
"lib_version": "2.1.16",
"lib_version_hash": "dac15686f882b9ce65b8549a3d5c0ed7bafe2df7a9028880d1a99b0ff4af1eff",
"maintainers": [
{
"email": "dev@ixsystems.com",
"name": "truenas",
"url": "https://www.truenas.com/"
}
],
"name": "ix-app",
"run_as_context": [],
"screenshots": [],
"sources": [],
"title": "iX App",
"train": "stable",
"version": "1.1.14"
},
"schema": {
"groups": [
{
"name": "General",
"description": "General Configuration"
},
{
"name": "Image Configuration",
"description": "Configure the image"
},
{
"name": "Container Configuration",
"description": "Configure the container"
},
{
"name": "Security Context Configuration",
"description": "Configure Security Context for the container"
},
{
"name": "Network Configuration",
"description": "Configure Network for the container"
},
{
"name": "Portal Configuration",
"description": "Configure Portals"
},
{
"name": "Storage Configuration",
"description": "Configure Storage for the container"
},
{
"name": "Labels Configuration",
"description": "Configure Labels for the container"
},
{
"name": "Resources Configuration",
"description": "Configure Resources for the container"
}
],
"questions": [
{
"variable": "notes",
"label": "Notes",
"group": "General",
"description": "Notes about the application, this will be shown in the Notes card. </br>\nYou can use markdown here. This have no effect on the application.\n",
"schema": {
"type": "text",
"required": false
}
},
{
"variable": "image",
"label": "Image",
"group": "Image Configuration",
"description": "The image to use for the container.",
"schema": {
"type": "dict",
"attrs": [
{
"variable": "repository",
"label": "Repository",
"description": "The repository of the image.",
"schema": {
"type": "string",
"required": true
}
},
{
"variable": "tag",
"label": "Tag",
"description": "The tag of the image.",
"schema": {
"type": "string",
"default": "latest"
}
},
{
"variable": "pull_policy",
"label": "Pull Policy",
"description": "The pull policy for the image.",
"schema": {
"type": "string",
"default": "missing",
"required": true,
"enum": [
{
"value": "missing",
"description": "Pull the image if it is not already present on the host."
},
{
"value": "always",
"description": "Always pull an image even if it is present on the host."
},
{
"value": "never",
"description": "Never pull an image even if it is not present on the host."
}
]
}
}
]
}
},
{
"variable": "hostname",
"label": "Hostname",
"group": "Container Configuration",
"description": "The hostname to use for the container.",
"schema": {
"type": "string",
"default": ""
}
},
{
"variable": "entrypoint",
"label": "Entrypoint",
"group": "Container Configuration",
"description": "Entrypoint to use for the container. </br>\nOverrides the default ENTRYPOINT of the image.\n",
"schema": {
"type": "list",
"default": [],
"items": [
{
"variable": "entrypoint_item",
"label": "",
"schema": {
"type": "string",
"required": true
}
}
]
}
},
{
"variable": "command",
"label": "Command",
"group": "Container Configuration",
"description": "Command to use for the container. </br>\nOverrides the default CMD of the image.\n",
"schema": {
"type": "list",
"default": [],
"items": [
{
"variable": "command_item",
"label": "",
"schema": {
"type": "string",
"required": true
}
}
]
}
},
{
"variable": "TZ",
"label": "Timezone",
"group": "Container Configuration",
"description": "Timezone setting for the container.",
"schema": {
"type": "string",
"default": "Etc/UTC",
"required": true,
"$ref": [
"definitions/timezone"
]
}
},
{
"variable": "envs",
"label": "Environment Variables",
"group": "Container Configuration",
"description": "Configure environment variables.",
"schema": {
"type": "list",
"default": [],
"items": [
{
"variable": "env",
"label": "Environment Variable",
"schema": {
"type": "dict",
"attrs": [
{
"variable": "name",
"label": "Name",
"schema": {
"type": "string",
"required": true
}
},
{
"variable": "value",
"label": "Value",
"schema": {
"type": "string",
"required": true
}
}
]
}
}
]
}
},
{
"variable": "restart_policy",
"label": "Restart Policy",
"group": "Container Configuration",
"description": "The restart policy to use for the container.",
"schema": {
"type": "string",
"default": "no",
"required": true,
"enum": [
{
"value": "no",
"description": "No - Does not restart the container under any circumstances."
},
{
"value": "unless-stopped",
"description": "Unless Stopped - Restarts the container irrespective of the exit code but stops restarting when the service is stopped or removed."
},
{
"value": "on-failure",
"description": "On Failure - Restarts the container if the exit code indicates an error."
},
{
"value": "always",
"description": "Always - Restarts the container until its removal."
}
]
}
},
{
"variable": "max_retry_count",
"label": "Maximum Retry Count",
"group": "Container Configuration",
"description": "Maximum number of retries allowed for a container to exit with a code indicating an error. </br>\nSetting this to zero, will keep restarting the container if it exits with a code indicating an error.\n",
"schema": {
"type": "int",
"required": true,
"default": 0,
"show_if": [
[
"restart_policy",
"=",
"on-failure"
]
]
}
},
{
"variable": "disable_builtin_healthcheck",
"label": "Disable Builtin Healthcheck",
"group": "Container Configuration",
"description": "Disable the built-in HEALTHCHECK defined in the image.\n",
"schema": {
"type": "boolean",
"default": false
}
},
{
"variable": "tty",
"label": "TTY",
"group": "Container Configuration",
"description": "Allocate a pseudo-TTY.</br>\nNote, that due to a bug in the underlying library</br>\nusing this option will cause the logs to not display properly</br>\non the TrueNAS WebUI.</br>\nYou can still view logs using 'docker logs ...'.</br>\nBug: https://github.com/docker/docker-py/issues/1394\n",
"schema": {
"type": "boolean",
"default": false
}
},
{
"variable": "stdin",
"label": "Stdin",
"group": "Container Configuration",
"description": "Keep stdin open on the container.",
"schema": {
"type": "boolean",
"default": false
}
},
{
"variable": "devices",
"label": "Devices",
"group": "Container Configuration",
"description": "Devices to use for the container. </br>\nEg: Host Device: /dev/ttyUSB0, Container Device: /dev/ttyACM0\n",
"schema": {
"type": "list",
"default": [],
"items": [
{
"variable": "device",
"label": "Device",
"schema": {
"type": "dict",
"attrs": [
{
"variable": "host_device",
"label": "Host Device",
"schema": {
"type": "string",
"required": true
}
},
{
"variable": "container_device",
"label": "Container Device",
"schema": {
"type": "string",
"required": true
}
}
]
}
}
]
}
},
{
"variable": "privileged",
"label": "Privileged",
"group": "Security Context Configuration",
"description": "Run the container in privileged mode.",
"schema": {
"type": "boolean",
"default": false
}
},
{
"variable": "capabilities",
"label": "Capabilities",
"group": "Security Context Configuration",
"description": "Add Linux capabilities to the container.",
"schema": {
"type": "dict",
"attrs": [
{
"variable": "add",
"label": "Add",
"schema": {
"type": "list",
"items": [
{
"variable": "capability",
"label": "Capability",
"schema": {
"type": "string",
"required": true
}
}
]
}
}
]
}
},
{
"variable": "run_as_custom_user",
"label": "Custom User",
"group": "Security Context Configuration",
"description": "Run the container as a custom user.",
"schema": {
"type": "boolean",
"default": false
}
},
{
"variable": "run_as",
"label": "",
"group": "Security Context Configuration",
"schema": {
"type": "dict",
"show_if": [
[
"run_as_custom_user",
"=",
true
]
],
"attrs": [
{
"variable": "user",
"label": "User ID",
"description": "The user id that container will run as.",
"schema": {
"type": "int",
"default": 568,
"required": true
}
},
{
"variable": "group",
"label": "Group ID",
"description": "The group id that container will run as.",
"schema": {
"type": "int",
"default": 568,
"required": true
}
}
]
}
},
{
"variable": "host_network",
"label": "Host Network",
"group": "Network Configuration",
"description": "Bind to the host network.",
"schema": {
"type": "boolean",
"default": false
}
},
{
"variable": "ports",
"label": "Ports",
"group": "Network Configuration",
"description": "Configure ports for the container.",
"schema": {
"type": "list",
"show_if": [
[
"host_network",
"=",
false
]
],
"default": [],
"items": [
{
"variable": "port",
"label": "Port",
"schema": {
"type": "dict",
"attrs": [
{
"variable": "target",
"label": "Container Port",
"schema": {
"type": "int",
"required": true,
"min": 1,
"max": 65535
}
},
{
"variable": "published",
"label": "Host Port",
"schema": {
"type": "int",
"default": 15000,
"required": true,
"$ref": [
"definitions/port"
]
}
},
{
"variable": "protocol",
"label": "Protocol",
"schema": {
"type": "string",
"default": "tcp",
"required": true,
"enum": [
{
"value": "tcp",
"description": "TCP"
},
{
"value": "udp",
"description": "UDP"
}
]
}
}
]
}
}
]
}
},
{
"variable": "dns_config",
"label": "Custom DNS Setup",
"group": "Network Configuration",
"description": "Configure custom DNS settings for the container.\n",
"schema": {
"type": "dict",
"attrs": [
{
"variable": "nameservers",
"label": "Nameservers",
"description": "The DNS nameservers to use.",
"schema": {
"type": "list",
"items": [
{
"variable": "nameserver",
"label": "Nameserver",
"schema": {
"type": "string",
"required": true
}
}
]
}
},
{
"variable": "searches",
"label": "Search Domains",
"description": "The DNS search domains to use.",
"schema": {
"type": "list",
"items": [
{
"variable": "search",
"label": "Search Domain",
"schema": {
"type": "string",
"required": true
}
}
]
}
},
{
"variable": "options",
"label": "DNS Options",
"description": "The DNS options to use.",
"schema": {
"type": "list",
"items": [
{
"variable": "option",
"label": "Option",
"schema": {
"type": "string",
"required": true
}
}
]
}
}
]
}
},
{
"variable": "portals",
"label": "",
"group": "Portal Configuration",
"schema": {
"type": "list",
"items": [
{
"variable": "portal",
"label": "Portal",
"schema": {
"type": "dict",
"attrs": [
{
"variable": "name",
"label": "Name",
"description": "The name of the portal",
"schema": {
"type": "string",
"default": "Web UI",
"required": true
}
},
{
"variable": "scheme",
"label": "Protocol",
"description": "The protocol for the portal",
"schema": {
"type": "string",
"default": "http",
"required": true,
"enum": [
{
"value": "http",
"description": "HTTP"
},
{
"value": "https",
"description": "HTTPS"
}
]
}
},
{
"variable": "use_node_ip",
"label": "Use Node IP",
"description": "Use the node IP for the portal",
"schema": {
"type": "boolean",
"default": true,
"required": true
}
},
{
"variable": "host",
"label": "Host",
"description": "The host for the portal",
"schema": {
"type": "string",
"default": "",
"show_if": [
[
"use_node_ip",
"=",
false
]
],
"required": true
}
},
{
"variable": "port",
"label": "Port",
"description": "The port for the portal",
"schema": {
"type": "int",
"default": 15000,
"required": true
}
},
{
"variable": "path",
"label": "Path",
"description": "The path for the portal",
"schema": {
"type": "string",
"default": "/",
"required": true
}
}
]
}
}
]
}
},
{
"variable": "storage",
"label": "Storage",
"group": "Storage Configuration",
"description": "Storage for the container.",
"schema": {
"type": "list",
"default": [],
"items": [
{
"variable": "storageEntry",
"label": "Storage Entry",
"schema": {
"type": "dict",
"attrs": [
{
"variable": "type",
"label": "Type",
"description": "ixVolume: Is dataset created automatically by the system.</br>\nHost Path: Is a path that already exists on the system.</br>\nSMB Share: Is a SMB share that is mounted to as a volume.</br>\ntmpfs: Is a temporary directory that will be created on the RAM.</br>\n",
"schema": {
"type": "string",
"required": true,
"default": "ix_volume",
"immutable": true,
"enum": [
{
"value": "host_path",
"description": "Host Path (Path that already exists on the system)"
},
{
"value": "ix_volume",
"description": "ixVolume (Dataset created automatically by the system)"
},
{
"value": "cifs",
"description": "SMB/CIFS Share (Mounts a volume to a SMB share)"
},
{
"value": "tmpfs",
"description": "Tmpfs (Temporary directory created on the RAM)"
}
]
}
},
{
"variable": "read_only",
"label": "Read Only",
"description": "Mount the volume as read only.",
"schema": {
"type": "boolean",
"default": false
}
},
{
"variable": "mount_path",
"label": "Mount Path",
"description": "The path inside the container to mount the storage.",
"schema": {
"type": "path",
"required": true
}
},
{
"variable": "host_path_config",
"label": "Host Path Configuration",
"schema": {
"type": "dict",
"show_if": [
[
"type",
"=",
"host_path"
]
],
"attrs": [
{
"variable": "acl_enable",
"label": "Enable ACL",
"description": "Enable ACL for the storage.",
"schema": {
"type": "boolean",
"default": false
}
},
{
"variable": "acl",
"label": "ACL Configuration",
"schema": {
"type": "dict",
"show_if": [
[
"acl_enable",
"=",
true
]
],
"attrs": [],
"$ref": [
"normalize/acl"
]
}
},
{
"variable": "path",
"label": "Host Path",
"description": "The host path to use for storage.",
"schema": {
"type": "hostpath",
"show_if": [
[
"acl_enable",
"=",
false
]
],
"required": true
}
}
]
}
},
{
"variable": "ix_volume_config",
"label": "ixVolume Configuration",
"description": "The configuration for the ixVolume dataset.",
"schema": {
"type": "dict",
"show_if": [
[
"type",
"=",
"ix_volume"
]
],
"$ref": [
"normalize/ix_volume"
],
"attrs": [
{
"variable": "acl_enable",
"label": "Enable ACL",
"description": "Enable ACL for the storage.",
"schema": {
"type": "boolean",
"default": false
}
},
{
"variable": "dataset_name",
"label": "Dataset Name",
"description": "The name of the dataset to use for storage.",
"schema": {
"type": "string",
"required": true,
"immutable": true,
"default": "storage_entry"
}
},
{
"variable": "acl_entries",
"label": "ACL Configuration",
"schema": {
"type": "dict",
"show_if": [
[
"acl_enable",
"=",
true
]
],
"attrs": [],
"$ref": [
"normalize/acl"
]
}
}
]
}
},
{
"variable": "cifs_config",
"label": "SMB Configuration",
"description": "The configuration for the SMB dataset.",
"schema": {
"type": "dict",
"show_if": [
[
"type",
"=",
"cifs"
]
],
"attrs": [
{
"variable": "server",
"label": "Server",
"description": "The server to mount the SMB share.",
"schema": {
"type": "string",
"required": true
}
},
{
"variable": "path",
"label": "Path",
"description": "The path to mount the SMB share.",
"schema": {
"type": "string",
"required": true
}
},
{
"variable": "username",
"label": "Username",
"description": "The username to use for the SMB share.",
"schema": {
"type": "string",
"required": true
}
},
{
"variable": "password",
"label": "Password",
"description": "The password to use for the SMB share.",
"schema": {
"type": "string",
"required": true,
"private": true
}
},
{
"variable": "domain",
"label": "Domain",
"description": "The domain to use for the SMB share.",
"schema": {
"type": "string"
}
}
]
}
},
{
"variable": "tmpfs_config",
"label": "Tmpfs Configuration",
"description": "The configuration for the tmpfs dataset.",
"schema": {
"type": "dict",
"show_if": [
[
"type",
"=",
"tmpfs"
]
],
"attrs": [
{
"variable": "size",
"label": "Tmpfs Size Limit (in Mi)",
"description": "The maximum size (in Mi) of the temporary directory.</br>\nFor example: 500\n",
"schema": {
"type": "int",
"default": 500,
"required": true
}
}
]
}
}
]
}
}
]
}
},
{
"variable": "labels",
"label": "",
"group": "Labels Configuration",
"schema": {
"type": "list",
"default": [],
"items": [
{
"variable": "label",
"label": "Label",
"schema": {
"type": "dict",
"attrs": [
{
"variable": "key",
"label": "Key",
"schema": {
"type": "string",
"required": true
}
},
{
"variable": "value",
"label": "Value",
"schema": {
"type": "string",
"required": true
}
}
]
}
}
]
}
},
{
"variable": "resources",
"label": "",
"group": "Resources Configuration",
"schema": {
"type": "dict",
"attrs": [
{
"variable": "enable_resource_limits",
"label": "Enable Resource Limits",
"group": "Resources Configuration",
"description": "Enable resource limits for the container.",
"schema": {
"type": "boolean",
"default": false
}
},
{
"variable": "limits",
"label": "Limits",
"schema": {
"type": "dict",
"show_if": [
[
"enable_resource_limits",
"=",
true
]
],
"attrs": [
{
"variable": "cpus",
"label": "CPUs",
"description": "CPUs limit for the container.",
"schema": {
"type": "int",
"default": 2,
"required": true
}
},
{
"variable": "memory",
"label": "Memory (in MB)",
"description": "Memory limit for the container.",
"schema": {
"type": "int",
"default": 4096,
"required": true
}
}
]
}
},
{
"variable": "gpus",
"group": "Resources Configuration",
"label": "GPU Configuration",
"schema": {
"type": "dict",
"$ref": [
"definitions/gpu_configuration"
],
"attrs": []
}
}
]
}
}
]
},
"readme": "<h1>iX App</h1> <p>iX App is designed to let user deploy a docker image in TrueNAS SCALE with a simple wizard.</p>",
"changelog": null,
"chart_metadata": {
"app_version": "1.0.0",
"capabilities": [],
"categories": [
"custom"
],
"date_added": "2024-09-10",
"description": "An application for deploying simple containers.",
"home": "https://www.truenas.com/",
"host_mounts": [],
"icon": "https://media.sys.truenas.net/apps/ix-chart/icons/icon.webp",
"keywords": [],
"lib_version": "2.1.16",
"lib_version_hash": "dac15686f882b9ce65b8549a3d5c0ed7bafe2df7a9028880d1a99b0ff4af1eff",
"maintainers": [
{
"email": "dev@ixsystems.com",
"name": "truenas",
"url": "https://www.truenas.com/"
}
],
"name": "ix-app",
"run_as_context": [],
"screenshots": [],
"sources": [],
"title": "iX App",
"train": "stable",
"version": "1.1.14"
}
}
}