Gaseous Server

Get Started with Apps!
Keywords: games, emulation
Train: Community
Home Page: https://github.com/gaseous-project/gaseous-server
Added: 2024-11-15
Last Updated: 2025-04-23
This is the server for the Gaseous system. It offers ROM and title management, as well as some basic in browser emulation of those ROMs.
Run as Context- Gaseous Server runs as the root user.
Group: 0 / root
User: 0 / root - MariaDB runs as non-root user.
Group: 999 / mariadb
User: 999 / mariadb


Security Capabilities
- Gaseous is able to chown files.
- Gaseous is able to set user ID for it's sub-processes.
- Gaseous is able to set group ID for it's sub-processes.
App Metadata (Raw File)
{
"1.0.22": {
"healthy": true,
"supported": true,
"healthy_error": null,
"location": "/__w/apps/apps/trains/community/gaseous-server/1.0.22",
"last_update": "2025-04-23 17:40:39",
"required_features": [],
"human_version": "v1.7.11_1.0.22",
"version": "1.0.22",
"app_metadata": {
"app_version": "v1.7.11",
"capabilities": [
{
"description": "Gaseous is able to chown files.",
"name": "CHOWN"
},
{
"description": "Gaseous is able to set user ID for it's sub-processes.",
"name": "SETUID"
},
{
"description": "Gaseous is able to set group ID for it's sub-processes.",
"name": "SETGID"
}
],
"categories": [
"games"
],
"changelog_url": "https://github.com/gaseous-project/gaseous-server/releases",
"date_added": "2024-11-15",
"description": "This is the server for the Gaseous system. It offers ROM and title management, as well as some basic in browser emulation of those ROMs.",
"home": "https://github.com/gaseous-project/gaseous-server",
"host_mounts": [],
"icon": "https://media.sys.truenas.net/apps/gaseous-server/icons/icon.png",
"keywords": [
"games",
"emulation"
],
"lib_version": "2.1.16",
"lib_version_hash": "dac15686f882b9ce65b8549a3d5c0ed7bafe2df7a9028880d1a99b0ff4af1eff",
"maintainers": [
{
"email": "dev@ixsystems.com",
"name": "truenas",
"url": "https://www.truenas.com/"
}
],
"name": "gaseous-server",
"run_as_context": [
{
"description": "Gaseous Server runs as the root user.",
"gid": 0,
"group_name": "root",
"uid": 0,
"user_name": "root"
},
{
"description": "MariaDB runs as non-root user.",
"gid": 999,
"group_name": "mariadb",
"uid": 999,
"user_name": "mariadb"
}
],
"screenshots": [
"https://media.sys.truenas.net/apps/gaseous-server/screenshots/screenshot1.png",
"https://media.sys.truenas.net/apps/gaseous-server/screenshots/screenshot2.png"
],
"sources": [
"https://github.com/gaseous-project/gaseous-server"
],
"title": "Gaseous Server",
"train": "community",
"version": "1.0.22"
},
"schema": {
"groups": [
{
"name": "Gaseous-Server Configuration",
"description": "Deploy Gaseous Server by selecting from the following options, where in doubt use the defaults.\n"
},
{
"name": "User and Group Configuration",
"description": "Configure User and Group for Gaseous Server"
},
{
"name": "Network Configuration",
"description": "The Gaseous Server defaults to running on port 5198, you may change this if you wish.\n"
},
{
"name": "Storage Configuration",
"description": "Gaseous Server uses two persistent volumes, one for the database, another for Configuration and ROM uploads. If you wish to map in pre-existing data, you may wish to create a new host-volume pointing to that location on your pool. NOTE - When using a Database Host volume, it must be owned by user/group 999:999, the configuration directory can be owned by root:root."
},
{
"name": "Labels Configuration",
"description": "Configure Labels"
},
{
"name": "Resources Configuration",
"description": "The defaults should work for most people. ROM Emulation happens browser side and increasing these\ndefaults may not impact local emulation performance.\n"
}
],
"questions": [
{
"variable": "gaseous",
"label": "",
"group": "Gaseous-Server Configuration",
"schema": {
"type": "dict",
"attrs": [
{
"variable": "db_password",
"label": "Database Password",
"description": "The password for Gaseous Server.",
"schema": {
"type": "string",
"default": "",
"required": true,
"private": true
}
},
{
"variable": "db_root_password",
"label": "Root Database Password",
"description": "The root password for Gaseous Server.",
"schema": {
"type": "string",
"default": "",
"required": false,
"private": true
}
},
{
"variable": "igdb_client_id",
"label": "Twitch (IGDB) Client ID",
"description": "Twitch Client ID used for Metadata Queries </br>\nMore Information at https://github.com/gaseous-project/gaseous-server/wiki/Metadata\n",
"schema": {
"type": "string",
"required": true,
"default": ""
}
},
{
"variable": "igdb_client_secret",
"label": "Twitch (IGDB) Client Secret",
"description": "Twitch Client Secret used for Metadata Queries </br>\nMore Information at https://github.com/gaseous-project/gaseous-server/wiki/Metadata\n",
"schema": {
"type": "string",
"required": true,
"private": true,
"default": ""
}
},
{
"variable": "additional_envs",
"label": "Additional Environment Variables",
"description": "Configure additional environment variables for Gaseous-Server.",
"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": "run_as",
"label": "",
"group": "User and Group Configuration",
"schema": {
"type": "dict",
"attrs": [
{
"variable": "user",
"label": "User ID",
"description": "The user id that Gaseous Server files will be owned by.",
"schema": {
"type": "int",
"min": 568,
"default": 568,
"required": true
}
},
{
"variable": "group",
"label": "Group ID",
"description": "The group id that Gaseous Server files will be owned by.",
"schema": {
"type": "int",
"min": 568,
"default": 568,
"required": true
}
}
]
}
},
{
"variable": "network",
"label": "",
"group": "Network Configuration",
"schema": {
"type": "dict",
"attrs": [
{
"variable": "web_port",
"label": "Web Port",
"description": "The port for Gaseous Server UI",
"schema": {
"type": "int",
"default": 5198,
"required": true,
"$ref": [
"definitions/port"
]
}
}
]
}
},
{
"variable": "storage",
"label": "",
"group": "Storage Configuration",
"schema": {
"type": "dict",
"attrs": [
{
"variable": "mariadb_data",
"label": "Database Location",
"description": "The path to store the Database.",
"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.\n",
"schema": {
"type": "string",
"required": true,
"immutable": true,
"default": "ix_volume",
"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)"
}
]
}
},
{
"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,
"hidden": true,
"default": "mariadb_data"
}
},
{
"variable": "acl_entries",
"label": "ACL Configuration",
"schema": {
"type": "dict",
"show_if": [
[
"acl_enable",
"=",
true
]
],
"attrs": []
}
}
]
}
},
{
"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": "data",
"label": "Configuration and Files Location",
"description": "Where to store Gaseous Server configuration and uploaded ROMS from the User Interface.",
"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.\n",
"schema": {
"type": "string",
"required": true,
"immutable": true,
"default": "ix_volume",
"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)"
}
]
}
},
{
"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,
"hidden": true,
"default": "data"
}
},
{
"variable": "acl_entries",
"label": "ACL Configuration",
"schema": {
"type": "dict",
"show_if": [
[
"acl_enable",
"=",
true
]
],
"attrs": []
}
}
]
}
},
{
"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": "additional_storage",
"label": "Additional Storage",
"description": "Additional storage for Gaseous Server",
"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.\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)"
}
]
}
},
{
"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": "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": "containers",
"label": "Containers",
"description": "Containers where the label should be applied",
"schema": {
"type": "list",
"items": [
{
"variable": "container",
"label": "Container",
"schema": {
"type": "string",
"required": true,
"enum": [
{
"value": "gaseous-server",
"description": "gaseous-server"
}
]
}
}
]
}
}
]
}
}
]
}
},
{
"variable": "resources",
"label": "",
"group": "Resources Configuration",
"schema": {
"type": "dict",
"attrs": [
{
"variable": "limits",
"label": "Limits",
"schema": {
"type": "dict",
"attrs": [
{
"variable": "cpus",
"label": "CPUs",
"description": "CPUs limit for Ollama.",
"schema": {
"type": "int",
"default": 2,
"required": true
}
},
{
"variable": "memory",
"label": "Memory (in MB)",
"description": "Memory limit for Ollama.",
"schema": {
"type": "int",
"default": 4096,
"required": true
}
}
]
}
}
]
}
}
]
},
"readme": "<h1>Gaseous-Server</h1> <p><a href=\"https://github.com/gaseous-project/gaseous-server\">Gaseous-Server</a> - Host your ROMS library and emulate them in-browser.</p> <p>This is the server for the Gaseous system. It offers ROM and title management, as well as some basic in browser emulation of those ROMs.</p>",
"changelog": null,
"chart_metadata": {
"app_version": "v1.7.11",
"capabilities": [
{
"description": "Gaseous is able to chown files.",
"name": "CHOWN"
},
{
"description": "Gaseous is able to set user ID for it's sub-processes.",
"name": "SETUID"
},
{
"description": "Gaseous is able to set group ID for it's sub-processes.",
"name": "SETGID"
}
],
"categories": [
"games"
],
"changelog_url": "https://github.com/gaseous-project/gaseous-server/releases",
"date_added": "2024-11-15",
"description": "This is the server for the Gaseous system. It offers ROM and title management, as well as some basic in browser emulation of those ROMs.",
"home": "https://github.com/gaseous-project/gaseous-server",
"host_mounts": [],
"icon": "https://media.sys.truenas.net/apps/gaseous-server/icons/icon.png",
"keywords": [
"games",
"emulation"
],
"lib_version": "2.1.16",
"lib_version_hash": "dac15686f882b9ce65b8549a3d5c0ed7bafe2df7a9028880d1a99b0ff4af1eff",
"maintainers": [
{
"email": "dev@ixsystems.com",
"name": "truenas",
"url": "https://www.truenas.com/"
}
],
"name": "gaseous-server",
"run_as_context": [
{
"description": "Gaseous Server runs as the root user.",
"gid": 0,
"group_name": "root",
"uid": 0,
"user_name": "root"
},
{
"description": "MariaDB runs as non-root user.",
"gid": 999,
"group_name": "mariadb",
"uid": 999,
"user_name": "mariadb"
}
],
"screenshots": [
"https://media.sys.truenas.net/apps/gaseous-server/screenshots/screenshot1.png",
"https://media.sys.truenas.net/apps/gaseous-server/screenshots/screenshot2.png"
],
"sources": [
"https://github.com/gaseous-project/gaseous-server"
],
"title": "Gaseous Server",
"train": "community",
"version": "1.0.22"
}
}
}
Support, maintenance, and documentation for applications within the Community catalog is handled by the TrueNAS community. The TrueNAS Applications Portal hosts but does not validate or maintain any linked resources associated with this app.
There currently aren’t any resources available for this application!
Please help the TrueNAS community create content or discuss this application in the TrueNAS Community forum.