Hello.

I am Paul Kinlan.

I lead the Chrome and the Open Web Developer Relations team at Google.

onappinstalled - for when an app is installed.

Reading time: 2 minutes

Use onappinstalled to detect when a progressive web app is installed. Read More

I lead the Chrome Developer Relations team at Google.

We want people to have the best experience possible on the web without having to install a native app or produce content in a walled garden.

Our team tries to make it easier for developers to build on the web by supporting every Chrome release, creating great content to support developers on web.dev, contributing to MDN, helping to improve browser compatibility, and some of the best developer tools like Lighthouse, Workbox, Squoosh to name just a few.

I love to learn about what you are building, and how I can help with Chrome or Web development in general, so if you want to chat with me directly, please feel free to book a consultation.

I'm trialing a newsletter, you can subscribe below (thank you!)

Bookmarklet: Chrome DevTools trace page

Reading time: 1 minute

A simple bookmarklet that will performance trace the current page and open in an hosted devtools instance Read More

Hosting Puppeteer in a Docker container

Reading time: 3 minutes

A simple docker container that can host an instance of puppeteer and a custom app. Read More

domcurl: curl + JavaScript

Reading time: 3 minutes

A curl-like utitly that runs JavaScript Read More

Using CSP Nonces effectively with service worker

Reading time: 5 minutes

CSP nonce values can help you securely run inline content on you site. But it can be hard to get it working with Service Workers... until now. Read More

We need DOM APIs in Workers

Reading time: 4 minutes

If we are to build HTML in Workers then we need some 'DOM' in them. Read More

A simple clientside templating langauge

Reading time: 3 minutes

Templating libraries needn't be so hard Read More

Challenges for web developers

Reading time: 7 minutes

Summary of the challenges that I beleive we developers face every day. Read More

Breaking down silos by sharing more on the web

Reading time: 3 minutes

This post discusses the problem of content silos on the web, particularly how native apps dominate sharing functionalities, limiting the web's reach. It highlights the irony of navigator.share, which, while enabling web sharing, still directs users towards native apps. The post emphasizes the need for the web to participate more actively in user interactions. It celebrates the 'Improved add to home-screen' feature for PWAs on Android, generating APKs and making them function more like native apps. Finally, it introduces the promising 'Share Target API', allowing PWAs to receive shared content, including links, thus breaking down silos and fostering a more inclusive web ecosystem. Read More

An Investigation into Real-time Fraud Detection in the Telecommunications Industry (2003-ish)

Reading time: 178 minutes

What is this? This is my Software Engineering final year project for University from about 2003. I used to be work in the Fraud Detection industry (mortgage and credit card fraud) and this project was to solve a problem that I had found in the telecoms industry: fraudulent phone calls. It was impossible (for me) to get phone records from telecoms companies, so I had to build a tool that would model fraudulent calls and normal call patterns, I then had to build a tool that would detect calls that were fradulent from all of the call records. Read More

The Web is my API

Reading time: 8 minutes

I've always been fascinated by the potential of the web as an API, an idea I first encountered through Michael Mahemoff's work with microformats and CORS. While technologies like Web Intents explored similar concepts, they proved more complex. The core idea remains powerful: enabling direct client-side interaction between websites to bypass the complexities of server-side integrations. Although CORS is widely supported, its complexity hinders adoption. With the rise of client-side generated sites, the need for decentralized integration is stronger than ever. Tools like Comlink, by abstracting the complexities of postMessage and MessageChannel, make it easier to expose and consume client-side APIs. I demonstrated this with a simple example integrating a pubsubhubbub endpoint with a push notification service. This approach offers several advantages, including simplified data transfer, offline capabilities, and secure, controlled exposure of functionality. Looking ahead, I envision a future where every website exposes a consistent, discoverable API, enabling a more interconnected and modular web experience. Read More

Reinventing Web Intents

Reading time: 7 minutes

I've been exploring solutions to connect web apps and overcome the limitations of isolated experiences. Web Intents was a good start, but ultimately fell short. The Share API helps, but we need a more general solution for IPC and service discovery. My latest experiment builds on the Tasklets API and Comlink, allowing seamless communication between windows and web workers. It simplifies the complex postMessage API and makes it easy to expose and consume APIs across different contexts. I've created a service discovery mechanism where a 'middleman' site keeps track of available services. Clients can request services based on criteria, and the middleman facilitates the connection. Once connected, the client and service communicate directly, bypassing the middleman. This approach simplifies the developer experience and makes it much easier to build interconnected web experiences. Check out the demos and let me know your thoughts! Read More

Web sites as unintended silos: The problem with getting data in and out of the web client

Reading time: 12 minutes

It's nearly impossible to get consistent get data in and out of a web app on the client Read More

Web and Chrome Developer Relations manifesto

Reading time: 5 minutes

How should Web and Chrome Developer Relations work? Read More

Progressive Progressive Web Apps

Reading time: 15 minutes

Building Progressive Web Apps progressively is possible. This is how I did it. Read More

Minifying a Custom Element that contains inline CSS and HTML

Reading time: 6 minutes

I couldn't find an easier way, so I built it myself Read More

Defining web component interfaces

Reading time: 2 minutes

Custom Elements need clear and parsable API documentation. Read More

Issue with css variables and button background styling

Reading time: 2 minutes

This little doozey hit me, so I'm documenting incase anyone else has the same issue Read More

Creating a share button web component

Reading time: 8 minutes

My adventures in creating resuable web components around sharing. Read More

Detecting text in an image on the web in real-time

Reading time: 3 minutes

I'm excited to share the latest addition to the Shape Detection API: the Text Detection API! This API allows you to detect text within images in real-time, right in the browser. It's still experimental and currently works on Chrome Canary for Android, but it opens up amazing possibilities. Imagine real-time translation, assistive technologies for parsing image content, or even grabbing URLs from slides at conferences. I've built a demo where the API detects text, draws a box around it, and reads it aloud when clicked. Check out the code and demo to experiment yourself. I can't wait to see what you build with this! Read More