Toolaby Wall

Quickstart

Register a tool, wire your extension and make a test purchase.

This guide takes an existing Chrome extension from nothing to a paid, working purchase on the test Wall. It takes about ten minutes.

Before you begin

  • A Chrome extension with a manifest.json, or a WXT, CRXJS or Plasmo project. No extension yet? Step 4 can create one.
  • A Stripe account. On the test Wall a sandbox account is created for you.

1. Create a workspace

Sign in to the dashboard at toolaby.app/test with the one-time link sent to your email. The workspace is the seller a buyer sees: its name, support address and, later, its domain.

2. Register a tool

On the Tools page, select New. Enter a name; the tool id is derived from it and cannot change.

If the extension is already on the Chrome Web Store, paste its store link instead. The Wall reads the name, description and icon from the store and confirms you publish it.

3. Connect Stripe

Under Configure → Payments, select Connect and complete Stripe's onboarding. On the test Wall a test account is made for your workspace and filled in for you — a payout destination and a statement descriptor matching your workspace's name — so it takes test charges without anyone opening onboarding. Stripe switches its card payments on a minute or two later; the Payments page says when it has.

4. Wire the extension

Open the tool. Until someone uses it, its page is Set up: five numbered steps, each ticked as it happens. The first is wiring, in one of three ways:

  • In Chrome: select Choose your extension's folder. Nothing to install.
  • Terminal: run the command it shows in your extension's folder. It needs Node.js 18 or later, which comes with npx.
  • AI agent: copy the prompt into Claude Code, Cursor, Codex or another coding agent, in your extension's folder.
npx -y toolaby@latest wire <tool-id>

The first run shows a code to approve in your browser. The wiring then:

  • writes the client (toolaby.js, toolaby.config.js with your tool key, toolaby.d.ts) and the Wall popup beside your code;
  • adds the storage permission, a host permission and externally_connectable for your workspace's address to manifest.json;
  • puts the Wall background, toolaby.background.js, in front of your background. Yours runs as it did, importScripts() included, and the Wall starts with it. With no background, it creates a two-line background.js;
  • sets the Wall popup as the action popup. It opens your popup when the device may continue, and the paywall when it may not. When your code sets or reads its own popup (chrome.action.setPopup(), getPopup()), your popup stays in front instead, and the command prints the lines that open the paywall where your paid action starts.

It prints one row for each of these, and any step left for you with the exact code to use.

In Chrome, the page keeps the result in this browser, and Wire again runs on the same folder.

For a WXT, CRXJS or Plasmo project the command puts the same files where the build expects them and prints a snippet for the framework's config. See Frameworks.

No extension yet? npx -y toolaby@latest create <tool-id> makes a minimal one, wired — a popup and a side panel, or --surfaces popup, side-panel or none for the shape you want. See Surfaces.

Load the extension at chrome://extensions (Developer mode, then Load unpacked), or reload it. Set up says Checked in and opens its next steps: who can use the tool (the Access card, below), trying it as a user, and where users show. Each one ticks as it happens.

5. Set a price

Under the tool's Pricing, add a plan: once (a lifetime licence), monthly or yearly. Each plan is a Price on your Stripe account. See Pricing.

A new tool asks for no account and gives everything away, so the extension keeps working for everyone until you say otherwise under Pricing → Access — where nothing before paying makes it a paid extension with no Free plan at all. See Access and features.

6. Make a test purchase

Open the extension's popup and select Buy. Pay on Stripe's page with the card 4242 4242 4242 4242, any future date, any CVC.

The success page tells the extension; the popup shows the tool as paid. You appear on the tool's Customers page.

7. Gate your own code

Everything so far ran without changing your code. Where your extension does the thing it charges for, ask first, and answer a refusal with the paywall:

import { toolaby } from './toolaby.js';

const permit = await toolaby.gate();
if (!permit.allowed) return toolaby.showPaywall(permit);

gate() runs anywhere; showPaywall() runs in your popup or side panel. A permit refused in the background is returned to the page that asked. See Gate your extension, and Client for every method.

Next steps

On this page