Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Laravel Personal Data Export Laravel Package

spatie/laravel-personal-data-export

Generate GDPR-style personal data exports as ZIP files in Laravel. Define what to include via a model method, add JSON and files (local or S3), store zips privately, email users a download link, and clean up old exports with an artisan command.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture Fit

  • Alignment with Laravel Ecosystem: The package is purpose-built for Laravel, leveraging its service container, job queue system, and Eloquent ORM. It integrates seamlessly with Laravel’s authentication, mailable systems, and storage abstractions.
  • Compliance-Focused Design: Directly addresses GDPR/CCPA requirements for personal data exports, reducing custom compliance logic. The modular design (e.g., PersonalDataExporter, PersonalDataExportJob) aligns with Laravel’s job-based async processing.
  • Extensibility: Supports customization via:
    • Data collectors (e.g., UserDataCollector, RelatedModelDataCollector) for granular control over exported data.
    • Event hooks (PersonalDataExported, PersonalDataExportFailed) for post-processing (e.g., logging, analytics).
    • Storage backends (e.g., S3, local filesystem) via Laravel’s filesystem abstraction.

Integration Feasibility

  • Low Friction: Requires minimal boilerplate—just install, configure collectors, and dispatch the job. Example:
    composer require spatie/laravel-personal-data-export
    php artisan vendor:publish --provider="Spatie\PersonalDataExport\PersonalDataExportServiceProvider"
    
  • Database Agnostic: Works with any Eloquent model, including polymorphic relationships, but assumes relational data structures.
  • Async-First: Leverages Laravel Queues (e.g., Redis, database) for background processing, avoiding blocking requests.

Technical Risk

  • Data Sensitivity: Exporting raw personal data introduces risks if:
    • Storage isn’t secured (e.g., public zip links). Mitigate via Laravel’s auth middleware or custom guards.
    • Collectors expose PII unintentionally. Requires rigorous testing of collect() methods.
  • Performance: Large exports (e.g., thousands of records) may strain:
    • Memory (zip generation in PHP).
    • Queue workers (long-running jobs).
    • Database (if collectors use select *). Mitigation: Implement chunking in collectors or use Laravel’s cursor() for large datasets.
  • Version Lock: Last release in 2026; ensure compatibility with your Laravel version (e.g., 10.x). Monitor for breaking changes in spatie/laravel-* packages.

Key Questions

  1. Data Scope:
    • Which user-related models/relationships must be included? Are there sensitive fields (e.g., passwords, tokens) to exclude?
    • How will you handle nested data (e.g., user → orders → order_items) without circular references?
  2. Delivery Mechanism:
    • Should exports be emailed automatically (default) or require manual download via a UI link?
    • What’s the retention policy for exported files (e.g., auto-delete after 30 days)?
  3. Customization Needs:
    • Do you need custom file formats (e.g., JSON, CSV) alongside ZIPs?
    • Should exports include metadata (e.g., export timestamp, exporter’s IP)?
  4. Scaling:
    • What’s the expected volume of concurrent exports? Will you need to queue batch jobs?
    • How will you handle failed exports (e.g., retries, notifications)?

Integration Approach

Stack Fit

  • Laravel Core: Native support for:
    • Authentication: Uses auth()->user(); compatible with Laravel’s session/cache drivers.
    • Mail: Integrates with Laravel’s Mailable system (e.g., PersonalDataExportMailable).
    • Storage: Works with any filesystem driver (local, S3, etc.).
    • Queues: Uses Laravel’s job system (supports database, redis, beanstalkd).
  • Dependencies:
    • PHP 8.1+: Ensure your app meets the package’s requirements.
    • Laravel 9+: Tested with LTS versions; check for deprecations in your version.
    • Symfony Components: Uses ZipArchive (built into PHP) and symfony/mailer for emails.

Migration Path

  1. Discovery Phase (1–2 days):
    • Audit existing data models to identify collectors needed.
    • Review current personal data handling (e.g., existing export endpoints).
  2. Setup (1 day):
    • Install package and publish config:
      composer require spatie/laravel-personal-data-export
      php artisan vendor:publish --provider="Spatie\PersonalDataExport\PersonalDataExportServiceProvider"
      
    • Configure config/personal-data-export.php (e.g., storage path, email template).
  3. Collector Development (3–5 days):
    • Extend PersonalDataCollector for each model:
      use Spatie\PersonalDataExport\PersonalDataCollector;
      
      class UserDataCollector extends PersonalDataCollector
      {
          public function collect(User $user): array
          {
              return [
                  'name' => $user->name,
                  'email' => $user->email,
                  // Add related data via relationships
                  'orders' => $user->orders->map(fn ($order) => $order->toArray()),
              ];
          }
      }
      
    • Register collectors in PersonalDataExportServiceProvider.
  4. Integration (2–3 days):
    • Dispatch jobs from user-triggered actions (e.g., profile page):
      Route::post('/export-data', function () {
          dispatch(new CreatePersonalDataExportJob(auth()->user()));
          return back()->with('status', 'Export started!');
      });
      
    • Customize email template (extend PersonalDataExportMailable).
  5. Testing (2–3 days):
    • Unit test collectors for edge cases (e.g., null relationships).
    • Load test with sample data (e.g., 100 users) to validate performance.
    • Verify storage permissions and download links.

Compatibility

  • Backward Compatibility: MIT-licensed; no aggressive refactoring in recent releases. Monitor for:
    • Changes to PersonalDataCollector interface.
    • Deprecations in Laravel’s filesystem/mailer APIs.
  • Third-Party Conflicts:
    • Storage Drivers: Ensure your filesystem driver (e.g., flysystem/aws-s3) is compatible.
    • Queue Workers: Test with your queue worker setup (e.g., Supervisor, Horizon).
  • UI/UX:
    • Default email template is basic; extend with your brand’s styling.
    • Consider adding a download progress indicator if exports are large.

Sequencing

  1. Phase 1: Core Implementation
    • MVP: Basic user data export (e.g., profile + orders).
    • Validate with a small user group.
  2. Phase 2: Enhancements
    • Add custom collectors for complex models (e.g., Post with comments).
    • Implement retention policies (e.g., PersonalDataExportServiceProvider boot method).
  3. Phase 3: Optimization
    • Add chunking for large datasets.
    • Implement monitoring for failed jobs (e.g., Laravel Horizon).

Operational Impact

Maintenance

  • Configuration Overrides:
    • Customize via config/personal-data-export.php (e.g., storage path, zip filename).
    • Override default behavior by extending classes (e.g., PersonalDataExportJob, PersonalDataExportMailable).
  • Updates:
    • Monitor spatie/laravel-personal-data-export for breaking changes.
    • Test updates against your collectors (minor versions are usually safe).
  • Logging:
    • Leverage Laravel’s logging for job failures:
      // In PersonalDataExportServiceProvider
      $this->app->bind(
          CreatePersonalDataExportJob::class,
          fn () => new CreatePersonalDataExportJob($user)
      );
      
    • Add custom logs for audit trails (e.g., PersonalDataExported event).

Support

  • Troubleshooting:
    • Failed Jobs: Check queue worker logs and database failed_jobs table.
    • Permission Issues: Verify storage directory permissions (e.g., storage/app/personal-data-exports).
    • Data Corruption: Validate collectors with sample data before production.
  • User Support:
    • Document the export process for end-users (e.g., "Check your email for the download link").
    • Provide a download link in the user’s account dashboard if email isn’t reliable.
  • Compliance:
    • Ensure exports align with legal requirements (e.g., GDPR’s "right to erasure").
    • Document the process for internal audits.

Scaling

  • Performance Bottlenecks:
    • Zip Generation: For large exports, optimize collectors to avoid select *:
      public function collect(User $user): array
      {
          return [
              'orders' => $user->orders()->limit(100)->get()->toArray(),
          ];
      }
      
    • Queue Saturation: Scale workers horizontally for high-volume exports.
  • Storage:
    • Use S3 or similar for large-scale
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
davejamesmiller/laravel-breadcrumbs
artisanry/parsedown
christhompsontldr/phpsdk
enqueue/dsn
bunny/bunny
enqueue/test
enqueue/null
enqueue/amqp-tools
milesj/emojibase
bower-asset/punycode
bower-asset/inputmask
bower-asset/jquery
bower-asset/yii2-pjax
laravel/nova
spatie/laravel-mailcoach
spatie/laravel-superseeder
laravel/liferaft
nst/json-test-suite
danielmiessler/sec-lists
jackalope/jackalope-transport