# Install requirements

What the package puts on disk, how an upgrade replaces the engine, where the licence check runs, and which figures are still unmeasured.

## Set the opening workspace

General settings let you pick the opening workspace and local execution preferences after installation.

[Screenshot: Set the launch workspace and execution preferences in the current desktop app.](https://stochastly.com/screenshots-current/docs-install--general-settings.png)

Set the launch workspace and execution preferences in the current desktop app.

## Platform

- operating system: Windows desktop, x64 · macOS 13.1 or later, Apple silicon
- package: Windows: NSIS setup, one file · macOS: a .dmg holding Stochastly.app
- privileges: per-user install, no administrator prompt
- engine: frozen Python, shipped inside the package
- account: early access: an account that answered the five questions downloads the installer from its account, and the app is unlocked by signing in to your account from the app

To activate, use the Sign in button of the Account dialog in the app. It opens the connection page in your browser with its code filled in, you log in with Google, GitHub or an emailed link, approve the code shown in the app, and the app receives the plan attached to your [account](https://stochastly.com/account). An account in the early access receives its free licence, for one computer, at this first sign-in. Signing in is the one way to activate the app. If no browser opens, go to the [connection page](https://stochastly.com/account/device) and type the code shown in the app.

The installer is built per-user (installMode: currentUser in src-tauri/tauri.conf.json), so it lands under your own profile and asks for no administrator elevation. The Start-menu entry and the desktop shortcut come from the NSIS defaults of that build (app/BUILD.md).

## What travels inside the package

- sidecar/: the engine, frozen as a folder of Python and its libraries
- mcp/: the standalone MCP client script, for an agent
- THIRD_PARTY_NOTICES.md: the notices of the libraries in the build
- LICENSE-APACHE-2.0.txt: the licence those notices answer to

The engine runs as a separate process the shell starts, and its Python is inside the package. Installing an interpreter beforehand is unnecessary for the app itself. Driving the app from an agent is a different path: the MCP client is a script, so it runs on a Python interpreter you already have, carrying the mcp package. That package declares requires_python >= 3.10, which is where the version requirement comes from.

[MCP launcher source on GitHubstochastly-mcp · MIT](https://github.com/Stochastly/stochastly-mcp)

The notices file travels with the binary because the Apache-2.0 terms attach to the libraries in the build. It is generated from the installed versions, and notices_tierces_smoke.py compares it against requirements.lock package by package.

## The Windows build carries no code signature today

Windows shows a publisher warning on an unsigned installer, and this build is unsigned (app/BUILD.md). If you see a notice that the file is not commonly downloaded, you choose Keep. Then Windows shows Windows protected your PC: click More info, then Run anyway. The installer needs no administrator rights, takes about 300 MB to download and about 1.2 GB once installed.

A signing certificate is a purchase in progress, and the warning stands until it is applied to a build. A checksum settles the file without depending on a signature: its SHA-256 is shown in your account beside the Download button.

## The macOS build is signed and notarised

The .dmg carries Stochastly.app signed with a Developer ID, and the binaries of the frozen engine inside it are signed one by one with the hardened runtime. Apple notarised the build, and its ticket is stapled to the .dmg.

Open the .dmg, drag Stochastly to Applications, then open it from Applications. On the first launch, macOS states that the app was downloaded from the internet and that Apple checked it for malicious software, and you confirm with Open. Intel Macs are not supported.

The first launch needs an internet connection, because the app inside the .dmg relies on the online notarisation check.

## Two directories are wiped before the copy

The engine ships as a resource tree of roughly ten thousand files. NSIS overwrites the files present in the new package and leaves the rest untouched, so a module dropped between two releases would stay on disk. A stale module next to a fresh one is worse than dead weight, because it stays on the import path.

The install hook therefore deletes sidecar/ and mcp/entirely before copying the new ones, and touches no other directory (src-tauri/installer-hooks.nsh). Removing the install directory itself would take the uninstaller with it, so the hook names the two trees it owns.

## One directory holds runs, cache and licence

```
Windows %USERPROFILE%\.stochastly runs, OHLC cache, papers, licence
macOS ~/Library/Application Support/Stochastly cache, licence, profile, log
~/Documents/Stochastly data, strategies, results, sessions, assistant
STOCHASTLY_HOME set it to keep everything under one directory of your choice
```

The path is resolved by a single function read at each call (stochastly/home.py:23). A value computed once at import would freeze the first path seen, which is how a test once wrote into a real cache. Bars, exports and the licence file follow the same declaration, so setting the variable moves them together. On macOS the working files sit in your Documents folder, and the first launch after this change moves an existing ~/.stochastly there, entry by entry, without overwriting anything.

## The check runs on your machine, against an embedded key

Signing in stores an Ed25519-signed licence token on your machine, which you never see or type. The app verifies the signature with a public key compiled into the build, and derives validity at each check from the signature and the expiry (stochastly/license.py). Editing the stored file grants no edition, since forging a token takes the private key.

A token that does not verify is treated as an absent one, and the four ways it can fail take that same path: a missing public key, a bad signature, an expiry in the past, and an audience the build does not answer to (license.py, fail-closed). Your plan on a given computer comes from a short-lived authorisation that the server signs for that computer with a second key, and the app grants no edition without it. Until you sign in, the app opens and runs no paid action.

A plan covers up to two personal computers, each activated separately, and the app confirms it with the server at an interval of 1 hour while it is open. It keeps working offline for 3 days after the last confirmation, then stops granting its edition until it reaches the server again (license.py). Sign in to your account to connect the app or release a linked computer.

## RAM, disk and cores carry no figure yet

A local engine has hardware requirements, and no RAM, disk or core figure is published for it. The build that would supply them is produced on the reference machine, and it has not been produced yet, and a table built without it would report a guess.

What unblocks the figures is one production build followed by an install measured on that machine: peak resident memory over a run, the installed size on disk, and the core count the worker pool uses. Each one goes up with its command and its date, at the rank the other figures on the documentation routes carry.

[Screenshot: The current app reports this machine’s measured hardware profile and its recommended local worker pool.](https://stochastly.com/screenshots-current/docs-install--hardware-settings.png)

The current app reports this machine’s measured hardware profile and its recommended local worker pool.

---
Source: https://stochastly.com/docs/install
