Storage#

Three tiers, and only one of them is the source of truth.

1. Files#

Everything — scripts, projects, prompts, experiments, curves, graphs, specs, documents and annotations — is a plain file under your scripts folder (Documents/Ohm by default).

Documents/Ohm/
├─ *.ohm                      your scripts
├─ .ohm/                      memory, trash, screenshots (hidden)
└─ projects/<id>/             one folder per project

You can read them, edit them in any editor, diff them, put them in git and back them up the way you back up anything else. Every write is atomic — a temp file and a rename — so an interrupted save cannot leave a half-written document.

Item saves keep the last 50 versions in <item>.versions/, restorable from the History panel in each editor.

2. Bundles#

A bundle is one JSON file holding an entire project: the manifest, links, every item, the text under docs/, data/, scripts/ and annotations/, and the documents in files/ as base64.

Settings → Scripts, or the Projects panel:

  • Export bundle — save to <id>.ohm-bundle.json.
  • Import bundle — pick a file; it is imported as a new project (the id gets a numeric suffix if it is taken) and becomes active. An import never modifies an existing project.

Two limits to know: text files over 5 MB and documents past a 50 MB total are skipped, and only .ohm scripts are included. A very large project can therefore export slightly lossily — check the bundle if that matters to you.

3. The browser mirror#

Ohm can also keep a copy of a project inside the app's own database (IndexedDB):

  • Mirror active project to browser DB — copy it now.
  • Mirror after every save — keep it current automatically.
  • Restore as new project — write a mirrored copy back to disk as <name> (restored).

The mirror is a convenience backup, not a second source of truth: it is per-machine, invisible to git, and cleared if you clear site data. Use bundles to move work between machines.

Where the rest lives#

What Where Move it with
Scripts and projects Documents/Ohm --scripts-dir, OHM_SCRIPTS_DIR
Settings and encrypted credentials the data folder --data-dir, OHM_DATA_DIR
Cookies, cache, logged-in sites the browser profile, inside the data folder --profile-dir, OHM_PROFILE_DIR
Downloaded models <data>/models, changeable in Settings --models-dir, OHM_MODELS_DIR

Moving a folder#

Settings → Folders shows all four, where each one currently is and why — a flag, a variable, the config file or the default — and changes any of them:

Settings → Folders: each folder, where it is now and what a restart would change

A change is written to config.json in the system's standard config folder (%APPDATA%\Ohm on Windows) and applies at the next start: Chromium holds its profile open for the life of the process, so Ohm does not switch folders underneath a running session. The page says what is queued and offers a Restart now.

Nothing is copied for you. Point Ohm at an empty folder and it starts fresh there — which is exactly what you want for a second, isolated instance, and not what you want if you meant to take your data with you. Move the contents yourself first, with Ohm closed.

A folder that cannot be created or written to is refused when you choose it, rather than at the next start when it would stop the app from working.

Bringing a profile over from Chrome#

Ohm runs on Chromium, so a profile folder from Chrome, Edge, Brave, Vivaldi or Chromium is very nearly the right shape already. Settings → Folders → Copy a profile from another browser finds every profile belonging to your user — by the name you gave it, not Profile 4 — and copies one across.

Two groups, both optional:

Group What comes over
Cookies and site data Cookies, local storage, session storage, IndexedDB, and the key that decrypts the cookies
Bookmarks, history and autofill Bookmarks, History, Favicons, Top Sites, Web Data

What deliberately does not come over:

  • Saved passwords. Ohm has no password manager, so copying your most sensitive file would achieve nothing.
  • Extensions. Ohm does not load Chromium extensions, so a copy would only look like it worked.
  • Caches. Most of a profile's size and none of its value.

Three things to expect:

  • Close the other browser first. Chrome holds its own SQLite files open; anything locked is listed in the result so you can close it and import again.
  • Cookies from recent Chrome on Windows may not carry over. Chrome now binds them to itself with app-bound encryption, and nothing else can read them — by design. Edge, Brave and Chromium usually carry over, and unencrypted site data always does, which for many sites is where the session actually lives.
  • The copy goes into the profile folder Ohm will use next, never the one it is running from, so set a new Browser profile folder first. Ohm restarts into it.

Uninstalling removes the program and, if you agree, the settings folder. Your scripts folder is never touched by an uninstall.

See Environment for the exact paths, the flags and the config file format.