Skip to content

Vanilla JS

The formtress-js npm package gives you full control over form submissions in any JavaScript project — React, Svelte, Vue, plain HTML, or anything else.

Terminal window
npm install formtress-js
import { submitForm } from 'formtress-js'
const form = document.querySelector('#my-form')
form.addEventListener('submit', async (e) => {
e.preventDefault()
const result = await submitForm({
formId: 'your-form-id',
data: new FormData(form),
})
if (result.ok) {
console.log('Success!')
// Show your own success UI
} else {
console.error(result.message)
// Show error to the user
}
})
ParameterTypeRequiredDescription
formIdstringYesYour Formtress Form ID from the dashboard.
dataFormDataYesThe form data to submit.

Returns: Promise<{ ok: boolean; message?: string }>

FieldTypeDescription
okbooleantrue if the submission was accepted.
messagestringError message from the server (only present when ok is false).
import { submitForm } from 'formtress-js'
const form = document.querySelector('#contact-form')
const submitBtn = form.querySelector('button[type="submit"]')
const errorEl = form.querySelector('.error-message')
form.addEventListener('submit', async (e) => {
e.preventDefault()
// Loading state
submitBtn.disabled = true
submitBtn.textContent = 'Sending...'
errorEl.textContent = ''
try {
const result = await submitForm({
formId: 'your-form-id',
data: new FormData(form),
})
if (result.ok) {
form.reset()
submitBtn.textContent = 'Sent!'
} else {
errorEl.textContent = result.message
submitBtn.textContent = 'Submit'
}
} catch (err) {
errorEl.textContent = 'Network error. Please try again.'
submitBtn.textContent = 'Submit'
} finally {
submitBtn.disabled = false
}
})

Since submitForm is just a function that takes a FormData object, it works with any framework. Here’s a minimal example pattern:

// Collect your data however you want
const formData = new FormData()
formData.append('name', name)
formData.append('email', email)
formData.append('message', message)
const result = await submitForm({
formId: 'your-form-id',
data: formData,
})

If you don’t use a bundler, you can load the module via CDN:

<script type="module">
import { submitForm } from 'https://cdn.jsdelivr.net/npm/formtress-js@0.1.17/dist/js/core.js'
// Use submitForm as shown above
</script>