<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <id>https://web.dev/</id>
  <title>Taylor Savage on web.dev</title>
  <updated>2026-04-15T23:21:06Z</updated>
  <author>
    <name>Taylor Savage</name>
  </author>
  <link href="https://web.dev/authors/taylorsavage/feed.xml" rel="self"/>
  <link href="https://web.dev/"/>
  <icon>https://web-dev.imgix.net/image/T4FyVKpzu4WKF1kBNvXepbi08t52/rGy547i80kDDHCjlAOdD.jpeg?auto=format</icon>
  <logo>https://web.dev/images/shared/rss-banner.png</logo>
  <subtitle>Taylor is a PM on the Chrome Team, focusing on Web Components and Polymer.</subtitle>
  
  
  <entry>
    <title>Web Components v1 - the next generation</title>
    <link href="https://web.dev/webcomponents-org/"/>
    <updated>2017-01-10T00:00:00Z</updated>
    <id>https://web.dev/webcomponents-org/</id>
    <content type="html" mode="escaped">&lt;p&gt;Ever wanted to build your own self-contained JavaScript component, that you can
easily use across multiple projects or share with other developers regardless of
what JavaScript framework they use? Web Components may be for you.&lt;/p&gt;
&lt;p&gt;Web Components are a set of new web platform features that let you create your
own HTML elements. Each new custom element can have a custom tag like
&lt;code&gt;&amp;lt;my-button&amp;gt;&lt;/code&gt;, and have all the goodness of built-in elements - custom elements
can have properties and methods, fire and respond to events, and even have an
encapsulated style and DOM trees to bring along their own look and feel.&lt;/p&gt;
&lt;figure&gt;
  &lt;img alt=&quot;Animation of paper-progress element.&quot; decoding=&quot;async&quot; height=&quot;174&quot; loading=&quot;lazy&quot; sizes=&quot;(min-width: 576px) 576px, calc(100vw - 48px)&quot; src=&quot;https://web-dev.imgix.net/image/T4FyVKpzu4WKF1kBNvXepbi08t52/xJG9oEv9gPswKbN6hyzo.gif?auto=format&quot; srcset=&quot;https://web-dev.imgix.net/image/T4FyVKpzu4WKF1kBNvXepbi08t52/xJG9oEv9gPswKbN6hyzo.gif?auto=format&amp;w=200 200w, https://web-dev.imgix.net/image/T4FyVKpzu4WKF1kBNvXepbi08t52/xJG9oEv9gPswKbN6hyzo.gif?auto=format&amp;w=228 228w, https://web-dev.imgix.net/image/T4FyVKpzu4WKF1kBNvXepbi08t52/xJG9oEv9gPswKbN6hyzo.gif?auto=format&amp;w=260 260w, https://web-dev.imgix.net/image/T4FyVKpzu4WKF1kBNvXepbi08t52/xJG9oEv9gPswKbN6hyzo.gif?auto=format&amp;w=296 296w, https://web-dev.imgix.net/image/T4FyVKpzu4WKF1kBNvXepbi08t52/xJG9oEv9gPswKbN6hyzo.gif?auto=format&amp;w=338 338w, https://web-dev.imgix.net/image/T4FyVKpzu4WKF1kBNvXepbi08t52/xJG9oEv9gPswKbN6hyzo.gif?auto=format&amp;w=385 385w, https://web-dev.imgix.net/image/T4FyVKpzu4WKF1kBNvXepbi08t52/xJG9oEv9gPswKbN6hyzo.gif?auto=format&amp;w=439 439w, https://web-dev.imgix.net/image/T4FyVKpzu4WKF1kBNvXepbi08t52/xJG9oEv9gPswKbN6hyzo.gif?auto=format&amp;w=500 500w, https://web-dev.imgix.net/image/T4FyVKpzu4WKF1kBNvXepbi08t52/xJG9oEv9gPswKbN6hyzo.gif?auto=format&amp;w=571 571w, https://web-dev.imgix.net/image/T4FyVKpzu4WKF1kBNvXepbi08t52/xJG9oEv9gPswKbN6hyzo.gif?auto=format&amp;w=650 650w, https://web-dev.imgix.net/image/T4FyVKpzu4WKF1kBNvXepbi08t52/xJG9oEv9gPswKbN6hyzo.gif?auto=format&amp;w=741 741w, https://web-dev.imgix.net/image/T4FyVKpzu4WKF1kBNvXepbi08t52/xJG9oEv9gPswKbN6hyzo.gif?auto=format&amp;w=845 845w, https://web-dev.imgix.net/image/T4FyVKpzu4WKF1kBNvXepbi08t52/xJG9oEv9gPswKbN6hyzo.gif?auto=format&amp;w=964 964w, https://web-dev.imgix.net/image/T4FyVKpzu4WKF1kBNvXepbi08t52/xJG9oEv9gPswKbN6hyzo.gif?auto=format&amp;w=1098 1098w, https://web-dev.imgix.net/image/T4FyVKpzu4WKF1kBNvXepbi08t52/xJG9oEv9gPswKbN6hyzo.gif?auto=format&amp;w=1152 1152w&quot; width=&quot;576&quot; /&gt;
&lt;/figure&gt;
&lt;p&gt;By providing a platform-based, low-level component model, Web Components let you
build and share re-usable elements for everything from specialized buttons to
complex views like datepickers. Because Web Components are built with platform
API’s which include powerful encapsulation primitives, you can even use these
components within other JavaScript libraries or frameworks as if they were
standard DOM elements.&lt;/p&gt;
&lt;p&gt;You may have heard of Web Components before - an early version of the Web
Components spec - v0 - was &lt;a href=&quot;https://www.chromestatus.com/feature/4642138092470272&quot; rel=&quot;noopener&quot;&gt;shipped in Chrome
33&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Today, thanks to broad collaboration between browser vendors, the
next-generation of the Web Components spec - v1 - is gaining wide support.
Chrome supports the two major specs that make up Web Components - &lt;a href=&quot;https://web.dev/shadowdom-v1/&quot;&gt;Shadow
DOM&lt;/a&gt; and &lt;a href=&quot;https://web.dev/custom-elements-v1/&quot;&gt;Custom
Elements&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;as of &lt;a href=&quot;https://www.chromestatus.com/feature/4667415417847808&quot; rel=&quot;noopener&quot;&gt;Chrome 53&lt;/a&gt; and
&lt;a href=&quot;https://www.chromestatus.com/feature/4696261944934400&quot; rel=&quot;noopener&quot;&gt;Chrome 54&lt;/a&gt; respectively.
Safari shipped support for &lt;a href=&quot;https://webkit.org/status/#feature-shadow-dom&quot; rel=&quot;noopener&quot;&gt;Shadow DOM v1 in Safari
10&lt;/a&gt;, and has completed
implementation of &lt;a href=&quot;https://webkit.org/blog/7027/introducing-custom-elements/&quot; rel=&quot;noopener&quot;&gt;Custom Elements v1 in
WebKit&lt;/a&gt;. Firefox is
currently developing &lt;a href=&quot;https://mozilla.github.io/standards-positions/#declarative-shadow-dom&quot; rel=&quot;noopener&quot;&gt;Shadow
DOM&lt;/a&gt; and &lt;a href=&quot;https://mozilla.github.io/standards-positions/#custom-elements&quot; rel=&quot;noopener&quot;&gt;Custom
Elements&lt;/a&gt; v1, and both
&lt;a href=&quot;https://developer.microsoft.com/en-us/microsoft-edge/platform/status/shadowdom/&quot; rel=&quot;noopener&quot;&gt;Shadow
DOM&lt;/a&gt;
and &lt;a href=&quot;https://developer.microsoft.com/en-us/microsoft-edge/platform/status/customelements/&quot; rel=&quot;noopener&quot;&gt;Custom
Elements&lt;/a&gt;
are on the roadmap for Edge.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To define a new custom element using the v1 implementation, you simply create a
new class that extends &lt;code&gt;HTMLElement&lt;/code&gt; using ES6 syntax and register it with the
browser:&lt;/p&gt;
&lt;div&gt;&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;MyElement&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;extends&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;HTMLElement&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;...&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;window&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;customElements&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;define&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;my-element&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; MyElement&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;The new v1 specs are extremely powerful - we’ve put together tutorials on using
&lt;a href=&quot;https://web.dev/custom-elements-v1/&quot;&gt;Custom Elements v1&lt;/a&gt;
and &lt;a href=&quot;https://web.dev/shadowdom-v1/&quot;&gt;Shadow DOM v1&lt;/a&gt; to help
you get started.&lt;/p&gt;
&lt;h2 id=&quot;webcomponentsorg&quot;&gt;webcomponents.org &lt;a class=&quot;headline-link&quot; href=&quot;https://web.dev/webcomponents-org/#webcomponentsorg&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The Web Component community is also growing in leaps and bounds. We’re excited
to see the launch of an updated
&lt;a href=&quot;https://www.webcomponents.org/&quot; rel=&quot;noopener&quot;&gt;webcomponents.org&lt;/a&gt; site - the focal point of
the web components community - including an integrated catalog for developers to
share their elements.&lt;/p&gt;
&lt;figure&gt;
  &lt;img alt=&quot;webcomponents.org&quot; decoding=&quot;async&quot; height=&quot;652&quot; loading=&quot;lazy&quot; sizes=&quot;(min-width: 600px) 600px, calc(100vw - 48px)&quot; src=&quot;https://web-dev.imgix.net/image/T4FyVKpzu4WKF1kBNvXepbi08t52/b3XhRqdMM107Vb3P8pKI.gif?auto=format&quot; srcset=&quot;https://web-dev.imgix.net/image/T4FyVKpzu4WKF1kBNvXepbi08t52/b3XhRqdMM107Vb3P8pKI.gif?auto=format&amp;w=200 200w, https://web-dev.imgix.net/image/T4FyVKpzu4WKF1kBNvXepbi08t52/b3XhRqdMM107Vb3P8pKI.gif?auto=format&amp;w=228 228w, https://web-dev.imgix.net/image/T4FyVKpzu4WKF1kBNvXepbi08t52/b3XhRqdMM107Vb3P8pKI.gif?auto=format&amp;w=260 260w, https://web-dev.imgix.net/image/T4FyVKpzu4WKF1kBNvXepbi08t52/b3XhRqdMM107Vb3P8pKI.gif?auto=format&amp;w=296 296w, https://web-dev.imgix.net/image/T4FyVKpzu4WKF1kBNvXepbi08t52/b3XhRqdMM107Vb3P8pKI.gif?auto=format&amp;w=338 338w, https://web-dev.imgix.net/image/T4FyVKpzu4WKF1kBNvXepbi08t52/b3XhRqdMM107Vb3P8pKI.gif?auto=format&amp;w=385 385w, https://web-dev.imgix.net/image/T4FyVKpzu4WKF1kBNvXepbi08t52/b3XhRqdMM107Vb3P8pKI.gif?auto=format&amp;w=439 439w, https://web-dev.imgix.net/image/T4FyVKpzu4WKF1kBNvXepbi08t52/b3XhRqdMM107Vb3P8pKI.gif?auto=format&amp;w=500 500w, https://web-dev.imgix.net/image/T4FyVKpzu4WKF1kBNvXepbi08t52/b3XhRqdMM107Vb3P8pKI.gif?auto=format&amp;w=571 571w, https://web-dev.imgix.net/image/T4FyVKpzu4WKF1kBNvXepbi08t52/b3XhRqdMM107Vb3P8pKI.gif?auto=format&amp;w=650 650w, https://web-dev.imgix.net/image/T4FyVKpzu4WKF1kBNvXepbi08t52/b3XhRqdMM107Vb3P8pKI.gif?auto=format&amp;w=741 741w, https://web-dev.imgix.net/image/T4FyVKpzu4WKF1kBNvXepbi08t52/b3XhRqdMM107Vb3P8pKI.gif?auto=format&amp;w=845 845w, https://web-dev.imgix.net/image/T4FyVKpzu4WKF1kBNvXepbi08t52/b3XhRqdMM107Vb3P8pKI.gif?auto=format&amp;w=964 964w, https://web-dev.imgix.net/image/T4FyVKpzu4WKF1kBNvXepbi08t52/b3XhRqdMM107Vb3P8pKI.gif?auto=format&amp;w=1098 1098w, https://web-dev.imgix.net/image/T4FyVKpzu4WKF1kBNvXepbi08t52/b3XhRqdMM107Vb3P8pKI.gif?auto=format&amp;w=1200 1200w&quot; width=&quot;600&quot; /&gt;
&lt;/figure&gt;
&lt;p&gt;The webcomponents.org site contains information about the Web Components
&lt;a href=&quot;https://www.webcomponents.org/specs&quot; rel=&quot;noopener&quot;&gt;specs&lt;/a&gt;, updates and content from the &lt;a href=&quot;https://www.webcomponents.org/community&quot; rel=&quot;noopener&quot;&gt;web
components community&lt;/a&gt;, and displays
documentation for &lt;a href=&quot;https://www.webcomponents.org/element/PolymerElements/paper-button&quot; rel=&quot;noopener&quot;&gt;open-source
elements&lt;/a&gt;
and &lt;a href=&quot;https://www.webcomponents.org/collection/PolymerElements/paper-elements&quot; rel=&quot;noopener&quot;&gt;collections of
elements&lt;/a&gt;
built by other developers.&lt;/p&gt;
&lt;p&gt;You can get started building your first element using a library like Google’s
&lt;a href=&quot;https://www.polymer-project.org/&quot; rel=&quot;noopener&quot;&gt;Polymer&lt;/a&gt;, or just use the low-level Web
Component API’s directly. Then &lt;a href=&quot;https://www.webcomponents.org/publish&quot; rel=&quot;noopener&quot;&gt;publish your
element&lt;/a&gt; on webcomponents.org.&lt;/p&gt;
&lt;p&gt;Happy componentizing!&lt;/p&gt;
</content>
    <author>
      <name>Taylor Savage</name>
    </author>
  </entry>
</feed>
