Menu

StackMachine
    Store files

    Store files.
    Keep them between deploys.

    Give an app a volume at any mount path and write to it like a normal disk. The files stay with the app across deployments, and S3-compatible tools can reach them when you turn that on.

    Object storage that scales with your needs.

    An app writes files to a volume. The volume grows as it fills, and S3 tools can read the same files.

    An illustration, with example data.

    Powering products and agents at

    Wasmer logo
    Simply Static logo
    Tiiny logo
    Manus logo
    ModularDS logo
    A disk at any path
    Create a volume for an app, choose where it mounts, and set its maximum size.
    It outlives the deploy
    A volume belongs to the app, not to a version. Ship as often as you like and the files are still there.
    S3 when you want it
    Enable S3 access on a volume and the same files are reachable from S3-compatible tools and object workflows.

    Mount a volume.
    Write files as usual.

    Create the volume with a mount path and a size. Update it later to switch on S3 access, and redeploy the app in the same call so it picks up the change.

    Shell
    $ npm install stackmachine

    Read the docs

    store.js
    import StackMachine from "stackmachine";
    
    const client = new StackMachine(process.env.STACKMACHINE_API_KEY);
    
    const volume = await client.apps.volumes.create({
      app: "da_XYZ",
      mountPath: "/uploads",
      maxSizeBytes: 1_073_741_824,
    });
    
    // Open the same files to S3-compatible tools.
    const updated = await client.apps.volumes.update(volume.id, {
      mountPath: "/uploads",
      s3Enabled: true,
      redeployApp: true,
    });
    
    console.log(updated.s3Url, updated.explorerUrl);

    From a folder
    to object storage.

    Start with a mounted path. Open it up when other tools need the same files.

    The same files on every version

    A new deployment mounts the volume the last one used. Uploads, exports, and caches carry over without a copy step.

    storefront3 versions
    • v14Live/uploads
    • v13/uploads
    • v12/uploads
    The same volume, mounted on each one

    Change storage, roll the app

    Set redeployApp when you update a volume and the app moves onto a version with the new settings straight away.

    client.apps.volumes.update
    mountPath
    "/uploads"
    s3Enabled
    true
    redeployApp
    true
    S3 access on, app redeployed

    A few things
    to know.

    More in the documentation.

    Nothing. A volume stays with the app across deployments, so a new version sees the same files at the same path.

    Start with your first volume.

    One API key for hosting, storage, databases, email, and cron.