Getting started
Four ways to run it:
In the browser. editor.scmjs.dev is the newest numbered release — the same build as the installers below, so a bug report there names a version. It asks for StarCraft's graphics on first use and can fetch them from Blizzard in one click. nightly.editor.scmjs.dev is
main, rebuilt each night; being a separate site it asks for the graphics again and keeps its own settings, plugins and recent files.As a desktop app. The releases page has installers for Windows, macOS and Linux, and a Windows zip to unpack and run without installing (the numbered releases are the tagged versions;
nightlyis one rolling prerelease built frommain). On first start the app looks for a StarCraft installation and extracts what it needs; two archives dropped next to the app are found too. It checks for a newer version at startup and offers it in a notice — never installing on its own — and Help ▸ Check for Updates… asks whenever you like.In a container. Every numbered release publishes one, so the editor is a
docker runaway — nothing to build, and nothing to uninstall afterwards:docker run --rm -p 8080:80 ghcr.io/scm-js/scm-js:latest # then http://localhost:8080It is nginx serving the release's own web bundle, so it behaves like the hosted editor: everything lives in the browser you open it from, and it asks for the graphics on first use.
:latestis the newest numbered release (never a nightly);:0.1.0,:0.1and:0pin as far as you like.From source, below.
The editor draws terrain and units with graphics out of StarCraft's own archives. Blizzard's data is not redistributable and none of it is in this repository, so the editor looks for it in three places: files bundled with the build, a copy it kept in the browser earlier, and — in the desktop app — a StarCraft installation on the disk. When none of those answers it opens Help ▸ Game Data…, which offers two ways to fix that:
- Download from Blizzard. Blizzard offers the standalone StarCraft map editor as a free download, and it carries the two archives the graphics come from. No account, and nothing to find on your own disk — this is the one that works if you have never owned a copy of the 1.16 game.
- Use your own files. Pick
StarDat.mpqandBrooDat.mpq, or the folder holding them. Brood War'sBrooDat.mpqis required, and Remastered installations carry neither archive — they come from a classic (1.16) install, or from the download above.
Either way the extraction runs in the browser and the result is kept for next time.
npm install
npm run extract # finds StarDat.mpq / BrooDat.mpq, writes public/
npm run dev # http://localhost:5173
Node 22.18 or newer, because the extraction script relies on Node's built-in type stripping. If the script cannot find your install, point it at one:
npm run extract -- --from "/mnt/c/Program Files (x86)/StarCraft"
npm run extract is optional: a clone without it behaves like the hosted build and
asks through Help ▸ Game Data…. Without any data the editor still runs, with flat
tileset colours for terrain and coloured markers for units. See
docs/game-data.md for the full story and
docs/development.md for the desktop and release builds.
Open a map with Ctrl+O or by dropping it on the window. Ctrl+S saves.
A new scenario#
Ctrl+N opens the New Scenario dialog. The eight tilesets are shown as their own ground rather than as coloured squares, the terrain list under the size shows every flat terrain the tileset paints — this is the fill the map is made of, so what you see there is what the map will look like — and the preview draws the scenario at its real size and terrain, so a 64×64 map reads as coarser ground than a 256×256 one. Start locations are optional and on by default: one per player on a ring, each moved to the nearest ground it fits on, laid down with the terrain. They are part of the map from the moment it exists, so there is nothing to undo them from — untick Place automatically, or delete them on the Units layer. Without game data the dialog falls back to flat tileset colours and says so, as the map view itself does.
Saving#
Ctrl+S writes the map back where it came from. In Chrome, Edge and the desktop app the editor keeps a handle to the file it opened (from the Open dialog, a drop or the Save dialog), so Save writes in place after the browser has asked once for permission. Firefox and Safari hand over a file's contents but no way back to it, so there every save is a download and the notice that appears bottom-right says so; look in the downloads folder. Save As (Ctrl+Shift+S) and Save Copy As open the Save dialog — a copy is written without the open map changing its name or file — and a map that has no file yet goes through it on its first Ctrl+S. When a save is done, a notice appears bottom-right with the name and size, the status bar says the same, and the dot next to the map's name in the menubar stops glowing.
The Save dialog is where the file's shape is decided, with everything it will write listed on the right before it is:
- Format:
.scx,.scm, or a bare.chk(the scenario alone, no archive). - Compression: PKWARE is what StarEdit writes and what Blizzard's own maps are stored as, so every StarCraft build reads it; zlib is smaller and needs 1.16.1 or Remastered; none is the largest and readable by anything. A map keeps the compression it was opened with by default; a new map gets StarEdit's. StarEdit's encryption is a tick beside it.
- Other files in the archive: the sounds and the files plugins keep there (the Trigger Script plugin's source, say), each with a tick, so a copy for release can leave them out.
- Sections: the game reads none of ISOM, TILE, DD2 (the terrain-editing data), IVER, IVE2, IOWN, UPUS, SWNM or WAV (editor bookkeeping); each group can be left out, as can sections the format reference does not know, and repeated sections can be merged into the one the game would act on. The dialog says what each costs an editor later (no isometric brush without ISOM, for instance); the map in the editor is not changed. Everything and Smallest that plays set the ticks in one go.
- Check Map runs alongside, with its counts and a button to the full list.
The options confirmed in the dialog are what Ctrl+S reuses for that map from then on.