PWMSim

Privacy

The short version: your circuits never reach our servers. Without an account the app works as before, with no cookie. If you sign in, the app keeps one sign-in cookie and a small account record, described below; it never holds a circuit.

Circuit data never reaches our servers

PWMSim never sends this information:

A share link stores the circuit in the URL fragment. Browsers do not send this part of a link to the server. The link itself carries the circuit.

If you save a project to Google Drive (below), your browser sends that project file to Google, into your own Drive, and nowhere else. If you save it to a project folder, it is written to that folder on your computer.

This website

Cookieless. No accounts. No ads and no cross-site trackers. Every font and image comes from this site, and so does every script but one: Cloudflare Web Analytics, from the company that hosts this site. There is no cookie banner because there is nothing for one to ask about.

Cloudflare Web Analytics counts visits to these pages. It sets no cookie and stores nothing in your browser. For each page view it reports the page's address and the address you came from, both without their query or fragment, your browser, operating system and device type, and how long the page took to load. Cloudflare works out the country from the connection. The report goes to this site's own address, and the project sees only totals. It runs on pwmsim.com only: the app at app.pwmsim.com refuses it, so it never sees a circuit.

The example pages show each example live in a frame of the app at app.pwmsim.com, which is PWMSim's own. It runs in your browser like the app, sets no cookie and stores nothing, and it sends the anonymous usage events described below only when you run the example in it.

The hosted app

The app at app.pwmsim.com runs in your browser. The WebAssembly solver runs on your computer.

The app requests data only from its own site, and from a web address you give it to import from (below):

  1. App files, like any web page, and one small status file, described below.
  2. Anonymous usage events. The hosted app sends small, cookieless batches to its /t endpoint. They describe actions such as opening an example, importing a file, completing a simulation, changing a parameter, viewing a result, saving locally, exporting, making or opening a share link, or choosing which parts the palette shows. Events use closed enumerations, counts, durations, true/false values, and registered error codes. They cannot include free text or circuit data.

An import event says which kind of file it was, such as an LTspice schematic or a SPICE netlist, and how well it converted: exactly, with approximations, with parts missing, or not at all. If the app refuses the file, the event also says what kind of problem stopped it, such as a missing symbol or an unsupported device. Both come from fixed lists. The event never says which part, model, or file.

A share-link event says only that a link was made or opened: which format it uses, a length range, where the design came from, and whether it opened. It never includes the link or anything in it.

A completed-simulation event says which analysis ran, a time range, a size range and a range for the number of switches and diodes, and, as true or false, whether the design uses control blocks, motors or mechanical parts, and meters or scopes. It never says which parts or how they are set. Choosing which parts the palette shows sends that choice, one of six lists such as "Power electronics" or "Learning", and nothing else.

No installation identifier is created or sent. Dates and active-day history stay in your browser. Only categories from fixed lists, counts, true/false values, and durations can be sent. Add ?telemetry=log to the app's address to print each event in the browser console instead of sending it.

Accepted events are aggregated in Cloudflare Workers Analytics Engine on this site's own account and are kept for three months, after which they are deleted by the platform. Your IP address, your request headers, and the raw request body are not recorded.

Local development, downloaded copies, and any address other than https://app.pwmsim.com do not send usage events.

The status file, /status.json, is read when the app opens, and again before a run when the app's copy is more than five minutes old. The request sends nothing: no circuit, no identifier, no count. The file is the same for everyone. It can turn an analysis off while a confirmed wrong result is fixed, and say why. If it cannot be read, nothing is turned off. Other addresses and downloaded copies never read it.

A web link you import from. The import dialog can read a schematic, a netlist or a symbol library from a web address you paste, such as a file or a folder on GitHub. Your browser reads that address directly from the site that hosts it, as it would for a download. No PWMSim server takes part, nothing about your designs is sent with the request, and it carries no referrer. The site you link sees that request as it would see any download: your IP address and the address that was read. A link that names such a file (app.pwmsim.com/#open=…, an "Open in PWMSim" link) works the same way: when you open it, your browser reads that file from its site. The file's address stays in the part of the link that browsers never send to a server, so no PWMSim server learns it, and the anonymous counters record only the kind of site (GitHub, a gist, Google Drive or another), never the address.

Accounts

You do not need an account, and importing LTspice and SPICE circuits needs none. A free account adds the periodic steady state, saved measurements, the evidence report and KiCad schematics from your own files; paid levels, when they open, add more. Signing in uploads nothing: your circuits and projects stay where they were.

Signing in. You sign in on Auth0's page, with an email code, Google, GitHub or Microsoft. PWMSim never sees a password. Auth0 tells PWMSim your verified email address, your name if you gave one, and a number that identifies you to them.

What the account holds, on PWMSim's own Cloudflare account:

It never holds a circuit, a netlist, a component value, a file name, or your IP address.

At the levels that include the periodic steady state, sweeps and the responses, the app asks PWMSim's server before each such run whether your level includes it. The request says which kind of run and the app version, nothing about the circuit. PWMSim counts those runs per account per day, to see how the levels are used; the counts are part of your account data.

The sign-in cookie. Signing in sets one cookie, __Host-pwmsim_s, on app.pwmsim.com only. It is needed to keep you signed in, it is not used for analytics, and it ends after 30 days without use or 90 days in all. Without an account, the app sets no cookie.

Your control. The account page lists where you are signed in and signs out any of them. It downloads everything above as one file, and deletes the account at once.

Levels in the usage events. Builds with accounts add the level you are at (0 to 4) to the "app opened" and "simulation started" events, and send one more event when you open a feature your level does not include: which feature, and your level. These say nothing about which account you are, and they are never joined to the account records.

Your own storage

A project folder. At the levels that include it, you can pick a folder and save projects there, for example one that Google Drive, OneDrive or Dropbox syncs. The browser reads and writes that folder; nothing is sent anywhere.

Google Drive. At the levels that include it, you can connect your Google Drive. Google's own window asks you to allow it. The app can then see only the files it creates in a PWMSim folder in your Drive, never the rest of it. Files go straight from your browser to Google; PWMSim's servers never see them. The permission Google gives the app lasts about an hour and is kept only in the open tab. Use of information received from Google APIs follows the Google API Services User Data Policy, including its Limited Use requirements.

The contact form

The contact form sends the topic you select, your reply address, and your message to this site. That information is only used to answer you. It is not added to a mailing list.

The form sets no cookie or submission identifier. Your IP address is not saved with the message. The site does not publish the inbox address because public addresses attract spam.

Changes

This policy is stored with the site, so changes appear in the public history. The core rules do not change quietly: circuit data never reaches our servers, anonymous usage data follows a published schema, the site stays cookieless, and the app sets a cookie only when you sign in.

Questions? Use the contact form.