- How do I install draw/graphviz in a Laravel project?
- Run `composer require mpoiriert/graphviz` in your project directory. The package has no Laravel-specific dependencies, so it integrates cleanly with any PHP 8.0+ Laravel app (9.x, 10.x, or 11.x). No additional configuration is needed unless you’re using a facade or service container binding.
- Can I generate images (PNG/SVG) directly from PHP, or do I need Graphviz CLI?
- This package only generates DOT syntax. To render images, you’ll need the Graphviz CLI installed on your server or a Docker container. Use `exec('dot -Tpng input.dot -o output.png')` in PHP or leverage Laravel’s queue system to offload rendering. For serverless environments, consider a third-party API like Graphviz Online.
- What’s the best way to visualize graphs in Laravel Blade views?
- Store generated DOT files in `storage/app/graphs/` and render them as images using Laravel’s filesystem or a package like `intervention/image`. For dynamic graphs, cache the rendered images (e.g., with `spatie/laravel-medialibrary`) to avoid regenerating them on every request. Use Blade to embed `<img>` tags pointing to cached paths.
- Does draw/graphviz support subgraphs or clustered layouts?
- Yes, the package fully supports Graphviz’s subgraph syntax. Use `$graph->addSubgraph()` to group nodes and apply shared attributes (e.g., `graph [style=filled, color=lightgray]`). This is useful for visualizing modular architectures or nested workflows in Laravel applications.
- How do I handle large graphs (e.g., 5K+ nodes) without memory issues?
- Offload graph generation to Laravel queues (e.g., `GenerateGraphJob`) and render images asynchronously. For extremely large graphs, consider streaming DOT output to a file instead of holding it in memory. Test with your expected scale—Graphviz CLI handles rendering, but PHP’s DOT generation may hit limits if not optimized.
- Is there a Laravel-specific wrapper or facade for this package?
- The package itself is framework-agnostic, but you can easily create a Laravel service class to abstract DOT generation. For example, bind a `GraphvizGenerator` facade in `AppServiceProvider` and inject it into controllers or commands. This keeps your codebase clean and reusable across projects.
- Can I use this package in Laravel Artisan commands or scheduled tasks?
- Absolutely. Generate DOT files or images directly in Artisan commands (e.g., `php artisan graphviz:generate`) or schedule them with Laravel’s scheduler. This is ideal for pre-rendering documentation diagrams or dependency graphs during deployment or cron jobs.
- What Laravel versions does draw/graphviz support?
- The package requires PHP 8.0+ and works with Laravel 9.x, 10.x, and 11.x. Since it’s a low-level library, it avoids Laravel-specific dependencies, ensuring compatibility. Always check the [GitHub repo](https://github.com/mpoiriert/graphviz) for minor version updates.
- Are there security risks if users upload DOT files?
- Yes, malicious DOT files could exploit Graphviz’s rendering engine. Sanitize inputs by validating node/edge syntax or using a whitelist of allowed attributes. For user-generated graphs, consider rendering them in a sandboxed environment (e.g., Docker container) or using a third-party API.
- What are the alternatives to draw/graphviz for Laravel graph visualization?
- For PHP-native solutions, consider `ext/graphviz` (if available) for direct image generation without CLI dependencies. For frontend visualization, use JavaScript libraries like D3.js or Mermaid.js (rendered via Laravel Mix or Livewire). If you need a Laravel-specific package, explore `spatie/laravel-graphviz` (if available) or build a custom wrapper around this package.