Skip to content

nextcloud/formvox

Repository files navigation

FormVox

A file-based forms and polls app for Nextcloud. All form data is stored as .fvform files in your Nextcloud file system - no database tables required.

FormVox Homepage

Screenshots

Create Form Edit Form View Results
New form Edit form Results

Languages

FormVox is available in:

  • 🇬🇧 English
  • 🇳🇱 Nederlands (Dutch)
  • 🇩🇪 Deutsch (German)
  • 🇫🇷 Français (French)

Features

Question Types

Type Description Preview
Text Single line text input Text
Email Email input with validation Email
Textarea Multi-line text Multi-line
Single Choice Radio buttons Single choice
Multiple Choice Checkboxes Multiple choice
Dropdown Dropdown menu Dropdown
Date Date picker Date
DateTime Date and time picker DateTime
Time Time picker Time
Linear Scale Scale (e.g., 1-10) Scale
Star Rating 1-5 stars Rating
Matrix Grid/table questions Matrix

Advanced Features

Feature Description Preview
Conditional Logic Show/hide questions based on answers Conditional
Quiz Mode Assign scores and show results Quiz
Multi-page Forms Split long forms into pages
Piping Reference answers using {{question_id}}
Public Links Share with anonymous users
Login Required Require Nextcloud login
Duplicate Prevention Fingerprint-based detection
Export CSV, JSON, Excel export

Homepage

  • Template Gallery - Quick access to create forms from colorful template cards
  • Tabs Navigation - Switch between "Recent" and "My forms" views
  • Form Cards - Visual cards with colored headers based on template type
  • Collapsible Templates - Hide/show template gallery with state persistence

Templates

  • Blank Form
  • Poll
  • Survey
  • Registration
  • Demo Form (showcases all features)

Admin Settings

  • Branding - Customize app appearance
  • Statistics - View total forms, responses, and active users
  • Telemetry - Optional anonymous usage statistics (opt-out available)

Requirements

  • Nextcloud 28 - 32
  • PHP 8.1+

Installation

From Nextcloud App Store (Recommended)

  1. Go to Apps in your Nextcloud instance
  2. Search for "FormVox"
  3. Click Download and enable

Manual Installation

  1. Download the latest release from the releases page
  2. Extract to your Nextcloud apps directory:
    cd /var/www/nextcloud/apps
    tar -xzf formvox-x.y.z.tar.gz
  3. Set correct permissions:
    sudo chown -R www-data:www-data formvox
  4. Enable the app:
    sudo -u www-data php /var/www/nextcloud/occ app:enable formvox

Development

Requirements

  • PHP 8.1+
  • Node.js 18+
  • npm

Setup

cd formvox
npm install
npm run build

Build Commands

  • npm run build - Production build
  • npm run watch - Development build with watch mode

File Format

FormVox stores all data in .fvform files (JSON format):

{
  "version": "1.0",
  "id": "uuid",
  "title": "Form Title",
  "description": "Form description",
  "created_at": "2024-01-01T00:00:00+00:00",
  "modified_at": "2024-01-01T00:00:00+00:00",
  "settings": {
    "anonymous": true,
    "allow_multiple": false,
    "expires_at": null,
    "show_results": "after_submit",
    "require_login": false
  },
  "questions": [...],
  "pages": null,
  "responses": [...]
}

API Routes

Authenticated Routes

Method Route Description
GET /api/forms List all forms
POST /api/forms Create new form
GET /api/form/{fileId} Get form details
PUT /api/form/{fileId} Update form
DELETE /api/form/{fileId} Delete form
POST /api/form/{fileId}/respond Submit response
GET /api/form/{fileId}/export/csv Export to CSV
GET /api/form/{fileId}/export/json Export to JSON

Public Routes

Method Route Description
GET /public/{token} View public form
POST /public/{token}/submit Submit response
GET /public/{token}/results View results (if enabled)

Technical Details

Concurrent Response Handling

FormVox is designed to handle multiple simultaneous form submissions without data loss. When multiple users submit responses at the same time, a database-based locking mechanism ensures all responses are saved correctly.

How it works:

  • Uses database locks via the preferences table with unique constraints
  • Implements retry mechanism with exponential backoff (30 retries, 100ms base delay)
  • Uses Nextcloud's File API (putContent) to ensure proper cache synchronization

Performance:

Concurrent Requests Success Rate
20 simultaneous 100%
50 simultaneous 80%

For typical usage scenarios (users submitting forms seconds apart), all responses are guaranteed to be saved.

Rate Limiting

Public form submissions are rate-limited to 100 requests per hour per IP address to prevent abuse.

Privacy

FormVox includes optional anonymous telemetry to help improve the app. This can be disabled in Admin Settings.

What we collect (when enabled):

  • Number of forms and responses
  • Number of active users
  • FormVox, Nextcloud, and PHP version numbers
  • A unique hash of your instance URL (privacy-friendly identifier)

What we never collect:

  • Form content or titles
  • Response data or answers
  • User names or email addresses
  • Your actual server URL

License

AGPL-3.0 - See LICENSE for details.

Links

Authors

Developed by Sam Ditmeijer & Rik Dekker

About

No description, website, or topics provided.

Resources

License

Contributing

Security policy

Stars

Watchers

Forks

Packages

No packages published

Contributors 3

  •  
  •  
  •