2.1.0
- 2.1.0
- Fieldset home
This guide is for the people who run an organization in the admin dashboard at https://<your server>/admin: owners, administrators, form designers, reviewers and viewers. Field workers use the Field App instead; see the Field App guide.
The dashboard is available in German and English (each organization and user has a language). This guide quotes the German labels as the dashboard shows them, with the English label in brackets.
Contents:
Every organization starts with six roles. A member can hold several roles; their permissions add up.
| Role (German / English) | Typical person | Admin dashboard |
|---|---|---|
| "Inhaber" / Owner | Business owner | Everything, including SSO connection settings |
| "Administrator" / Admin | Office manager | Everything except deleting the organization and the Owner-only SSO settings |
| "Formulargestalter" / Designer | Builds forms | Forms, designs, workflows, reports; submissions of their own forms |
| "Prüfer" / Reviewer | Checks submissions | Review tasks, reports; submissions assigned to them or their group |
| "Außendienst" / Field Worker | Fills in forms | No access to the admin dashboard; uses the Field App |
| "Betrachter" / Viewer | Reads only | All submissions and reports, read-only |
An office coordinator who designs forms and reviews submissions gets Designer and Reviewer.
What each area needs:
| Area | Owner | Admin | Designer | Reviewer | Viewer |
|---|---|---|---|---|---|
| Organization settings, branding, email settings, mail log | yes | yes | – | – | – |
| Members, groups, roles, SSO page | yes | yes | – | – | – |
| SSO connection and security settings | yes | – | – | – | – |
| Forms, designs, versions, form access | yes | yes | yes | – | – |
| Workflows, webhook endpoints | yes | yes | yes | – | – |
| Submissions inbox | all | all | own forms | assigned or group | all |
| Approve / request changes, "Meine Aufgaben" | yes | yes | – | yes | – |
| Submission explorer, saved reports, exports | yes | yes | yes | yes | yes |
| Audit log; retention, legal holds, personal data of members | yes | yes | – | – | – |
| Own API tokens, "Meine Daten" ("My data") | yes | yes | yes | yes | yes |
Reports and exports only ever contain submissions the user may see. Owners and Admins can fill in every form in the Field App; everyone else needs a form access grant (see Forms).
You can create your own roles under "Team" → "Rollen" ("Roles"): give the role a name and tick its permissions ("Berechtigungen"). You can only grant permissions you hold yourself. The system roles cannot be renamed or deleted, and the Owner role cannot be changed.
Open the user menu (top right) → "Profil" ("Profile") to change your name, email address or password. A new email address must be confirmed from that address. Addresses managed by single sign-on cannot be changed here.
Two-factor authentication: in the profile, "Authenticator-App" → "Einrichten" ("Set up"), scan the code with an authenticator app and keep the recovery codes. The same code works for the admin dashboard and the Field App. "Wiederherstellungscodes neu generieren" ("Regenerate recovery codes") replaces the codes. Two-factor authentication is optional, except for the break-glass Owner of an organization that enforces SSO.
The dashboard signs you out after 30 minutes without activity, and 12 hours after you signed in at the latest (the operator can change both). The Field App keeps you signed in for 30 days.
Organization settings. The organization menu → "Organisationseinstellungen" ("Organization settings"): name, language and time zone. Scheduled workflows and report emails use this time zone.
Branding ("Formulare" → "Branding"): applies to PDFs and emails.
Several organizations. A person can belong to several organizations. The organization switcher at the top of the dashboard lists those where they have dashboard access. The first organization is created at the install (fieldset install --org …); further organizations can only be created through self-registration ("Organisation registrieren", "Register organization"). Self-registration is off on an instance installed with fieldset; on a 1.0 checkout install the operator can enable it (see the 1.0 configuration reference).
Invite a member. "Team" → "Mitglieder" ("Members") → "Mitglied einladen" ("Invite member"): email, name, roles (at least one) and groups. The invitation email contains a link that is valid for 7 days. Status values: "Eingeladen" ("Invited"), "Aktiv" ("Active"), "Deaktiviert" ("Deactivated").
Invite many members. "CSV importieren" ("Import CSV") checks the file first ("Prüfen", "Check") and then sends the invitations ("Einladungen senden"):
email and roles (required) and name, groups (optional);; or , as separator; several roles or groups in one cell separated by |;email;name;roles;groups
anna@example.com;Anna Schmidt;Außendienst;Montage Nord
ben@example.com;Ben Weber;Formulargestalter|Prüfer;Change a member. Edit the member to change roles, groups and the default group ("Standardgruppe"). You cannot change your own roles. Only an Owner can assign the Owner role.
Deactivate. "Deaktivieren" ("Deactivate") ends the member's sessions. If they have no other organization, their Field App installations delete their local data at the next contact. The last Owner cannot be deactivated. Members are never deleted; "Reaktivieren" ("Reactivate") restores access.
Lost device. "Geräte sperren" ("Revoke devices") signs out every Field App installation of that member. Each device deletes its local data at its next contact.
Groups ("Gruppen") are crews or departments. They decide who may fill in which form, who gets a review task and who is notified. The option "Mitglieder sehen gegenseitig ihre Einreichungen" ("Members see each other's submissions") lets group members see each other's submissions in the Field App.
"Formulare" → "Formulare" ("Forms") lists every form with its status ("Entwurf" draft, "Aktiv" active, "Archiviert" archived) and current version.
Row actions in the list: "Editor" (opens the form in the default builder, see below), "Klassischer Editor" ("Classic builder"), "Duplizieren" ("Duplicate"), "JSON exportieren" (the published version), "Auswerten" ("Explore", opens the submission explorer) and "Archivieren" / "Wiederherstellen" ("Archive" / "Restore"). Clicking a row also opens the default builder. Forms are not deleted.
Both builders edit the same draft; you can switch at any time.
New forms, the list, the search and the dashboard open the canvas builder. A form imported from a PDF opens in the classic builder as long as its "PDF-Importbericht" ("PDF import report") is shown, because only the classic builder shows the report.
Some things are in the classic builder only: form access ("Wer darf dieses Formular ausfüllen": tick the groups and roles that may fill in the form), the "Versionen" ("Versions") tab with compare and rollback, the PDF import report, and the form's audit history ("Verlauf").
If the draft was changed in another tab or by a colleague, the builder says so and offers to reload.
Each element has a "Logik" ("Logic") section: "Nur anzeigen, wenn" ("Show only if"), "Pflichtfeld, wenn" ("Required if") and "Schreibgeschützt, wenn" ("Read-only if"). Build conditions from rules such as "ist gleich" ("equals"), "ist leer" ("is empty"), "größer als" ("greater than") or "ist angekreuzt" ("is checked"), combined with AND/OR. "Erweitert (JsonLogic)" accepts a raw expression.
Calculated fields offer guided types ("Berechnungsart"): the sum of a column in a list, multiplying, adding or subtracting fields, a percentage of a field, or JsonLogic. Money is calculated exactly, without rounding errors, and the Field App shows the same result as the PDF.
"Formulareinstellungen" ("Form settings"):
SR-{YYYY}-{SEQ:5}. Tokens: {YYYY}, {YY}, {MM} and {SEQ:n} (a counter with n digits). Without a format, numbers look like 000042. "Nummerierung neu beginnen" ("Restart numbering"): never, every year or every month. Numbers are assigned by the server when a submission arrives, so they are unique and without gaps.The "Versionen" ("Versions") tab of the classic builder lists every published version with author, date and change note:
Publishing never changes existing submissions or their PDFs. Every submission keeps the form version it was filled with.
"Formulare" → "Designs" controls how PDFs look. Each organization can have several designs; one is the default ("Als Standard festlegen", "Make default").
Settings:
{{org.name}}, {{submission.number}}, {{submission.date}}, {{page}} and {{pages}}, and an option to show the logo in the header."PDF-Vorschau" previews the design; "Veröffentlichen" publishes a new design version with a note. Designs have versions like forms: compare, roll back and retire. A PDF that is created again later uses the design version of its submission, so old documents keep their look.
Inbox. "Einreichungen" ("Submissions") lists submissions you may see, filtered by status, form, person and date. Drafts are hidden by default.
Open a submission to see:
Actions:
Submissions are never edited or deleted in the dashboard. A workflow step can set them to "Storniert" ("Void").
"Meine Aufgaben" ("My tasks") lists your open review tasks with their due date; overdue tasks are marked "Überfällig". Approve or request changes directly from the list. Reviewers can also decide in the Field App.
When you request changes, the field worker is notified, edits the submission and resubmits it. The document number stays the same.
"Automatisierung" → "Workflows" automates what happens after a submission. A workflow has a trigger ("Auslöser"), optional conditions and ordered steps.
Triggers:
Limit a workflow to some forms with "Nur für diese Formulare" and add JsonLogic conditions with "Bedingungen (JsonLogic)".
Steps:
A typical setup: trigger "Einreichung abgeschickt" → "Prüfung anfordern" (group Office) → "E-Mail senden" to the customer address field with the PDF attached. If no workflow requests a review or sets the status, a submission is completed right after it is submitted.
Runs. The "Ausführungen" ("Runs") tab shows each run with a step timeline ("Verlauf"). Failed steps are retried automatically; if they still fail, admins are notified and "Erneut versuchen" ("Retry") continues the run at the failed step. A trigger never starts the same workflow twice for the same event, so customers do not get duplicate emails. Workflows with runs cannot be deleted; deactivate them instead.
Webhook endpoints. "Webhook-Endpunkte" ("Webhook endpoints"): name, URL, signing secret ("Signatur-Geheimnis") and active flag. Leave the secret empty to have one generated; it is shown once. The target must be a public HTTPS or HTTP address; private and internal addresses are refused. How receivers verify the signature: API and integrations.
The bell in the dashboard shows in-app notifications. User menu → "Benachrichtigungen" ("Notifications") sets, per event, whether you get them in the app ("In der App") and by email ("E-Mail"):
The settings apply in all your organizations.
Submission explorer. "Auswertung" → "Einreichungen auswerten" ("Submission explorer"): choose a form ("Formular wählen") to get one column per field across all its versions. The first six field columns are visible; switch on more as needed. Filter by date, status, person, group and field values. The search box matches the whole term as typed, in the number, the submitter or any value. While a search is active, the list shows no total and "select all" selects the rows on the current page; "Export filtered rows" still exports every match.
Exports. "Exportieren" ("Export"): all filtered rows as Excel (XLSX; list rows go to a second sheet), as CSV, or all PDFs as a ZIP. You can also export selected rows. Exports run in the background and notify you when ready. Downloads are kept for 7 days. Limits: 50,000 rows per export, 10,000 selected rows, and two exports in progress per person.
Saved reports. "Als Bericht speichern" ("Save as report") in the explorer, or "Gespeicherte Berichte" ("Saved reports"):
The report page shows a chart and a table, offers "CSV herunterladen" ("Download CSV") and "An Dashboard anheften" ("Pin to dashboard").
Dashboard. The start page shows widgets for your role, for a date range (the last 7 days by default):
Figures are cached for about a minute.
"E-Mail-Einstellungen" ("Mail settings"), Owner and Admin:
"E-Mail-Protokoll" ("Mail log") lists every email with recipient, subject, status, attempts and times. Failed mails show the error; "Erneut senden" ("Send again") retries them.
PDFs up to 10 MB are attached; larger ones are sent as a link that expires after 14 days (the operator can change both).
While the instance captures mail (a new instance does until its operator sets up delivery), a banner "E-Mail-Abfangmodus" ("Mail capture") sits at the top of every page of the admin dashboard. It cannot be dismissed. It comes in two variants:
Platform operators see the command that sets up delivery on the server ("E-Mail-Versand auf dem Server einrichten:", "Set up mail delivery on the server:"), fieldset config set mail smtp --smtp-host <host> --smtp-username <user> --from-address <address> --password-stdin (see configuration); everyone else reads "Bitten Sie den Betreiber der Instanz, den E-Mail-Versand einzurichten." ("Ask your instance owner to set up mail delivery."). The banner disappears once the instance delivers mail.
With SSO, members sign in through your company's identity provider, for example Microsoft Entra ID, Google Workspace, Keycloak, Authentik or Zitadel (OpenID Connect), or any SAML 2.0 provider. Open "Team" → "Single Sign-on". Owners and Admins can open the page; only an Owner can set up the connection and change its security settings. Each organization has one identity provider.
Choose the protocol ("Protokoll"):
OpenID Connect. Pick the provider ("Anbieter"):
Then the client ID, the client secret ("Client-Geheimnis"; stored encrypted and never shown again; leave it empty to keep it), scopes and the groups claim ("Gruppen-Claim", default groups). Register this redirect URI at the provider: https://<your server>/auth/sso/<provider id>/callback.
SAML 2.0. Enter the identity provider's metadata URL (HTTPS) or paste its metadata XML. Choose the NameID format (persistent is recommended; other formats need a stable subject attribute) and the email, name and groups attributes. Give the provider:
https://<your server>/auth/sso/<provider id>/saml/acs (HTTP-POST);https://<your server>/auth/sso/<provider id>/saml/metadata.Assertions must be signed.
The page shows these addresses ready to copy, even before the first save; they do not change later.
Under "Domains" add each email domain ("Domain hinzufügen"), for example example.com. Subdomains are added separately. "DNS-Eintrag" ("DNS record") shows the TXT record to create at your DNS provider:
| Name (host) | Type | Value |
|---|---|---|
_fieldset-verification.example.com | TXT | fieldset-verification=<token> |
Some DNS providers add the domain themselves; then enter only _fieldset-verification as the name. Click "Verifizieren" ("Verify") once the record is published. Only one organization can verify a domain. The server checks verified domains daily; after three failed checks in a row the domain loses its verification and admins are notified.
Once a domain is verified, everyone who enters an address at that domain on a login page is offered your identity provider.
form-designers, to a role or a group. Mappings are applied at every sign-in. The identity provider can never grant the Owner role."Anmeldung testen" ("Test sign-in") opens a sign-in at the provider in a new tab and reports the result on the SSO page: the email address, the groups received, or the reason for a failure. It does not sign you in. A successful test activates the provider (status "Aktiv").
"Erzwingung" ("Enforcement") → "Single Sign-on erzwingen" turns off password sign-in and password reset for all addresses at your verified domains. The page lists the preconditions:
The break-glass Owner keeps password and two-factor sign-in for emergencies, for example when the identity provider is down. Each use is recorded in the audit log. Turning enforcement on ends the password sessions of the affected members. Only an Owner can turn it off.
The server checks the provider hourly. If the provider or a domain stops working, the status shows "Fehler" ("Error") with the last error, and administrators get the notification "Single Sign-on erfordert Ihre Aufmerksamkeit" ("Single sign-on needs your attention"), at most every 6 hours per problem. Changing the connection resets the status to draft (test again) and alerts the other Owners. Signing out of the app does not sign you out of the identity provider.
See Troubleshooting for common errors.
Other systems (an ERP, a BI tool, a script) can use the REST API with a personal token. Open "Team" → "API-Tokens" ("API tokens"):
A token works only in this organization and never allows more than your own role. Everyone with dashboard access manages their own tokens; Owners and Admins also see and can revoke the tokens of all members. Deactivating a member deletes their tokens for the organization. Creating and revoking a token and its first use are recorded in the audit log. Details for developers: API and integrations.
"Compliance" → "Audit-Log" ("Audit log") shows what happened in your organization: when, who ("Ausgeführt von", a member, "System" or an API token), what ("Ereignis", "Event") and to which record ("Objekt", "Subject"), with the IP address. Owners and Admins can open it; for a custom role, tick the permission "Audit-Log". Nobody can change or delete entries: the dashboard has no such action, and the database refuses it.
What is recorded, for example:
[redacted];impersonator).Filter by "Ausgeführt von", "Ereignis", "Objekttyp" ("Subject type") and a date range ("Von", "Bis", in your time zone). Open an entry to see all details: the changes, the user agent, the request ID and its position in the hash chain ("Hash-Kette").
Export. "CSV exportieren" ("Export CSV") exports the filtered entries. Up to 2,000 entries download at once; larger exports run in the background, and a notification brings the download link, which works for 7 days. Each export is itself recorded.
History on records. The pages of a form (classic builder), a submission, a workflow, the members page and the SSO page end with a "Verlauf" ("History") table: the audit entries of that record and its parts, for example a form's versions or a submission's emails.
Retention. Entries older than 365 days are deleted every night; the operator can change the period (AUDIT_RETENTION_DAYS, at least 30 days). Entries are never deleted earlier.
Tamper evidence. Every entry is sealed into a hash chain of your organization: each entry's fingerprint includes the one before. The operator's check (audit:verify) finds entries that were changed or removed by anyone who cannot rewrite the whole table. Someone with full access to the database could recompute the chain; the operator detects that by comparing it with copies of the chain's latest fingerprints kept outside the database. Restores, rollbacks and resets start a new epoch of the chain instead of breaking it; see chain epochs (1.0 checkout installs: protect the audit log).
The pages under "Compliance" help you meet data protection rules (GDPR): delete or anonymize old submissions, keep records that must be kept, and answer requests for personal data.
"Compliance" → "Aufbewahrung" ("Retention"), Owners and Admins. The list shows each form's retention ("Unbegrenzt aufbewahren", "Keep indefinitely", until you set one) and whether it is under legal hold. "Aufbewahrung" on a form:
A job runs every night and applies the retention. Each deleted or anonymized submission is recorded in the audit log.
After anonymization the submission stays in the inbox and in reports with its kept values. Its PDF cannot be opened any more: the page shows "Die PDF-Dateien wurden bei der Anonymisierung dieser Einreichung gelöscht." ("The PDF files were deleted when this submission was anonymized."). Field App devices may keep a copy until their next sync.
A legal hold keeps submissions that must not be deleted, for example invoices, which German law requires you to keep for years. While a hold is active, the retention job leaves the held submissions alone.
"Aufheben" ("Release") ends a hold; from the next night the retention applies again. Released holds stay as history; the list shows active holds until you change the filter "Aktiv" ("Active"). Placing and releasing holds are recorded in the audit log. The minimum period is a setting, not legal advice: check which periods apply to you.
"Compliance" → "Personenbezogene Daten" ("Personal data"), Owners and Admins:
Erasing is refused for your own account (use "Meine Daten"), for an account that also belongs to another organization (the person deletes it themselves), for the last Owner, and for an Owner unless you are an Owner.
Field workers have no access to the dashboard. When they ask for their data or want their account deleted, an Owner or Admin uses this page.
"Compliance" → "Meine Daten" ("My data"), for everyone with dashboard access:
This section is for the people who run the server. The owner named at the install is an operator; fieldset config set operator-email <email> adds one (configuration). On a 1.0 checkout install operators get the role with php artisan app:platform-admin <email> (1.0 install guide). They sign in at /platform/login, separately from /admin; a sign-in through an organization's single sign-on never opens /platform. Two-factor authentication is required, and the sign-in lasts at most 12 hours (PLATFORM_SESSION_HOURS).
fieldset): problems first (a failed or stale backup, low disk space, an available update, backups held only on this host), each with the fieldset command to run on the server; then version and image digests, mode and URL, mail delivery with the catcher link, the backup schedule and last result, disk usage and, when the update check is on (fieldset config set update-check on), whether a newer release exists. Operators also get one e-mail per failed or stale backup./platform; after 30 minutes (PLATFORM_IMPERSONATION_MINUTES) it ends by itself. Start and end appear in the organization's audit log with the operator and the reason, and every entry written meanwhile records the operator (impersonator). No API token can be created while impersonating.