Experimental Web Components compiler. It's Web Components all the way down! 🐢
- Write a Web Component
const template = document.createElement('template'); template.innerHTML = ` <style> .footer { color: white; background-color: #192a27; } </style> <footer class="footer"> <h4>My Blog © ${new Date().getFullYear()}</h4> </footer> `; class Footer extends HTMLElement { connectedCallback() { if (!this.shadowRoot) { this.attachShadow({ mode: 'open' }); this.shadowRoot.appendChild(template.content.cloneNode(true)); } } } export default Footer; customElements.define('wcc-footer', Footer);
- Run it through the compiler
import { renderToString } from 'wc-compiler'; const { html } = await renderToString(new URL('./path/to/component.js', import.meta.url));
- Get HTML!
<wcc-footer> <template shadowrootmode="open"> <style> .footer { color: white; background-color: #192a27; } </style> <footer class="footer"> <h4>My Blog © 2022</h4> </footer> </template> </wcc-footer>
WCC runs on NodeJS and can be installed from npm.
$ npm install wc-compiler --save-dev
If you need CommonJS support, a separate pre-bundled (with Rollup) distribution of WCC is available at dist/wcc.dist.cjs. Example:
const { renderToString } = require('wc-compiler/dist/wcc.dist.cjs');
See our website for API docs and examples.
WCC is not a static site generator, framework or bundler. It is designed with the intent of being able to produce raw HTML from standards compliant Web Components and easily integrated into a site generator or framework, like Greenwood. The Project Evergreen team also maintains similar integrations for Eleventy and Astro.
In addition, WCC hopes to provide a surface area to explore patterns around streaming, serverless and edge rendering, and as acting as a test bed for the Web Components Community Groups's discussions around community protocols, like hydration.