# Littleworks or your own app

What it takes to give a Shopify feature a backend: with Littleworks, or with a custom app you build and run yourself.

Source: https://littleworks.app/docs/compare

Most store features that need a backend are small: a form that saves submissions, a wishlist, a review queue, a back-in-stock alert. The feature is a few hundred lines of code. The Shopify app it needs around it is not, and that app has to keep running for as long as the feature does.

Littleworks is that app, already built and running. Your agent writes only the feature, as plain JavaScript **works** that run with your store’s data, Shopify access and admin pages. You approve access and publish from Shopify admin.

## What a custom app makes you build

| A custom Shopify app needs | With Littleworks |
| --- | --- |
| An app in the Partner dashboard: configuration, scopes, distribution and, for an app used by more than one store, Shopify’s app review | Install Littleworks. Each store approves only the permissions its builds use. |
| The OAuth install, session tokens for the embedded admin, and encrypted storage and refresh of access tokens | Handled. Works call `shopify.admin.graphql` and `shopify.storefront.graphql`; credentials never reach your code. |
| Hosting, a database, migrations, backups and monitoring | Hosted on Cloudflare’s edge and isolated sandboxes, with two application instances and PostgreSQL with a standby and point-in-time recovery. |
| Shopify’s mandatory privacy webhooks and uninstall cleanup | Handled. Each customer data, customer redact and shop redact request is tracked to its 30-day deadline. |
| Webhook subscriptions, HMAC verification, de-duplication and retries | An event trigger with a `when` filter. Littleworks subscribes the store, verifies every delivery, runs each work once per delivery and retries failures after 1 minute, 10 minutes, 1 hour and 6 hours. Events that don’t match `when` cost nothing. |
| A job scheduler | A cron schedule in the store’s time zone. |
| File storage and an upload endpoint for customer files such as artwork or photos | `shopify.files`: the browser uploads straight to the merchant’s Shopify Files, and a work saves the file and keeps its ID on a record. See [Store files](https://littleworks.app/docs/files). |
| An app proxy and signature checks to know which customer is signed in, on a theme or a Hydrogen storefront | `auth: "customer"`. The work receives a verified `context.customer.id` through the app proxy, or from a short assertion your Hydrogen server signs with a store secret. |
| Rate limiting, input validation and CORS for public endpoints | Automatic, before your code runs. Each endpoint declares its input schema and allowed origins. |
| An embedded admin UI built with App Bridge and Polaris | [Views](https://littleworks.app/docs/views): describe the records and what staff do with them, and Littleworks renders a native Shopify admin page: a queue, table, cards, board, settings form or dashboard. |
| Versions, a staging setup, rollback and run logs | Every deploy is a version. Test drafts with preview URLs, publish when ready, roll back by publishing an earlier version, and inspect every run. |
| A Shopify Flow action | Run a Littleworks work, in the Flow editor of every store with Littleworks, with checks when the workflow is saved. |
| Keeping dependencies, the Shopify connection and security patches current | Littleworks keeps the platform current. |

What stays yours: the feature’s logic, its storefront UI in your theme, and the decision about when to publish.

## What it costs

Plans are per store and billed through Shopify, with a 14-day trial. **Starter** is $19 USD per 30 days with 10,000 runs, 2,000 retained documents and 2 published admin pages. **Growth** is $39 USD per 30 days with 50,000 runs, 10,000 retained documents and 5 published admin pages. **Scale** is $79 USD per 30 days with 250,000 runs, 50,000 retained documents and 15 published admin pages. Every plan includes Shopify GraphQL, external HTTPS requests, secrets, events, schedules and Flow. There are no overage charges: a plan’s limits stop new runs instead of adding to the bill.

A **run** is one execution of a work, so what uses runs depends on how you build. Content your storefront shows can live in Shopify itself: the [reviews recipe](https://littleworks.app/docs/recipe-reviews) publishes approved reviews to metaobjects, so product pages render them with Liquid and use no runs. Only submissions and moderation do.

| What you’re building | Runs per month | Plan |
| --- | --- | --- |
| Quote requests: 50 a day, each reviewed and answered by staff in an admin inbox | About 5,000–8,000, including staff opening the inbox | Starter |
| Back-in-stock alerts: 300 signups a month, restock events filtered with `when` | A few thousand | Starter |
| Wishlists on a store with 200,000 visits a month, loading a signed-in shopper’s list once per visit | 30,000–60,000, depending on how many shoppers sign in | Growth or Scale |

A custom app’s hosting can be cheap. Its real cost is the engineering time to build everything in the table above and to keep it working.

## Your data and your code

- **Export everything with one command.** `littleworks export` in the [CLI](https://littleworks.app/docs/cli#export) writes every record, every work’s manifest and source, and every view to plain JSON and JavaScript files, with no support request. Agents can read the same data with `read_collection` and `get_function`, and **Data** in Shopify admin exports records as JSON.
- **Works are plain JavaScript** with a small SDK: `db`, `shopify`, `http`, `secrets` and `auth`. Every version’s source is saved, and your agent can keep it in your repository.
- **Storefront content can live in Shopify.** Metaobjects and metafields stay in your store and keep rendering even if a work is paused.
- **Leaving is clean.** Uninstalling revokes access, and Shopify’s shop deletion request then removes the store’s data from Littleworks.

## How Littleworks runs

- Every request enters through Cloudflare’s edge. Works run in isolated sandboxes, with no network or platform access beyond the capabilities Littleworks gives each run.
- Two application instances serve requests. PostgreSQL has a high-availability standby, and point-in-time recovery copies are kept for seven days.
- Shopify events are recorded before they run, then delivered from a queue with retries, so a failed run doesn’t lose the event.
- Usage, run history and logs for every run are in Shopify admin and available to your agent.

## Try it

Every store gets a 14-day trial. Start from a [recipe](https://littleworks.app/docs/recipes) or [connect your agent](https://littleworks.app/docs/connect).
