netlify-forms
by netlifynetlify-forms guide for HTML form handling on Netlify. Use it to add contact forms, feedback forms, file uploads, spam filtering, AJAX submissions, and a custom thank-you page without server-side code. Helpful for Backend Development workflows and JS-rendered apps that need build-time form detection.
This skill scores 78/100 and is worth listing: it gives agents a concrete, Netlify-specific workflow for form handling, with enough operational detail to reduce guesswork versus a generic prompt. Directory users can expect a practical install that helps with real implementation tasks, though they should note some missing supporting ecosystem files and a few workflow gaps.
- Clear trigger and scope for HTML forms on Netlify, including contact, feedback, file upload, and submissions use cases.
- Operational guidance is specific: data-netlify attribute, build-time detection, custom success page behavior, AJAX submissions, spam filtering, and file upload notes are all called out.
- Good agent leverage from the long SKILL.md body with headings, constraints, and code examples that support direct execution.
- No install command, support files, or references were provided, so users must rely on the SKILL.md alone.
- Placeholder markers are present, which suggests some unfinished or templated sections despite otherwise solid content.
Overview of netlify-forms skill
What netlify-forms is for
The netlify-forms skill helps you implement Netlify Forms for HTML form handling without adding your own server-side submit endpoint. It is best for contact forms, lead capture, feedback, simple file uploads, and other forms you want Netlify to collect and route.
Who should use it
Use this netlify-forms skill if you are building on Netlify and want a clear setup path for static sites, SSR apps, or JavaScript-rendered forms. It is especially useful for Backend Development workflows where the goal is to avoid custom form infrastructure while still keeping submissions reliable.
What matters most in practice
The main decision points are form detection, correct form naming, and whether your form is server-rendered or only appears in the browser. This skill is most valuable when you need the netlify-forms install and usage steps to work on the first deploy, not after trial and error.
How to Use netlify-forms skill
Install and scope the skill
Use the netlify-forms install path in your skills workflow, then read SKILL.md first. This repository is small and self-contained, so SKILL.md is the primary source; there are no supporting rules/, references/, or resources/ folders to consult.
Turn your goal into a useful prompt
Give the skill a concrete form target, framework, and deployment context. Strong input looks like: “Add a Netlify contact form to a Next.js app with a custom thank-you page and spam protection.” Weak input looks like: “Set up forms.” The more specific the route, field list, and framework, the less guesswork remains in the output.
Read the parts that affect output quality
Start with Basic Setup and JavaScript-Rendered Forms, then read AJAX Submissions and Vanilla JavaScript if you need non-default behavior. If your app uses React, Vue, SvelteKit, Remix, Nuxt, or Next.js, the build-time detection guidance is the key part of the netlify-forms guide.
Apply the workflow correctly
Make sure the form has a unique name, method="POST", and data-netlify="true". If you need a custom success page, use a path like /thank-you, not /thank-you.html. For JavaScript-rendered forms, include a static HTML skeleton for build-time detection; otherwise Netlify may never see the form even if it appears in the UI.
netlify-forms skill FAQ
Is this better than a generic prompt?
Yes, when you need implementation details that matter in production: how Netlify detects forms, how hidden form-name handling works, and what changes for JS-rendered apps. A generic prompt often misses the detection constraint, which is the most common adoption blocker for netlify-forms.
Do I need this skill for a simple HTML form?
If you only need a basic contact form on Netlify, the skill can still save time by showing the minimum valid markup and the success-page rules. If your needs are outside Netlify hosting or require custom backend logic, netlify-forms is probably not the right fit.
Does it work with modern frameworks?
Yes, but not by relying on browser-rendered markup alone. For React, Vue, SSR frameworks, and other client-rendered setups, the skill matters because it explains the static skeleton pattern needed for Netlify build detection.
Is it beginner-friendly?
Mostly yes. The syntax is simple, but the important part is understanding the deployment model. Beginners usually succeed faster when they follow the netlify-forms usage steps exactly and avoid assuming a form visible in the browser is automatically detected.
How to Improve netlify-forms skill
Provide the missing deployment details
The best results come from specifying the framework, hosting setup, and submission destination behavior up front. Include whether you need AJAX submission, file uploads, spam filtering, or a custom thank-you route so the skill can choose the right path.
Describe the exact form shape
List the fields, validation needs, and any hidden metadata you want captured. For example, “name, email, company, message, required email, optional file upload” is far more actionable than “contact form,” because it lets the skill produce better markup and clearer Netlify-specific guidance.
Watch for the common failure modes
The biggest mistakes are missing data-netlify="true", using a duplicate form name, forgetting static detection for JS-rendered forms, and linking to the wrong success-page path. If the first output fails, check those before rewriting the whole form flow.
Iterate with build and submit evidence
After the first pass, test the deploy, inspect whether the form appears in Netlify, and note any missing fields or routing issues. Then refine the netlify-forms prompt with the exact failure, such as “form not detected in production” or “AJAX submit works locally but not on deploy,” so the next output is targeted.
