Skip to content

Configuration File

GemShell saves all settings to gemshell.config.json in your game folder.

File Location

my-game/
├── index.html
├── game.js
└── gemshell.config.json    <-- Configuration file

Full Schema

json
{
  "title": "My Game",
  "appName": "my-game",
  "version": "1.0.0",
  
  "window": {
    "width": 1280,
    "height": 720,
    "resizable": true,
    "fullscreen": false,
    "frame": true,
    "alwaysOnTop": false
  },
  
  "build": {
    "architectures": [
      "mac-universal",
      "windows-x64",
      "linux-x64"
    ],
    "singleExecutable": true
  },
  
  "steamworks": {
    "enabled": false,
    "appId": "480"
  },
  
  "optimization": {
    "minifyJs": true,
    "minifyCss": true,
    "minifyHtml": true,
    "bundleCdn": false
  },
  
  "excludeFiles": [
    "*.psd",
    "*.ai",
    "node_modules/**",
    "*.map"
  ],
  
  "plugins": {
    "debug-tools": {
      "enabled": true,
      "values": {
        "fpsCounter": true,
        "memoryUsage": false,
        "position": "top-left"
      }
    }
  }
}

Properties

Project Settings

PropertyTypeDefaultDescription
titlestring-Display name in title bar
appNamestring-Unique identifier (no spaces)
versionstring"1.0.0"Semantic version

Window Settings

PropertyTypeDefaultDescription
window.widthnumber1280Window width in pixels
window.heightnumber720Window height in pixels
window.resizablebooleantrueAllow window resizing
window.fullscreenbooleanfalseStart in fullscreen
window.framebooleantrueShow window frame
window.alwaysOnTopbooleanfalseKeep above other windows

Build Settings

PropertyTypeDefaultDescription
build.architecturesstring[][]List of architectures to build
build.singleExecutablebooleantrueUse single file format (EXE/AppImage)

Available Architectures

ValueDescription
mac-universalmacOS Universal (Intel + Apple Silicon)
mac-arm64macOS Apple Silicon only
mac-x64macOS Intel only
windows-x64Windows 64-bit
windows-arm64Windows ARM
windows-ia32Windows 32-bit (legacy)
linux-x64Linux 64-bit
linux-arm64Linux ARM

Package Formats

singleExecutableWindowsLinuxmacOS
true (default)Portable .exeAppImage.app bundle
falseDirectoryDirectory.app bundle

Steam Distribution

Set singleExecutable: false for Steam. Directory format enables delta patching for smaller updates.

Steamworks

PropertyTypeDefaultDescription
steamworks.enabledbooleanfalseEnable Steam integration
steamworks.appIdstring"480"Steam Application ID

Optimization

PropertyTypeDefaultDescription
optimization.minifyJsbooleantrueMinify JavaScript files
optimization.minifyCssbooleantrueMinify CSS files
optimization.minifyHtmlbooleantrueMinify HTML files
optimization.bundleCdnbooleanfalseBundle external CDN resources

File Exclusion

PropertyTypeDefaultDescription
excludeFilesstring[][]Glob patterns for files to exclude

Plugins

PropertyTypeDefaultDescription
pluginsobject{}Per-game plugin configuration
plugins.[id].enabledbooleanfalseEnable plugin for this game
plugins.[id].valuesobject{}Plugin setting overrides

Example Configurations

Minimal

json
{
  "title": "My Game",
  "appName": "my-game",
  "version": "1.0.0"
}

Steam Release

json
{
  "title": "My Steam Game",
  "appName": "my-steam-game",
  "version": "1.0.0",
  "window": {
    "width": 1920,
    "height": 1080,
    "fullscreen": true
  },
  "build": {
    "architectures": [
      "mac-universal",
      "windows-x64",
      "linux-x64"
    ],
    "singleExecutable": false
  },
  "steamworks": {
    "enabled": true,
    "appId": "123456"
  },
  "optimization": {
    "minifyJs": true,
    "minifyCss": true,
    "minifyHtml": true
  }
}

itch.io / Direct Distribution

json
{
  "title": "My Game",
  "appName": "my-game",
  "version": "1.0.0",
  "build": {
    "architectures": [
      "mac-universal",
      "windows-x64",
      "linux-x64"
    ],
    "singleExecutable": true
  }
}

Development

json
{
  "title": "My Game (Dev)",
  "appName": "my-game-dev",
  "version": "0.1.0",
  "window": {
    "width": 1280,
    "height": 720
  },
  "build": {
    "architectures": ["mac-arm64"],
    "singleExecutable": false
  },
  "optimization": {
    "minifyJs": false,
    "minifyCss": false,
    "minifyHtml": false
  },
  "plugins": {
    "debug-tools": {
      "enabled": true,
      "values": {
        "fpsCounter": true,
        "memoryUsage": true
      }
    }
  }
}

Auto-Save

GemShell automatically saves settings when you:

  • Change any setting in the UI
  • Navigate between steps
  • Close the application

Changes are debounced (500ms delay) to prevent excessive writes.

Manual Editing

You can edit gemshell.config.json directly:

  1. Close GemShell (or it will overwrite your changes)
  2. Edit the JSON file
  3. Reopen the game in GemShell

Version Control

Add gemshell.config.json to your Git repository to share build settings with your team.

gitignore
# .gitignore - Do NOT ignore config
# gemshell.config.json  <-- Keep this tracked