Launch Handler API Demo - Online Control App Launch Behavior
Configure how your PWA launches: focus existing or create new. Test with the launch_handler manifest field.
UD5 Toolkit
Interact with fields to inspect their ValidityState in real-time
checkValidity(), reportValidity(), and setCustomValidity(), along with the ValidityState object that exposes detailed validation status through properties like valueMissing, typeMismatch, patternMismatch, and more. It works natively with HTML5 form validation attributes such as required, pattern, min, max, minlength, maxlength, and type constraints.
true or false without any visual feedback to the user. It also fires an invalid event on the element if validation fails.true/false but additionally triggers the browser's native validation UI — showing a tooltip/bubble with the error message near the invalid field. This is what browsers use when a form is submitted. Use checkValidity() for programmatic checks and reportValidity() when you want to show validation errors to users.
setCustomValidity(message) allows you to set a custom validation error on a form element. When called with a non-empty string, it sets the element's customError validity flag to true and makes the validationMessage return your custom message. The field becomes invalid regardless of other constraints.setCustomValidity('') with an empty string. This resets the customError flag. Note that setCustomValidity() is not cumulative — each call overwrites the previous custom message.
ValidityState object has 11 boolean properties:
true if the element meets all constraintstrue if a required field is emptytrue if the value doesn't match the expected type (email, url, etc.)true if the value doesn't match the pattern regextrue if the value exceeds maxlengthtrue if the value is shorter than minlengthtrue if the value is less than mintrue if the value exceeds maxtrue if the value doesn't match the step incrementtrue if the browser cannot parse the input (rare in modern browsers)true if setCustomValidity() has set a non-empty message:valid and :invalid CSS pseudo-classes to style fields based on their validation state. For example:input:invalid { border-color: red; }input:valid { border-color: green; }:user-invalid (modern browsers) or by toggling classes via JavaScript after blur or input events.
novalidate). For JavaScript-driven submissions, you can check validity manually:if (!form.checkValidity()) { form.reportValidity(); // show errors to user return; // prevent submission}novalidate attribute to the <form> tag disables the browser's automatic validation, giving you full control via JavaScript.
ValidityState interface, checkValidity(), reportValidity(), and setCustomValidity() are all widely supported. However, reportValidity() was added slightly later and may not be available in IE11 (use a polyfill or fallback to checkValidity() if needed).
minlength, pattern, min/max, and type are only evaluated when the field has a value. An empty field that is not marked as required will pass validation because the specification treats "no value" as valid — the user is not forced to fill it in. If you want to enforce both a value and a constraint, always pair your validation attribute with required.
Configure how your PWA launches: focus existing or create new. Test with the launch_handler manifest field.
Compress and decompress text using the browser's native Compression Streams API. See the binary output size.
Query the permission state of camera, microphone, geolocation, and more. See the response and learn the API.
Connect a game controller and see every button press, axis movement, and vibration test. Uses the Gamepad API.
Unified input demo: see pressure, tilt, and type from any pointer. Compare pointerType values. Essential for drawing apps.
Toggle a screen wake lock to prevent the device from dimming or sleeping. See the lock state and learn the API.
Test the experimental Translation API to translate text between languages directly in the browser, without cloud calls. Check support and copy the JavaScript starter.
Decode an image progressively using the ImageDecoder API. See partial results and metadata. Modern alternative to <img>.
Decode individual video frames from a local file using the VideoDecoder API. Step through frames. Cutting‑edge browser feature.
Experiment with the Federated Credential Management API. Simulate a sign‑in flow without third‑party cookies. Privacy‑first.
Request HID devices and list them. Read input reports and send output. For custom hardware and controllers.
Request permission and detect when the user is idle (away from keyboard). See screen lock state. For native‑like apps.
Demonstrate how the Web OTP API automatically reads one‑time codes from SMS (mobile). Simulation with a fake SMS input.
Acquire and release locks across tabs. Prevent race conditions in IndexedDB or localStorage. Visual queue and lock state.
Connect a gamepad and see all button presses and axis movements visually. Check that every input is detected correctly.
Trigger different vibration patterns on mobile devices. Test if your phone supports haptic feedback. Simple demo.
Display your effective connection type (4g, 3g, etc.) and downlink speed using the Navigator API. Adapt your app accordingly.
See your device's battery level, charging status, and discharge time using the Battery Status API. Fun utility.
Check current screen orientation and test the lock API. Useful for mobile web apps. Demo with code.
Test the new HTML popover attribute for creating accessible tooltips, menus, and dialogs without JavaScript. Copy code snippets.
See the View Transitions API in action. Cross‑fade and morph between two states. Copy the JavaScript starter code.
Experiment with the Async Clipboard API: read/write text and images from the clipboard. Verify permissions and see demo code.
Test the Web Share API by sharing text, links, and files directly from the browser. Check compatibility and see example code.
Enter an API URL and quickly check its HTTP status code and response time. See response headers and body. Browser fetch.
Paste a list of JavaScript values and see them pretty‑printed as if in the browser console. Great for debugging.
Pick a method, URL, headers, and body, then send an HTTP request directly from your browser. Debug APIs easily.
Paste HTML/CSS snippets or enter properties to test how z‑index and stacking contexts interact. Real‑time example.
Enter a regular expression and see a visual railroad diagram explaining the pattern. Learn and debug regex.
Generate random JSON data with customizable fields (users, products, orders). Useful for frontend mocking. All local.
Execute GraphQL queries against any endpoint with variables and headers. Explore schema via introspection. All requests made directly from your browser.