Skip to content

Upgrade Guide

This guide covers migrating from SnipForm Forms V1 to V2. The V2 API is simpler with a single directive format, improved performance, and better IDE support.

ChangeV1V2
Script URL/wrap/sf.iife.js/api/v2/sf.iife.js
Success element<sf-result><sf-success>
Directive formats3 formats1 format

V1:

<script src="https://cdn.snipform.io/wrap/sf.iife.js" defer></script>

V2:

<script src="https://cdn.snipform.io/api/v2/sf.iife.js" defer></script>

Rename <sf-result> to <sf-success>:

V1:

<sf-result style="display:none">
<h2>Thanks %name%!</h2>
</sf-result>

V2:

<sf-success style="display:none">
<h2>Thanks %name%!</h2>
</sf-success>

V1 had three directive formats. V2 uses a single, cleaner format.

V1 (Readability):

<p if-email-error-show if-email-error-text></p>

V1 (Namespace):

<p error-show:email error-text:email></p>

V1 (Shorthand):

<p !email:show !email:text></p>

V2:

<p if-error="email" then-show then-text style="display:none"></p>

V1:

<input if-email-error-class="error-class" />
<input error-class:email="error-class" />
<input !email:class="error-class" />

V2:

<input error-class="error-class" />

V1:

<input if-email-error-style="border: 2px solid red" />
<input error-style:email="border: 2px solid red" />
<input !email:style="border: 2px solid red" />

V2:

<input error-style="border: 2px solid red" />

V1:

<input if-email-valid-class="valid-class" />
<input valid-class:email="valid-class" />
<input ~email:class="valid-class" />

V2:

<input valid-class="valid-class" />

V1:

<p if-email-valid-show if-email-valid-text="Email is valid"></p>

V2:

<div if-error="email">
<p else-text>Email is valid</p>
</div>

V1:

<div submit:show>Submitting...</div>
<button submit:text="Saving...">Save</button>
<input submit:class="disabled">

V2:

<div on-submit-show style="display:none">Submitting...</div>
<button on-submit-text="Saving...">Save</button>
<input on-submit-class="disabled">

V1 had attributes to disable specific parsers:

<!-- V1 - No longer needed in V2 -->
<snip-form readability="false">
<snip-form namespace="false">
<snip-form shorthand="false">

V2 has only one format, so these are no longer needed.


<snip-form key="YOUR_KEY">
<form>
<input name="email"
sf-validate:required
sf-validate:email
if-email-error-class="border-red-500"
if-email-valid-class="border-green-500" />
<p if-email-error-show-text style="display:none"></p>
<button type="submit" submit:text="Sending...">
Send
</button>
</form>
<sf-result style="display:none">
<p>Thanks %email%!</p>
</sf-result>
</snip-form>
<script src="https://cdn.snipform.io/wrap/sf.iife.js" defer></script>
<snip-form key="YOUR_KEY">
<form>
<input name="email"
sf-validate:required
sf-validate:email
error-class="border-red-500"
valid-class="border-green-500" />
<p if-error="email" then-show then-text style="display:none"></p>
<button type="submit" on-submit-text="Sending...">
Send
</button>
</form>
<sf-success style="display:none">
<p>Thanks %email%!</p>
</sf-success>
</snip-form>
<script src="https://cdn.snipform.io/api/v2/sf.iife.js" defer></script>

V1 AttributeV2 Attribute
if-{field}-error-showif-error="{field}" then-show
if-{field}-error-textif-error="{field}" then-text
if-{field}-error-classerror-class (on input) or if-error then-class
if-{field}-error-styleerror-style (on input) or if-error then-style
error-show:{field}if-error="{field}" then-show
error-text:{field}if-error="{field}" then-text
error-class:{field}error-class (on input)
!{field}:showif-error="{field}" then-show
!{field}:textif-error="{field}" then-text
!{field}:classerror-class (on input)
if-{field}-valid-classvalid-class (on input)
valid-class:{field}valid-class (on input)
~{field}:classvalid-class (on input)
submit:showon-submit-show
submit:texton-submit-text
submit:classon-submit-class
loading:showRemoved in V2
loading:classRemoved in V2
<sf-result><sf-success>

V2 includes IDE autocomplete support. Install the intellisense package:

Terminal window
npm install -D @snipform/html-intellisense

Works with VS Code, WebStorm, PhpStorm, and other JetBrains IDEs. See IDE Setup for configuration.