Skip to main content

Autograph for ExpressionEngine

Get it in writing.

A signature field for ExpressionEngine. Visitors sign with a mouse, a finger or a stylus, in your Channel Forms, member forms, Grid and Fluid, and the signature is checked, kept and ready for your templates.

ExpressionEngine 7+PHP 8.1+Version 2.0

Sold and downloaded through the ExpressionEngine add-on store.

waivers.group/sign.html
{exp:channel:form
channel="waivers"
return="waivers/thanks"
}
<input name="title" value="{title}">
{field:customer_signature}
<button type="submit">Sign</button>
{/exp:channel:form}

New in 2.0

The biggest release yet.

Autograph 2.0 is rebuilt for ExpressionEngine 7, and a 1.x site updates without changing a template, a stylesheet or an entry.

  • Signatures saved as files, S3 included
  • A responsive, high-resolution pad
  • Grid, Fluid and member fields
  • The date and time it was signed
  • A JavaScript API and events
  • Every signature checked on the server

Read the announcement →

Storage

In the entry, or as files.

Choose per field. Change your mind later: signatures already saved keep displaying wherever they are.

In the entry

The default. Nothing to set up, and the signature travels with the entry, its copies and its exports.

{customer_signature:url} → data:image/png;base64,…

As a file

A PNG in any upload directory or subfolder, S3 included, in the file manager like any upload. Ordinary links, so it shows up in emails and PDFs.

{customer_signature:url} → …/signature_waiver_3f9a.png

How storage works →

Everywhere

Wherever somebody needs to sign.

One fieldtype, in every place ExpressionEngine collects content. No template changes: output the field, and the pad and its scripts are there.

  • Channel Forms
  • Member registration
  • Member profiles
  • Grid rows
  • Fluid fields
  • The control panel
waivers.group/entry.html
{if customer_signature}
{customer_signature alt="Signature of {title}"}
<p>Signed {customer_signature:signed_at format="%F %j, %Y"}</p>
{/if}

For developers

A pad you can script.

Every pad has an API on its element and fires events as it's used. Storage is pluggable from your own add-on.

assets/js/waiver.js
document.addEventListener('autograph:changed', (event) => {
send.disabled = event.detail.autograph.isEmpty();
});

// A form loaded later:
Autograph.initAll(container);

Somebody needs to sign something.

Get Autograph from the ExpressionEngine add-on store, add the field to a form, and you're done.