Getting Started
You can work in the browser or in Opal Desktop. Same editor, same games.
| Where | How |
|---|---|
| Browser | Open https://opal-engine.com/create, sign in, and start a project. It saves to your account. |
| Desktop | Download Opal Desktop, then create or open a project folder on your computer. You can work offline. |
Ship a playable arcade build when you're ready. Publishing needs a signed-in account in the browser editor. On Desktop, use File → Cloud Sync… to move a folder to your account first.
Using Opal
The core loop is small: open the editor, place something, press Play, save. Everything below builds on that.
First launch
- Open the editor: Editor in the site nav (
/create), or Opal Desktop. - In the browser, sign in — you'll land on the launcher. Pick a project or create a new one. On Desktop, create a local project or open an existing project folder.
- In the editor top bar, confirm the Project picker shows the project you want. The launcher lets you choose an existing project, start a New Project, or import one with Open Project.
- Open the Scenes panel in the left dock and rename the opening scene — or leave it as My Scene and keep moving. The top-bar Scene picker is a quick switch; management (create, rename, duplicate, delete, start scene ★, reorder) lives in the Scenes panel.
- Press Play in viewport (▶ in the transport controls, center of the top bar) to confirm the scene runs. Press Stop (■) to return to editing.
That's it. Everything from here is additive: art, variables, Flow, UI, publishing.
Your work autosaves as you edit — there's no ceremony. File → Save (
⌘S/Ctrl+S) forces an immediate save if you want one, but you don't need to remember it.
Projects
The Project picker in the top bar shows the active game. It controls which project's scenes, GameState, assets, and publishing metadata you're editing.
| Action | Where |
|---|---|
| Switch project | Project picker → pick a project |
| Create project | Project picker → New project |
| Rename project | Project picker or launcher → rename |
| Delete project | Launcher / project management |
Open a .opal file | File → Open Project… |
| Recently opened | File → Open Recent (up to 5, with scene counts) |
| Ship to the arcade | File → Publish to Arcade… |
A project contains:
- Ordered scene list and a start scene (★ — which scene players see first; list order is authoring order, Go To Scene drives the player path)
- GameState variables — Number, True / False, Text, List, Object, with Session / Saved / Scene lifetime
- Scripts — OpalScript classes and reusable Behavior Components (
opal.component(...)) - UI definitions
- The shared asset library (images, sounds, prefabs, characters,
.ssbbundles) - Art, Sound, and FX (particle) graphs (each persists on the project record)
- Publishing metadata and optional arcade listing
Scenes, assets, and input bindings are scoped to the project. Switching projects swaps all of them together.
Scenes
Every project holds one or more scenes. Use the two surfaces that look similar but do different jobs:
- Scene picker (top bar, next to the Project picker) — quick switch. Click to jump to another scene in the same project.
- Scenes panel (left dock, the Scenes workbench) — manage. This is where you create, rename, duplicate, delete, set the start scene, reorder by drag-and-drop, search, import, and see Unassigned scenes that live in storage but aren't in any project.
Typical work in the Scenes panel:
| Action | How |
|---|---|
| New scene | + New Scene |
| Import a scene file | Import… |
| Open a scene | Click the scene name |
| Set start scene | Click ☆ / ★ on the row (the start scene is where players spawn) |
| Rename / duplicate | Rename / Duplicate on the row |
| Delete | Delete on the row (the last scene in a project can't be deleted) |
| Reorder | Drag the row to a new position |
| Find a scene | Type in Search scenes… |
| Rescue an orphan | Unassigned section → Add to project |
Each scene stores its own objects and hierarchy, Object Flow and Scene Flow, motion and rig data, UI references, background, and physics settings. The project owns the order; the scene owns the content.
Top-bar menus
Three menus matter most:
| Menu | What lives there |
|---|---|
| File | Save, Import Scene…, Open Project… (browser) / Open Folder… (Desktop), Export Scene, Export Game, Publish to Arcade… (browser), Cloud Sync… (Desktop) |
| Add | Add Art (drop images straight onto the stage), Library (import to the library without placing), Sounds |
| Help | Tutorials & Guides, Keyboard Shortcuts, Customize Quick Actions…, Console, Problems, What's new, About Opal |
If you're looking for a backup or a publish, it's in File. If you're bringing new art or sound into the game, it's in Add.
The top bar also holds the Project and Scene quick-switch pickers, the workspace tabs (Arrange / Flow ▾ / Animate ▾ / Create ▾ / Scripts / UI), and the play transport (Play in viewport / Fullscreen / Stop / Stats). Variables and Input are in the bottom shelf beside Saved; Agent opens the project assistant.
Adding content
Start from Add, then refine:
| Entry | What it does |
|---|---|
| Add Art | Opens a file picker; chosen images land on the stage immediately and are added to the library |
| Library | Imports images into the asset library without placing them — pick them from the left asset drawer later |
| Sounds | Opens the Sounds manager for importing or browsing audio assets |
From there:
- Open the left asset drawer to drag in images, prefabs, character assets, audio, or
.ssbsprite-sequence bundles. - Use Create ▾ → Art when you need to slice a sprite sheet or assemble frame animation before placing it.
- Use Create ▾ → Sound when a clip needs trimming, layering, normalizing, or baking before you wire it in Flow.
- Use Create ▾ → Pixels for pixel-art frames and FX for particle looks — same idea, different medium.
A useful habit: import loose art through Library, compose it in Art/Pixels/Sound, then place the baked result. Raw drops are fast but harder to reuse.
Play mode
The transport in the top bar is always visible:
| Control | Action |
|---|---|
| Play in viewport (▶) | Runs the game inside the editor canvas |
| Fullscreen play (⛶) | Runs edge-to-edge; editor chrome hides |
| Stop (■) | Ends the session and restores the editor (play state is discarded) |
| Stats | Toggles the runtime stats overlay (frame time, draw calls, etc.) |
| Flow | Toggles the live graph overlay while the game is running |
While playing, input, physics, animation, Flow, audio, components, and UI all run exactly as they will for players. Stop tears the play world down — nothing you changed during play is saved.
Test constantly. A one-object scene with one Flow rule is easier to fix than a large, untested level. Keep Stats or Flow on while you iterate so regressions are visible, not guessed at.
Undo and redo
Almost every edit is undoable:
- Undo:
Ctrl+Z/⌘Z - Redo:
Ctrl+YorCtrl+Shift+Z
What participates:
- Object transforms, inspector fields, hierarchy changes, and component edits
- Flow graph edits (scene history — adding, wiring, or moving nodes)
- Art, Sound, Pixels, and FX graph edits (each canvas keeps its own scoped history while it's active —
Ctrl+Zthere rewinds the canvas, not the scene) - Motion keys and related clip edits
When you're typing inside a text field or the Scripts editor, Ctrl+Z rewinds that field, not the scene history. The toolbar ↩ Undo / ↪ Redo buttons preview whether an undo is available — they disable when there's nothing to rewind.
Saving, exporting, and backups
You don't have to think about saving, but it helps to know where it happens:
| Mechanism | What it does |
|---|---|
| Autosave (browser) | Debounced writes of the active scene to your account |
| Save (Desktop) | Writes the project into its folder on disk. File → Save Project (⌘S / Ctrl+S) |
| File → Save (browser) | Flushes any pending autosave immediately |
| File → Cloud Sync… (Desktop) | Upload, download latest, or sync this folder with your Opal account |
| File → Export Scene | Downloads the active scene as opal-scene.opal |
| File → Export Game | Downloads the whole project as a .opal backup — all its scenes, GameState, scripts, and a union asset bundle |
| File → Publish to Arcade… | Ships the current build to the hosted arcade from the browser editor; Manage Arcade Listing… edits the store page without re-shipping |
Before Export Game and Publish to Arcade, Opal runs a Problems check (missing covers, broken scene refs, orphan asset references, etc.). If something's wrong you'll get a dialog that lets you fix it or continue anyway — the check is advisory, not a trapdoor.
Keep a periodic Export Game even while the project lives on your account or in a Desktop folder — it's the milestone backup you can reimport with File → Open Project… (browser) or by opening the folder (Desktop).
Global variables
Open Variables in the bottom shelf to declare project-wide GameState fields. Every entry has a name, a type, a lifetime, and a default.
| Type | Examples |
|---|---|
| Number | score, coins, timeLeft |
| True / False | hasKey, bossDefeated |
| Text | playerName, currentQuest |
| List | inventory, waveQueue |
| Object | player, currentTarget |
| Lifetime | Meaning |
|---|---|
| Session (default) | Resets when play starts; kept across Go To Scene |
| Saved | Remembered between plays |
| Scene | Resets every time a scene starts |
Object Flow, Scene Flow, UI Data bindings, and scripts all read and write the same GameState. For per-object state, use the Inspector Variables card. Write from Flow with Add Counter / Set Value; read with Get Value or =GameState.score. A score label is Source → GameState in that Data bindings card.
Learn while editing
Open Help → Tutorials & Guides or Help → Keyboard Shortcuts to land on the hosted learning pages (/learn and the manual section on shortcuts) in a new tab. When something's broken, Help → Problems and Help → Console open their dock panels right inside the editor, next to the Scenes and asset views — no tab switch required.
Example
From an empty scene to a running game in five steps:
- Add → Add Art — place one image on the stage.
- Variables — create a
scorenumber variable defaulting to0. - Select the art, open Object Flow, add On Tap → Add Counter (
score,1). - Press Play in viewport and tap the art.
- Press Stop, then File → Export Game for a backup.
Want the number on screen? Add a Text label and bind it with Data bindings → GameState → score. UI and HUD walks that picker.
Build your first game expands this into the full coin collector.
See also
- Opal Desktop — folders, offline editing, Cloud Sync, then publish from the browser
- Variables and GameState — lifetimes, lists, object references, HUD vs Flow
- Build your first game — the shortest path from empty scene to exported game
- Editor overview — workspaces, panels, toolbar, and shortcuts in detail
- Assets and importing — import paths, the library drawer, and cutting sprites out of photos in Pixel Studio
- Pixel Studio — draw sprites, bake PNG or a
.ssb - Particle Canvas — bake custom
.pfxeffects in FX - High-level scripting — copy-paste classes, then Flap
- Visual scripting — your first Flow graph
- Components guide — attaching and authoring reusable behaviors