DevTools tools
20 tools that run in your browser. Nothing to install, nothing uploaded.
Conversion and reference tools for developers — number bases, identifiers, encodings — computed locally with no logging. Precise where it counts: the base converter uses arbitrary-precision integers so a full 64-bit value stays exact past the point where a naive JavaScript tool loses precision. Small tools, done correctly.
- Arduino / ESP Board DetectorIdentify a board from its USB IDs — and be told plainly when only the bridge chip is known.
- ASCII Table ReferenceLook up any character’s ASCII code in every base.
- .htaccess Rule GeneratorDescribe the rules you want and get a valid .htaccess block.
- HTML Entity Encoder / DecoderEncode or decode HTML entities, whichever the text needs.
- HTML to MarkdownTurn a page of HTML into readable Markdown.
- JSON Compare / DiffDiff two JSON documents structurally instead of by text.
- JSON to CSV ConverterFlatten a JSON array into CSV, dotted keys and all.
- JSON to TypeScriptGenerate interfaces from a sample — every array element, not just the first.
- JSON Tree ViewerExplore JSON as a collapsible tree, with the path of every value.
- Lorem Ipsum GeneratorGenerate placeholder text in the shape you actually need.
- Markdown to HTMLRender Markdown to clean HTML, with code blocks escaped.
- Number Base ConverterConvert a number between binary, octal, decimal and hex — exactly, at any size.
- Roman Numeral ConverterConvert between numbers and Roman numerals, both directions.
- Web Serial TerminalA read/write serial console in the browser. Sends only what you type.
- XML Sitemap GeneratorTurn a list of URLs into a valid sitemap.xml.
- Test Data GeneratorGenerate reproducible fake names, emails and addresses.
- USB Device InspectorRead a USB device's descriptors — identifiers, class, interfaces and endpoints.
- UUID GeneratorGenerate random UUIDs, with the bit count stated correctly.
- XML to JSONConvert XML into JSON, with the mapping choices explained.
- YAML Validator & ConverterConvert YAML to JSON and back, with ambiguous strings quoted.
Conversions that stay exact at full width
Number base conversion is where naive implementations quietly lose data. JavaScript numbers are IEEE 754 doubles, so integers above 2^53 stop being exactly representable — and a 64-bit hex value, a Snowflake ID or a large hash pasted into a converter that parses to a float comes back subtly wrong, with no error and no warning. The converter here uses arbitrary-precision integer arithmetic throughout, so a full 64-bit value survives the round trip unchanged. If you have ever seen a large ID gain or lose a digit in transit, this is usually the reason.
Generating types from a sample without the usual trap
Most JSON-to-TypeScript generators infer an array’s element type from its first element, which is fine for uniform test data and wrong for anything real. A list where later entries carry an extra optional field, or where a value is sometimes null, produces an interface that type-checks against the sample and fails against production. The generator here walks every element and unions what it finds, marking fields optional when they are absent from some entries. The result is a starting point that reflects the whole sample — still worth reading before committing, because a sample is not a schema.
Talking to hardware from a browser tab
WebUSB, Web Serial and the device inspectors here work through capabilities the browser exposes only after you explicitly pick a device from a chooser, and only on a secure origin. That model has real limits worth knowing before you debug against it: Chromium-based browsers support these APIs and Firefox and Safari largely do not, operating systems reserve whole device classes so a keyboard or a mass storage device cannot be claimed, and on Linux the permissions usually need a udev rule. What you get in return is a serial console or a descriptor dump without installing anything, which is often all a board bring-up needs.
Frequently asked questions
Why did my large hex value come back wrong in another converter?
Because it parsed the value into a JavaScript number, which is an IEEE 754 double and stops representing integers exactly above 2^53. A 64-bit hex value, a Snowflake ID or a long hash silently loses precision — no error, just a different number. The converter here uses arbitrary-precision integer arithmetic end to end, so the round trip is exact at any width you can paste.
Why do the USB and serial tools only work in some browsers?
WebUSB and Web Serial are supported in Chromium-based browsers — Chrome, Edge, Opera — and not implemented in Firefox or Safari, which have declined them on privacy grounds. They also require a secure origin and an explicit device choice from a browser-controlled chooser, which no page can bypass. On Linux you will usually also need a udev rule granting your user access to the device node.
Can I read a keyboard, mouse or USB drive with the device inspector?
No. Operating systems claim whole device classes for themselves — human interface devices and mass storage among them — so the browser cannot take an interface the OS has already bound. This is a deliberate protection rather than a gap: a web page able to claim your keyboard would be a keylogger. Development boards, serial adapters and custom peripherals are the devices these APIs exist for.
Why does the generated TypeScript mark fields optional?
Because they were absent from some elements of the array you supplied. Most generators infer an array’s type from its first element, which produces an interface that matches the sample and fails against real data. This one walks every element and unions what it finds, so a field missing from any entry is marked optional and a value that is sometimes null gets a nullable type. A sample is still not a schema — read the output before committing it.