plain/devtools home

12 tools · client-side · keyboard first

Paste. Transform. Done.

Fast developer utilities that run entirely in your browser. No signup and no uploads: every tool is one fast page, and every one is two keystrokes away.

  • No uploads
  • No accounts
  • Works offline after one visit
we will pick the tool

    // all tools

    // one payload

    One payload, four tools, zero round trips.

    Scroll to send an illustrative API response through the formatter, the JWT decoder and the timestamp converter. The outputs are computed live in this tab by the same code the tool pages run, and timed.

    01 / raw.json

    Minified JSON

    What the API gave you: one line, a token buried inside.

    // 1 line, 202 bytes, as the API sent it
    {"user":"ada","role":"admin","token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZGEiLCJyb2xlIjoiYWRtaW4iLCJpYXQiOjE3NjEwMDAwMDAsImV4cCI6MTc2MTAwMzYwMH0.aWxsdXN0cmF0aXZlLXNpZ25hdHVyZQ","ttl":3600}
    02 / format

    Format it

    Indented and colored, keys kept in the order they arrived, with a count of what is inside.

    open json-formatter →
    {
      "user": "ada",
      "role": "admin",
      "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZGEiLCJyb2xlIjoiYWRtaW4iLCJpYXQiOjE3NjEwMDAwMDAsImV4cCI6MTc2MTAwMzYwMH0.aWxsdXN0cmF0aXZlLXNpZ25hdHVyZQ",
      "ttl": 3600
    }
    // 1 object, 3 strings, 1 numbers, depth 1
    03 / jwt

    Decode the token

    The JWT split into header and claims. The signature is never checked or sent anywhere.

    open jwt-decoder →
    eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZGEiLCJyb2xlIjoiYWRtaW4iLCJpYXQiOjE3NjEwMDAwMDAsImV4cCI6MTc2MTAwMzYwMH0.aWxsdXN0cmF0aXZlLXNpZ25hdHVyZQ
    
    // header
    {
      "alg": "HS256",
      "typ": "JWT"
    }
    // claims
    {
      "sub": "ada",
      "role": "admin",
      "iat": 1761000000,
      "exp": 1761003600
    }
    // status: expired (signature not checked)
    04 / time

    Read the timestamps

    iat and exp converted to UTC, your local time and how long ago, then checked against the ttl field.

    open timestamp-converter →
    // iat 1761000000 (seconds, auto-detected)
    utc      2025-10-20T22:40:00.000Z
    relative 1 year ago
    
    // exp 1761003600 (seconds, auto-detected)
    utc      2025-10-20T23:40:00.000Z
    relative 1 year ago
    
    // exp - iat = 3600 s  ✓ matches "ttl": 3600
    // privacy

    Your input stays in this tab.

    Developer inputs often contain tokens, customer records and internal configuration. Every tool here runs in your browser, so none of it is sent to a server. Read how that works.

    The scan on the right is computed when the site is built. The test suite fails the build if any count is not zero.

    $ grep -cE "fetch|XMLHttpRequest|sendBeacon|WebSocket" assets/*.js
    assets/json-formatter.js:0
    assets/jwt-decoder.js:0
    assets/cron-explainer.js:0
    assets/regex-tester.js:0
    assets/base64.js:0
    assets/url-encoder.js:0
    assets/uuid-generator.js:0
    assets/timestamp-converter.js:0
    assets/yaml-json.js:0
    assets/text-diff.js:0
    assets/cidr-calculator.js:0
    assets/color-converter.js:0
    // keyboard

    Built for the keyboard.

    Every action has a key. Press ? on any page for the full list.

    esc
    ↑↓ move↵ open? all shortcuts

    Keyboard shortcuts

    Cmd or Ctrl shortcuts always work.
    Everywhere
    Everywhere
    Open the command palette
    CtrlK
    Open the palette (outside a text field)
    /
    Show these shortcuts
    ?
    Toggle light and dark theme
    t
    Go home
    gh
    Go to all tools
    gt
    On a tool page
    On a tool page
    Run the main action
    Ctrl↵
    Copy the output
    c
    Load the next sample
    s
    Focus the input
    i
    Leave a text field
    Esc
    Previous or next tool
    []
    In the palette
    In the palette
    Move the selection
    ↑↓
    Open the selected item
    ↵
    Close
    Esc