Getting Started
Get FormForge up and running in your Umbraco project in under five minutes. This guide covers installation, configuration, and building your first form.
Installation
FormForge is distributed as a NuGet package and targets Umbraco 17+ (Bellissima). Install it with the .NET CLI:
dotnet add package FormForgeOr add the package reference directly to your .csproj file:
<PackageReference Include="FormForge" Version="*" />Run your Umbraco site after installing. FormForge automatically registers itself via IComposer, creates the required database tables through its migration plan, and adds the FormForge section to the backoffice. No manual configuration is required for basic usage.
FormForge supports both SQLite and SQL Server. The migration plan detects your database provider automatically and runs the appropriate schema scripts.
Configuration
FormForge works out of the box with zero configuration. For production deployments you can fine-tune behavior through appsettings.json keys under the FormForge section.
Available Settings
| Key | Description |
|---|---|
LicenseKey | Your license key in PEM format (inline string) |
LicenseFilePath | Alternative to LicenseKey — path to a .pem license file on disk |
TurnstileSiteKey | Cloudflare Turnstile site key for CAPTCHA protection |
TurnstileSecretKey | Cloudflare Turnstile secret key |
RecaptchaSiteKey | Google reCAPTCHA v3 site key |
RecaptchaSecretKey | Google reCAPTCHA v3 secret key |
Example Configuration
{
"FormForge": {
"LicenseKey": "-----BEGIN LICENSE-----\n...\n-----END LICENSE-----",
"TurnstileSiteKey": "0x4AAAAAAA...",
"TurnstileSecretKey": "0x4AAAAAAA..."
}
}If you prefer to keep the license in a separate file, use LicenseFilePath instead:
{
"FormForge": {
"LicenseFilePath": "/etc/formforge/license.pem"
}
}Rate Limiting
FormForge respects a named rate-limiting policy called "FormSubmission". Your host application is responsible for registering this policy using .NET Core’s built-in rate limiter. If no policy is registered, form submissions are not rate-limited.
// Program.cs
using System.Threading.RateLimiting;
builder.Services.AddRateLimiter(options =>
{
options.AddFixedWindowLimiter("FormSubmission", opt =>
{
opt.PermitLimit = 5;
opt.Window = TimeSpan.FromMinutes(1);
opt.QueueProcessingOrder = QueueProcessingOrder.OldestFirst;
opt.QueueLimit = 0;
});
});
// ...
app.UseRateLimiter();Call app.UseRateLimiter() before app.UseEndpoints() (or app.MapControllers()) so the middleware runs ahead of FormForge’s submission endpoint.
Your First Form
With FormForge installed, you can create and publish a working form in a few clicks.
1. Grant Permissions
Before any user can see the FormForge section in the backoffice, their user group needs the FormForge section permission.
- Go to Settings → User Groups in the Umbraco backoffice.
- Open the user group you want to grant access to (e.g. Administrators).
- Under Sections, enable FormForge.
- Save the user group.
Users in that group will now see the FormForge section in the backoffice sidebar after logging out and back in.
Umbraco ships with a built-in Sensitive data user group that controls access to confidential field values. Users who belong to this group can:
- View the actual values of fields marked as Sensitive (otherwise they see
******) - Perform SAR (Subject Access Request) searches across all submissions
- Execute Right to Erasure operations to delete matching submissions
To assign it, go to Users, select a user, and under Assign access → Groups add the Sensitive data group. Only grant this to users who need to handle personal data requests.
2. Create the Form
- Open the Umbraco backoffice and navigate to the FormForge section.
- Click Create Form.
- Give your form a name and alias (e.g.
contact-form).
3. Add Fields
Drag fields from the palette onto the canvas. For a simple contact form, add:
- Text field — label it
Name - Email field — label it
Email - Textarea field — label it
Message
4. Configure Settings
Open the Settings tab to customize the submit button label and the success message shown after a visitor submits the form.
5. Save & Publish
Click Save. Your form is now ready to be rendered on any page.
6. Render the Form
There are two ways to add a form to a page:
Option A: FormPicker Property Editor
Add a FormPickerproperty to your document type. Content editors can then select a form from the picker when editing a page. FormForge’s view component renders the selected form automatically.
Option B: ViewComponent (Direct)
Invoke the FormForgeRenderer view component directly in a Razor template:
@await Component.InvokeAsync("FormForgeRenderer", new { formAlias = "contact-form" })7. Test the Form
Navigate to the page containing your form and submit a test entry. Then return to the backoffice and open the Submissionsinbox under the FormForge section — your entry should appear with all the field data.
Localhost submissions are always allowed, even without a license key. You only need to activate your license when deploying to a staging or production domain.
Requirements
| Dependency | Minimum Version |
|---|---|
| .NET | 10+ |
| Umbraco | 17.3.2+ (Bellissima) |
| Database | SQLite or SQL Server |
FormForge has no additional runtime dependencies. All required JavaScript and CSS assets are bundled with the NuGet package and served from the backoffice automatically.