|
|
||
|---|---|---|
| .gitea/workflows | ||
| appinfo | ||
| css | ||
| docs | ||
| img | ||
| js | ||
| l10n | ||
| lib | ||
| screenshots | ||
| src | ||
| templates | ||
| .gitignore | ||
| .gitignore-github | ||
| CHANGELOG.md | ||
| formvox.tar.gz | ||
| LICENSE | ||
| package-lock.json | ||
| package.json | ||
| README.md | ||
| RELEASE_CHECKLIST.md | ||
| webpack.config.js | ||
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.
Screenshots
| Create Form | Edit Form | View Results |
|---|---|---|
![]() |
![]() |
![]() |
Languages
FormVox is available in:
- 🇬🇧 English
- 🇳🇱 Nederlands (Dutch)
- 🇩🇪 Deutsch (German)
- 🇫🇷 Français (French)
Features
Question Types
Advanced Features
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)
- Go to Apps in your Nextcloud instance
- Search for "FormVox"
- Click Download and enable
Manual Installation
- Download the latest release from the releases page
- Extract to your Nextcloud apps directory:
cd /var/www/nextcloud/apps tar -xzf formvox-x.y.z.tar.gz - Set correct permissions:
sudo chown -R www-data:www-data formvox - 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 buildnpm 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
preferencestable 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

















