Skip to main content

You code the form, we make it accessible

Project description

cm-forms 📝

You build the form. We make it accessible.

Ever spent hours coding a perfect signup form, only to realize screen readers can't understand it? Yeah, that's frustrating.

The Problem

Forms are everywhere - logins, checkouts, contact pages, surveys. But most forms create accessibility barriers:

  • Inputs without proper labels
  • Buttons that just say "Submit" (submit what?)
  • Error messages that aren't linked to the fields
  • Required fields with no indication they're required

When the structure isn't there, screen reader users have to fill in the gaps. That's not okay.

The Solution

cm-forms is like Black for HTML forms. Point it at your HTML files, and it automatically adds the accessibility attributes everyone needs.

Note: This isn't an all in one solution. It's a tool to help you make your forms accessible. You still need to test them with screen readers and make sure they work for everyone.

cm-forms signup.html

NOTICE: This is a pre-alpha planning release (v0.0.1). No guarantees, minimal features live. Visit https://github.com/comfort-mode-toolkit/cm-forms/ to contribute or share feedback.

Processed: signup.html -> signup_cm.html
- Added label to <input id="username">
- Added label to <input id="email">
- Added aria-required="true" to <input id="email">
- Added aria-required="true" to <input id="password">
- WARNING: <button> label "Submit" is ambiguous, developer review needed

For more info and feedback, visit: https://github.com/comfort-mode-toolkit/cm-forms/

That's it. Seriously.

What It Does

  • Finds all forms in your HTML files
  • Adds ARIA labels, roles, and required attributes automatically
  • Asks you when things are ambiguous (we can't read your mind!)
  • Explains what changed and why
  • Makes your forms work for everyone

Think of it as a helpful friend who knows WCAG guidelines and saves you hours of tedious work.

Current Status

🔬 Research Phase

We're figuring out the best way to build this. What we're exploring:

  • Which fixes are always safe to auto-apply
  • When we should ask instead of assuming
  • How to explain accessibility without overwhelming people
  • What forms need most in real projects

Want to Help? Go Down the Rabbit Hole

We need people to research and document what makes forms accessible. Not theory - practical stuff.

What we're looking for:

  • Best practices: What should every form have? (real examples, not just "add labels")
  • Risk areas: When could auto-fixing break things or make wrong assumptions?
  • Edge cases: Multi-step forms, dynamic forms, custom controls - what's tricky?
  • Testing insights: How do screen reader users actually interact with forms?
  • Pattern library: What are the correct ARIA patterns for different form types?

How to contribute:

Dive into HTML form accessibility. Read the specs, test with screen readers, find real broken forms and document what they need. Write it in plain language.

Check out our research wiki to see how to submit your findings. No expertise required - if you can spot a problem and explain how to fix it, that helps.

GitHub issues, wiki edits, random notes in a text file - all welcome.

why forms?

Forms are everywhere. Login pages, checkouts, contact forms, surveys. When forms have accessibility barriers, people get locked out of important things.

Good news: form accessibility has clear patterns. Bad news: doing it manually is tedious and easy to mess up.

Let's automate the tedious parts.

part of comfort mode toolkit

cm-forms is part of the comfort mode toolkit – tools that make the web more comfortable for everyone.


Simple tools for a more accessible web.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cm_forms-0.0.1.tar.gz (43.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

cm_forms-0.0.1-py3-none-any.whl (20.5 kB view details)

Uploaded Python 3

File details

Details for the file cm_forms-0.0.1.tar.gz.

File metadata

  • Download URL: cm_forms-0.0.1.tar.gz
  • Upload date:
  • Size: 43.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for cm_forms-0.0.1.tar.gz
Algorithm Hash digest
SHA256 92e491c06365de86b95268e5204026700714e7e82488409bd2af72bd43baf265
MD5 5f76cad1ed5892c8f01bfb685ca9b145
BLAKE2b-256 4d179952b7c9844c2354b8f544c258f0183733f05d64c3ab6441a936999665a8

See more details on using hashes here.

File details

Details for the file cm_forms-0.0.1-py3-none-any.whl.

File metadata

  • Download URL: cm_forms-0.0.1-py3-none-any.whl
  • Upload date:
  • Size: 20.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for cm_forms-0.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 73d8e4907dd44db5b9c809dba47f177d7ef10ba74b5757dcb367d3dd472a57b2
MD5 30e8aa8e4f352c92f7ecaf8ab501239c
BLAKE2b-256 7c430513371fcb5f63ea042e27a95c73d3178c95a9bff8ebed65950d59838b9c

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page