Skip to content
StaysLocal

Free · No account · Works offline

Print it once.It keeps working.

Point a camera. Get the answer.

52 tools across five families, all running in this tab.

Started as twelve kinds of QR code, checked against the standard each one is supposed to follow. It has grown into five families since — images, PDFs, a shareable note and developer tools too — built the same way: entirely in this browser tab.

No account. Nothing uploaded. Nothing that can be switched off.

↑ real code — try scanning it

Why the details matter

A wrong square fails silently.

A malformed code still looks like a QR code. You only find out it is broken when someone is standing in front of it, trying.

Escaping

A WiFi password containing ; or , corrupts the payload unless it is escaped. Most generators do not.

  1. Wrong

    WIFI:S:Rio;P:fl4t;22;;
  2. Right

    WIFI:S:Rio;P:fl4t\;22;;

Unescaped, the password reads as fl4t — and the code still scans.

Currency

Several UPI apps reject a payment code with no cu= field. Ours always sets it.

  1. Wrong

    upi://pay?pa=rio@ok&am=250
  2. Right

    upi://pay?pa=rio@ok&am=250&cu=INR

Without cu=, several UPI apps refuse the payment outright.

Android and iOS
sms:?body= is an iOS convention. Android scanners need SMSTO: — so that is what we emit.
Calendar
RFC 5545 requires UID and DTSTAMP. Without them, some calendar apps refuse the import.

Four more families

QR is where this started. It is not where it stopped.

The same test applies to all five: open your network inspector, use the tool, and watch that nothing you gave it appears in a request. Here is what each family does instead of uploading.

  • EXIF comes off at the byte level — the pixels are never touched.

    A phone writes where you were standing into the file. Stripping it re-encodes nothing: the JPEG's APP1 and COM segments are dropped and the entropy-coded scan data is copied through, so the result is bit-identical and the colour profile survives.

    GPSLatitude
    removed
    GPSLongitude
    removed
    DateTimeOriginal
    removed
    Make · Model
    removed
    Image pixels
    bit-identical
    How it works →
  • Pages are copied as objects, not flattened into pictures.

    Merging, splitting, extracting and reordering move the original page objects between documents with pdf-lib. Most free PDF sites rasterise each page on a server instead, which is why their output is larger, blurs when you zoom, and cannot be searched.

    BehaviourHereRasterised
    Text stays selectableYesNo
    Fonts travel with pagesYesNo
    Sharp at any zoomYesNo
    Screen readers see a documentYesNo
    How it works →
  • The note is the link. There is no database behind it.

    What you write is compressed into the URL fragment — the part after the #, which browsers never send to a server. That is not a policy we are keeping; it is how fragments work. Nothing is stored, so nothing can expire or leak.

    What you type

    # Milk - Oat, not soy

    What you send

    stayslocal.app/note#1AbC2dEf…
    How it works →
  • A pasted token never leaves the tab it was pasted into.

    These are the tools people paste secrets into — an access token to decode, a signing key to test. Every one of them computes in the page, using primitives the browser already ships.

    Hashes and HMAC
    WebCrypto SubtleCrypto
    Random UUIDs
    crypto.getRandomValues
    File checksums
    File API, read in chunks
    Regex matching
    Web Worker, with a timeout
    How it works →

The part nobody else does

A code on its own tells nobody what it is for.

A downloaded square is not a sign. Put it on an A4 or A5 page with your own heading and instructions, then print it or save a vector PDF — for any of the twelve types, not just the one someone built a template for.

  1. 01

    Pick the code

    Any type. The studio opens on a layout written for that type.

  2. 02

    Write on it

    Your heading, your instructions, your opening hours. Nothing is fixed.

  3. 03

    Print it

    Straight to a printer, or a vector PDF that stays sharp at any size.

What this will always do

Nowhere. It goes nowhere.

Every tool here is built entirely in this browser tab. A WiFi password, a UPI ID, a photo's GPS coordinates, a signed PDF, a pasted API key — none of it is sent anywhere, because there is no server to send it to.

  • Free

    Every tool, every export, at full quality. No watermark, no page cap, no trial that lapses — there is no paid tier to be moved onto.

  • No upload

    Nothing is sent because there is nothing to send it to. Open the network tab and use any tool: your file never appears in a request.

  • No account

    Nothing to sign up for, so nothing to delete later. What history there is sits in this browser, on this device.

  • Offline

    Installed to a home screen, the tools keep working with the network off. There is no call left to fail.

  • Not training data

    Your files never train anything. They were never in anyone's hands to train on — they are decoded, edited and re-encoded inside this tab.

  • Nothing crippled

    No tool is held back to sell an upgrade. If a feature is on the page it is on the page, at full quality, for everyone.

  1. What you give it
  2. This browser tab
  3. Your result

A servernever reached

Open the network tab and use any tool. Nothing appears.

Where the limits are

Where the limits are.

Device memory sets the ceiling
A long PDF or a 50-megapixel photo is held in this tab's memory while it is worked on. Files are queued one at a time for that reason, files above 50 MB are refused before decoding, and iOS Safari will not allocate a canvas past about 16.7 megapixels — so a very large image is scaled down and told so, rather than coming back blank.
A big job is slower here than on a server
A server has more cores than a phone, and on a large batch you will feel that. What you get for it is that the file never left.
Offline needs one online visit first, and one tool needs two
The pages and the code that runs them are cached when the app installs. The one exception is the scanner's decoder, a WebAssembly binary fetched quietly in the background after your first visit rather than on install, because taxing every visitor with it for a tool most never open would be worse. Open the scanner offline before that has happened and it will want a connection once.

What this will never do

What we will not build.

ROADMAP.md keeps a list of things that would need a server, and therefore need trusting. It is published here so that it is a commitment rather than an internal note.

Nothing that holds your files
File and PDF hosting, public file URLs, cloud storage, cloud OCR.
Every one of these needs your file on someone else's disk. That is the promise, not a gap in it.
Nothing that watches a code
URL shortener, dynamic QR, scan analytics.
A scan can only be counted if the code points at a redirect that resolves somewhere — which is also why such a code stops working the day the service does.
Nothing that needs an identity
Accounts, cloud history, collaborative documents.
There is nothing to sign into, which is the whole reason there is nothing to delete.
Nothing that calls out on your behalf
Email sending, web scraping, website screenshots, AI API tools.
Each one turns this tab into a client for a server that then sees whatever you gave it.

Later, maybe

What might come later.

Everything above is finished and free, and none of it is waiting on anything. These are the things being considered next — nothing is promised, and no date is being offered.

Syncing across devices
An optional account, so saved codes and pages follow you to a second device. Accounts will stay optional — the tool will always work fully without one.
Counting scans
This one needs a server, and that is not a policy choice: a scan can only be counted if the code points at a redirect that resolves somewhere. Such a code stops working when the service does — so if it is ever built it will be a separate, clearly-labelled option, never the default, and never applied to a code you already printed.

There is no paid tier today and nothing is being collected to sell. If anything is ever charged for it will be an added service, not the part you are already using.

It takes about ten seconds.

No sign-up, no watermark, no trial. Pick a tool, do the thing, and take away the result — a QR code, a compressed photo, a merged PDF, whatever you came for.

We use privacy-friendly analytics to see which pages get used — never what is inside a code you generate, which stays on this device either way. Read the privacy policy.