Docs / FormLint for Tally

FORM INTELLIGENCE, EXPLAINED.

FormLint for Tally

Connect your Tally forms to FormLint and manage the context you need from one workspace.

BY FORMLINT · VERSION 0.1.0

Connect inside your Tally form.

Custom-domain adapter. Download includes installation instructions and license notices. These packages are distributed directly by FormLint; no platform endorsement or marketplace approval is claimed.

Download Tally integration
Tally Pro and a custom domain are required. Install through Tally code injection. A script on the parent website cannot connect to the inputs of a standard tally.so iframe.
  1. Choose the form on your domain.Open Domains → your domain → Pretty URLs → the form’s Page settings → Code injection.
  2. Edit the installation snippet.Replace every YOUR_* value below with your installation details and input UUID.
  3. Save and test the custom-domain form.For an embed, select the custom-domain form URL in Tally’s embed settings. The code executes inside that form.

Match your fields. Keep their native names.

Create or choose your FormLint project, save its rules and field IDs, and create a public key. Use your HTTPS evaluation endpoint ending in /evaluate. Keep provider and server secrets out of every plugin.

Add the exact origin where the form runs to the project’s allowed origins. For Tally, this is the custom-domain origin inside the iframe, not merely the parent website.

Inspect the intended input on your published form and copy its stable UUID id, as described in Tally’s developer guide. Map it to a saved project field such as description. Do not use an email or other sensitive input.

Tally · form-level code injection
<!-- Tally Pro: paste into custom-domain FORM Page settings > Code injection.
     Replace all YOUR_* values. Use the actual input UUID from browser Inspect.
     For embedded forms, use the custom-domain URL in the Tally embed settings. -->
<script type="module">
  import { mount } from 'https://YOUR_SITE_HOST/plugins/formlint-integrations-0.1.0.mjs';
  window.formlintTally?.destroy();
  try {
    window.formlintTally = mount({
      formSelector: 'form',
      locale: 'auto', // Inside an iframe, set 'it' or 'en' if the form language differs from its HTML lang.
      endpoint: 'https://YOUR_EVALUATION_HOST/evaluate',
      key: 'YOUR_PROJECT_PUBLIC_KEY',
      fields: { description: '[id="YOUR_TALLY_INPUT_UUID"]' }
    });
  } catch { /* The original Tally form remains available. */ }
</script>

The FormLint site build serves the versioned module shown above. If hosting it separately, allow cross-origin module loading from the Tally domain. Update your Content Security Policy to allow that script host and the evaluation endpoint.

Your rules live in FormLint.

Write your checks and visitor messages in the project and save. For a packaging brief, check quantity and dimensions with separate rules, each with its own suggestion. For quantity, use “Add how many items you need.” Learn how to write useful rules.

Map up to four non-sensitive fields, at most 4,000 characters each: native textarea, text, number, single select or individual checkbox. Files, custom choice widgets, grouped controls and sensitive input types are excluded. The integration does not read browser storage or keep answers across form pages; use rules whose mapped fields appear together.

Widget language

Set locale: 'auto', 'en' or 'it' in the injected snippet. Auto follows the form document’s HTML language, including runtime changes. Add all rule translations and choose the default language in FormLint’s Form setup. Missing or unsupported translations use the project default for every message.

In a cross-origin embed, Auto cannot read the parent website’s language. Configure the locale inside the form’s code injection; no automatic parent-frame synchronization is provided. Switching existing feedback does not consume another evaluation. Language setup and SDK examples.

Test the whole form.

To disconnect, remove the injected snippet and save the form settings.

Verification scope. The runtime is tested in real Chromium using labeled synthetic builder markup, including failure and replacement flows. Authenticated custom-domain Tally installation remains a platform acceptance step. Live evaluation requires server-side configuration. Read the privacy guide.
More context, less guesswork.Open FormLint