New: Facet 1.1.0 with tabs for Windows, macOS & Linux

Facet Developer tools that never leave your machine.

The small jobs you paste into random websites, in one free app: format and convert JSON, YAML and XML, decode and sign JWTs, hashes, Base64, regex, cron, timestamps and twenty-two tools in all. It has no network access, so nothing you paste can go anywhere.

  • Windows, macOS & Linux
  • Works offline
  • No account needed
  • Command line included
Facet formatting a one-line JSON document into readable, coloured JSON, with three tabs open and the tool list in the sidebar
Tools in one app
22
Data formats
5
Network requests
0
Accounts needed
0

Where did that token go?

Every quick check on a website is a copy of your data on someone else's server.

Tokens, configs, logs and API responses are exactly the things that shouldn't leave your machine. Facet does the same jobs right where the data already is.

A token in a stranger's textbox

Decoding a production JWT on a random website hands its claims, and sometimes the key, to whoever runs that site.

01

Customer data in a formatter

That API response you pasted to pretty-print it had email addresses, order totals and internal IDs in it.

02

Twenty tabs of ad-filled tools

One site for Base64, another for cron, another for timestamps, each with its own pop-ups and limits.

03

Different answers every time

Tools that drop number precision, reorder keys or guess the time zone, so the output isn't quite what you had.

04

One app instead of twenty websites

Paste it, read it, fix it. All on your computer.

Every tool runs live as you type, shows errors where they are, and keeps your data exactly as it was.

Paste anything

Paste whatever you have. Facet picks the tool.

Drop a token, a config file, a timestamp or a cron line on the home screen and Facet says what it is and opens the right tool with it. A global shortcut brings Facet forward with your clipboard from any app.

  • Recognises JWTs, JSON, YAML, XML, TOML, Base64, UUIDs, ULIDs, hashes, timestamps, cron, URLs and certificates
  • Ctrl/⌘ Shift Space from anywhere: Facet comes forward with what you copied
  • An optional tray icon keeps it one keystroke away
  • Ctrl/⌘ 1 to 9 jump straight to a tool; Ctrl/⌘ K finds any command
The Facet home screen with a pasted token recognised as a JSON Web Token, above cards for every tool

Data formats

Format, convert and query JSON, YAML, XML, TOML and CSV.

Pretty-print or minify, see exactly where a document breaks, convert between any two formats, and pull values out with JSONPath. Numbers keep their exact digits and keys keep their order.

  • Errors point at the line and column, with a jump to the problem
  • Any format to any other, with warnings when something can't be carried over
  • A tree view and JSONPath queries that work on YAML, TOML, XML and CSV too
  • Large files open straight from disk and stay responsive
Convert turning a one-line JSON document into YAML, with syntax colouring
A JSONPath query listing the path of every route in a JSON document

Schemas & changes

Check a document against its schema. See what changed.

Validate a document against a JSON Schema, problem by problem, or compare two versions by meaning: key order and number style don't count, and records are matched by their id.

  • JSON Schema drafts 4 to 2020-12; remote $refs are never fetched
  • Each problem listed with its path and the rule it broke
  • Compare JSON with YAML, or any mix of formats, as added, removed and changed paths
  • Reordered lists of records aren't reported as changes
JSON Schema checking a YAML document and reporting that the port is above the allowed maximum
Compare data in dark mode listing the paths added, removed and changed between a JSON and a YAML version

Types from data

Paste an API response, get the types for it.

TypeScript interfaces, Rust serde structs, Go structs or Python dataclasses from any sample. Every item in a list is merged, so fields missing from some records come out optional.

  • Nested objects become their own named types (orders becomes Order)
  • Optional and nullable fields worked out from the data
  • Rust renames, Go JSON tags and initialisms like ID done for you
  • From JSON, YAML, TOML, XML or CSV
Types from data turning a customer JSON sample into TypeScript interfaces for Customer, Profile, Order and Item

JWT, keys & hashes

Read, verify and sign JWTs without sending them anywhere.

See a token's header and claims in plain words, with expiry as a date, and check its signature with a secret or a public key. Or sign a new one with the claims and expiry you choose.

  • HS, RS, PS, ES and EdDSA, with a secret, a PEM key or a JWK
  • exp, iat and nbf as local times, with expired and not-yet-valid badges
  • Create mode signs tokens for tests, with a random 256-bit secret in one click
  • Hashes, HMAC, Base64, URL escapes and certificates sit right next to it
A JWT decoded in dark mode, its claims explained and its signature verified with the shared secret
The JWT Create mode signing a token with HS256, an expiry of one hour and a key ID

Regex, cron & time

Regular expressions, cron lines and timestamps, explained.

Test a pattern with live matches and named groups, read any cron expression in plain English with its next runs, and turn Unix time into dates in every zone you work with.

  • Regex with flags, capture groups and a replace preview, in a linear-time engine (lookarounds when you need them)
  • Unix, Quartz and seconds-first cron, with the next run times in your zone
  • Unix seconds to nanoseconds, ISO 8601, RFC 2822 and HTTP dates, both ways
  • Date maths and differences that respect daylight saving
The regex tester matching two email addresses, with user and domain groups listed per match
The cron explainer in dark mode describing every 15 minutes between 09:00 and 17:59, Monday through Friday, with the next run times

Calculators

Colours, subnets, number bases and file permissions.

The small calculations that otherwise mean another website: colour formats and contrast, IPv4 and IPv6 subnets, hex and two's complement, byte sizes and chmod.

  • Any CSS colour to hex, RGB, HSL, HWB, OKLab and OKLCH, and WCAG contrast with the nearest passing colour
  • Subnets with mask, range and host count, whether an address is inside, and splitting into smaller ones
  • Every base, signed and unsigned at 8 to 64 bits, and KB versus KiB done right
  • chmod from 755 to rwxr-xr-x and back, in plain words
Colours & contrast in dark mode: an OKLCH colour in every format, and grey text on white failing AA with two passing suggestions
The subnet calculator showing a /22 network, its mask, broadcast and host range, an address inside it, and its four /24 subnets

SQL & QR codes

Tidy a query. Make or read a QR code.

Lay out SQL with the keyword case and indentation you like, for standard SQL, PostgreSQL or SQL Server. Turn a link or Wi-Fi details into a QR code, or read the codes in a screenshot.

  • Several queries at once, or each on one line
  • QR codes saved as PNG or SVG, at the error correction you need
  • Open, drop or paste an image to read every code in it
  • Links found in a code are shown, never opened for you
The SQL formatter in dark mode laying out a SELECT with a join, grouping and ordering, and an UPDATE with a subquery
A QR code made from Wi-Fi details, next to the panel for reading codes from an image

Twenty-two tools

Everything in the sidebar.

Each one with tabs, keyboard shortcuts and the same copy, save and clear commands.

Data

  • Format & validateJSON, YAML, XML, TOML, CSV
  • ConvertAny format to any other
  • JSON SchemaDrafts 4 to 2020-12
  • Types from dataTypeScript, Rust, Go, Python
  • Compare dataChanges by path
  • SQL formatterThree dialects

Encode & crypto

  • Base64Standard and URL-safe, text or files
  • URL & escapesTen encodings, both ways
  • HashesMD5 to SHA-3, BLAKE3, HMAC
  • JWTDecode, verify and sign
  • Certificates & keysChains, CSRs, SSH keys

Generators

  • UUID & ULIDv4, v7, v5 and more, or inspect one
  • PasswordsPasswords, passphrases, strength
  • QR codesMake and read

Text & time

  • Regex testerMatches, groups, replace
  • Text inspectorHidden and look-alike characters
  • Cron explainerPlain English, next runs
  • TimestampsUnix time and time zones

Calculators

  • Numbers & bytesBases, two's complement, KiB
  • Colours & contrastOKLCH and WCAG
  • Subnet calculatorIPv4 and IPv6
  • chmod calculatorOctal and rwx

For terminals and CI

The same engine, in your shell.

The facet command does what the app does, with standard input and output, JSON for scripts and exit codes that mean something: 0 for fine, 1 when the input is invalid.

  • Data: fmt, query, schema, types and diff for JSON, YAML, XML, TOML and CSV.
  • Crypto: jwt, jwt-sign, hash with --check, base64, cert, uuid and ulid.
  • Everything else: regex, cron, time, color, subnet, chmod, sql, qr and more.
terminal
# Pretty-print, or convert
$ curl -s localhost:8080/orders | facet fmt
$ facet fmt config.json --to yaml

# Read a token and check its signature
$ facet jwt "$TOKEN" --key issuer.pem

# Does the download match?
$ facet hash setup.exe --check 9f86d0…

# Fail the build on low contrast
$ facet color '#777' --on white

Everything else you'd expect

Small things, done properly.

  1. 01

    Tabs in every tool

    Several inputs side by side, kept while you switch tools. Ctrl/⌘ T for another.

  2. 02

    History, only if you want it

    Off by default. Turn it on to keep recent inputs on this computer; JWTs and keys are never kept.

  3. 03

    Files of any size

    Open or drop a file; big ones are read straight from disk instead of pasted.

  4. 04

    Copy, save, swap

    The same shortcuts in every tool, and "use output as input" to chain them.

  5. 05

    Light & dark

    Follows your system, or pick one.

  6. 06

    Keyboard first

    A command palette and shortcuts for everything, listed on one sheet.

  7. 07

    Native everywhere

    Windows, macOS (Apple silicon and Intel) and Linux, small and quick to start.

  8. 08

    No account

    Nothing to sign up for. Install it and paste.

Private by design

What you paste stays on your computer.

  • No network accessThe app's window is not allowed to make network requests, and a test in its build keeps it that way. Nothing you paste can leave.
  • Inputs aren't storedWhat you type lives in memory and is gone when you close Facet, unless you turn history on.
  • No trackingNo analytics, no telemetry, no account.

Facet vs online tools

The same jobs, without the copy on their server.

WhatOnline toolsFacet
Where your data goes To someone else's server Nowhere. Facet has no network access
Tokens and keys Pasted into a web page Checked on your computer, never stored
Number precision and key order Often lost on the way through Kept exactly
Finding the right tool A search, then another site Paste once; Facet picks it
Several inputs at once Browser tabs of different sites Tabs in every tool
Ads, sign-ups and limits Usually None
Scripts and CI Not really The facet command line
Works offline No Always

Get Facet 1.1.0

Twenty-two tools, one download.

Pick the file for your system. We'll email you a one-time code, and the download starts as soon as you enter it.

First launch & command line

Windows

If Windows shows "Windows protected your PC", choose More info, then Run anyway. On Windows 10, the installer adds Microsoft's WebView2 if it's missing.

macOS

Drag Facet into Applications. The first time, open System Settings, then Privacy & Security, and click Open Anyway. (On macOS 14 and earlier, right-click the app and choose Open.)

Linux

Install the .deb with apt or the .rpm with dnf, like any other package. The AppImage needs no install: make it executable (chmod +x) and run it.

Command line

Unpack the archive and put facet on your PATH. Every command has examples in facet <command> --help.

The first-launch warning appears because Facet is new and not yet widely downloaded; it only shows once. Verify your download (optional): each file's SHA-256 checksum is in SHA256SUMS.txt, and facet hash FILE --check checks it for you.

Download Facet

Where should we send your code?

We'll email you a one-time code to start . No account, no spam.

FAQ

Questions, answered.

Something else? A tool you'd like added? Email jamal@unravelers.tech.

Does Facet really work offline?

Yes. The app's window is built so it cannot make network requests at all, and every tool runs on your computer. The only thing that can go online is an update check, in builds with updates switched on, and it never includes anything you typed.

Is it safe to paste production tokens and keys?

They stay in memory on your machine and are never written to disk, even with history turned on. Key URLs inside a token (jku, x5u) are never fetched.

Is Facet free?

Yes, every tool, with no account and no paid tier.

What does the command line do?

The same engine as the app: facet fmt, query, schema, types, diff, base64, hash, jwt, jwt-sign, uuid, ulid, regex, cron, time, cert, escape, url, text, password, num, bytes, color, subnet, chmod, sql, qr and detect. Exit codes make it easy to use in scripts and CI.

Will the app and the command line ever disagree?

No. Both are thin shells over one engine, so the same input gives the same answer.

How big a file can it handle?

Files up to a couple of megabytes open as editable text; bigger ones, up to hundreds of megabytes, are processed straight from disk.

Why does Windows or macOS show a warning the first time?

Both systems double-check apps that aren't yet widely downloaded. It only happens on the first launch; the steps are in the download section above.

Which systems are supported?

Windows 10 and 11 (64-bit), macOS 11 or later on Apple silicon and Intel, and 64-bit Linux (Ubuntu, Debian, Fedora, openSUSE and others).

Developer tools that never leave your machine

Stop pasting secrets into websites.

Get Facet for Windows, macOS or Linux, or tell us which tool it should have next.