Event Binding While you could bind events in the connectedCallback() with refs.button.addEventListener('click', handleClick) for example, it may be more convenient to bind a callback directly to the template. const MyElement = customElement(() => { const [count, setCount] = createSignal(0); const increment = () => setCount(count() + 1); return html` <button onclick="${increment}">Increment</button> <output>${count}</output> `; }); NOTICE: This uses the native HTML inline event-binding syntax. There is no special syntax for on... attributes, because it simply renders a reference to the callback using this. You will see something like this when you inspect the element in the browser: <my-element onclick="this.__customCallbackFns.get('d7121610-e89d-4629-ab00-d4e22644f16b')(event)"> As of version 2.0.0, Thunderous has deprecated the customCallback() method, which was used to register callbacks on the class instance. Instead, callbacks are now bound directly to DOM nodes.