ProjectSave writes the whole project to the folder on disk (opened folder, or the folder you created with Save as…). If you opened a ZIP, use Save as… first — Save stays off until then. Save as… picks a parent folder, you type a new folder name (created if missing; error if it already exists), then renames .conf / macro JSON and writes all files. Export ZIP bundles the full project.
Saving project…
Save project as…
1.Select parent folder — the system dialog only picks an existing folder (the one that contains your project). Don’t type a new name in that dialog.
2. Type the new folder name below; it is created when you click Save.
Where files will go
The browser only exposes each folder’s short name (not a full D:\… path). The preview uses that name plus the new folder you type. The new folder is created next to your open project.
Saving project…
Directions
Opening a project
Open folder… — load a project directory from disk.
Open ZIP… — load a .zip of a project. Until you use Save as…, Save stays disabled.
Open Template… — load the bundled starter project from the editor host. Same rules as a ZIP until you save to a folder.
Files and the tree
The root .conf file (the one at project root chosen as the main config) opens in the project config editor: username, panelname, gamename, gameversion, htmlname, macroname, and thumbnail only. View raw conf edits the full JSON; saving the form writes exactly those seven keys.
The root macro JSON file named by macroname in your root .conf opens in the macro catalog editor (macro number, description, value). Use View raw JSON for other top-level keys or advanced edits. Syntax help explains macro value strings.
Open panels/*.html in panel mode (visual editor + preview). Other text files open in the text editor; images show as a preview.
Folders in the tree can be expanded or collapsed; the active file is highlighted.
Panel preview (visual mode)
Left-click a button to select it and edit label, style, macro, image, and other options in the Selection panel.
Right-click (or Ctrl-click) jumps to that panel file in the tree (when the project lists that panel).
Drag a button by its frame to move it within the row or to another row. Drop on a column to insert before it, or on the shaded area at the end of a row to append. Raw HTML blocks don’t move, but you can drop before or after them.
Add row, View Panel HTML, Scale, and New File… are available once a project is loaded.
Save, Save as…, Export ZIP
Save — write every project file back to the folder you opened, or to the folder you created with Save as…. Disabled until Save as… if you only opened a ZIP or template.
Save as… — pick an existing parent folder, type a new folder name; that folder is created and the full project is written there.
Export ZIP — download a .zip with everything under one folder named like the project (e.g. template-panel/…), so extract gives a single project directory.
After Save as… (renames)
The editor renames the root .conf and macro .json file to match your new folder name, and updates panelname and macroname inside the config so they stay consistent.
You should still edit the .conf file for anything specific to your setup — for example your user name, game name, and any other fields your game or Starkeys expects. The automatic rename does not guess those values.
New file
Creates a new file in the project. Under panels/, new files default to .html and can use the full panel starter layout; other folders need an extension in the name (e.g. .css, .js).
In panels/, .html is added if you omit it.
Click a button to edit. Drag to reorder; between rows or at a row edge, drop into a new row.
Full document — edits below refresh the preview when you pause typing.
Project config
These are the only fields in the root .conf file. Saving the form writes exactly these keys (no extras).
Raw JSON — invalid JSON cannot return to the form until fixed. Extra top-level keys are removed if you save from the form.
Macro & run catalog
Macro value syntax (reference)
Use top-level JSON keys macro1, macro2, … for key/tap sequences, and run1, run2, … for host run targets. Each block has value and description. The macro engine reads value character by character: taps, special keys, timing, and modifier groups.
Base input
Letters and digits are quick taps. Use \ to send a literal next character (e.g. \{ for a literal brace).
Virtual keys
Use {KEYNAME}, e.g. {F1}…{F12}, {NUMPAD0}…{NUMPAD9}, {LCONTROL}, {SPACE}, {RETURN}, {ESCAPE}.
Hold & pause
+n before a key holds it for n seconds, e.g. +5{W}. &n pauses the macro for n seconds, e.g. {F4}&2{F4}.
Modifier groups […]
Square brackets press keys in order, then release in reverse. Example: [{LCONTROL}C]. Complex: [{LSHIFT}{LCONTROL}{F10}].
Press / release
` (backtick) marks the next character as press-and-hold; ~ (tilde) as release. Not valid inside […].
Example
"M&1+5{LBUTTON}" — tap M, wait 1s, hold left mouse 5s.
Raw JSON — fix any errors before switching back to the visual editor.
Text / JSON / config — edits save into the open project.