security

How Mastrly is secured

Mastrly is built so that your work stays in storage you already own. The app runs in your browser and reads and writes your own Google Drive, Dropbox or self-hosted server directly. There is no Mastrly server holding your audio, your client list or your storage credentials. This page describes how each part of Mastrly is protected, and where the limits of that protection lie.

Last updated: 18 October 2026.

your storage

Your audio stays in your own storage

On Google Drive, Mastrly requests only the drive.file and drive.appdata scopes. These allow it to see the files it created or that you opened with it, and a hidden folder that only Mastrly can read. On Dropbox, Mastrly is an App folder app, so it can reach nothing outside /Apps/mastrly/. Neither grant lets Mastrly see the rest of your account.

Your client and project records are kept in that hidden area: Drive's appDataFolder, or a /.mastrly-private/ folder inside the Dropbox App folder. Apart from your audio, the only files kept in the visible workspace are share manifests, which a client's player must be able to read.

Sign-in tokens are stored in your browser and are sent only to Google or Dropbox. To withdraw Mastrly's access entirely, remove it from your Google account's third-party access page or from Dropbox's connected apps page; the privacy policy gives the addresses.

sign-in

Signing in

Sign-in uses the OAuth authorisation code flow with PKCE. Your browser creates a one-time secret before leaving for Google or Dropbox and keeps it to itself; the code that comes back is useless without that secret, and a random value is checked on return so that a sign-in cannot be started on your behalf by another site.

The return passes through auth.mastrly.cloud, a static page that forwards the code only to a web address that holds a Mastrly licence. It never sees a token. It is served with a strict content security policy and cannot be placed inside another page.

the app

The app itself

sharing

Share links

A share link is built from the storage identifier of a small manifest file: a Google Drive file id, a Dropbox link with its key, or a random 128-bit token on a self-hosted server. These identifiers cannot be guessed. Anyone who holds the link can open the share; anyone who does not, cannot.

When a share is created, the files in it are made readable by link through Google or Dropbox, and nothing else in your storage is. The manifest records the files' names relative to the project, never their full paths.

The download setting decides whether the player offers a download button. It is not a copy-protection measure: a player has to receive the audio in order to play it, so a recipient with the link and some technical knowledge can save the files. Revoking a share stops further access; it cannot recall files a client has already received.

access codes

Access codes

A share can require a six-digit access code. The manifest is then published encrypted with AES-256-GCM, under a key derived from the code with one million rounds of PBKDF2-SHA256 and a fresh random salt each time it is published. Track names, file addresses and the client's name are inside the encrypted manifest.

An access code stops a forwarded link from being opened by someone who was not also given the code. It is not a substitute for keeping the link private: because the code is short, a determined person who holds the link can work it out. To withdraw access from someone who has the link, revoke or replace it.

client player

The client player

connect

Feedback and messages (Connect)

Messages between a studio and its clients are encrypted in the browser or app before they are sent. The Connect service at connect.mastrly.cloud stores and relays only encrypted messages and cannot read them. Each share link has its own conversation key, which only the studio and the clients it admits hold.

Encryption in the browser relies on the app code that is delivered to it. When you use the hosted app, that code is served by us; a studio that hosts Mastrly itself serves its own copy.

mobile apps

The iPhone and Android apps

licences and payment

Licences and payment

A licence key is signed by Mastrly and checked by the app without contacting any server. A key bought for a domain works only on that domain, with and without www., and on the hosted app at mastrly.cloud. Before a key is issued for a domain, the buyer proves control of it by receiving a code at an address on that domain.

Payment is taken by Stripe on Stripe's own checkout page. Mastrly never receives card details. A key is created only after Stripe confirms that payment has been received.

self-hosting

Self-hosting

A studio can run the Mastrly gateway on its own server, so that the app, the share links and the audio are all served from the studio's own domain.

limits

What Mastrly cannot protect against

reporting

Reporting a security problem

If you believe you have found a security problem in Mastrly, write to hello@mastrly.cloud with the details. Please do not publish it until it has been addressed. Every report is read and answered.