Hello.

I am Paul Kinlan.

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

IO Question: WebSQL is dead or dieing, IndexedDB isn't there yet, what do you think about libraries like Lawnchair?

Reading time: 1 minute

During my "Mobile Web Development: From Zero to Hero" talk at Google I/O, a question came up about client-side data storage now that WebSQL is deprecated. While IndexedDB is on the horizon, what are developers using today? I shared my preference for Lawnchair, a simple key-value store abstraction that's easy to use and perfect for many situations. While I didn't use it in the IO Reader app due to late-stage project constraints and the sufficiency of localStorage, I generally prefer using such libraries. I'm interested in hearing from others. What data storage wrappers or techniques do you prefer when building web apps? 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!)

Badgemator .... it is all in the how you tell people about your app

Reading time: 2 minutes

Badgemator is a web app that simplifies the process of creating badges for your Chrome Web Store listing. It generates a single script tag that you can embed on your website. This tag displays a badge to Chrome users who haven't installed your app, encouraging them to visit your store listing. Badgemator automatically fetches your logo and other details, and you can customize the badge's appearance with CSS. The project is open source, and contributions are welcome! Read More

The skinny on LeviRoute JS routing framework

Reading time: 3 minutes

I've created LeviRoutes, a client-side JavaScript routing framework inspired by Rails. It's simple, fast, and focuses solely on handling URL changes. LeviRoutes works with HTML5 History APIs, hashchange events, and even gracefully degrades for older browsers. It supports named parameters like "/:category" for dynamic routing, allowing you to treat the URL as a controller input. Check it out on GitHub! Read More

So what is happening with Web Intents?

Reading time: 2 minutes

I've been working on Web Intents, a project to simplify client-to-client service discovery and communication on the web using technologies like IFrames and SharedWorkers. It addresses the current issue of apps needing to integrate with third-party services, which restricts user choices. However, I recently discovered a similar project, Web Introducer, also by a Googler. It tackles the same problems with more in-depth security considerations. So, I'll be shifting my focus to contribute to Web Introducer. Web Intents remains a valuable example of using SharedWorkers and messaging effectively within web apps. More on Web Introducer and SharedWorkers coming soon! Read More

I've seen the future of the web. It's in the background

Reading time: 3 minutes

Hey everyone, I've been playing with the dev channel of Chrome and discovered something huge: background pages for web apps! This means your web app can now run even when the browser is closed, or even after system start-up. It's crazy powerful. You enable this by adding the "background" permission to your app manifest and then using a simple window.open() call with a special third parameter. The background page's state can be toggled with window.close(). Communication between the background page and your app is done using SharedWorkers. Oh, and Appmator now supports this too! Read More

Dutch GTUG

Reading time: 1 minute

The Chrome Web Store is launching in the Netherlands with integrated support for Dutch sellers! Join the Dutch GTUG on March 2nd, 2011 at 7pm at Google Amsterdam for an event about HTML5 and the Chrome Web Store. I'll be showcasing new HTML5 features and discussing how to leverage the Chrome Web Store to reach more users. The event includes Q&A and lightning talks, so come prepared to demo your projects! Space is limited, so sign up now! Read More

My first year in Google

Reading time: 6 minutes

My first year at Google has been an incredible journey. It's been a whirlwind of experiences, from joining the company after selling my Twitter web-app to working alongside industry experts like Chris Messina and Tim Bray. I started as a Developer Programs Engineer for iGoogle and Google Chrome in London, and later transitioned to a Developer Advocate role. My first month at the Mountain View campus was an intense learning experience. I've traveled extensively, presented at various events (including Google Developer Days in Munich, Moscow, and Prague), and contributed to the launch of the Chrome Web Store. I'm excited to see what the future holds, including speaking at Google IO and working with more developers outside of London. Read More

I will be working @ @Techhub on 13th of Jan

Reading time: 1 minute

This Thursday, January 13th, 2010, I'll be working from TechHub in London with @mahemoff as part of my resolution to work more closely with developers outside of Google UK HQ. Stop by and say hello between 9:00 am and 3:30 pm if you're in the area! Read More

Test post for a Buzz based Blog Commenting system

Reading time: 1 minute

I'm excited to introduce "commently," a simple Buzz-based commenting system for blogs and websites. It synchronizes with your Buzz feed, allowing you to easily embed comments. Just replace the placeholders in the provided javascript snippet with your Buzz username and the URL-encoded title of your blog post, and customize the handler function to display the comments on your site. Check out this post for a quick "Getting Started" guide. Read More

2010: My year in review (a personal view)

Reading time: 5 minutes

2010 was a big year! Benjamin joined our family in June. I also joined Google as a Developer Programs Engineer, later transitioning to Developer Advocate, which has been an amazing experience. I've met tons of talented people, traveled a lot, and worked with developers worldwide. I've been busy with projects like creating a Chrome Web Store app, Chrome extensions showcasing the Management API, HTML5Rocks tutorials, and WebIntents. I even got a new LCD TV after years of waiting! In 2011, I'm aiming to code more, release more code, meet more developers, speak at more events, and most importantly, spend more time at home with my family. Read More

An API to detect if a Chrome Extension has updated

Reading time: 2 minutes

In this post, I address the question of how to detect Chrome Extension updates. While there isn't a single API call for this, we can achieve it using the Management API's onInstalled event, which fires upon both installation and updates. By maintaining a record of installed extensions and their versions, we can compare the version in the onInstalled callback with our existing record, identify updates, and notify the user when an update occurs. Read More

Is it an App or a Link

Reading time: 3 minutes

Many Chrome Web Store users complain that some listed "apps" are just links. While technically true in some cases, the point of the Web Store is to help users discover web apps, new and old. Listing your existing web app is encouraged! It exposes your app to a wider audience. Some users expect a different experience when installing from the store, but for many, it's their first encounter with your app. The key is to get users to your app's core functionality quickly. Prioritize a direct login or, even better, use OpenID for seamless account creation. Don't make users land on a generic product page; they've already chosen to use your app. Speedy access is key. Check out the Diary.com app for an example of a smooth OpenID sign-in process. Read More

Omni Launch: Launch Installed Web apps from the URL bar

Reading time: 4 minutes

This blog post introduces Omni Launch, a Chrome extension I built that lets you quickly launch installed web apps directly from the URL bar. Just type "go", followed by a TAB or SPACE, and then the app name. The extension searches your installed apps and provides suggestions as you type. I also explained the development process, which only took about 20 minutes, including setting up the manifest, hooking up event listeners for omnibox input changes and selections, and using the Management API to fetch and launch apps. The code is available on GitHub. Read More

Web app launcher as a browser_action

Reading time: 3 minutes

In a previous post, I demonstrated how to create a custom App Launcher using the Management API and Override Pages framework. However, this approach didn't allow users to retain their custom NTP and utilize webstore apps concurrently. Thus, I developed "Quick Launch," a browser action extension that addresses this issue. The extension reuses much of the NTP tutorial's code but utilizes the 'browser_action' in the manifest, enabling a popup.html to display installed apps upon clicking the extension's icon. The popup.html dynamically generates a list of installed apps using the Management API and displays them with their icons. The source code is available on GitHub. Read More

Creating a New New Tab Page for Chrome

Reading time: 3 minutes

This blog post demonstrates how to create a Chrome extension that replaces the new tab page with an app launcher. The extension uses the Chrome Management API to retrieve a list of installed apps, displays their icons and names, and enables launching apps by clicking on their icons. Read More

Drag to Desktop in JS

Reading time: 2 minutes

In appmator, I wanted to avoid traditional web elements like 'Save As' buttons. Instead, I implemented a drag-to-desktop feature using Chrome's drag-and-drop functionality. By setting a 'DownloadURL' with a data URI or regular URL on the 'dragstart' event, users can drag data directly to their desktop. This method bypasses the need for a save button. The code example demonstrates how to use the dataTransfer.setData() method with the DownloadURL type. It leverages the JSZip library to generate ZIP files as data URIs for dragging. This approach is Chrome-specific and has no feature detection available. Read More

Flashing in to the Web Store

Reading time: 3 minutes

The Chrome Web Store isn't just about HTML5 and JavaScript; Flash plays a crucial role too! Flash apps and games are readily available in the store, with examples like Vyew and Paltalk showcasing functionalities not yet fully achievable with HTML5, such as webcam access. Getting your Flash content into the store is easy, either by using Appmator or directly packaging your SWF file. The store handles distribution and updates, eliminating bandwidth costs for developers. Focus on creating immersive experiences that utilize the full screen, like Canabalt, for maximum user engagement. Read More

Relative times. A Chrome Extension I would love to see

Reading time: 1 minute

I'd love a Chrome Extension that converts times and dates to my local timezone. It gets confusing seeing times like 12pm PST when it's actually 8pm where I am. A simple conversion would be incredibly helpful! Read More

Announcing Appmator. Get your apps in the Web Store in under a minute!

Reading time: 2 minutes

I've created Appmator, a tool to help developers get their web apps into the Chrome Web Store quickly. Just enter your app's URL, and Appmator generates a zip file ready for upload. Appmator is available in the Chrome Web Store and is built using some cool technologies like webfonts, Modernizr, jszip, and more. Source code is available on GitHub. Read More

A couple of things that I would love to see

Reading time: 1 minute

I'm looking for a few web services that don't seem to exist yet. First, a way to save my Twitter favorites to Instapaper (or similar services). Second, a webhook that sends content to Instapaper, as I dislike relying on third-party app integrations. Finally, a service that sends full RSS feed content directly to my email inbox in near real-time using pubsubhubbub. Existing services only send partial archives. If I can't find these, I might build them as open-source projects. Read More