Liability Waiver

A general-purpose liability waiver and release for a class, lesson, or activity - participant/guardian info, five plain-English legal sections (risk, release, medical consent, media release, acknowledgment), and a signature - either the participant's own,

Liability Waiver

A two-page liability waiver and release of liability for a gym class, skate lesson, or any similar activity where a participant needs to sign in before taking part.

What's included

  • Page 1 - facility/activity name, participant and parent/guardian info (name, date of birth, contact phone/email), and five legal sections: Assumption of Risk, Release and Waiver of Liability, Medical Consent and Clearance, Media Release, and Acknowledgment of Understanding
  • Page 2 - the acknowledgment checkbox's recap and the signature itself
  • The same five legal sections are also shown right in the form, above the acknowledgment checkbox - so the signer can actually read what they're agreeing to before they sign, not just on the PDF afterward
  • Exactly one signature, never both: the participant's own if they're 18 or older, or a parent/guardian's - on the participant's behalf, since a minor can't legally consent themselves - if they're under 18. The inapplicable section is both hidden on the generated document and not required to submit.
  • minor_participant preset to preview the guardian branch without re-filling the form

Examples for Authors

  • Splitting a document across pages once it outgrows one - this started as a one-page waiver with a single short paragraph; once the real legal text grew to five separate sections plus a participant/guardian info block, it no longer fit one page at a readable size. process.js calls addPage() twice then overlay("page1.json", 1)/overlay("page2.json", 2) - the same two-page pattern as the Membership Card project's front/back, just applied to a single continuous document instead of two physically distinct sides.
  • A value computed once in validate.js, reused as a block condition - is_minor is derived from participant_dob in validate.js (so it can actually be validated before the document is ever generated), then process.js overlays the exact same inputs.is_minor that validate.js already computed, and both signature sections (on page 2) gate on it with a plain condition - is_minor != true for the participant's own, is_minor == true for the guardian's. No duplicated age math between the two scripts.
  • An either/or requirement, not two independent ones - neither signature field carries form.json's own required rule (that would make it unconditionally mandatory and block whichever branch doesn't apply); validate.js requires the participant's signature only when NOT a minor, and the guardian's name/signature only when a minor is. Since the two branches are mutually exclusive, their overlay blocks are also given the exact same coordinates - only one ever renders, so there's no dead space left by the other.
  • A required checkbox that isn't form.json's own required rule - a checkbox's required: true only fires on a missing value, not on false (an unchecked box is a perfectly valid false, not empty) - so waiver_acknowledged is enforced explicitly in validate.js instead, the same pattern the W-9 demo project uses for its classification checkboxes.
  • label-type fields for on-screen document review - each legal section is a heading+body pair of plain label fields (never part of submitted inputs), placed before the acknowledgment checkbox so the signer sees the waiver's actual language in the form, not just on the generated PDF afterward. A label's own text is always static - it never runs through {inputs...} substitution the way a layout block's text does - so the on-screen copy is worded generically ("this activity"/"this facility") rather than referencing the live activity_name/facility_name values the way page1.json's own blocks do; if you edit the release language, update both copies.
  • Reformatting a date field for display - participant_dob is passed through formatDate() before overlay() reads it, same fix used throughout this library (see Event Badge).

Customizing

Swap the accent color, recolor the header band, or add fields (an emergency contact, an additional clause) as your activity requires.

Not legal advice. This is a generic template, not a substitute for legal review - have a licensed attorney confirm it meets your jurisdiction's and activity's requirements before relying on it.