Toimii has soft launched — the service is live and sign-ups are open. Try it free →

Toimii has soft launched, so these guides describe a service you can sign up for and use today. A few pieces are still on the way — the iOS and Android apps arrive later in 2026.

Embed a contact form in React, Vue, or Angular

Web components are part of the DOM. Drop the tag straight into JSX, Vue templates, or Angular components — no wrapper needed.

<!-- Add this anywhere on your page -->
<script src="https://cdn.toimii.io/components/your-code.js" async></script>
<toimii-your-code></toimii-your-code>
Does this actually work?

Yes — it's a standard custom element: nothing to install, no wrapper to write. React needs no configuration at all. Vue and Angular each need one line telling their compiler the tag isn't theirs — both below.

Step by step

1
Load the script
Add the script tag to the HTML shell your app is served from — the index.html your build starts from, or your framework's root layout.
2
Drop in the custom element
Put the tag where you want the form; JSX, Vue and Angular templates take it as written. Copy it from your component's page in Toimii — it ends with that component's own code.
3
Build and deploy
Build and deploy as you normally would, then send yourself a test message from the published page rather than the dev server — submissions are accepted only from the domain you listed in Toimii.

Gotchas

  • Vue needs the tag flagged as a custom element, or it tries to resolve a Vue component and warns. isCustomElement takes a function — test for the toimii- prefix, since the rest of the tag varies per component.
  • Angular needs CUSTOM_ELEMENTS_SCHEMA in a schemas array — the standalone component's own, or its NgModule's in an older app. Without it the compiler errors on the tag it doesn't know.

Frequently asked

Do I need a React/Vue/Angular wrapper component?

No. The script defines the element in the browser, so your framework only renders the tag — and nothing in your build changes when we ship a new version.

How do I tell TypeScript about the custom element?

Declare it in JSX's IntrinsicElements, with the tag your own component uses. React 19 moved that namespace and the correct form depends on your tsconfig's jsx setting, so take the current one from React's upgrade guide. The form works without it.

How do I pass props or config?

There's nothing to pass. What the form asks and where it delivers are set in Toimii and baked into the bundle the script loads — which is why the tag carries no attributes.

Does it work with Next.js or another React framework?

Yes. In Next.js, load it with next/script from the root layout — the documented place for a script the whole site needs. A "use client" boundary is required only if you attach a load or error handler; the tag itself needs none.

What about server-side rendering?

The custom element renders client-side, like any web component. SSR emits the tag, the browser registers the element when the script loads, then the form appears. There's a brief flash of empty space — usually unnoticeable.

Embedding on a different platform?

Same two lines of code, picked apart for each platform.

Ready to try it?

30-day free trial. No credit card. Set up in minutes.

No credit card required. Set up in 2 minutes.