Appearance
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 fileFull 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
| Property | Type | Default | Description |
|---|---|---|---|
title | string | - | Display name in title bar |
appName | string | - | Unique identifier (no spaces) |
version | string | "1.0.0" | Semantic version |
Window Settings
| Property | Type | Default | Description |
|---|---|---|---|
window.width | number | 1280 | Window width in pixels |
window.height | number | 720 | Window height in pixels |
window.resizable | boolean | true | Allow window resizing |
window.fullscreen | boolean | false | Start in fullscreen |
window.frame | boolean | true | Show window frame |
window.alwaysOnTop | boolean | false | Keep above other windows |
Build Settings
| Property | Type | Default | Description |
|---|---|---|---|
build.architectures | string[] | [] | List of architectures to build |
build.singleExecutable | boolean | true | Use single file format (EXE/AppImage) |
Available Architectures
| Value | Description |
|---|---|
mac-universal | macOS Universal (Intel + Apple Silicon) |
mac-arm64 | macOS Apple Silicon only |
mac-x64 | macOS Intel only |
windows-x64 | Windows 64-bit |
windows-arm64 | Windows ARM |
windows-ia32 | Windows 32-bit (legacy) |
linux-x64 | Linux 64-bit |
linux-arm64 | Linux ARM |
Package Formats
singleExecutable | Windows | Linux | macOS |
|---|---|---|---|
true (default) | Portable .exe | AppImage | .app bundle |
false | Directory | Directory | .app bundle |
Steam Distribution
Set singleExecutable: false for Steam. Directory format enables delta patching for smaller updates.
Steamworks
| Property | Type | Default | Description |
|---|---|---|---|
steamworks.enabled | boolean | false | Enable Steam integration |
steamworks.appId | string | "480" | Steam Application ID |
Optimization
| Property | Type | Default | Description |
|---|---|---|---|
optimization.minifyJs | boolean | true | Minify JavaScript files |
optimization.minifyCss | boolean | true | Minify CSS files |
optimization.minifyHtml | boolean | true | Minify HTML files |
optimization.bundleCdn | boolean | false | Bundle external CDN resources |
File Exclusion
| Property | Type | Default | Description |
|---|---|---|---|
excludeFiles | string[] | [] | Glob patterns for files to exclude |
Plugins
| Property | Type | Default | Description |
|---|---|---|---|
plugins | object | {} | Per-game plugin configuration |
plugins.[id].enabled | boolean | false | Enable plugin for this game |
plugins.[id].values | object | {} | 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:
- Close GemShell (or it will overwrite your changes)
- Edit the JSON file
- 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