digitalisstudios / slick-forms
A comprehensive Laravel package for building dynamic forms with an intuitive drag-and-drop interface, conditional logic, and 32 field types including searchable selects, drag-drop file uploads, and password strength indicators
Installs: 1
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 0
Open Issues: 0
pkg:composer/digitalisstudios/slick-forms
Requires
- php: ^8.2
- hashids/hashids: ^5.0
- livewire/livewire: ^3.0
- simplesoftwareio/simple-qrcode: ^4.2
Requires (Dev)
- orchestra/testbench: ^9.0
- phpunit/phpunit: ^11.0
Suggests
- barryvdh/laravel-dompdf: Required for PDF export functionality (^3.1)
- illuminate/support: Laravel framework support package (^11.0|^12.0)
- maatwebsite/excel: Required for CSV and Excel export functionality (^3.1)
README
Build production-ready Laravel forms without writing frontend code
A comprehensive Laravel package featuring a visual drag-and-drop form builder, 32 premium field types, advanced conditional logic, and a schema-driven architecture that makes extending effortless.
Drag-and-drop interface: field palette, canvas, and schema-driven properties panel, fully functional out of the box
What Makes Slick Forms Badass?
โจ Zero Frontend Code Required
Build complex, production-ready forms through a visual interface. No Vue, React, or HTML knowledge needed. Pure Laravel and Livewire magic.
๐ฆ Self Contained
Although we integrate best-in-class libraries (Tom Select, Flatpickr, Quill, Ace Editor), you don't need to install them as dependencies. The entire package works right out of the box on any Laravel project that uses Livewire - zero configuration required.
๐งฉ 32 Premium Field Types
Integrated with best-in-class libraries:
- Tom Select v2.3.1 - Searchable, keyboard-navigable dropdowns
- Flatpickr v4.6.13 - Powerful date/time pickers with multiple formats
- Quill v1.3.6 - Rich WYSIWYG editor for paragraph content
- Ace Editor v1.32.2 - Code editor with syntax highlighting
- Signature Pad v4.1.7 ๐ - Canvas-based signature capture
- Leaflet v1.9.4 ๐ - Interactive maps with location picking
- Plus: Password strength indicators, phone fields with country codes, dual-range sliders, rating matrices, and more
What Makes It Badass-er
๐จ Advanced Conditional Logic
- Visual Field Picker - Eyedropper tool to select target fields
- 91 Operator Mappings - Field-type specific operators (text contains, number greater than, date after, etc.)
- AND/OR Logic - Build complex conditional rules
- Real-time Evaluation - Instant show/hide with Livewire
๐ Built-in Analytics & Reporting
- Form Performance Tracking - Views, starts, completions, conversion rates
- Field-Level Analytics - Completion rates, drop-off points
- Device & Browser Breakdown - User agent tracking
- Validation Error Analysis - Most common validation failures
- Time-Based Metrics - Average completion time, submissions over time
- Visual Dashboards - Chart.js integration for data visualization
๐ฑ Bootstrap 5 Grid System
- 6 Responsive Breakpoints - xs, sm, md, lg, xl, xxl
- Advanced Components - Cards, tabs, accordions with full customization
- Layout Elements - Containers, rows, columns with offsets and ordering
- Table Layout - Grid-based structured data display
๐ Three Integration Methods
Choose the approach that fits your workflow:
- Built-in Routes - Ready-to-use form management UI at
/slick-forms/*(can be overridden) - Livewire Components - Embed
<livewire:slick-forms::form-builder />anywhere - Programmatic API - Build forms via Eloquent models
๐ What's New in V2
Slick Forms V2 brings enterprise-grade features for advanced form workflows:
๐ง Email Notifications
- Custom Templates - Design email notifications with Blade templates
- Conditional Sending - Send emails based on form data (e.g., only for VIP customers)
- Variable Substitution - Insert form values into subject/body with
{field_name}syntax - Delivery Tracking - Log all sent emails with timestamps and status
- Multiple Recipients - CC/BCC support with dynamic recipient lists
๐ Webhook Integrations
- Real-time POST - Send form submissions to external APIs instantly
- Custom Headers - Add authentication tokens, API keys, etc.
- Payload Transformation - Map form fields to API structure
- Retry Logic - Automatic retries with exponential backoff
- Event Logging - Track webhook success/failure with detailed logs
- Note: Webhook payloads contain numeric IDs for database lookups, while public-facing URLs use hashids for privacy
๐ Advanced Security & Spam Protection
- Honeypot Fields - Invisible spam traps that catch bots
- Rate Limiting - Prevent abuse with IP-based throttling (configurable per form)
- CAPTCHA Integration - Support for Google reCAPTCHA v2/v3 and hCaptcha
- Spam Log Analysis - Dashboard showing blocked attempts with IP tracking
- IP Blacklisting - Automatically block repeat offenders
๐ Secure Hashid URLs
All forms use short, non-sequential hashid URLs:
- Format -
/form/x9kL2p(short, shareable, privacy-friendly) - Custom Salt - Per-form salt option for additional obfuscation
- Signed URLs - Add signatures for time-limited, one-time access
- Pre-fill Support - Hashid URLs work with pre-filled form data
Hashid URLs hide sequential IDs while remaining compact and shareable. Optional signed URLs add expiration and usage limits - perfect for private forms or surveys.
๐๏ธ Model Binding
Populate forms from existing database records and save back on submit:
- Auto-populate - Fill form fields from Eloquent models
- Two-way Binding - Create new records or update existing ones
- Dot Notation - Map nested relationships like
user.profile.bio - Field Transformers - Apply custom logic before save (e.g., encrypt sensitive data)
- Conditional Updates - Only update if user has permission
Perfect for edit profiles, update account settings, or any CRUD operation.
๐ก Dynamic Options (Cascading Dropdowns)
Load select options from external sources:
- API Integration - Fetch options from REST endpoints
- Database Queries - Load from Eloquent models with scopes/filters
- Cascading Logic - Child dropdown options based on parent selection
- Caching - Configurable TTL to reduce API calls
- Placeholder Support - Replace
{parent}in URLs for cascading
Example: Country โ State โ City dropdowns with real-time updates.
๐ Success Screen Customization
Control what happens after form submission:
- Custom Messages - Display personalized thank you messages with variable substitution
- Conditional Redirects - Route users to different pages based on their answers
- Show Submission Data - Display submitted values with selective field hiding (e.g., hide passwords)
- Download Buttons - Offer PDF/CSV downloads of submission data
- Edit Links - Allow users to edit their submission after submit
- Message Then Redirect - Show a message for X seconds, then auto-redirect
- Variable Replacement - Use
{{field_name}}and{{submission.id}}in messages/URLs
Perfect for confirmation pages, payment success screens, or multi-step workflows.
๐จ Enhanced Field Types
Three powerful new field types for advanced use cases:
- Signature Pad - Canvas-based signature capture with configurable pen colors and canvas size
- Location Picker - Interactive maps powered by OpenStreetMap with search, click-to-place, and drag markers
- Rating Matrix - Multi-item rating surveys (rate 5 products on same scale) with radio or dropdown input
๐ Form Versioning
Track changes and rollback when needed:
- Version Snapshots - Save complete form state (fields, layout, pages, settings)
- Version History - View all versions with timestamps and change summaries
- One-Click Rollback - Restore any previous version with full data integrity
- Nested Element Support - Properly handles complex layout hierarchies
- Version Comparison - See what changed between any two versions
- Submission Tracking - Know which version collected each submission
Perfect for maintaining audit trails, testing changes safely, or reverting breaking updates.
Quick Start
Get your first form running in under 2 minutes:
# Install the package composer require digitalisstudios/slick-forms # Run the interactive installation wizard php artisan slick-forms:install # The wizard will: # - Install core tables (forms, fields, submissions) # - Let you choose which features to enable (analytics, webhooks, email notifications, etc.) # - Update your config file automatically # (Optional) Seed with demo forms, templates, and fake analytics php artisan db:seed --class=DigitalisStudios\\SlickForms\\Database\\Seeders\\DemoFormsWithAnalyticsSeeder # Or just seed the templates without demo data php artisan db:seed --class=DigitalisStudios\\SlickForms\\Database\\Seeders\\FormTemplatesSeeder # Visit the builder open http://your-app.test/slick-forms/manage
That's it! Start building forms immediately.
Note: Slick Forms v2.1+ uses an opt-in architecture. Only the features you select will have their database tables created. You can enable/disable features anytime by re-running
php artisan slick-forms:install.
Key Features
| Feature | Description | Learn More |
|---|---|---|
| Visual Form Builder | Drag-and-drop interface with real-time preview | Built-in |
| 32 Field Types | Text, email, select, date, signatures, maps, rating matrices, and more | Field Types Reference |
| Conditional Logic | Show/hide fields with visual picker and 91 operators | Conditional Logic Guide |
| Advanced Layouts | Bootstrap 5 grid with containers, rows, columns, cards, tabs | Bootstrap Docs |
| Multi-Page Forms | Wizard-style forms with progress tracking | Multi-Page Forms Guide |
| Form Analytics | Track submissions, conversions, drop-offs, devices | Analytics Guide |
| Calculation Fields | Auto-calculate values with formulas (SUM, AVG, etc.) | Calculation Fields Guide |
| Repeater Fields | Dynamic field groups users can add/remove | Repeater Fields Guide |
| Input Masks | Format as you type (phone, SSN, credit card) | Input Masks Guide |
| Email Notifications ๐ | Send custom emails on submission with templates | Email Notifications Guide |
| Webhook Integrations ๐ | POST submissions to external APIs with retry logic | Webhooks Guide |
| Spam Protection ๐ | Honeypot, rate limiting, CAPTCHA, IP blacklisting | Spam Protection Guide |
| Hashid URLs ๐ | Short, non-sequential URLs with optional signatures | QR Codes & URLs Guide |
| Model Binding ๐ | Populate forms from database, save back to models | Schema Reference |
| Dynamic Options ๐ | Cascading dropdowns from APIs or database queries | Field Types Reference |
| Success Screen ๐ | Custom messages, redirects, downloads, edit links | Success Screens Guide |
| Signature Pad ๐ | Canvas-based signature capture with pen customization | Field Types Reference ยท Schema |
| Location Picker ๐ | Interactive maps with search and marker placement | Field Types Reference ยท Schema |
| Rating Matrix ๐ | Multi-item rating surveys on same scale | Field Types Reference ยท Schema |
| Form Versioning ๐ | Snapshot, rollback, compare versions, track changes | Form Versioning Guide |
| Form Templates | 5 pre-built professional templates | Templates Guide |
| Export Submissions | CSV, Excel, PDF export | Exports Guide |
| Form Submissions | Track, view, and manage submissions with timestamps | Built-in viewer |
| Extensibility | Create custom field types in minutes with BaseFieldType | Custom Field Types |
| Production Ready | XSS prevention, CSRF protection, server-side validation | Secure by design |
Installation
Requirements
- PHP 8.2 or higher
- Laravel 11.0 or 12.0
- Livewire 3.0
- Bootstrap 5 (for styling)
- Bootstrap Icons (for field type icons)
Install via Composer
composer require digitalisstudios/slick-forms
Run Installation Wizard
php artisan slick-forms:install
The interactive wizard will guide you through:
- Core Tables Installation - Always installed (forms, fields, submissions, analytics sessions/events)
- Feature Selection - Choose which features to enable:
- ๐ Analytics (tracking, dashboards, conversion funnels)
- ๐ง Email Notifications (custom templates, conditional sending)
- ๐ Webhooks (POST to external APIs with retry logic)
- ๐ Spam Protection Logs (honeypot, rate limiting, CAPTCHA tracking)
- ๐ Form Versioning (snapshots, rollback, history)
- ๐ค Exports (CSV, Excel, PDF)
- Config Updates - Automatically updates
config/slick-forms.phpwith your selections
Re-running the wizard lets you enable/disable features without losing data. Disabled features keep their tables but stop functioning.
Alternative: Manual Migration
# Run all migrations at once (installs ALL features)
php artisan migrate
This creates all 18 tables regardless of feature usage. Use the wizard for a leaner installation.
Publish Configuration (Optional)
# Publish config file php artisan vendor:publish --tag=slick-forms-config # Publish views for customization php artisan vendor:publish --tag=slick-forms-views
Seed Demo Forms (Optional)
# Seed with demo forms, templates, submissions, and analytics php artisan db:seed --class=DigitalisStudios\\SlickForms\\Database\\Seeders\\DemoFormsWithAnalyticsSeeder
This creates a complete demo environment:
- 10 Template Forms - Contact, Lead Capture, Registration, Job Application, Event Registration, Survey, Product Order, Support Ticket, Newsletter, Booking
- 10 Working Forms - Duplicates of templates ready for use
- 187 Submissions - Realistic test data across all forms
- 342 Analytics Sessions - User tracking with device/browser data
- 4,210 Analytics Events - Views, starts, interactions, validations
Alternatively, seed just templates without demo data:
php artisan db:seed --class=DigitalisStudios\\SlickForms\\Database\\Seeders\\FormTemplatesSeeder
Optional: Export Functionality
Slick Forms supports exporting submissions to CSV, Excel, and PDF formats. These features require optional packages:
# Install export packages
composer require maatwebsite/excel barryvdh/laravel-dompdf
What happens without these packages?
- Export buttons are automatically hidden from the submission viewer
- The package remains fully functional for form building and submission management
- Users see a helpful message explaining how to enable exports
When to install:
- You need to export submission data for analysis
- Clients require downloadable reports
- You want CSV/Excel integration with external tools
Usage Patterns
Choose the integration method that fits your needs:
Option 1: Built-in Routes (Recommended for Quick Start)
Perfect for admins who need a turnkey form management system.
GET /slick-forms/manage - List all forms
GET /slick-forms/manage/create - Create new form
GET /slick-forms/builder/{form} - Build form fields
GET /slick-forms/form/{form} - Display form to users
GET /slick-forms/submissions/{form} - View submissions
When to use: You want a standalone form builder without custom integration.
Option 2: Livewire Components (For Custom Pages)
Embed form builder, renderer, or submission viewer in your existing Livewire/Blade views.
{{-- Form Builder --}} <livewire:slick-forms::form-builder :form-id="1" /> {{-- Form Renderer --}} <livewire:slick-forms::form-renderer :form-id="1" /> {{-- Submission Viewer --}} <livewire:slick-forms::submission-viewer :form-id="1" />
When to use: You need forms embedded in existing application pages.
Option 3: Programmatic API (For Developers)
Create and manage forms entirely via code.
use DigitalisStudios\SlickForms\Models\CustomForm; // Create a form $form = CustomForm::create([ 'name' => 'Lead Capture Form', 'description' => 'Collect leads from landing page', 'is_active' => true, ]); // Add fields $form->fields()->create([ 'field_type' => 'email', 'label' => 'Email Address', 'name' => 'email', 'is_required' => true, 'order' => 1, ]); // Retrieve submissions $submissions = $form->submissions() ->with('fieldValues') ->latest() ->get(); foreach ($submissions as $submission) { // Process submission data $email = $submission->fieldValues ->where('field.name', 'email') ->first()->value; }
When to use: You need programmatic form creation or headless usage.
Learn more: Working with Submissions
Field Types Overview
Slick Forms includes 32 field types organized by category:
| Category | Fields | Key Features |
|---|---|---|
| Input | Text, Email, Number, Password, Phone, URL | Password strength indicator, phone country codes |
| Selection | Select, Radio, Checkbox, Switch, Tags | Tom Select searchable dropdowns |
| Date/Time | Date, Time, Date Range | Flatpickr with multiple formats, inline calendar |
| Files | File, Image, Video | Drag-and-drop upload, image previews |
| Interactive | Star Rating, Slider, Range, Color Picker | Dual sliders, color palette |
| Content | Header, Paragraph, Code | Quill WYSIWYG, Ace Editor syntax highlighting |
| Advanced | Calculation, Repeater, Hidden, Table | Formula evaluation, dynamic rows |
โ Full details with examples: Field Types Reference
Documentation
Getting Started
- Installation & Setup - (see above)
- Building Your First Form - Use the Quick Start guide
- Real-World Examples - 10 production-ready form examples
- Field Types Reference - Complete catalog of all 32 field types
Advanced Features
- Conditional Logic - Visual picker, operators, AND/OR logic
- Schema Reference - Complete schema configuration guide
- Events Reference - All 15 events with usage examples
- Jobs Reference - Queue jobs and configuration
V2 Features
- Form Versioning - Version tracking, comparison, and restoration
- Success Screens - Custom success messages and redirects
- QR Codes - Generate QR codes for form URLs
- Webhooks - Real-time integration with external services
- Email Notifications - Automated email templates and delivery
- Spam Protection - Honeypot, rate limiting, and CAPTCHA
Component & Configuration Reference
- Livewire Components - Complete reference for all 10 components
- Configuration Guide - Full configuration reference with all V2 settings
Extending Slick Forms
- Custom Field Types - Create your own field types with BaseFieldType
- Custom Layout Elements - Build custom layout components
- Migration Guide - Upgrade to schema-driven properties
External Resources
- Bootstrap 5 Documentation - Layout system, components, utilities
- Livewire 3 Documentation - Reactive components, forms, validation
- Laravel Validation - Available validation rules
Configuration
Slick Forms includes comprehensive configuration options for routes, field types, uploads, email notifications, spam protection, webhooks, and more.
Quick Configuration
Basic configuration options (config/slick-forms.php):
return [ // Enable/disable package routes 'load_routes' => true, // Layout to extend for full-page views 'layout' => 'layouts.app', // File upload settings 'uploads' => [ 'disk' => 'public', 'max_size' => 10240, // KB ], // Enable conditional logic 'conditional_logic_enabled' => true, // V2: Email notifications 'email' => [ 'enabled' => true, 'queue' => true, ], // V2: Spam protection 'spam' => [ 'honeypot' => ['enabled' => true], 'rate_limiting' => ['enabled' => true], ], // V2: Webhooks 'webhooks' => [ 'enabled' => true, 'queue' => true, ], ];
Environment Variables
# Core SLICK_FORMS_LOAD_ROUTES=true SLICK_FORMS_LAYOUT=layouts.app SLICK_FORMS_UPLOAD_DISK=public # Email Notifications (V2) SLICK_FORMS_EMAIL_ENABLED=true SLICK_FORMS_EMAIL_QUEUE=true MAIL_MAILER=smtp MAIL_HOST=smtp.mailtrap.io # Spam Protection (V2) SLICK_FORMS_HONEYPOT_ENABLED=true SLICK_FORMS_RATE_LIMIT_ENABLED=true RECAPTCHA_SITE_KEY=your-site-key RECAPTCHA_SECRET_KEY=your-secret-key # Webhooks (V2) SLICK_FORMS_WEBHOOKS_ENABLED=true SLICK_FORMS_WEBHOOK_QUEUE=true # URL Obfuscation (V2) SLICK_FORMS_HASHID_SALT="${APP_KEY}" SLICK_FORMS_HASHID_MIN_LENGTH=6
Complete Configuration Guide: See docs/CONFIGURATION.md for all settings, SMTP setup, CAPTCHA integration, and production best practices.
Route Customization
Slick Forms V2 introduces comprehensive route customization with hashid-only URLs for enhanced security and privacy.
Default Routes
All package routes use secure hashid URLs that are short, non-sequential, and shareable:
/slick-forms/manage - Form management dashboard
/slick-forms/builder/x9kL2p - Form builder (hashid)
/slick-forms/form/x9kL2p - Public form display (hashid)
/slick-forms/submissions/x9kL2p - Submission viewer (hashid)
/slick-forms/analytics/x9kL2p - Analytics dashboard (hashid)
Security Benefits:
- โ No ID Enumeration - Hashids prevent sequential form discovery
- โ No Information Leakage - Can't determine form count or creation order
- โ Privacy-Friendly - URLs don't reveal internal database structure
- โ Short & Shareable - 6+ characters (vs 36 for UUIDs)
- โ Per-Form Salts - Optional custom salt per form for extra obfuscation
Customizing Routes
Publish the config to customize all routes, middleware, and URL segments:
php artisan vendor:publish --tag=slick-forms-config
Example 1: Change Route Prefix
// config/slick-forms.php 'routes' => [ 'prefix' => 'admin/forms', // Changed from 'slick-forms' // ... ],
Now routes become: /admin/forms/manage, /admin/forms/builder/x9kL2p, etc.
Example 2: Customize URL Segments
// config/slick-forms.php 'routes' => [ 'segments' => [ 'builder' => 'editor', // /admin/forms/editor/x9kL2p 'manage' => 'dashboard', // /admin/forms/dashboard 'submissions' => 'responses', // /admin/forms/responses/x9kL2p // ... customize any segment ], ],
Example 3: Per-Route Middleware Control
// config/slick-forms.php 'routes' => [ 'middleware' => [ 'admin' => ['web', 'auth', 'role:admin'], // Require admin role 'public' => ['web', 'throttle:60,1'], // Rate limit public forms ], 'builder' => [ 'middleware' => 'admin', // Use admin middleware group 'show' => '{builder}/{form}', ], 'submissions' => [ 'middleware' => 'admin', // Override single route with custom middleware 'export_csv' => [ 'uri' => '{submissions}/{form}/{export}/{csv}', 'middleware' => ['web', 'auth', 'can:export-submissions'], ], ], ],
Example 4: Disable Package Routes (Use Your Own)
// config/slick-forms.php 'load_routes' => false,
// routes/web.php use DigitalisStudios\SlickForms\Http\Controllers\FormBuilderController; use DigitalisStudios\SlickForms\Http\Controllers\FormRendererController; Route::middleware(['auth'])->prefix('admin')->group(function () { Route::get('/forms', [FormBuilderController::class, 'index']); Route::get('/forms/builder/{form}', [FormBuilderController::class, 'show']); }); // Public form route (no auth required) Route::get('/f/{hash}', [FormRendererController::class, 'showByHash']) ->name('custom.form.show');
Important: When using custom routes, all {form} and {template} parameters automatically use hashid binding. Pass model objects to route() helper and they'll be converted to hashids automatically.
Migration from Numeric IDs
Breaking Change in V2: All numeric ID and UUID routes have been removed for security.
Before (V1):
// Numeric ID routes (REMOVED) /slick-forms/form/123 /slick-forms/builder/123 // UUID routes (REMOVED) /slick-forms/form/550e8400-e29b-41d4-a716-446655440000
After (V2):
// Hashid routes only
/slick-forms/form/x9kL2p
/slick-forms/builder/x9kL2p
Migration Steps:
- Update any bookmarked URLs to use hashid format
- Update external integrations to use hashid URLs from your application
- Important: Webhook payloads intentionally contain numeric
form_idandsubmission_idfor efficient database lookups by external systems. Only public-facing URLs use hashids for privacy.
Generating Hashid URLs in Code:
use DigitalisStudios\SlickForms\Models\CustomForm; use DigitalisStudios\SlickForms\Services\UrlObfuscationService; $form = CustomForm::find(1); // Method 1: Pass model to route() (automatic hashid conversion) $url = route('slick-forms.form.show.hash', ['hash' => $form]); // Method 2: Use UrlObfuscationService $urlService = app(UrlObfuscationService::class); $hashid = $urlService->encodeId($form->id); $url = route('slick-forms.form.show.hash', ['hash' => $hashid]); // Method 3: Use convenience method $url = $urlService->generateFormUrl($form);
โ Complete Config Reference: See config/slick-forms.php after publishing for all available options and detailed documentation.
Analytics & Reporting
Track form performance with built-in analytics:
// Access analytics dashboard
Route: /slick-forms/analytics/{form}
Metrics Tracked:
- Form views, starts, completions
- Conversion rates and drop-off points
- Field completion rates
- Device and browser breakdown
- Common validation errors
- Average completion time
- Submissions over time (charts)
Requirements: No additional packages needed - fully built-in.
โ Complete Guide: Analytics Documentation
Multi-Page Forms
Break long forms into steps with progress tracking:
// Enable in form settings $form->settings = [ 'multi_page_enabled' => true, 'progress_style' => 'steps', // or 'bar', 'breadcrumb' ];
Features:
- Unlimited pages per form
- Three progress indicator styles (Steps, Bar, Breadcrumbs)
- Per-page validation
- Next/Previous navigation
- Page-specific fields and layout
- Drag-and-drop page reordering
โ Complete Guide: Multi-Page Forms Documentation
Form Templates
Start quickly with 10 professionally designed templates:
# Seed template forms only php artisan db:seed --class=DigitalisStudios\\SlickForms\\Database\\Seeders\\FormTemplatesSeeder # Or seed templates + demo forms + submissions + analytics php artisan db:seed --class=DigitalisStudios\\SlickForms\\Database\\Seeders\\DemoFormsWithAnalyticsSeeder
Templates Included:
- Contact Form - Basic contact form with name, email, phone, message
- Lead Capture - Lead generation with conditional logic
- Multi-Step Registration - Registration with tabs
- Job Application - Employment application with file upload
- Event Registration - Registration form with attendee details
- Customer Satisfaction Survey - Rating scales and feedback
- Product Order Form - Order form with repeater fields
- Support Ticket - Technical support request form
- Newsletter Signup - Email subscription with preferences
- Booking Form - Appointment booking with date range
Browse Templates: /slick-forms/templates (when templates exist)
โ Complete Guide: Templates Documentation
Advanced Features
Calculation Fields
Auto-calculate values based on other fields:
$form->fields()->create([ 'field_type' => 'calculation', 'name' => 'total', 'options' => [ 'formula' => '{price} * {quantity}', 'prefix' => '$', 'decimal_places' => 2, ], ]);
Supported Operations:
- Basic operators:
+,-,*,/,%,() - Functions:
SUM(),AVG(),MIN(),MAX(),ROUND(),ABS() - Field references:
{field_name} - Display formats: Number, Currency, Percentage
โ Complete Guide: Calculation Fields Documentation
Repeater Fields
Let users add/remove groups of fields:
$form->fields()->create([ 'field_type' => 'repeater', 'name' => 'work_experience', 'options' => [ 'min_instances' => 1, 'max_instances' => 10, 'layout_style' => 'card', // or 'accordion', 'plain' ], ]);
Features:
- Dynamic add/remove instances
- Drag-to-reorder instances
- Min/max instance limits
- Three layout styles
- Nested field support
โ Complete Guide: Repeater Fields Documentation
Input Masks
Format input as users type:
// Available masks: phone, credit_card, ssn, date, time, currency, etc. $field->options['input_mask'] = 'phone_us'; // (555) 123-4567 $field->options['input_mask'] = 'credit_card'; // 1234 5678 9012 3456 $field->options['input_mask'] = 'ssn'; // 123-45-6789
Mask Types:
- Phone (US and International)
- Credit Card (auto-detects type)
- Date (multiple formats)
- Time (12/24 hour)
- Currency, Percentage
- SSN, ZIP codes
- Custom patterns
โ Complete Guide: Input Masks Documentation
Export Submissions
Export form submissions in multiple formats:
# Install optional packages for Excel/PDF
composer require maatwebsite/excel
composer require barryvdh/laravel-dompdf
Export Formats:
- CSV - Built-in, no packages required
- Excel - Requires
maatwebsite/excel - PDF - Requires
barryvdh/laravel-dompdf
โ Complete Guide: Exports Documentation
Database Schema
All tables use the slick_ prefix to avoid conflicts.
Opt-In Architecture (v2.1+)
Slick Forms uses a modular database structure where only the features you enable create tables. This reduces database bloat and improves performance.
Core Tables (Always Installed)
These 9 tables are always created, regardless of feature selection:
slick_forms- Form definitions with settings and configurationslick_form_fields- Form fields with validation and conditional logicslick_form_layout_elements- Layout structure (containers, rows, columns, cards, tabs, accordions, carousels)slick_form_pages- Multi-page form support with progress trackingslick_form_submissions- User submissions with IP tracking and metadataslick_form_field_values- Submitted field valuesslick_form_analytics_sessions- User session tracking (device, browser, timing)slick_form_analytics_events- Analytics events (views, starts, interactions, validations)slick_form_features- Tracks which features are installed and enabled
Optional Feature Tables
These 9 tables are only created when you enable their corresponding features:
Email Notifications Feature:
slick_form_email_templates- Email notification templates with variablesslick_form_email_logs- Email delivery tracking and status
Webhooks Feature:
slick_form_webhooks- Webhook endpoint configurationsslick_form_webhook_logs- Webhook delivery attempts and responses
Spam Protection Feature:
slick_form_spam_logs- Spam attempt logging with IP tracking
Versioning Feature:
slick_form_versions- Form version snapshots and history
Exports Feature:
slick_dynamic_options_cache- Cached dynamic dropdown optionsslick_form_model_bindings- Form-to-Eloquent model mappingsslick_form_signed_urls- Signed URL tracking with expiration
Total: 9 core tables + up to 9 optional tables (18 maximum)
Security & Performance
Security Features
- XSS Prevention - All user input properly escaped
- CSRF Protection - Laravel middleware integration
- Server-Side Validation - Never trust client-side validation
- File Upload Validation - Type and size restrictions
- IP Tracking - Log submission sources
Performance
- Optimized Queries - Eager loading to prevent N+1
- Livewire Integration - Minimal JavaScript overhead
- Asset Management - CDN-ready third-party libraries
- Efficient Rendering - Component-based view architecture
Browser Support
- Chrome (latest)
- Firefox (latest)
- Safari (latest)
- Edge (latest)
Note: JavaScript must be enabled for the drag-and-drop builder interface.
Roadmap
V2.1 Planned Features
- API endpoints for headless usage (RESTful API for forms and submissions)
- Advanced form scheduling (timezone support, recurring availability)
- Performance monitoring dashboard (page load times, field render times)
- Bulk operations (duplicate multiple forms, bulk delete submissions)
V3.0 Vision
- Advanced field types:
- File manager (browse/select existing uploaded files)
- Drawing canvas (free-form drawing with tools)
- Audio recorder (voice memos and audio capture)
- Advanced permissions (team collaboration, role-based access)
- Advanced automation (Zapier integration, custom workflows)
- White-label customization (custom branding, logo, colors)
Contributing
Contributions are welcome! Please feel free to submit a Pull Request to the GitHub repository.
Credits
Created by: Brandon Moore
Built with:
- Laravel - PHP web framework
- Livewire - Reactive components
- Bootstrap 5 - UI framework
- Tom Select v2.3.1 - Searchable dropdowns
- Flatpickr v4.6.13 - Date/time picker
- Quill v1.3.6 - WYSIWYG editor
- Ace Editor v1.32.2 - Code editor
- SortableJS - Drag-and-drop
- Signature Pad v4.1.7 - Signature capture
- Leaflet v1.9.4 - Interactive maps
- Swiper v12 - Carousel/slider functionality
- Hashids - URL obfuscation
Inspired By
No source code from the following projects was actually used, but these projects all had features that inspired this project:
- formBuilder.online - Form building concepts
- VvvebJs - Visual page builder approach
- Editor.js - Block-based editing interface
License
Slick Forms is open-source software licensed under the MIT license.
Support
For issues, questions, or feature requests:
- Issues: GitHub Issue Tracker
- Documentation: Complete guides in docs/
- Email: brandon@digitalisstudios.com
Star this repository if Slick Forms helps your project!
