FOR BUILDERS
Free code for install prompts, local storage and safe updates.
A TypeScript SDK for the parts that are annoying to get right, and five skills that tell your coding agent how to wire them in and test them.
SDK v0.1.6 · MIT · tarball, not on npm · no account · no telemetry · no listing requiredimport { createInstallController }
from '@revitt/quick-install/platform';
const install = createInstallController();
install.subscribe(canInstall => {
button.hidden = !canInstall;
});
button.addEventListener('click', () => {
void install.prompt();
});Two downloads, two different jobs
The SDK is code your app calls. The skills are instructions your coding agent follows. Most apps want both; either one works alone.
| Aspect | The SDK | The five skills |
|---|---|---|
| What it is | A typed package installed from the tarball, with source and licence. | Markdown instructions inside five folders, for your agent to read and apply. |
| What it gives you | Install prompts that only appear when the browser offers one, explicit update coordination with your service worker, a durable local store, viewport and safe-area helpers, notification permission helpers. | Build, mobile UX, notifications, sync/recovery and maintenance procedures, including the checks and evidence to collect. |
| What you do | Call the functions, keep your own design, own the service worker and worker protocol. | Point the agent at the relevant skill, then review its changes and run the checks it names. |
| What it will not do | Deploy, host, publish to a store, run a backend or certify security. | Run the app or replace your own testing. |
Install it in a project
The release is a tarball, not an npm package. Save it somewhere stable in your repository, then install it from your project root:
npm install ./revitt-quick-install-0.1.6.tgzThe platform module is the one most apps start with. It does not register a service worker, cache data or reload the page for you. It also exports getStorageStatus, requestPersistentStorage, observeViewport and the notification helpers.
import {
createInstallController,
createUpdateController,
} from '@revitt/quick-install/platform';
// Show your own button only while a prompt exists.
const install = createInstallController();
// Detect a waiting worker; you decide when it may activate.
const updates = createUpdateController({
registration: await navigator.serviceWorker.ready,
canReload: () => (hasUnsavedWork()
? { allowed: false, reason: 'draft' }
: { allowed: true }),
});What each module is for
Open and update
Install availability, the browser prompt, safe-area and keyboard helpers, and update detection with a refusal path when someone has unsaved work.
Keep local data
A durable store with a pending outbox and revisioned recovery. Local-only mode needs no backend; sync mode is for the backend you already run, with your own authentication.
Permissions, honestly
Notification permission and subscription helpers. Sending scheduled push still needs your own server; the SDK does not provide one.
What it does not do
- It does not deploy or host anything. For that, follow the deployment guide.
- It is not on npm.
npm install @revitt/quick-installwill not work yet; use the tarball. - It has no backend, no sync service and no accounts. You bring your own, or stay local-only.
- It does not publish to the App Store or Google Play, and it does not certify that your app is secure.
- Payments are planned, not part of v0.1.6. The roadmap says where that stands.
- No catalogue listing is required, and there is no telemetry to switch off.
Getting the app online first
The SDK assumes your app is already reachable over HTTPS. The deployment guide covers the parts people hit next: static versus server, the build and output folder, environment variables, a manifest and icons, what actually works offline, and safe updates.
Listing in the catalogue is optional
If the app is public and useful, you can submit the URL for manual review, with a free initial look at the page, pricing, data handling and hosting. You get a status link that shows review state, pricing and offline scope; your contact email and notes stay private and are never returned by that link.
There is no placement fee for this first collection, no SDK requirement, and nothing is published automatically. Paid features are allowed and are labelled on the listing; you set the price and take the payment.
Agents can read /llms.txt and call /api/mcp (preview_submission, submit_app, submission_status). The same rule applies: submit only on behalf of the app owner, with their contact email and consent.