# Spatie > Spatie is a web development agency from Antwerp, Belgium. We create Laravel and PHP open source packages, and sell digital products like courses and tools. We have created over 400 open source packages that have been downloaded more than 500 million times. Docs pages can be visited as markdown by appending `.md` to the URL. ## Guidelines Spatie's coding guidelines for Laravel and PHP projects. - [PHP](https://spatie.be/guidelines/php) - [Laravel](https://spatie.be/guidelines/laravel) - [JavaScript](https://spatie.be/guidelines/javascript) - [Open source](https://spatie.be/guidelines/open-source) - [Security](https://spatie.be/guidelines/security) - [Version control](https://spatie.be/guidelines/version-control) - [Emergencies](https://spatie.be/guidelines/emergencies) - [Using our guidelines with AI](https://spatie.be/guidelines/ai) ## AI Coding Guidelines - [Laravel & PHP AI Guidelines](https://spatie.be/laravel-php-ai-guidelines.md): Guidelines for AI assistants writing Laravel and PHP code following Spatie conventions ## Package Documentation ### PHP - [laravel-sitemap](https://spatie.be/docs/laravel-sitemap/v8/introduction.md): Generate sitemaps with ease - [Alternates](https://spatie.be/docs/laravel-sitemap/v8/adding-content-to-urls/alternates.md) - [Scheduled generation](https://spatie.be/docs/laravel-sitemap/v8/advanced-usage/scheduled-generation.md) - [Generating a sitemap](https://spatie.be/docs/laravel-sitemap/v8/creating-sitemaps/generating-a-sitemap.md) - [Crawl profiles](https://spatie.be/docs/laravel-sitemap/v8/customizing-the-crawler/crawl-profiles.md) - [Introduction](https://spatie.be/docs/laravel-sitemap/v8/introduction.md) - [Images](https://spatie.be/docs/laravel-sitemap/v8/adding-content-to-urls/images.md) - [Writing to disks](https://spatie.be/docs/laravel-sitemap/v8/advanced-usage/writing-to-disks.md) - [Manually creating a sitemap](https://spatie.be/docs/laravel-sitemap/v8/creating-sitemaps/manually-creating-a-sitemap.md) - [Filtering URLs](https://spatie.be/docs/laravel-sitemap/v8/customizing-the-crawler/filtering-urls.md) - [Installation & setup](https://spatie.be/docs/laravel-sitemap/v8/installation-setup.md) - [Support us](https://spatie.be/docs/laravel-sitemap/v8/support-us.md) - [Videos](https://spatie.be/docs/laravel-sitemap/v8/adding-content-to-urls/videos.md) - [Creating a sitemap index](https://spatie.be/docs/laravel-sitemap/v8/creating-sitemaps/creating-a-sitemap-index.md) - [Configuring the crawler](https://spatie.be/docs/laravel-sitemap/v8/customizing-the-crawler/configuring-the-crawler.md) - [News](https://spatie.be/docs/laravel-sitemap/v8/adding-content-to-urls/news.md) - [Splitting large sitemaps](https://spatie.be/docs/laravel-sitemap/v8/creating-sitemaps/splitting-large-sitemaps.md) - [Sitemapable models](https://spatie.be/docs/laravel-sitemap/v8/adding-content-to-urls/sitemapable-models.md) - [Adding an XSL stylesheet](https://spatie.be/docs/laravel-sitemap/v8/creating-sitemaps/adding-an-xsl-stylesheet.md) - [Returning a response](https://spatie.be/docs/laravel-sitemap/v8/creating-sitemaps/returning-a-response.md) - [Changelog](https://spatie.be/docs/laravel-sitemap/v8/changelog.md) - [Sorting URLs](https://spatie.be/docs/laravel-sitemap/v8/creating-sitemaps/sorting-urls.md) - [Questions and issues](https://spatie.be/docs/laravel-sitemap/v8/questions-issues.md) - [About us](https://spatie.be/docs/laravel-sitemap/v8/about-us.md) - [crawler](https://spatie.be/docs/crawler/v9/introduction.md): Crawl the web using PHP - [JavaScript rendering](https://spatie.be/docs/crawler/v9/advanced-usage/rendering-javascript.md) - [Your first crawl](https://spatie.be/docs/crawler/v9/basic-usage/starting-your-first-crawl.md) - [Concurrency & throttling](https://spatie.be/docs/crawler/v9/configuring-the-crawler/crawl-behavior.md) - [Introduction](https://spatie.be/docs/crawler/v9/introduction.md) - [Custom link extraction](https://spatie.be/docs/crawler/v9/advanced-usage/extracting-custom-links.md) - [Crawl responses](https://spatie.be/docs/crawler/v9/basic-usage/handling-crawl-responses.md) - [Limits](https://spatie.be/docs/crawler/v9/configuring-the-crawler/setting-crawl-limits.md) - [Installation & setup](https://spatie.be/docs/crawler/v9/installation-setup.md) - [Custom request handlers](https://spatie.be/docs/crawler/v9/advanced-usage/custom-request-handlers.md) - [Using observers](https://spatie.be/docs/crawler/v9/basic-usage/using-observers.md) - [Extracting resources](https://spatie.be/docs/crawler/v9/configuring-the-crawler/extracting-resources.md) - [Crawling across requests](https://spatie.be/docs/crawler/v9/advanced-usage/crawling-across-requests.md) - [Collecting URLs](https://spatie.be/docs/crawler/v9/basic-usage/collecting-urls.md) - [Configuring requests](https://spatie.be/docs/crawler/v9/configuring-the-crawler/configuring-requests.md) - [Custom crawl queue](https://spatie.be/docs/crawler/v9/advanced-usage/using-a-custom-crawl-queue.md) - [Filtering URLs](https://spatie.be/docs/crawler/v9/basic-usage/filtering-urls.md) - [Response filtering](https://spatie.be/docs/crawler/v9/configuring-the-crawler/handling-responses.md) - [Graceful shutdown](https://spatie.be/docs/crawler/v9/advanced-usage/graceful-shutdown.md) - [Testing](https://spatie.be/docs/crawler/v9/basic-usage/testing.md) - [Tracking progress](https://spatie.be/docs/crawler/v9/basic-usage/tracking-progress.md) - [Respecting robots.txt](https://spatie.be/docs/crawler/v9/configuring-the-crawler/respecting-robots-txt.md) - [Support us](https://spatie.be/docs/crawler/v9/support-us.md) - [Questions and issues](https://spatie.be/docs/crawler/v9/questions-issues.md) - [Changelog](https://spatie.be/docs/crawler/v9/changelog.md) - [About us](https://spatie.be/docs/crawler/v9/about-us.md) ### Laravel - [laravel-openapi-cli](https://spatie.be/docs/laravel-openapi-cli/v1/introduction.md): Create Laravel commands for your OpenAPI specs - [Error handling](https://spatie.be/docs/laravel-openapi-cli/v1/advanced-usage/error-handling.md) - [Registering an API](https://spatie.be/docs/laravel-openapi-cli/v1/basic-usage/registering-an-api.md) - [Introduction](https://spatie.be/docs/laravel-openapi-cli/v1/introduction.md) - [Multiple APIs](https://spatie.be/docs/laravel-openapi-cli/v1/advanced-usage/multiple-apis.md) - [Command naming](https://spatie.be/docs/laravel-openapi-cli/v1/basic-usage/command-naming.md) - [Support us](https://spatie.be/docs/laravel-openapi-cli/v1/support-us.md) - [Debugging](https://spatie.be/docs/laravel-openapi-cli/v1/advanced-usage/debugging.md) - [Path & query parameters](https://spatie.be/docs/laravel-openapi-cli/v1/basic-usage/path-and-query-parameters.md) - [Installation & setup](https://spatie.be/docs/laravel-openapi-cli/v1/installation-setup.md) - [Command reference](https://spatie.be/docs/laravel-openapi-cli/v1/advanced-usage/command-reference.md) - [Sending data](https://spatie.be/docs/laravel-openapi-cli/v1/basic-usage/sending-data.md) - [Listing endpoints](https://spatie.be/docs/laravel-openapi-cli/v1/basic-usage/listing-endpoints.md) - [Questions and issues](https://spatie.be/docs/laravel-openapi-cli/v1/questions-issues.md) - [Authentication](https://spatie.be/docs/laravel-openapi-cli/v1/basic-usage/authentication.md) - [Changelog](https://spatie.be/docs/laravel-openapi-cli/v1/changelog.md) - [Output formatting](https://spatie.be/docs/laravel-openapi-cli/v1/basic-usage/output-formatting.md) - [About us](https://spatie.be/docs/laravel-openapi-cli/v1/about-us.md) - [laravel-og-image](https://spatie.be/docs/laravel-og-image/v1/introduction.md): Generate OG images for your Laravel app - [How it works](https://spatie.be/docs/laravel-og-image/v1/basic-usage/how-it-works.md) - [Introduction](https://spatie.be/docs/laravel-og-image/v1/introduction.md) - [Getting started](https://spatie.be/docs/laravel-og-image/v1/basic-usage/getting-started.md) - [Requirements](https://spatie.be/docs/laravel-og-image/v1/requirements.md) - [Customizing the page URL](https://spatie.be/docs/laravel-og-image/v1/advanced-usage/customizing-the-page-url.md) - [Customizing screenshots](https://spatie.be/docs/laravel-og-image/v1/basic-usage/customizing-screenshots.md) - [Installation & setup](https://spatie.be/docs/laravel-og-image/v1/installation-setup.md) - [Using a custom screenshot driver](https://spatie.be/docs/laravel-og-image/v1/advanced-usage/using-a-custom-screenshot-driver.md) - [Defining fallback images](https://spatie.be/docs/laravel-og-image/v1/basic-usage/defining-fallback-images.md) - [Support us](https://spatie.be/docs/laravel-og-image/v1/support-us.md) - [Customizing the screenshot layout](https://spatie.be/docs/laravel-og-image/v1/advanced-usage/customizing-the-screenshot-layout.md) - [Caching and storage](https://spatie.be/docs/laravel-og-image/v1/basic-usage/managing-caching-and-storage.md) - [Questions and issues](https://spatie.be/docs/laravel-og-image/v1/questions-issues.md) - [Customizing actions](https://spatie.be/docs/laravel-og-image/v1/advanced-usage/customizing-actions.md) - [Pre-generating images](https://spatie.be/docs/laravel-og-image/v1/basic-usage/pre-generating-images.md) - [Changelog](https://spatie.be/docs/laravel-og-image/v1/changelog.md) - [Troubleshooting](https://spatie.be/docs/laravel-og-image/v1/advanced-usage/troubleshooting.md) - [Using a hosted solution](https://spatie.be/docs/laravel-og-image/v1/advanced-usage/using-a-hosted-solution.md) - [Clearing generated images](https://spatie.be/docs/laravel-og-image/v1/basic-usage/clearing-generated-images.md) - [Using Laravel Boost](https://spatie.be/docs/laravel-og-image/v1/advanced-usage/using-laravel-boost.md) - [About us](https://spatie.be/docs/laravel-og-image/v1/about-us.md) - [laravel-markdown-response](https://spatie.be/docs/laravel-markdown-response/v1/introduction.md): Serve markdown versions of your HTML pages to AI agents and bots - [Clean up HTML with preprocessors](https://spatie.be/docs/laravel-markdown-response/v1/advanced-usage/clean-up-html-with-preprocessors.md) - [Serve markdown to AI agents](https://spatie.be/docs/laravel-markdown-response/v1/basic-usage/serve-markdown-to-ai-agents.md) - [Introduction](https://spatie.be/docs/laravel-markdown-response/v1/introduction.md) - [Clean up markdown with postprocessors](https://spatie.be/docs/laravel-markdown-response/v1/advanced-usage/clean-up-markdown-with-postprocessors.md) - [Cache converted responses](https://spatie.be/docs/laravel-markdown-response/v1/basic-usage/cache-converted-responses.md) - [Requirements](https://spatie.be/docs/laravel-markdown-response/v1/requirements.md) - [Customize request detection](https://spatie.be/docs/laravel-markdown-response/v1/advanced-usage/customize-request-detection.md) - [Choose a conversion driver](https://spatie.be/docs/laravel-markdown-response/v1/basic-usage/choose-a-conversion-driver.md) - [Install the package](https://spatie.be/docs/laravel-markdown-response/v1/installation-setup.md) - [Listen to conversion events](https://spatie.be/docs/laravel-markdown-response/v1/advanced-usage/listen-to-conversion-events.md) - [Test your setup](https://spatie.be/docs/laravel-markdown-response/v1/basic-usage/test-your-setup.md) - [Questions & issues](https://spatie.be/docs/laravel-markdown-response/v1/questions-issues.md) - [Convert HTML directly](https://spatie.be/docs/laravel-markdown-response/v1/advanced-usage/convert-html-directly.md) - [Support us](https://spatie.be/docs/laravel-markdown-response/v1/support-us.md) - [About us](https://spatie.be/docs/laravel-markdown-response/v1/about-us.md) - [CDN and cache layers](https://spatie.be/docs/laravel-markdown-response/v1/advanced-usage/cdn-and-cache-layers.md) - [Response headers](https://spatie.be/docs/laravel-markdown-response/v1/advanced-usage/response-headers.md) - [Changelog](https://spatie.be/docs/laravel-markdown-response/v1/changelog.md) - [laravel-responsecache](https://spatie.be/docs/laravel-responsecache/v8/introduction.md): Speed up an app by caching the entire response - [Custom cache profiles](https://spatie.be/docs/laravel-responsecache/v8/advanced-usage/custom-cache-profiles.md) - [Caching responses](https://spatie.be/docs/laravel-responsecache/v8/basic-usage/caching-responses.md) - [Introduction](https://spatie.be/docs/laravel-responsecache/v8/introduction.md) - [Creating a replacer](https://spatie.be/docs/laravel-responsecache/v8/advanced-usage/creating-a-replacer.md) - [Flexible caching (SWR)](https://spatie.be/docs/laravel-responsecache/v8/basic-usage/flexible-caching.md) - [Support us](https://spatie.be/docs/laravel-responsecache/v8/support-us.md) - [Customizing the serializer](https://spatie.be/docs/laravel-responsecache/v8/advanced-usage/customizing-the-serializer.md) - [Preventing caching](https://spatie.be/docs/laravel-responsecache/v8/basic-usage/preventing-caching.md) - [Requirements](https://spatie.be/docs/laravel-responsecache/v8/requirements.md) - [Customizing the hasher](https://spatie.be/docs/laravel-responsecache/v8/advanced-usage/customizing-the-hasher.md) - [Clearing the cache](https://spatie.be/docs/laravel-responsecache/v8/basic-usage/clearing-the-cache.md) - [Installation & setup](https://spatie.be/docs/laravel-responsecache/v8/installation-setup.md) - [Configuration](https://spatie.be/docs/laravel-responsecache/v8/advanced-usage/configuration.md) - [Using tags](https://spatie.be/docs/laravel-responsecache/v8/basic-usage/using-tags.md) - [Questions and issues](https://spatie.be/docs/laravel-responsecache/v8/questions-issues.md) - [Events](https://spatie.be/docs/laravel-responsecache/v8/basic-usage/events.md) - [Changelog](https://spatie.be/docs/laravel-responsecache/v8/changelog.md) - [About us](https://spatie.be/docs/laravel-responsecache/v8/about-us.md) - [laravel-screenshot](https://spatie.be/docs/laravel-screenshot/v1/introduction.md): Take screenshots of web pages in Laravel apps - [Extending with macros](https://spatie.be/docs/laravel-screenshot/v1/advanced-usage/extending-with-macros.md) - [Taking screenshots](https://spatie.be/docs/laravel-screenshot/v1/basic-usage/taking-screenshots.md) - [Configuration](https://spatie.be/docs/laravel-screenshot/v1/drivers/configuration.md) - [Introduction](https://spatie.be/docs/laravel-screenshot/v1/introduction.md) - [Customizing Browsershot](https://spatie.be/docs/laravel-screenshot/v1/drivers/customizing-browsershot.md) - [Support us](https://spatie.be/docs/laravel-screenshot/v1/support-us.md) - [Customizing screenshots](https://spatie.be/docs/laravel-screenshot/v1/basic-usage/customizing-screenshots.md) - [Using the Cloudflare driver](https://spatie.be/docs/laravel-screenshot/v1/drivers/using-the-cloudflare-driver.md) - [Requirements](https://spatie.be/docs/laravel-screenshot/v1/requirements.md) - [Saving screenshots to disks](https://spatie.be/docs/laravel-screenshot/v1/basic-usage/saving-screenshots-to-disks.md) - [Custom drivers](https://spatie.be/docs/laravel-screenshot/v1/drivers/custom-drivers.md) - [Installation & setup](https://spatie.be/docs/laravel-screenshot/v1/installation-setup.md) - [Queued screenshot generation](https://spatie.be/docs/laravel-screenshot/v1/basic-usage/queued-screenshot-generation.md) - [Questions and issues](https://spatie.be/docs/laravel-screenshot/v1/questions-issues.md) - [Testing screenshots](https://spatie.be/docs/laravel-screenshot/v1/basic-usage/testing-screenshots.md) - [Changelog](https://spatie.be/docs/laravel-screenshot/v1/changelog.md) - [About us](https://spatie.be/docs/laravel-screenshot/v1/about-us.md) - [laravel-url-ai-transformer](https://spatie.be/docs/laravel-url-ai-transformer/v1/introduction.md): Transform URLs and their content using AI - [Testing transformers](https://spatie.be/docs/laravel-url-ai-transformer/v1/advanced-usage/testing-transformers.md) - [Getting started](https://spatie.be/docs/laravel-url-ai-transformer/v1/basic-usage/getting-started.md) - [Introduction](https://spatie.be/docs/laravel-url-ai-transformer/v1/introduction.md) - [Conditional transformations](https://spatie.be/docs/laravel-url-ai-transformer/v1/advanced-usage/conditional-transformations.md) - [Crawling URLs](https://spatie.be/docs/laravel-url-ai-transformer/v1/advanced-usage/crawling-urls.md) - [Registering transformations](https://spatie.be/docs/laravel-url-ai-transformer/v1/basic-usage/registering-transformations.md) - [Support us](https://spatie.be/docs/laravel-url-ai-transformer/v1/support-us.md) - [Customizing AI models](https://spatie.be/docs/laravel-url-ai-transformer/v1/advanced-usage/customizing-ai-models.md) - [Writing your own transformers](https://spatie.be/docs/laravel-url-ai-transformer/v1/basic-usage/writing-your-own-transformers.md) - [Exploring command options](https://spatie.be/docs/laravel-url-ai-transformer/v1/advanced-usage/exploring-command-options.md) - [Installation & setup](https://spatie.be/docs/laravel-url-ai-transformer/v1/installation-setup.md) - [Overriding actions](https://spatie.be/docs/laravel-url-ai-transformer/v1/advanced-usage/overriding-actions.md) - [Regenerating results](https://spatie.be/docs/laravel-url-ai-transformer/v1/advanced-usage/regenerating-results.md) - [Questions and issues](https://spatie.be/docs/laravel-url-ai-transformer/v1/questions-issues.md) - [Changelog](https://spatie.be/docs/laravel-url-ai-transformer/v1/changelog.md) - [About us](https://spatie.be/docs/laravel-url-ai-transformer/v1/about-us.md) - [laravel-one-time-passwords](https://spatie.be/docs/laravel-one-time-passwords/v2/introduction.md): One-time passwords (OTP) for Laravel apps - [Customizing actions](https://spatie.be/docs/laravel-one-time-passwords/v2/advanced-usage/customizing-actions.md) - [Introducing one-time-passwords](https://spatie.be/docs/laravel-one-time-passwords/v2/basic-usage/introducing-one-time-passwords.md) - [Introduction](https://spatie.be/docs/laravel-one-time-passwords/v2/configuring-security/introduction.md) - [Introduction](https://spatie.be/docs/laravel-one-time-passwords/v2/introduction.md) - [Creating one-time passwords](https://spatie.be/docs/laravel-one-time-passwords/v2/basic-usage/creating-one-time-passwords.md) - [Enforcing origin](https://spatie.be/docs/laravel-one-time-passwords/v2/configuring-security/enforcing-origin.md) - [Support us](https://spatie.be/docs/laravel-one-time-passwords/v2/support-us.md) - [Using your own model](https://spatie.be/docs/laravel-one-time-passwords/v2/advanced-usage/using-your-own-model.md) - [Configuring notifications](https://spatie.be/docs/laravel-one-time-passwords/v2/basic-usage/configuring-notifications.md) - [Configuring password format](https://spatie.be/docs/laravel-one-time-passwords/v2/configuring-security/configuring-password-format.md) - [Consuming one-time passwords](https://spatie.be/docs/laravel-one-time-passwords/v2/basic-usage/consuming-one-time-passwords.md) - [Allowing multiple passwords](https://spatie.be/docs/laravel-one-time-passwords/v2/configuring-security/allowing-multiple-passwords.md) - [Installation & setup](https://spatie.be/docs/laravel-one-time-passwords/v2/installation-setup.md) - [Handling events](https://spatie.be/docs/laravel-one-time-passwords/v2/advanced-usage/handling-events.md) - [Using the Livewire component](https://spatie.be/docs/laravel-one-time-passwords/v2/basic-usage/using-the-livewire-component.md) - [Setting default expiration time](https://spatie.be/docs/laravel-one-time-passwords/v2/configuring-security/setting-default-expiration-time.md) - [Questions and issues](https://spatie.be/docs/laravel-one-time-passwords/v2/questions-issues.md) - [Changelog](https://spatie.be/docs/laravel-one-time-passwords/v2/changelog.md) - [About us](https://spatie.be/docs/laravel-one-time-passwords/v2/about-us.md) - [laravel-passkeys](https://spatie.be/docs/laravel-passkeys/v1/introduction.md): Use passkeys in your Laravel app - [Using a custom passkey model](https://spatie.be/docs/laravel-passkeys/v1/advanced-usage/using-a-custom-passkey-model.md) - [How passkeys work](https://spatie.be/docs/laravel-passkeys/v1/basic-usage/how-passkeys-work.md) - [Introduction](https://spatie.be/docs/laravel-passkeys/v1/introduction.md) - [Customizing behaviour](https://spatie.be/docs/laravel-passkeys/v1/advanced-usage/customizing-behaviour.md) - [Generating passkeys](https://spatie.be/docs/laravel-passkeys/v1/basic-usage/generating-passkeys.md) - [Support us](https://spatie.be/docs/laravel-passkeys/v1/support-us.md) - [Listening for events](https://spatie.be/docs/laravel-passkeys/v1/advanced-usage/listening-for-events.md) - [Authentication using passkeys](https://spatie.be/docs/laravel-passkeys/v1/basic-usage/authenticating-using-passkeys.md) - [Requirements](https://spatie.be/docs/laravel-passkeys/v1/requirements.md) - [Styling the components](https://spatie.be/docs/laravel-passkeys/v1/basic-usage/styling-the-components.md) - [Installation & setup](https://spatie.be/docs/laravel-passkeys/v1/installation-setup.md) - [Usage in Inertia](https://spatie.be/docs/laravel-passkeys/v1/basic-usage/usage-in-inertia.md) - [Questions and issues](https://spatie.be/docs/laravel-passkeys/v1/questions-issues.md) - [Changelog](https://spatie.be/docs/laravel-passkeys/v1/changelog.md) - [About us](https://spatie.be/docs/laravel-passkeys/v1/about-us.md) - [laravel-mobile-pass](https://spatie.be/docs/laravel-mobile-pass/v1/introduction.md): Generate mobile passes such for iOS and Android - [Customizing actions](https://spatie.be/docs/laravel-mobile-pass/v1/advanced-usage/customizing-actions.md) - [Introduction](https://spatie.be/docs/laravel-mobile-pass/v1/basic-usage/introduction.md) - [Introduction](https://spatie.be/docs/laravel-mobile-pass/v1/introduction.md) - [Customizing models](https://spatie.be/docs/laravel-mobile-pass/v1/advanced-usage/customizing-models.md) - [Getting credentials from Apple](https://spatie.be/docs/laravel-mobile-pass/v1/basic-usage/getting-credentials-from-apple.md) - [Support us](https://spatie.be/docs/laravel-mobile-pass/v1/support-us.md) - [Reading stored passes](https://spatie.be/docs/laravel-mobile-pass/v1/advanced-usage/reading-stored-passes.md) - [Generating your first pass](https://spatie.be/docs/laravel-mobile-pass/v1/basic-usage/generating-your-first-pass.md) - [Requirements](https://spatie.be/docs/laravel-mobile-pass/v1/requirements.md) - [Associating passes with models](https://spatie.be/docs/laravel-mobile-pass/v1/basic-usage/associating-passes-with-models.md) - [Updating passes](https://spatie.be/docs/laravel-mobile-pass/v1/basic-usage/updating-passes.md) - [Installation & setup](https://spatie.be/docs/laravel-mobile-pass/v1/installation-setup.md) - [Storing mobile passes](https://spatie.be/docs/laravel-mobile-pass/v1/basic-usage/storing-mobile-passes.md) - [Questions and issues](https://spatie.be/docs/laravel-mobile-pass/v1/questions-issues.md) - [Downloading passes](https://spatie.be/docs/laravel-mobile-pass/v1/basic-usage/downloading-passes.md) - [Changelog](https://spatie.be/docs/laravel-mobile-pass/v1/changelog.md) - [Using passes as mail attachments](https://spatie.be/docs/laravel-mobile-pass/v1/basic-usage/using-passes-as-mail-attachments.md) - [Available pass types](https://spatie.be/docs/laravel-mobile-pass/v1/basic-usage/available-pass-types.md) - [About us](https://spatie.be/docs/laravel-mobile-pass/v1/about-us.md) - [laravel-error-solutions](https://spatie.be/docs/laravel-error-solutions/v1/introduction.md): Display solutions on the Laravel error page - [Displaying solutions](https://spatie.be/docs/laravel-error-solutions/v1/basic-usage/displaying-solutions.md) - [Introduction](https://spatie.be/docs/laravel-error-solutions/v1/creating-your-own-solutions/introduction.md) - [Introduction](https://spatie.be/docs/laravel-error-solutions/v1/introduction.md) - [Runnable solutions](https://spatie.be/docs/laravel-error-solutions/v1/basic-usage/runnable-solutions.md) - [Creating a solution class](https://spatie.be/docs/laravel-error-solutions/v1/creating-your-own-solutions/creating-a-solution-class.md) - [Support us](https://spatie.be/docs/laravel-error-solutions/v1/support-us.md) - [AI powered solutions](https://spatie.be/docs/laravel-error-solutions/v1/basic-usage/ai-powered-solutions.md) - [On exceptions](https://spatie.be/docs/laravel-error-solutions/v1/creating-your-own-solutions/on-exceptions.md) - [Requirements](https://spatie.be/docs/laravel-error-solutions/v1/requirements.md) - [Via a solution provider](https://spatie.be/docs/laravel-error-solutions/v1/creating-your-own-solutions/via-a-solution-provider.md) - [Installation & setup](https://spatie.be/docs/laravel-error-solutions/v1/installation-setup.md) - [Questions and issues](https://spatie.be/docs/laravel-error-solutions/v1/questions-issues.md) - [Changelog](https://spatie.be/docs/laravel-error-solutions/v1/changelog.md) - [About us](https://spatie.be/docs/laravel-error-solutions/v1/about-us.md) - [laravel-pdf](https://spatie.be/docs/laravel-pdf/v2/introduction.md): Create PDFs in Laravel apps - [Creating PDFs with multiple pages](https://spatie.be/docs/laravel-pdf/v2/advanced-usage/creating-pdfs-with-multiple-pages.md) - [Creating PDFs](https://spatie.be/docs/laravel-pdf/v2/basic-usage/creating-pdfs.md) - [Configuration](https://spatie.be/docs/laravel-pdf/v2/drivers/configuration.md) - [Introduction](https://spatie.be/docs/laravel-pdf/v2/introduction.md) - [Using Tailwind](https://spatie.be/docs/laravel-pdf/v2/advanced-usage/using-tailwind.md) - [Responding with PDFs](https://spatie.be/docs/laravel-pdf/v2/basic-usage/responding-with-pdfs.md) - [Customizing Browsershot](https://spatie.be/docs/laravel-pdf/v2/drivers/customizing-browsershot.md) - [Support us](https://spatie.be/docs/laravel-pdf/v2/support-us.md) - [Formatting PDFs](https://spatie.be/docs/laravel-pdf/v2/basic-usage/formatting-pdfs.md) - [Using the Cloudflare driver](https://spatie.be/docs/laravel-pdf/v2/drivers/using-the-cloudflare-driver.md) - [Requirements](https://spatie.be/docs/laravel-pdf/v2/requirements.md) - [Extending with Macros](https://spatie.be/docs/laravel-pdf/v2/advanced-usage/extending-with-macros.md) - [Saving PDFs to disks](https://spatie.be/docs/laravel-pdf/v2/basic-usage/saving-pdfs-to-disks.md) - [Using the DOMPDF driver](https://spatie.be/docs/laravel-pdf/v2/drivers/using-the-dompdf-driver.md) - [Installation & setup](https://spatie.be/docs/laravel-pdf/v2/installation-setup.md) - [Queued PDF generation](https://spatie.be/docs/laravel-pdf/v2/basic-usage/queued-pdf-generation.md) - [Generating PDFs on AWS Lambda](https://spatie.be/docs/laravel-pdf/v2/drivers/generating-pdfs-on-aws-lambda.md) - [Using the Gotenberg driver](https://spatie.be/docs/laravel-pdf/v2/drivers/using-the-gotenberg-driver.md) - [Using the WeasyPrint driver](https://spatie.be/docs/laravel-pdf/v2/drivers/using-the-weasyprint-driver.md) - [Questions and issues](https://spatie.be/docs/laravel-pdf/v2/questions-issues.md) - [Alternatives](https://spatie.be/docs/laravel-pdf/v2/alternatives.md) - [Testing PDFs](https://spatie.be/docs/laravel-pdf/v2/basic-usage/testing-pdfs.md) - [Changelog](https://spatie.be/docs/laravel-pdf/v2/changelog.md) - [Setting defaults](https://spatie.be/docs/laravel-pdf/v2/basic-usage/setting-defaults.md) - [Custom drivers](https://spatie.be/docs/laravel-pdf/v2/drivers/custom-drivers.md) - [About us](https://spatie.be/docs/laravel-pdf/v2/about-us.md) - [lighthouse-php](https://spatie.be/docs/lighthouse-php/v2/introduction.md): Run Google Lighthouse using PHP - [Introduction](https://spatie.be/docs/lighthouse-php/v2/introduction.md) - [Generating your first report](https://spatie.be/docs/lighthouse-php/v2/usage/generating-your-first-report.md) - [Support us](https://spatie.be/docs/lighthouse-php/v2/support-us.md) - [Configuring a run](https://spatie.be/docs/lighthouse-php/v2/usage/configuring-a-run.md) - [Requirements](https://spatie.be/docs/lighthouse-php/v2/requirements.md) - [Working with results](https://spatie.be/docs/lighthouse-php/v2/usage/working-with-results.md) - [Installation & setup](https://spatie.be/docs/lighthouse-php/v2/installation-setup.md) - [Saving an HTML report](https://spatie.be/docs/lighthouse-php/v2/usage/saving-an-html-report.md) - [Questions and issues](https://spatie.be/docs/lighthouse-php/v2/questions-issues.md) - [Using performance budgets](https://spatie.be/docs/lighthouse-php/v2/usage/using-performance-budgets.md) - [Changelog](https://spatie.be/docs/lighthouse-php/v2/changelog.md) - [About us](https://spatie.be/docs/lighthouse-php/v2/about-us.md) - [laravel-prometheus](https://spatie.be/docs/laravel-prometheus/v1/introduction.md): Export Laravel metrics to Prometheus - [Creating multiple endpoints](https://spatie.be/docs/laravel-prometheus/v1/advance-usage/using-multiple-endpoints.md) - [Creating gauges](https://spatie.be/docs/laravel-prometheus/v1/basic-usage/creating-gauges.md) - [Introduction](https://spatie.be/docs/laravel-prometheus/v1/introduction.md) - [Introduction](https://spatie.be/docs/laravel-prometheus/v1/setting-up-prometheus-and-grafana/introduction.md) - [Creating collectors](https://spatie.be/docs/laravel-prometheus/v1/advance-usage/creating-collectors.md) - [Using Horizon exporters](https://spatie.be/docs/laravel-prometheus/v1/basic-usage/using-horizon-exporters.md) - [Using grafana.com](https://spatie.be/docs/laravel-prometheus/v1/setting-up-prometheus-and-grafana/using-grafana-com.md) - [Support us](https://spatie.be/docs/laravel-prometheus/v1/support-us.md) - [Using counter type metric](https://spatie.be/docs/laravel-prometheus/v1/advance-usage/using-counter-metric.md) - [Using Queue exporters](https://spatie.be/docs/laravel-prometheus/v1/basic-usage/using-queue-exporters.md) - [Requirements](https://spatie.be/docs/laravel-prometheus/v1/requirements.md) - [Self-hosted](https://spatie.be/docs/laravel-prometheus/v1/setting-up-prometheus-and-grafana/self-hosted.md) - [Installation & setup](https://spatie.be/docs/laravel-prometheus/v1/installation-setup.md) - [Using fly.io](https://spatie.be/docs/laravel-prometheus/v1/setting-up-prometheus-and-grafana/using-fly-metrics.md) - [Questions and issues](https://spatie.be/docs/laravel-prometheus/v1/questions-issues.md) - [Changelog](https://spatie.be/docs/laravel-prometheus/v1/changelog.md) - [About us](https://spatie.be/docs/laravel-prometheus/v1/about-us.md) - [laravel-dynamic-servers](https://spatie.be/docs/laravel-dynamic-servers/v1/introduction.md): Dynamically create and destroy servers - [Creating your own server provider](https://spatie.be/docs/laravel-dynamic-servers/v1/advanced-usage/creating-your-own-server-provider.md) - [Getting started](https://spatie.be/docs/laravel-dynamic-servers/v1/basic-usage/getting-started.md) - [Introduction](https://spatie.be/docs/laravel-dynamic-servers/v1/introduction.md) - [How servers are managed under the hood](https://spatie.be/docs/laravel-dynamic-servers/v1/advanced-usage/how-servers-are-managed-under-the-hood.md) - [Configuring your first server type](https://spatie.be/docs/laravel-dynamic-servers/v1/basic-usage/configuring-your-first-server-type.md) - [Support us](https://spatie.be/docs/laravel-dynamic-servers/v1/support-us.md) - [Dealing with erroring servers](https://spatie.be/docs/laravel-dynamic-servers/v1/advanced-usage/dealing-with-erroring-servers.md) - [Ensuring a number of servers](https://spatie.be/docs/laravel-dynamic-servers/v1/basic-usage/ensuring-a-number-of-servers.md) - [Requirements](https://spatie.be/docs/laravel-dynamic-servers/v1/requirements.md) - [Dealing with hanging servers](https://spatie.be/docs/laravel-dynamic-servers/v1/advanced-usage/dealing-with-hanging-servers.md) - [Rebooting servers](https://spatie.be/docs/laravel-dynamic-servers/v1/basic-usage/rebooting-servers.md) - [Installation & setup](https://spatie.be/docs/laravel-dynamic-servers/v1/installation-setup.md) - [Fired Events](https://spatie.be/docs/laravel-dynamic-servers/v1/advanced-usage/fired-events.md) - [Overriding actions and jobs](https://spatie.be/docs/laravel-dynamic-servers/v1/advanced-usage/overriding-actions.md) - [Using multiple server types](https://spatie.be/docs/laravel-dynamic-servers/v1/basic-usage/using-multiple-server-types.md) - [Questions and issues](https://spatie.be/docs/laravel-dynamic-servers/v1/questions-issues.md) - [Setting a server limit](https://spatie.be/docs/laravel-dynamic-servers/v1/advanced-usage/setting-a-server-limit.md) - [Manually increasing and decreasing servers](https://spatie.be/docs/laravel-dynamic-servers/v1/basic-usage/manually-increasing-and-decreasing-servers.md) - [Changelog](https://spatie.be/docs/laravel-dynamic-servers/v1/changelog.md) - [About us](https://spatie.be/docs/laravel-dynamic-servers/v1/about-us.md) - [laravel-livewire-wizard](https://spatie.be/docs/laravel-livewire-wizard/v2/introduction.md): Headless Livewire components to build wizards - [Introduction](https://spatie.be/docs/laravel-livewire-wizard/v2/introduction.md) - [Creating your first wizard](https://spatie.be/docs/laravel-livewire-wizard/v2/usage/creating-your-first-wizard.md) - [Support us](https://spatie.be/docs/laravel-livewire-wizard/v2/support-us.md) - [Navigating steps](https://spatie.be/docs/laravel-livewire-wizard/v2/usage/navigating-steps.md) - [Requirements](https://spatie.be/docs/laravel-livewire-wizard/v2/requirements.md) - [Rendering navigation](https://spatie.be/docs/laravel-livewire-wizard/v2/usage/rendering-navigation.md) - [Installation & setup](https://spatie.be/docs/laravel-livewire-wizard/v2/installation-setup.md) - [Accessing state](https://spatie.be/docs/laravel-livewire-wizard/v2/usage/accessing-state.md) - [Questions and issues](https://spatie.be/docs/laravel-livewire-wizard/v2/questions-issues.md) - [Setting initial state](https://spatie.be/docs/laravel-livewire-wizard/v2/usage/setting-initial-state.md) - [Changelog](https://spatie.be/docs/laravel-livewire-wizard/v2/changelog.md) - [Testing wizards](https://spatie.be/docs/laravel-livewire-wizard/v2/usage/testing-wizards.md) - [About us](https://spatie.be/docs/laravel-livewire-wizard/v2/about-us.md) - [laravel-translatable](https://spatie.be/docs/laravel-translatable/v6/introduction.md): Translatable Eloquent Models - [Available events](https://spatie.be/docs/laravel-translatable/v6/advanced-usage/available-events.md) - [Customize the toArray method](https://spatie.be/docs/laravel-translatable/v6/advanced-usage/customize-the-toarray-method.md) - [Usage with factories](https://spatie.be/docs/laravel-translatable/v6/advanced-usage/usage-with-factories.md) - [Getting and setting translations](https://spatie.be/docs/laravel-translatable/v6/basic-usage/getting-and-settings-translations.md) - [Introduction](https://spatie.be/docs/laravel-translatable/v6/introduction.md) - [Removing translations](https://spatie.be/docs/laravel-translatable/v6/basic-usage/removing-translations.md) - [Support us](https://spatie.be/docs/laravel-translatable/v6/support-us.md) - [Replacing translations](https://spatie.be/docs/laravel-translatable/v6/basic-usage/replacing-translations.md) - [Requirements](https://spatie.be/docs/laravel-translatable/v6/requirements.md) - [Upgrading](https://spatie.be/docs/laravel-translatable/v6/upgrading.md) - [Installation & setup](https://spatie.be/docs/laravel-translatable/v6/installation-setup.md) - [Querying translations](https://spatie.be/docs/laravel-translatable/v6/basic-usage/querying-translations.md) - [Questions and issues](https://spatie.be/docs/laravel-translatable/v6/questions-issues.md) - [Validation translations](https://spatie.be/docs/laravel-translatable/v6/basic-usage/validating-translations.md) - [Changelog](https://spatie.be/docs/laravel-translatable/v6/changelog.md) - [Handling missing translations](https://spatie.be/docs/laravel-translatable/v6/basic-usage/handling-missing-translations.md) - [About us](https://spatie.be/docs/laravel-translatable/v6/about-us.md) - [laravel-route-discovery](https://spatie.be/docs/laravel-route-discovery/v1/introduction.md): Automatically discover routes in a Laravel app - [Using route transformers](https://spatie.be/docs/laravel-route-discovery/v1/advanced-usage/using-route-transformers.md) - [Getting started](https://spatie.be/docs/laravel-route-discovery/v1/discovering-routes-for-controllers/getting-started.md) - [Discovering routes for views](https://spatie.be/docs/laravel-route-discovery/v1/discovering-routes-for-views/getting-started.md) - [Introduction](https://spatie.be/docs/laravel-route-discovery/v1/introduction.md) - [Mapping controllers to routes](https://spatie.be/docs/laravel-route-discovery/v1/discovering-routes-for-controllers/mapping-controllers-to-routes.md) - [Mapping views to routes](https://spatie.be/docs/laravel-route-discovery/v1/discovering-routes-for-views/mapping-views-to-routes.md) - [Support us](https://spatie.be/docs/laravel-route-discovery/v1/support-us.md) - [Requirements](https://spatie.be/docs/laravel-route-discovery/v1/requirements.md) - [Installation & setup](https://spatie.be/docs/laravel-route-discovery/v1/installation-setup.md) - [Questions and issues](https://spatie.be/docs/laravel-route-discovery/v1/questions-issues.md) - [Changelog](https://spatie.be/docs/laravel-route-discovery/v1/changelog.md) - [About us](https://spatie.be/docs/laravel-route-discovery/v1/about-us.md) - [laravel-comments](https://spatie.be/docs/laravel-comments/v2/introduction.md): Associate comments with Eloquent models - [Working with comments](https://spatie.be/docs/laravel-comments/v2/basic-usage/working-with-comments.md) - [Introduction](https://spatie.be/docs/laravel-comments/v2/introduction.md) - [Introduction](https://spatie.be/docs/laravel-comments/v2/livewire-components/introduction.md) - [Working with reactions](https://spatie.be/docs/laravel-comments/v2/basic-usage/working-with-reactions.md) - [Getting a license](https://spatie.be/docs/laravel-comments/v2/getting-a-license.md) - [Installation](https://spatie.be/docs/laravel-comments/v2/livewire-components/installation.md) - [Using the components](https://spatie.be/docs/laravel-comments/v2/livewire-components/using-the-components.md) - [Transforming comments](https://spatie.be/docs/laravel-comments/v2/basic-usage/transforming-comments.md) - [Requirements](https://spatie.be/docs/laravel-comments/v2/requirements.md) - [Sending notifications](https://spatie.be/docs/laravel-comments/v2/basic-usage/sending-notifications.md) - [Installation & setup](https://spatie.be/docs/laravel-comments/v2/installation-setup.md) - [Taking care of authorization](https://spatie.be/docs/laravel-comments/v2/livewire-components/taking-care-of-authorization.md) - [Approving comments](https://spatie.be/docs/laravel-comments/v2/basic-usage/approving-comments.md) - [Customising the views](https://spatie.be/docs/laravel-comments/v2/livewire-components/customising-the-views.md) - [Questions and issues](https://spatie.be/docs/laravel-comments/v2/questions-issues.md) - [Listing comments in Laravel Nova](https://spatie.be/docs/laravel-comments/v2/basic-usage/listing-comments-in-laravel-nova.md) - [Changelog](https://spatie.be/docs/laravel-comments/v2/changelog.md) - [Mentions](https://spatie.be/docs/laravel-comments/v2/livewire-components/mentions.md) - [Miscellaneous options](https://spatie.be/docs/laravel-comments/v2/livewire-components/miscellaneous-options.md) - [Using Markdown](https://spatie.be/docs/laravel-comments/v2/livewire-components/using-markdown.md) - [Upgrade guide](https://spatie.be/docs/laravel-comments/v2/upgrade.md) - [About us](https://spatie.be/docs/laravel-comments/v2/about-us.md) - [laravel-health](https://spatie.be/docs/laravel-health/v1/introduction.md): Monitor the health of a Laravel application - [Overview](https://spatie.be/docs/laravel-health/v1/available-checks/overview.md) - [Registering your first check](https://spatie.be/docs/laravel-health/v1/basic-usage/registering-your-first-check.md) - [General](https://spatie.be/docs/laravel-health/v1/configuring-notifications/general.md) - [Introduction](https://spatie.be/docs/laravel-health/v1/introduction.md) - [Using Secret Token](https://spatie.be/docs/laravel-health/v1/security/using-secret-token.md) - [General](https://spatie.be/docs/laravel-health/v1/storing-results/general.md) - [General](https://spatie.be/docs/laravel-health/v1/viewing-results/general.md) - [Backups](https://spatie.be/docs/laravel-health/v1/available-checks/backups.md) - [Via mail](https://spatie.be/docs/laravel-health/v1/configuring-notifications/via-mail.md) - [Via Slack](https://spatie.be/docs/laravel-health/v1/configuring-notifications/via-slack.md) - [As JSON](https://spatie.be/docs/laravel-health/v1/storing-results/in-a-json-file.md) - [In the cache](https://spatie.be/docs/laravel-health/v1/storing-results/in-cache.md) - [Support us](https://spatie.be/docs/laravel-health/v1/support-us.md) - [On a webpage](https://spatie.be/docs/laravel-health/v1/viewing-results/on-a-webpage.md) - [Application Cache](https://spatie.be/docs/laravel-health/v1/available-checks/cache.md) - [Creating custom checks](https://spatie.be/docs/laravel-health/v1/basic-usage/creating-custom-checks.md) - [Requirements](https://spatie.be/docs/laravel-health/v1/requirements.md) - [In the database](https://spatie.be/docs/laravel-health/v1/storing-results/in-the-database.md) - [On the CLI](https://spatie.be/docs/laravel-health/v1/viewing-results/on-the-cli.md) - [Cached config, routes, and events](https://spatie.be/docs/laravel-health/v1/available-checks/cached-config-routes-and-events.md) - [Manually running checks](https://spatie.be/docs/laravel-health/v1/basic-usage/manually-running-checks.md) - [Via Oh Dear](https://spatie.be/docs/laravel-health/v1/configuring-notifications/via-oh-dear.md) - [Installation & setup](https://spatie.be/docs/laravel-health/v1/installation-setup.md) - [Not storing results](https://spatie.be/docs/laravel-health/v1/storing-results/not-storing-results.md) - [As JSON](https://spatie.be/docs/laravel-health/v1/viewing-results/as-json.md) - [CPU load](https://spatie.be/docs/laravel-health/v1/available-checks/cpu-load.md) - [Conditionally running or modifying checks](https://spatie.be/docs/laravel-health/v1/basic-usage/conditionally-running-or-modifying-checks.md) - [Endpoints](https://spatie.be/docs/laravel-health/v1/basic-usage/endpoints.md) - [Pausing and resuming checks](https://spatie.be/docs/laravel-health/v1/basic-usage/pausing-and-resuming-checks.md) - [Registering the same check multiple times](https://spatie.be/docs/laravel-health/v1/basic-usage/registering-the-same-check-multiple-times.md) - [Testing](https://spatie.be/docs/laravel-health/v1/basic-usage/testing.md) - [Questions and issues](https://spatie.be/docs/laravel-health/v1/questions-issues.md) - [DB connection](https://spatie.be/docs/laravel-health/v1/available-checks/db-connection.md) - [Changelog](https://spatie.be/docs/laravel-health/v1/changelog.md) - [DB connection count](https://spatie.be/docs/laravel-health/v1/available-checks/db-connection-count.md) - [DB size](https://spatie.be/docs/laravel-health/v1/available-checks/db-size-check.md) - [DB table size](https://spatie.be/docs/laravel-health/v1/available-checks/db-table-size-check.md) - [Debug mode](https://spatie.be/docs/laravel-health/v1/available-checks/debug-mode.md) - [Environment](https://spatie.be/docs/laravel-health/v1/available-checks/environment.md) - [Flare error count](https://spatie.be/docs/laravel-health/v1/available-checks/flare-error-count.md) - [Horizon](https://spatie.be/docs/laravel-health/v1/available-checks/horizon.md) - [Meilisearch](https://spatie.be/docs/laravel-health/v1/available-checks/meilisearch.md) - [Ping](https://spatie.be/docs/laravel-health/v1/available-checks/ping.md) - [Queue](https://spatie.be/docs/laravel-health/v1/available-checks/queue.md) - [Redis](https://spatie.be/docs/laravel-health/v1/available-checks/redis.md) - [Redis memory usage](https://spatie.be/docs/laravel-health/v1/available-checks/redis-memory-usage.md) - [Schedule](https://spatie.be/docs/laravel-health/v1/available-checks/schedule.md) - [Security advisories](https://spatie.be/docs/laravel-health/v1/available-checks/security-advisories.md) - [Used disk space](https://spatie.be/docs/laravel-health/v1/available-checks/used-disk-space.md) - [About us](https://spatie.be/docs/laravel-health/v1/about-us.md) - [laravel-site-search](https://spatie.be/docs/laravel-site-search/v3/introduction.md): Create a full-text search index by crawling your site - [Creating multiple search indexes](https://spatie.be/docs/laravel-site-search/v3/advanced-usage/creating-multiple-search-indexes.md) - [High level overview](https://spatie.be/docs/laravel-site-search/v3/basic-usage/high-level-overview.md) - [Introduction](https://spatie.be/docs/laravel-site-search/v3/introduction.md) - [Using a custom indexer](https://spatie.be/docs/laravel-site-search/v3/advanced-usage/using-a-custom-indexer.md) - [Indexing your first site](https://spatie.be/docs/laravel-site-search/v3/basic-usage/indexing-your-first-site.md) - [Support us](https://spatie.be/docs/laravel-site-search/v3/support-us.md) - [Indexing extra properties](https://spatie.be/docs/laravel-site-search/v3/advanced-usage/indexing-extra-properties.md) - [Retrieving results](https://spatie.be/docs/laravel-site-search/v3/basic-usage/retrieving-results.md) - [Requirements](https://spatie.be/docs/laravel-site-search/v3/requirements.md) - [Preventing content from being indexed](https://spatie.be/docs/laravel-site-search/v3/basic-usage/preventing-content-from-being-indexed.md) - [Installation and setup](https://spatie.be/docs/laravel-site-search/v3/installation-setup.md) - [About us](https://spatie.be/docs/laravel-site-search/v3/about-us.md) - [Available events](https://spatie.be/docs/laravel-site-search/v3/advanced-usage/available-events.md) - [Using the database driver](https://spatie.be/docs/laravel-site-search/v3/advanced-usage/using-the-database-driver.md) - [Using a search profile](https://spatie.be/docs/laravel-site-search/v3/basic-usage/using-a-search-profile.md) - [Questions and issues](https://spatie.be/docs/laravel-site-search/v3/questions-issues.md) - [Using the Meilisearch driver](https://spatie.be/docs/laravel-site-search/v3/advanced-usage/using-the-meilisearch-driver.md) - [Changelog](https://spatie.be/docs/laravel-site-search/v3/changelog.md) - [Building a Filament integration](https://spatie.be/docs/laravel-site-search/v3/advanced-usage/filament-integration.md) - [Listing indexes](https://spatie.be/docs/laravel-site-search/v3/basic-usage/listing-indexes.md) - [Troubleshooting](https://spatie.be/docs/laravel-site-search/v3/basic-usage/troubleshooting.md) - [laravel-markdown](https://spatie.be/docs/laravel-markdown/v1/introduction.md): Powerful Markdown rendering for Laravel - [Highlighting lines](https://spatie.be/docs/laravel-markdown/v1/advanced-usage/highlighting-lines.md) - [Introduction](https://spatie.be/docs/laravel-markdown/v1/introduction.md) - [General usage](https://spatie.be/docs/laravel-markdown/v1/rendering-markdown/general-usage.md) - [General usage](https://spatie.be/docs/laravel-markdown/v1/usage-in-blade/general-usage.md) - [Caching results](https://spatie.be/docs/laravel-markdown/v1/advanced-usage/caching-results.md) - [Configuring code highlighting](https://spatie.be/docs/laravel-markdown/v1/rendering-markdown/configuring-code-highlighting.md) - [Support us](https://spatie.be/docs/laravel-markdown/v1/support-us.md) - [Configuring code highlighting](https://spatie.be/docs/laravel-markdown/v1/usage-in-blade/configuring-code-highlighting.md) - [Rendering anchors](https://spatie.be/docs/laravel-markdown/v1/rendering-markdown/rendering-anchors.md) - [Requirements](https://spatie.be/docs/laravel-markdown/v1/requirements.md) - [Rendering anchors](https://spatie.be/docs/laravel-markdown/v1/usage-in-blade/rendering-anchors.md) - [Installation & setup](https://spatie.be/docs/laravel-markdown/v1/installation-setup.md) - [Passing options to Commonmark](https://spatie.be/docs/laravel-markdown/v1/rendering-markdown/passing-options-to-commonmark.md) - [Questions and issues](https://spatie.be/docs/laravel-markdown/v1/questions-issues.md) - [Changelog](https://spatie.be/docs/laravel-markdown/v1/changelog.md) - [Customizing the rendering process](https://spatie.be/docs/laravel-markdown/v1/advanced-usage/customizing-the-rendering-process.md) - [Resources and alternatives](https://spatie.be/docs/laravel-markdown/v1/resources-and-alternatives.md) - [Passing options to Commonmark](https://spatie.be/docs/laravel-markdown/v1/usage-in-blade/passing-options-to-commonmark.md) - [About us](https://spatie.be/docs/laravel-markdown/v1/about-us.md) - [](https://spatie.be/docs/laravel-markdown/v1/usage-in-blade/adding-custom-attributes.md) - [laravel-backup](https://spatie.be/docs/laravel-backup/v10/introduction.md): One day you'll thank us for this - [Adding extra files to a backup](https://spatie.be/docs/laravel-backup/v10/advanced-usage/adding-extra-files-to-a-backup.md) - [Cleaning up old backups](https://spatie.be/docs/laravel-backup/v10/cleaning-up-old-backups/overview.md) - [Introduction](https://spatie.be/docs/laravel-backup/v10/introduction.md) - [Monitoring the health of all backups](https://spatie.be/docs/laravel-backup/v10/monitoring-the-health-of-all-backups/overview.md) - [Sending notifications](https://spatie.be/docs/laravel-backup/v10/sending-notifications/overview.md) - [Taking backups](https://spatie.be/docs/laravel-backup/v10/taking-backups/overview.md) - [Backing up a non-laravel application](https://spatie.be/docs/laravel-backup/v10/advanced-usage/backing-up-a-non-laravel-application.md) - [Events](https://spatie.be/docs/laravel-backup/v10/cleaning-up-old-backups/events.md) - [Creating your custom health check](https://spatie.be/docs/laravel-backup/v10/monitoring-the-health-of-all-backups/creating-your-custom-health-check.md) - [Adding extra notification channels](https://spatie.be/docs/laravel-backup/v10/sending-notifications/adding-extra-notification-channels.md) - [Support us](https://spatie.be/docs/laravel-backup/v10/support-us.md) - [Events](https://spatie.be/docs/laravel-backup/v10/taking-backups/events.md) - [Binary database dumps with PostgreSQL](https://spatie.be/docs/laravel-backup/v10/advanced-usage/binary-database-dumps-with-postgresql.md) - [Events](https://spatie.be/docs/laravel-backup/v10/monitoring-the-health-of-all-backups/events.md) - [Requirements](https://spatie.be/docs/laravel-backup/v10/requirements.md) - [Customizing the notifiable](https://spatie.be/docs/laravel-backup/v10/sending-notifications/customizing-the-notifiable.md) - [Encrypt backup archives](https://spatie.be/docs/laravel-backup/v10/advanced-usage/encrypt-backup-archives.md) - [High level overview](https://spatie.be/docs/laravel-backup/v10/high-level-overview.md) - [Isolated mode](https://spatie.be/docs/laravel-backup/v10/advanced-usage/isolated-mode.md) - [Installation and setup](https://spatie.be/docs/laravel-backup/v10/installation-and-setup.md) - [Questions & issues](https://spatie.be/docs/laravel-backup/v10/questions-and-issues.md) - [Changelog](https://spatie.be/docs/laravel-backup/v10/changelog.md) - [About us](https://spatie.be/docs/laravel-backup/v10/about-us.md) - [laravel-medialibrary](https://spatie.be/docs/laravel-medialibrary/v11/introduction.md): Associate files with Eloquent models. - [Working with multiple filesystems](https://spatie.be/docs/laravel-medialibrary/v11/advanced-usage/working-with-multiple-filesystems.md) - [Adding files](https://spatie.be/docs/laravel-medialibrary/v11/api/adding-files.md) - [Preparing your model](https://spatie.be/docs/laravel-medialibrary/v11/basic-usage/preparing-your-model.md) - [Defining conversions](https://spatie.be/docs/laravel-medialibrary/v11/converting-images/defining-conversions.md) - [Using image generators](https://spatie.be/docs/laravel-medialibrary/v11/converting-other-file-types/using-image-generators.md) - [Downloading a single file](https://spatie.be/docs/laravel-medialibrary/v11/downloading-media/downloading-a-single-file.md) - [Introduction](https://spatie.be/docs/laravel-medialibrary/v11/introduction.md) - [Getting started with responsive images](https://spatie.be/docs/laravel-medialibrary/v11/responsive-images/getting-started-with-responsive-images.md) - [Simple media collections](https://spatie.be/docs/laravel-medialibrary/v11/working-with-media-collections/simple-media-collections.md) - [Using custom properties](https://spatie.be/docs/laravel-medialibrary/v11/advanced-usage/using-custom-properties.md) - [Defining conversions](https://spatie.be/docs/laravel-medialibrary/v11/api/defining-conversions.md) - [Associating files](https://spatie.be/docs/laravel-medialibrary/v11/basic-usage/associating-files.md) - [Retrieving converted images](https://spatie.be/docs/laravel-medialibrary/v11/converting-images/retrieving-converted-images.md) - [Creating a custom image generator](https://spatie.be/docs/laravel-medialibrary/v11/converting-other-file-types/creating-a-custom-image-generator.md) - [Downloading multiple files](https://spatie.be/docs/laravel-medialibrary/v11/downloading-media/downloading-multiple-files.md) - [Using your own width calculator](https://spatie.be/docs/laravel-medialibrary/v11/responsive-images/using-your-own-width-calculator.md) - [Support us](https://spatie.be/docs/laravel-medialibrary/v11/support-us.md) - [Defining media collections](https://spatie.be/docs/laravel-medialibrary/v11/working-with-media-collections/defining-media-collections.md) - [Storing media specific manipulations](https://spatie.be/docs/laravel-medialibrary/v11/advanced-usage/storing-media-specific-manipulations.md) - [Retrieving media](https://spatie.be/docs/laravel-medialibrary/v11/basic-usage/retrieving-media.md) - [Optimizing converted images](https://spatie.be/docs/laravel-medialibrary/v11/converting-images/optimizing-converted-images.md) - [Customizing the rendered HTML](https://spatie.be/docs/laravel-medialibrary/v11/responsive-images/customizing-the-rendered-html.md) - [Using your own model](https://spatie.be/docs/laravel-medialibrary/v11/advanced-usage/using-your-own-model.md) - [Regenerating images](https://spatie.be/docs/laravel-medialibrary/v11/converting-images/regenerating-images.md) - [Base installation](https://spatie.be/docs/laravel-medialibrary/v11/installation-setup.md) - [Generating your own tiny placeholder](https://spatie.be/docs/laravel-medialibrary/v11/responsive-images/generating-your-own-tiny-placeholder.md) - [Outputting media](https://spatie.be/docs/laravel-medialibrary/v11/advanced-usage/outputting-media.md) - [Rendering media](https://spatie.be/docs/laravel-medialibrary/v11/advanced-usage/rendering-media.md) - [Using a custom directory structure](https://spatie.be/docs/laravel-medialibrary/v11/advanced-usage/using-a-custom-directory-structure.md) - [Using a custom file removal strategy](https://spatie.be/docs/laravel-medialibrary/v11/advanced-usage/using-a-custom-file-removal-strategy.md) - [Questions and issues](https://spatie.be/docs/laravel-medialibrary/v11/questions-issues.md) - [Requirements](https://spatie.be/docs/laravel-medialibrary/v11/requirements.md) - [Responsive images demo](https://spatie.be/docs/laravel-medialibrary/v11/responsive-images/demo.md) - [Upgrading](https://spatie.be/docs/laravel-medialibrary/v11/upgrading.md) - [Ordering media](https://spatie.be/docs/laravel-medialibrary/v11/advanced-usage/ordering-media.md) - [Using a custom media downloader](https://spatie.be/docs/laravel-medialibrary/v11/advanced-usage/using-a-custom-media-downloader.md) - [Changelog](https://spatie.be/docs/laravel-medialibrary/v11/changelog.md) - [Moving media](https://spatie.be/docs/laravel-medialibrary/v11/advanced-usage/moving-media.md) - [Consuming events](https://spatie.be/docs/laravel-medialibrary/v11/advanced-usage/consuming-events.md) - [Troubleshooting](https://spatie.be/docs/laravel-medialibrary/v11/troubleshooting.md) - [Attaching media in mails](https://spatie.be/docs/laravel-medialibrary/v11/advanced-usage/attaching-media-in-mails.md) - [Generating custom URLs](https://spatie.be/docs/laravel-medialibrary/v11/advanced-usage/generating-custom-urls.md) - [Overriding default filesystem behavior](https://spatie.be/docs/laravel-medialibrary/v11/advanced-usage/overriding-the-default-filesystem-behaviour.md) - [Naming generated files](https://spatie.be/docs/laravel-medialibrary/v11/advanced-usage/naming-files.md) - [Disable CDN](https://spatie.be/docs/laravel-medialibrary/v11/advanced-usage/disable-cdn.md) - [Customising Database Connections](https://spatie.be/docs/laravel-medialibrary/v11/advanced-usage/customising-database-connections.md) - [About us](https://spatie.be/docs/laravel-medialibrary/v11/about-us.md) - [laravel-medialibrary-pro](https://spatie.be/docs/laravel-medialibrary-pro/v6/introduction.md): Media Library Pro v6 - [Customizing CSS](https://spatie.be/docs/laravel-medialibrary-pro/v6/advanced/customizing.md) - [Installation](https://spatie.be/docs/laravel-medialibrary-pro/v6/blade/installation.md) - [Introduction](https://spatie.be/docs/laravel-medialibrary-pro/v6/introduction.md) - [Livewire 2](https://spatie.be/docs/laravel-medialibrary-pro/v6/legacy/livewire-2.md) - [Installation](https://spatie.be/docs/laravel-medialibrary-pro/v6/livewire/installation.md) - [Installation](https://spatie.be/docs/laravel-medialibrary-pro/v6/react/installation.md) - [Authorisation](https://spatie.be/docs/laravel-medialibrary-pro/v6/security/authorisation.md) - [Installation](https://spatie.be/docs/laravel-medialibrary-pro/v6/vue/installation.md) - [Customize the preview images](https://spatie.be/docs/laravel-medialibrary-pro/v6/advanced/custom-preview-images.md) - [Usage](https://spatie.be/docs/laravel-medialibrary-pro/v6/blade/usage.md) - [Laravel Mix](https://spatie.be/docs/laravel-medialibrary-pro/v6/legacy/laravel-mix.md) - [Attachments](https://spatie.be/docs/laravel-medialibrary-pro/v6/livewire/attachments.md) - [Usage](https://spatie.be/docs/laravel-medialibrary-pro/v6/react/usage.md) - [Configure allowed mime types](https://spatie.be/docs/laravel-medialibrary-pro/v6/security/allowed-mime-types.md) - [Usage](https://spatie.be/docs/laravel-medialibrary-pro/v6/vue/usage.md) - [Collection](https://spatie.be/docs/laravel-medialibrary-pro/v6/livewire/collection.md) - [Requirements](https://spatie.be/docs/laravel-medialibrary-pro/v6/requirements.md) - [Rate limiting](https://spatie.be/docs/laravel-medialibrary-pro/v6/security/rate-limiting.md) - [Customize the upload URL](https://spatie.be/docs/laravel-medialibrary-pro/v6/advanced/customiz-upload-url.md) - [License](https://spatie.be/docs/laravel-medialibrary-pro/v6/license.md) - [Uploading to S3](https://spatie.be/docs/laravel-medialibrary-pro/v6/livewire/uploading-to-s3.md) - [Available props](https://spatie.be/docs/laravel-medialibrary-pro/v6/react/available-props.md) - [Inertia](https://spatie.be/docs/laravel-medialibrary-pro/v6/react/inertia.md) - [Available props](https://spatie.be/docs/laravel-medialibrary-pro/v6/vue/available-props.md) - [Inertia](https://spatie.be/docs/laravel-medialibrary-pro/v6/vue/inertia.md) - [Getting help](https://spatie.be/docs/laravel-medialibrary-pro/v6/getting-help.md) - [Next.js](https://spatie.be/docs/laravel-medialibrary-pro/v6/react/nextjs.md) - [Translations](https://spatie.be/docs/laravel-medialibrary-pro/v6/react/translations.md) - [Vapor support](https://spatie.be/docs/laravel-medialibrary-pro/v6/react/vapor.md) - [Translations](https://spatie.be/docs/laravel-medialibrary-pro/v6/vue/translations.md) - [Vapor support](https://spatie.be/docs/laravel-medialibrary-pro/v6/vue/vapor.md) - [Creating custom components](https://spatie.be/docs/laravel-medialibrary-pro/v6/react/creating-custom-components.md) - [Creating custom components](https://spatie.be/docs/laravel-medialibrary-pro/v6/vue/creating-custom-components.md) - [Usage in a frontend repository](https://spatie.be/docs/laravel-medialibrary-pro/v6/advanced/usage-in-a-frontend-repository.md) - [Upgrading](https://spatie.be/docs/laravel-medialibrary-pro/v6/upgrading.md) - [About us](https://spatie.be/docs/laravel-medialibrary-pro/v6/about-us.md) - [](https://spatie.be/docs/laravel-medialibrary-pro/v6/demo-application.md) - [laravel-blade-x](https://spatie.be/docs/laravel-blade-x/v2/introduction.md): Supercharged Blade Components - [Transforming data with view models](https://spatie.be/docs/laravel-blade-x/v2/advanced-usage/transforming-data-with-view-models.md) - [Writing your first component](https://spatie.be/docs/laravel-blade-x/v2/basic-usage/writing-your-first-component.md) - [Introduction](https://spatie.be/docs/laravel-blade-x/v2/introduction.md) - [From BladeX to Blade](https://spatie.be/docs/laravel-blade-x/v2/under-the-hood/from-bladex-to-blade.md) - [Sharing data with context](https://spatie.be/docs/laravel-blade-x/v2/advanced-usage/sharing-data-with-context.md) - [Using variables](https://spatie.be/docs/laravel-blade-x/v2/basic-usage/using-variables.md) - [Postcardware](https://spatie.be/docs/laravel-blade-x/v2/postcardware.md) - [Prefixing components](https://spatie.be/docs/laravel-blade-x/v2/advanced-usage/prefixing-components.md) - [Using slots](https://spatie.be/docs/laravel-blade-x/v2/basic-usage/using-slots.md) - [Requirements](https://spatie.be/docs/laravel-blade-x/v2/requirements.md) - [Installation & setup](https://spatie.be/docs/laravel-blade-x/v2/installation-setup.md) - [Questions and issues](https://spatie.be/docs/laravel-blade-x/v2/questions-issues.md) - [Changelog](https://spatie.be/docs/laravel-blade-x/v2/changelog.md) - [Upgrading](https://spatie.be/docs/laravel-blade-x/v2/upgrading.md) - [About us](https://spatie.be/docs/laravel-blade-x/v2/about-us.md) - [laravel-tags](https://spatie.be/docs/laravel-tags/v4/introduction.md): A powerful tagging package. Batteries included. - [Adding translations](https://spatie.be/docs/laravel-tags/v4/advanced-usage/adding-translations.md) - [Using tags](https://spatie.be/docs/laravel-tags/v4/basic-usage/using-tags.md) - [Introduction](https://spatie.be/docs/laravel-tags/v4/introduction.md) - [Using types](https://spatie.be/docs/laravel-tags/v4/advanced-usage/using-types.md) - [Retrieving tagged models](https://spatie.be/docs/laravel-tags/v4/basic-usage/retrieving-tagged-models.md) - [Postcardware](https://spatie.be/docs/laravel-tags/v4/postcardware.md) - [Sorting tags](https://spatie.be/docs/laravel-tags/v4/advanced-usage/sorting-tags.md) - [Requirements](https://spatie.be/docs/laravel-tags/v4/requirements.md) - [Using your own tag model](https://spatie.be/docs/laravel-tags/v4/advanced-usage/using-your-own-tag-model.md) - [Installation and Setup](https://spatie.be/docs/laravel-tags/v4/installation-and-setup.md) - [Questions and issues](https://spatie.be/docs/laravel-tags/v4/questions-and-issues.md) - [Changelog](https://spatie.be/docs/laravel-tags/v4/changelog.md) - [About us](https://spatie.be/docs/laravel-tags/v4/about-us.md) - [Using another default locale](https://spatie.be/docs/laravel-tags/v4/advanced-usage/using-another-default-locale.md) - [laravel-activitylog](https://spatie.be/docs/laravel-activitylog/v4/introduction.md): Log the activities of your users - [Logging model events](https://spatie.be/docs/laravel-activitylog/v4/advanced-usage/logging-model-events.md) - [Log Options](https://spatie.be/docs/laravel-activitylog/v4/api/log-options.md) - [Logging activity](https://spatie.be/docs/laravel-activitylog/v4/basic-usage/logging-activity.md) - [Introduction](https://spatie.be/docs/laravel-activitylog/v4/introduction.md) - [Manipulate changes array](https://spatie.be/docs/laravel-activitylog/v4/advanced-usage/manipulate-changes-array.md) - [Log Batch](https://spatie.be/docs/laravel-activitylog/v4/api/log-batch.md) - [Cleaning up the log](https://spatie.be/docs/laravel-activitylog/v4/basic-usage/cleaning-up-the-log.md) - [Support us](https://spatie.be/docs/laravel-activitylog/v4/support-us.md) - [Batch Logs](https://spatie.be/docs/laravel-activitylog/v4/advanced-usage/batch-logs.md) - [Causer Resolver](https://spatie.be/docs/laravel-activitylog/v4/api/causer-resolver.md) - [Requirements](https://spatie.be/docs/laravel-activitylog/v4/requirements.md) - [Define causer for runtime](https://spatie.be/docs/laravel-activitylog/v4/advanced-usage/define-causer-for-runtime.md) - [Using placeholders](https://spatie.be/docs/laravel-activitylog/v4/advanced-usage/using-placeholders.md) - [Event Bag](https://spatie.be/docs/laravel-activitylog/v4/api/event-bag.md) - [Installation and Setup](https://spatie.be/docs/laravel-activitylog/v4/installation-and-setup.md) - [Using multiple logs](https://spatie.be/docs/laravel-activitylog/v4/advanced-usage/using-multiple-logs.md) - [Questions and issues](https://spatie.be/docs/laravel-activitylog/v4/questions-and-issues.md) - [Disabling logging](https://spatie.be/docs/laravel-activitylog/v4/advanced-usage/disabling-logging.md) - [Changelog](https://spatie.be/docs/laravel-activitylog/v4/changelog.md) - [Upgrading](https://spatie.be/docs/laravel-activitylog/v4/upgrading.md) - [About us](https://spatie.be/docs/laravel-activitylog/v4/about-us.md) - [laravel-html](https://spatie.be/docs/laravel-html/v3/introduction.md): Generate html with ease - [Core concepts](https://spatie.be/docs/laravel-html/v3/general-usage/core-concepts.md) - [Introduction](https://spatie.be/docs/laravel-html/v3/introduction.md) - [Extending the package](https://spatie.be/docs/laravel-html/v3/general-usage/extending.md) - [HTML builder](https://spatie.be/docs/laravel-html/v3/general-usage/html-builder.md) - [Postcardware](https://spatie.be/docs/laravel-html/v3/postcardware.md) - [Element classes](https://spatie.be/docs/laravel-html/v3/general-usage/element-classes.md) - [Installation & setup in Laravel](https://spatie.be/docs/laravel-html/v3/installation-setup.md) - [Element methods](https://spatie.be/docs/laravel-html/v3/general-usage/element-methods.md) - [Upgrading](https://spatie.be/docs/laravel-html/v3/upgrading.md) - [The class() helper](https://spatie.be/docs/laravel-html/v3/general-usage/the-class-helper.md) - [Questions and issues](https://spatie.be/docs/laravel-html/v3/questions-issues.md) - [Changelog](https://spatie.be/docs/laravel-html/v3/changelog.md) - [laravel-server-monitor](https://spatie.be/docs/laravel-server-monitor/v1/introduction.md): Don't let them melt - [Manually modifying hosts and checks](https://spatie.be/docs/laravel-server-monitor/v1/advanced-usage/manually-configure-hosts-and-checks.md) - [Introduction](https://spatie.be/docs/laravel-server-monitor/v1/introduction.md) - [Managing hosts](https://spatie.be/docs/laravel-server-monitor/v1/monitoring-basics/managing-hosts.md) - [Using your own model](https://spatie.be/docs/laravel-server-monitor/v1/advanced-usage/using-your-own-model.md) - [Built in checks](https://spatie.be/docs/laravel-server-monitor/v1/monitoring-basics/built-in-checks.md) - [Postcardware](https://spatie.be/docs/laravel-server-monitor/v1/postcardware.md) - [Customizing notifications](https://spatie.be/docs/laravel-server-monitor/v1/advanced-usage/customizing-notifications.md) - [Listing hosts and checks](https://spatie.be/docs/laravel-server-monitor/v1/monitoring-basics/listing-hosts-and-checks.md) - [Requirements](https://spatie.be/docs/laravel-server-monitor/v1/requirements.md) - [Manipulating processes](https://spatie.be/docs/laravel-server-monitor/v1/advanced-usage/manipulating-processes.md) - [High level overview](https://spatie.be/docs/laravel-server-monitor/v1/high-level-overview.md) - [Writing your own checks](https://spatie.be/docs/laravel-server-monitor/v1/monitoring-basics/writing-your-own-checks.md) - [Installation and setup](https://spatie.be/docs/laravel-server-monitor/v1/installation-and-setup.md) - [Notifications and events](https://spatie.be/docs/laravel-server-monitor/v1/monitoring-basics/notifications-and-events.md) - [Using the stand alone version](https://spatie.be/docs/laravel-server-monitor/v1/using-the-stand-alone-version.md) - [Questions & issues](https://spatie.be/docs/laravel-server-monitor/v1/questions-and-issues.md) - [Changelog](https://spatie.be/docs/laravel-server-monitor/v1/changelog.md) - [About us](https://spatie.be/docs/laravel-server-monitor/v1/about-us.md) - [laravel-uptime-monitor](https://spatie.be/docs/laravel-uptime-monitor/v3/introduction.md): A powerful and easy to configure uptime monitor. - [Manually modifying monitors](https://spatie.be/docs/laravel-uptime-monitor/v3/advanced-usage/manually-modifying-monitors.md) - [Introduction](https://spatie.be/docs/laravel-uptime-monitor/v3/introduction.md) - [Getting started](https://spatie.be/docs/laravel-uptime-monitor/v3/monitoring-ssl-certificates/getting-started.md) - [Adding and removing sites](https://spatie.be/docs/laravel-uptime-monitor/v3/monitoring-uptime/getting-started.md) - [Syncing monitors from a file](https://spatie.be/docs/laravel-uptime-monitor/v3/advanced-usage/syncing-monitors-from-a-file.md) - [Events](https://spatie.be/docs/laravel-uptime-monitor/v3/monitoring-ssl-certificates/events.md) - [Events](https://spatie.be/docs/laravel-uptime-monitor/v3/monitoring-uptime/events.md) - [Postcardware](https://spatie.be/docs/laravel-uptime-monitor/v3/postcardware.md) - [Customizing the uptime check](https://spatie.be/docs/laravel-uptime-monitor/v3/advanced-usage/customizing-the-uptime-check.md) - [Notifications](https://spatie.be/docs/laravel-uptime-monitor/v3/monitoring-ssl-certificates/notifications.md) - [Notifications](https://spatie.be/docs/laravel-uptime-monitor/v3/monitoring-uptime/notifications.md) - [Requirements](https://spatie.be/docs/laravel-uptime-monitor/v3/requirements.md) - [Customizing notifications](https://spatie.be/docs/laravel-uptime-monitor/v3/advanced-usage/customizing-notifications.md) - [Upgrading from a previous version](https://spatie.be/docs/laravel-uptime-monitor/v3/upgrading-from-v2.md) - [Disabling monitors](https://spatie.be/docs/laravel-uptime-monitor/v3/advanced-usage/disabling-monitors.md) - [High level overview](https://spatie.be/docs/laravel-uptime-monitor/v3/high-level-overview.md) - [Using your own model](https://spatie.be/docs/laravel-uptime-monitor/v3/advanced-usage/using-your-own-model.md) - [Installation and setup](https://spatie.be/docs/laravel-uptime-monitor/v3/installation-and-setup.md) - [Monitoring from multiple locations](https://spatie.be/docs/laravel-uptime-monitor/v3/advanced-usage/monitoring-from-multiple-locations.md) - [Questions & issues](https://spatie.be/docs/laravel-uptime-monitor/v3/questions-and-issues.md) - [Sending and verifying a payload](https://spatie.be/docs/laravel-uptime-monitor/v3/advanced-usage/sending-and-verifying-a-payload.md) - [Changelog](https://spatie.be/docs/laravel-uptime-monitor/v3/changelog.md) - [About us](https://spatie.be/docs/laravel-uptime-monitor/v3/about-us.md) - [laravel-slack-slash-command](https://spatie.be/docs/laravel-slack-slash-command/v1/introduction.md): Make a Laravel app respond to a slash command from Slack - [Sending delayed responses](https://spatie.be/docs/laravel-slack-slash-command/v1/advanced-usage/sending-delayed-responses.md) - [Introduction](https://spatie.be/docs/laravel-slack-slash-command/v1/introduction.md) - [General flow](https://spatie.be/docs/laravel-slack-slash-command/v1/usage/general-flow.md) - [Using signature handlers](https://spatie.be/docs/laravel-slack-slash-command/v1/advanced-usage/using-signature-handlers.md) - [Postcardware](https://spatie.be/docs/laravel-slack-slash-command/v1/postcardware.md) - [Sending a basic response](https://spatie.be/docs/laravel-slack-slash-command/v1/usage/sending-a-basic-response.md) - [Responding to multiple commands](https://spatie.be/docs/laravel-slack-slash-command/v1/advanced-usage/responding-to-multiple-commands.md) - [Requirements](https://spatie.be/docs/laravel-slack-slash-command/v1/requirements.md) - [Making your response look good](https://spatie.be/docs/laravel-slack-slash-command/v1/usage/making-your-response-look-good.md) - [Installation and Setup](https://spatie.be/docs/laravel-slack-slash-command/v1/installation-and-setup.md) - [Making your attachments interactive](https://spatie.be/docs/laravel-slack-slash-command/v1/usage/making-your-attachments-interactive.md) - [Questions and issues](https://spatie.be/docs/laravel-slack-slash-command/v1/questions-and-issues.md) - [Changelog](https://spatie.be/docs/laravel-slack-slash-command/v1/changelog.md) - [About us](https://spatie.be/docs/laravel-slack-slash-command/v1/about-us.md) - [laravel-model-states](https://spatie.be/docs/laravel-model-states/v2/01-introduction.md): Advanced state support for Laravel models - [Introduction](https://spatie.be/docs/laravel-model-states/v2/01-introduction.md) - [State scopes](https://spatie.be/docs/laravel-model-states/v2/querybuilder-support/01-state-scopes.md) - [State validation rule](https://spatie.be/docs/laravel-model-states/v2/request-validation/01-state-validation-rule.md) - [Configuring states](https://spatie.be/docs/laravel-model-states/v2/working-with-states/01-configuring-states.md) - [Configuring transitions](https://spatie.be/docs/laravel-model-states/v2/working-with-transitions/01-configuring-transitions.md) - [Postcardware](https://spatie.be/docs/laravel-model-states/v2/02-postcardware.md) - [Serializing states](https://spatie.be/docs/laravel-model-states/v2/working-with-states/02-serializing-states.md) - [Custom transition classes](https://spatie.be/docs/laravel-model-states/v2/working-with-transitions/02-custom-transition-classes.md) - [Requirements](https://spatie.be/docs/laravel-model-states/v2/03-requirements.md) - [Listing states](https://spatie.be/docs/laravel-model-states/v2/working-with-states/03-listing-states.md) - [Dependency injection in transition classes](https://spatie.be/docs/laravel-model-states/v2/working-with-transitions/03-dependency-injection-in-transition-classes.md) - [Installation & setup](https://spatie.be/docs/laravel-model-states/v2/04-installation-setup.md) - [Retrieving transitionable states](https://spatie.be/docs/laravel-model-states/v2/working-with-transitions/04-retrieving-transitionable-states.md) - [Questions and issues](https://spatie.be/docs/laravel-model-states/v2/05-questions-issues.md) - [Transition events](https://spatie.be/docs/laravel-model-states/v2/working-with-transitions/05-transition-events.md) - [Changelog](https://spatie.be/docs/laravel-model-states/v2/06-changelog.md) - [Custom default transition class](https://spatie.be/docs/laravel-model-states/v2/working-with-transitions/06-custom-default-transition-class.md) - [About us](https://spatie.be/docs/laravel-model-states/v2/07-about-us.md) - [laravel-permission](https://spatie.be/docs/laravel-permission/v7/introduction.md): Associate users with roles and permissions - [Testing](https://spatie.be/docs/laravel-permission/v7/advanced-usage/testing.md) - [Basic Usage](https://spatie.be/docs/laravel-permission/v7/basic-usage/basic-usage.md) - [Roles vs Permissions](https://spatie.be/docs/laravel-permission/v7/best-practices/roles-vs-permissions.md) - [Introduction](https://spatie.be/docs/laravel-permission/v7/introduction.md) - [Database Seeding](https://spatie.be/docs/laravel-permission/v7/advanced-usage/seeding.md) - [Direct Permissions](https://spatie.be/docs/laravel-permission/v7/basic-usage/direct-permissions.md) - [Model Policies](https://spatie.be/docs/laravel-permission/v7/best-practices/using-policies.md) - [Support us](https://spatie.be/docs/laravel-permission/v7/support-us.md) - [Exceptions](https://spatie.be/docs/laravel-permission/v7/advanced-usage/exceptions.md) - [Using Permissions via Roles](https://spatie.be/docs/laravel-permission/v7/basic-usage/role-permissions.md) - [Prerequisites](https://spatie.be/docs/laravel-permission/v7/prerequisites.md) - [Extending](https://spatie.be/docs/laravel-permission/v7/advanced-usage/extending.md) - [Enums](https://spatie.be/docs/laravel-permission/v7/basic-usage/enums.md) - [Installation in Laravel](https://spatie.be/docs/laravel-permission/v7/installation-laravel.md) - [Cache](https://spatie.be/docs/laravel-permission/v7/advanced-usage/cache.md) - [Events](https://spatie.be/docs/laravel-permission/v7/advanced-usage/events.md) - [Teams permissions](https://spatie.be/docs/laravel-permission/v7/basic-usage/teams-permissions.md) - [Custom Permission Check](https://spatie.be/docs/laravel-permission/v7/advanced-usage/custom-permission-check.md) - [Wildcard permissions](https://spatie.be/docs/laravel-permission/v7/basic-usage/wildcard-permissions.md) - [Upgrading](https://spatie.be/docs/laravel-permission/v7/upgrading.md) - [UUID/ULID](https://spatie.be/docs/laravel-permission/v7/advanced-usage/uuid.md) - [Blade directives](https://spatie.be/docs/laravel-permission/v7/basic-usage/blade-directives.md) - [PhpStorm Interaction](https://spatie.be/docs/laravel-permission/v7/advanced-usage/phpstorm.md) - [Defining a Super-Admin](https://spatie.be/docs/laravel-permission/v7/basic-usage/super-admin.md) - [Other](https://spatie.be/docs/laravel-permission/v7/advanced-usage/other.md) - [Using multiple guards](https://spatie.be/docs/laravel-permission/v7/basic-usage/multiple-guards.md) - [Questions and issues](https://spatie.be/docs/laravel-permission/v7/questions-issues.md) - [Timestamps](https://spatie.be/docs/laravel-permission/v7/advanced-usage/timestamps.md) - [Artisan Commands](https://spatie.be/docs/laravel-permission/v7/basic-usage/artisan.md) - [Performance Tips](https://spatie.be/docs/laravel-permission/v7/best-practices/performance.md) - [Changelog](https://spatie.be/docs/laravel-permission/v7/changelog.md) - [UI Options](https://spatie.be/docs/laravel-permission/v7/advanced-usage/ui-options.md) - [Middleware](https://spatie.be/docs/laravel-permission/v7/basic-usage/middleware.md) - [Passport Client Credentials Grant usage](https://spatie.be/docs/laravel-permission/v7/basic-usage/passport.md) - [Example App](https://spatie.be/docs/laravel-permission/v7/basic-usage/new-app.md) - [About us](https://spatie.be/docs/laravel-permission/v7/about-us.md) - [laravel-query-builder](https://spatie.be/docs/laravel-query-builder/v7/introduction.md): Easily build Eloquent queries from API requests. - [Extending query builder](https://spatie.be/docs/laravel-query-builder/v7/advanced-usage/extending-query-builder.md) - [Filtering](https://spatie.be/docs/laravel-query-builder/v7/features/filtering.md) - [Introduction](https://spatie.be/docs/laravel-query-builder/v7/introduction.md) - [Pagination](https://spatie.be/docs/laravel-query-builder/v7/advanced-usage/pagination.md) - [Sorting](https://spatie.be/docs/laravel-query-builder/v7/features/sorting.md) - [Including relationships](https://spatie.be/docs/laravel-query-builder/v7/features/including-relationships.md) - [Requirements](https://spatie.be/docs/laravel-query-builder/v7/requirements.md) - [About us](https://spatie.be/docs/laravel-query-builder/v7/about-us.md) - [Multi value delimiter](https://spatie.be/docs/laravel-query-builder/v7/advanced-usage/multi-value-delimiter.md) - [Selecting fields](https://spatie.be/docs/laravel-query-builder/v7/features/selecting-fields.md) - [Installation & setup](https://spatie.be/docs/laravel-query-builder/v7/installation-setup.md) - [Support us](https://spatie.be/docs/laravel-query-builder/v7/support-us.md) - [Questions and issues](https://spatie.be/docs/laravel-query-builder/v7/questions-issues.md) - [Front-end implementation](https://spatie.be/docs/laravel-query-builder/v7/advanced-usage/front-end-implementation.md) - [Changelog](https://spatie.be/docs/laravel-query-builder/v7/changelog.md) - [laravel-event-sourcing](https://spatie.be/docs/laravel-event-sourcing/v7/introduction.md): Event Sourcing for Artisans - [Preparing events](https://spatie.be/docs/laravel-event-sourcing/v7/advanced-usage/preparing-events.md) - [Introduction](https://spatie.be/docs/laravel-event-sourcing/v7/getting-familiar-with-event-sourcing/introduction.md) - [Introduction](https://spatie.be/docs/laravel-event-sourcing/v7/introduction.md) - [Writing your first aggregate](https://spatie.be/docs/laravel-event-sourcing/v7/using-aggregates/writing-your-first-aggregate.md) - [Writing your first projector](https://spatie.be/docs/laravel-event-sourcing/v7/using-projectors/writing-your-first-projector.md) - [Writing your first reactor](https://spatie.be/docs/laravel-event-sourcing/v7/using-reactors/writing-your-first-reactor.md) - [Replaying events](https://spatie.be/docs/laravel-event-sourcing/v7/advanced-usage/replaying-events.md) - [The traditional application](https://spatie.be/docs/laravel-event-sourcing/v7/getting-familiar-with-event-sourcing/the-traditional-application.md) - [Support us](https://spatie.be/docs/laravel-event-sourcing/v7/support-us.md) - [Creating and configuring aggregates](https://spatie.be/docs/laravel-event-sourcing/v7/using-aggregates/creating-and-configuring-aggregates.md) - [Creating and registering projectors](https://spatie.be/docs/laravel-event-sourcing/v7/using-projectors/creating-and-configuring-projectors.md) - [Creating and configuring reactors](https://spatie.be/docs/laravel-event-sourcing/v7/using-reactors/creating-and-configuring-reactors.md) - [Storing metadata](https://spatie.be/docs/laravel-event-sourcing/v7/advanced-usage/storing-metadata.md) - [Using projectors to transform events](https://spatie.be/docs/laravel-event-sourcing/v7/getting-familiar-with-event-sourcing/using-projectors-to-transform-events.md) - [Requirements](https://spatie.be/docs/laravel-event-sourcing/v7/requirements.md) - [Testing aggregates](https://spatie.be/docs/laravel-event-sourcing/v7/using-aggregates/testing-aggregates.md) - [Handling exceptions](https://spatie.be/docs/laravel-event-sourcing/v7/advanced-usage/handling-exceptions.md) - [Using aggregates to make decisions based on the past](https://spatie.be/docs/laravel-event-sourcing/v7/getting-familiar-with-event-sourcing/using-aggregates-to-make-decisions-based-on-the-past.md) - [Installation & setup](https://spatie.be/docs/laravel-event-sourcing/v7/installation-setup.md) - [Snapshots](https://spatie.be/docs/laravel-event-sourcing/v7/using-aggregates/snapshots.md) - [Making sure events get handled in the right order](https://spatie.be/docs/laravel-event-sourcing/v7/using-projectors/making-sure-events-get-handled-in-the-right-order.md) - [Discovering projectors and reactors](https://spatie.be/docs/laravel-event-sourcing/v7/advanced-usage/discovering-projectors-and-reactors.md) - [Questions and issues](https://spatie.be/docs/laravel-event-sourcing/v7/questions-issues.md) - [Thinking in events](https://spatie.be/docs/laravel-event-sourcing/v7/using-projectors/thinking-in-events.md) - [Using your own event storage model](https://spatie.be/docs/laravel-event-sourcing/v7/advanced-usage/using-your-own-event-storage-model.md) - [Changelog](https://spatie.be/docs/laravel-event-sourcing/v7/changelog.md) - [Using your own event storage repository](https://spatie.be/docs/laravel-event-sourcing/v7/advanced-usage/using-your-own-event-storage-repository.md) - [Upgrading](https://spatie.be/docs/laravel-event-sourcing/v7/upgrading.md) - [Using your own event serializer](https://spatie.be/docs/laravel-event-sourcing/v7/advanced-usage/using-your-own-event-serializer.md) - [Resources and alternatives](https://spatie.be/docs/laravel-event-sourcing/v7/resources-and-alternatives.md) - [About us](https://spatie.be/docs/laravel-event-sourcing/v7/about-us.md) - [Using aliases for stored event classes](https://spatie.be/docs/laravel-event-sourcing/v7/advanced-usage/using-aliases-for-stored-event-classes.md) - [Adding and Removing Projectors and Reactors](https://spatie.be/docs/laravel-event-sourcing/v7/advanced-usage/adding-and-removing-projectors-and-reactors.md) - [Aggregate Partials](https://spatie.be/docs/laravel-event-sourcing/v7/advanced-usage/aggregate-partials.md) - [Event Queries](https://spatie.be/docs/laravel-event-sourcing/v7/advanced-usage/event-queries.md) - [Commands](https://spatie.be/docs/laravel-event-sourcing/v7/advanced-usage/commands.md) - [laravel-backup-server](https://spatie.be/docs/laravel-backup-server/v4/introduction.md): Make sure all your servers are safe - [The clean up process](https://spatie.be/docs/laravel-backup-server/v4/cleaning-up-backups/the-cleanup-process.md) - [Introduction](https://spatie.be/docs/laravel-backup-server/v4/introduction.md) - [The monitoring process](https://spatie.be/docs/laravel-backup-server/v4/monitoring-the-health-of-all-backups/the-monitoring-process.md) - [Sending notifications](https://spatie.be/docs/laravel-backup-server/v4/sending-notifications/sending-notifications.md) - [Creating a destination](https://spatie.be/docs/laravel-backup-server/v4/taking-backups/creating-a-destination.md) - [Determining old backups](https://spatie.be/docs/laravel-backup-server/v4/cleaning-up-backups/determining-old-backups.md) - [Checking health of sources](https://spatie.be/docs/laravel-backup-server/v4/monitoring-the-health-of-all-backups/checking-health-of-sources.md) - [Adding extra notification channels](https://spatie.be/docs/laravel-backup-server/v4/sending-notifications/adding-extra-notification-channels.md) - [Creating a source](https://spatie.be/docs/laravel-backup-server/v4/taking-backups/creating-a-source.md) - [Events](https://spatie.be/docs/laravel-backup-server/v4/cleaning-up-backups/events.md) - [Installation & setup](https://spatie.be/docs/laravel-backup-server/v4/installation-setup.md) - [Checking health of destinations](https://spatie.be/docs/laravel-backup-server/v4/monitoring-the-health-of-all-backups/checking-health-of-destinations.md) - [Customizing the notifiable](https://spatie.be/docs/laravel-backup-server/v4/sending-notifications/customizing-the-notifiable.md) - [Taking backups](https://spatie.be/docs/laravel-backup-server/v4/taking-backups/taking-backups.md) - [The backup process](https://spatie.be/docs/laravel-backup-server/v4/taking-backups/the-backup-process.md) - [Events](https://spatie.be/docs/laravel-backup-server/v4/monitoring-the-health-of-all-backups/events.md) - [Requirements](https://spatie.be/docs/laravel-backup-server/v4/requirements.md) - [Pausing failed notifications](https://spatie.be/docs/laravel-backup-server/v4/sending-notifications/pausing-notifications.md) - [Events](https://spatie.be/docs/laravel-backup-server/v4/taking-backups/events.md) - [Listing sources and destinations](https://spatie.be/docs/laravel-backup-server/v4/taking-backups/listing-sources-and-destinations.md) - [Working with backups](https://spatie.be/docs/laravel-backup-server/v4/taking-backups/working-with-backups.md) - [Upgrading](https://spatie.be/docs/laravel-backup-server/v4/upgrading.md) - [Questions and issues](https://spatie.be/docs/laravel-backup-server/v4/questions-issues.md) - [Creating database backups](https://spatie.be/docs/laravel-backup-server/v4/taking-backups/creating-database-backups.md) - [Changelog](https://spatie.be/docs/laravel-backup-server/v4/changelog.md) - [About us](https://spatie.be/docs/laravel-backup-server/v4/about-us.md) - [laravel-dashboard](https://spatie.be/docs/laravel-dashboard/v4/introduction.md): Create beautiful dashboards in no time - [Overview](https://spatie.be/docs/laravel-dashboard/v4/adding-tiles/overview.md) - [Introduction](https://spatie.be/docs/laravel-dashboard/v4/introduction.md) - [Creating your own tile](https://spatie.be/docs/laravel-dashboard/v4/adding-tiles/creating-your-own-tile.md) - [Creating your first dashboard](https://spatie.be/docs/laravel-dashboard/v4/basic-usage/creating-your-first-dashboard.md) - [Support us](https://spatie.be/docs/laravel-dashboard/v4/support-us.md) - [Google calendar tile](https://spatie.be/docs/laravel-dashboard/v4/adding-tiles/google-calendar.md) - [Time and Weather tile](https://spatie.be/docs/laravel-dashboard/v4/adding-tiles/time-weather.md) - [Positioning tiles](https://spatie.be/docs/laravel-dashboard/v4/basic-usage/positioning-tiles.md) - [Requirements](https://spatie.be/docs/laravel-dashboard/v4/requirements.md) - [Oh Dear Uptime tile](https://spatie.be/docs/laravel-dashboard/v4/adding-tiles/oh-dear-uptime.md) - [Customizing the views](https://spatie.be/docs/laravel-dashboard/v4/basic-usage/customizing-the-views.md) - [Installation & setup](https://spatie.be/docs/laravel-dashboard/v4/installation-setup.md) - [Upgrading](https://spatie.be/docs/laravel-dashboard/v4/upgrading.md) - [Questions and issues](https://spatie.be/docs/laravel-dashboard/v4/questions-issues.md) - [Velo tile](https://spatie.be/docs/laravel-dashboard/v4/adding-tiles/velo.md) - [Changelog](https://spatie.be/docs/laravel-dashboard/v4/changelog.md) - [Belgian trains tile](https://spatie.be/docs/laravel-dashboard/v4/adding-tiles/belgian-trains.md) - [Attendances tile](https://spatie.be/docs/laravel-dashboard/v4/adding-tiles/attendances.md) - [About us](https://spatie.be/docs/laravel-dashboard/v4/about-us.md) - [laravel-multitenancy](https://spatie.be/docs/laravel-multitenancy/v4/introduction.md): An unopinionated multitenancy package for Laravel apps - [Ensuring a current tenant has been set](https://spatie.be/docs/laravel-multitenancy/v4/advanced-usage/ensuring-a-current-tenant-has-been-set.md) - [Automatically determining the current tenant](https://spatie.be/docs/laravel-multitenancy/v4/basic-usage/automatically-determining-the-current-tenant.md) - [Base installation](https://spatie.be/docs/laravel-multitenancy/v4/installation/base-installation.md) - [Introduction](https://spatie.be/docs/laravel-multitenancy/v4/introduction.md) - [Overview](https://spatie.be/docs/laravel-multitenancy/v4/using-tasks-to-prepare-the-environment/overview.md) - [Looping over a collection of tenants](https://spatie.be/docs/laravel-multitenancy/v4/advanced-usage/looping-over-a-collection-of-tenants.md) - [Using a single database](https://spatie.be/docs/laravel-multitenancy/v4/installation/using-a-single-database.md) - [Upgrade guide](https://spatie.be/docs/laravel-multitenancy/v4/upgrade-guide.md) - [Creating your own task](https://spatie.be/docs/laravel-multitenancy/v4/using-tasks-to-prepare-the-environment/creating-your-own-task.md) - [Making Artisan command tenant aware](https://spatie.be/docs/laravel-multitenancy/v4/advanced-usage/making-artisan-commands-tenant-aware.md) - [Working with the current tenant](https://spatie.be/docs/laravel-multitenancy/v4/basic-usage/working-with-the-current-tenant.md) - [Using multiple databases](https://spatie.be/docs/laravel-multitenancy/v4/installation/using-multiple-databases.md) - [Support us](https://spatie.be/docs/laravel-multitenancy/v4/support-us.md) - [Switching databases](https://spatie.be/docs/laravel-multitenancy/v4/using-tasks-to-prepare-the-environment/switching-databases.md) - [Switching route cache paths](https://spatie.be/docs/laravel-multitenancy/v4/using-tasks-to-prepare-the-environment/switching-route-cache-paths.md) - [Determining the current tenant](https://spatie.be/docs/laravel-multitenancy/v4/installation/determining-current-tenant.md) - [Requirements](https://spatie.be/docs/laravel-multitenancy/v4/requirements.md) - [Questions and issues](https://spatie.be/docs/laravel-multitenancy/v4/questions-issues.md) - [Prefixing cache](https://spatie.be/docs/laravel-multitenancy/v4/using-tasks-to-prepare-the-environment/prefixing-cache.md) - [Using a custom tenant model](https://spatie.be/docs/laravel-multitenancy/v4/advanced-usage/using-a-custom-tenant-model.md) - [Making queues tenant aware](https://spatie.be/docs/laravel-multitenancy/v4/basic-usage/making-queues-tenant-aware.md) - [Changelog](https://spatie.be/docs/laravel-multitenancy/v4/changelog.md) - [Listening for events](https://spatie.be/docs/laravel-multitenancy/v4/advanced-usage/listening-for-events.md) - [Using tenant specific facades](https://spatie.be/docs/laravel-multitenancy/v4/advanced-usage/using-tenant-specific-facades.md) - [Executing code for tenants and landlords](https://spatie.be/docs/laravel-multitenancy/v4/advanced-usage/executing-code-for-tenants-and-landlords.md) - [](https://spatie.be/docs/laravel-multitenancy/v4/installation-setup.md) - [laravel-data](https://spatie.be/docs/laravel-data/v4/introduction.md): Powerful data objects for Laravel - [Eloquent casting](https://spatie.be/docs/laravel-data/v4/advanced-usage/eloquent-casting.md) - [Creating a data object](https://spatie.be/docs/laravel-data/v4/as-a-data-transfer-object/creating-a-data-object.md) - [From data to array](https://spatie.be/docs/laravel-data/v4/as-a-resource/from-data-to-array.md) - [Quickstart](https://spatie.be/docs/laravel-data/v4/getting-started/quickstart.md) - [Introduction](https://spatie.be/docs/laravel-data/v4/introduction.md) - [Introduction](https://spatie.be/docs/laravel-data/v4/validation/introduction.md) - [Transforming to TypeScript](https://spatie.be/docs/laravel-data/v4/advanced-usage/typescript.md) - [Nesting](https://spatie.be/docs/laravel-data/v4/as-a-data-transfer-object/nesting.md) - [From data to resource](https://spatie.be/docs/laravel-data/v4/as-a-resource/from-data-to-resource.md) - [Support us](https://spatie.be/docs/laravel-data/v4/support-us.md) - [Auto rule inferring](https://spatie.be/docs/laravel-data/v4/validation/auto-rule-inferring.md) - [Working with dates](https://spatie.be/docs/laravel-data/v4/advanced-usage/working-with-dates.md) - [Collections](https://spatie.be/docs/laravel-data/v4/as-a-data-transfer-object/collections.md) - [Mapping property names](https://spatie.be/docs/laravel-data/v4/as-a-resource/mapping-property-names.md) - [Requirements](https://spatie.be/docs/laravel-data/v4/requirements.md) - [Using validation attributes](https://spatie.be/docs/laravel-data/v4/validation/using-validation-attributes.md) - [Normalizers](https://spatie.be/docs/laravel-data/v4/advanced-usage/normalizers.md) - [Abstract Data](https://spatie.be/docs/laravel-data/v4/as-a-data-transfer-object/abstract-data.md) - [Appending properties](https://spatie.be/docs/laravel-data/v4/as-a-resource/appending-properties.md) - [Installation & setup](https://spatie.be/docs/laravel-data/v4/installation-setup.md) - [Manual rules](https://spatie.be/docs/laravel-data/v4/validation/manual-rules.md) - [Pipeline](https://spatie.be/docs/laravel-data/v4/advanced-usage/pipeline.md) - [Casts](https://spatie.be/docs/laravel-data/v4/as-a-data-transfer-object/casts.md) - [Wrapping](https://spatie.be/docs/laravel-data/v4/as-a-resource/wrapping.md) - [Third party packages](https://spatie.be/docs/laravel-data/v4/third-party-packages.md) - [Working with the validator](https://spatie.be/docs/laravel-data/v4/validation/working-with-the-validator.md) - [Creating a cast](https://spatie.be/docs/laravel-data/v4/advanced-usage/creating-a-cast.md) - [Optional properties](https://spatie.be/docs/laravel-data/v4/as-a-data-transfer-object/optional-properties.md) - [Including and excluding properties](https://spatie.be/docs/laravel-data/v4/as-a-resource/lazy-properties.md) - [Questions and issues](https://spatie.be/docs/laravel-data/v4/questions-issues.md) - [Nesting Data](https://spatie.be/docs/laravel-data/v4/validation/nesting-data.md) - [Creating a transformer](https://spatie.be/docs/laravel-data/v4/advanced-usage/creating-a-transformer.md) - [Mapping property names](https://spatie.be/docs/laravel-data/v4/as-a-data-transfer-object/mapping-property-names.md) - [Transforming data](https://spatie.be/docs/laravel-data/v4/as-a-resource/transformers.md) - [Changelog](https://spatie.be/docs/laravel-data/v4/changelog.md) - [Skipping validation](https://spatie.be/docs/laravel-data/v4/validation/skipping-validation.md) - [Creating a rule inferrer](https://spatie.be/docs/laravel-data/v4/advanced-usage/creating-a-rule-inferrer.md) - [Default values](https://spatie.be/docs/laravel-data/v4/as-a-data-transfer-object/defaults.md) - [About us](https://spatie.be/docs/laravel-data/v4/about-us.md) - [Use with Inertia](https://spatie.be/docs/laravel-data/v4/advanced-usage/use-with-inertia.md) - [Computed values](https://spatie.be/docs/laravel-data/v4/as-a-data-transfer-object/computed.md) - [Use with Livewire](https://spatie.be/docs/laravel-data/v4/advanced-usage/use-with-livewire.md) - [From a request](https://spatie.be/docs/laravel-data/v4/as-a-data-transfer-object/request-to-data-object.md) - [Internal structures](https://spatie.be/docs/laravel-data/v4/advanced-usage/internal-structures.md) - [From a model](https://spatie.be/docs/laravel-data/v4/as-a-data-transfer-object/model-to-data-object.md) - [Injecting property values](https://spatie.be/docs/laravel-data/v4/as-a-data-transfer-object/injecting-property-values.md) - [Mapping rules](https://spatie.be/docs/laravel-data/v4/advanced-usage/mapping-rules.md) - [Factories](https://spatie.be/docs/laravel-data/v4/as-a-data-transfer-object/factories.md) - [Validation attributes](https://spatie.be/docs/laravel-data/v4/advanced-usage/validation-attributes.md) - [Get data from a class quickly](https://spatie.be/docs/laravel-data/v4/advanced-usage/get-data-from-a-class-quickly.md) - [Performance](https://spatie.be/docs/laravel-data/v4/advanced-usage/performance.md) - [Commands](https://spatie.be/docs/laravel-data/v4/advanced-usage/commands.md) - [Traits and interfaces](https://spatie.be/docs/laravel-data/v4/advanced-usage/traits-and-interfaces.md) - [In Packages](https://spatie.be/docs/laravel-data/v4/advanced-usage/in-packages.md) - [Available property mappers](https://spatie.be/docs/laravel-data/v4/advanced-usage/available-property-mappers.md) - [laravel-notification-log](https://spatie.be/docs/laravel-notification-log/v1/introduction.md): Log notifications sent by your Laravel app - [Getting started](https://spatie.be/docs/laravel-notification-log/v1/basic-usage/getting-started.md) - [Introduction](https://spatie.be/docs/laravel-notification-log/v1/introduction.md) - [Determining which notifications get logged](https://spatie.be/docs/laravel-notification-log/v1/basic-usage/determining-which-notifications-get-logged.md) - [Support us](https://spatie.be/docs/laravel-notification-log/v1/support-us.md) - [Customizing notification types](https://spatie.be/docs/laravel-notification-log/v1/advanced-usage/customizing-notification-types.md) - [Customizing the logging process](https://spatie.be/docs/laravel-notification-log/v1/advanced-usage/customizing-the-logging-process.md) - [Handling on demand notifications](https://spatie.be/docs/laravel-notification-log/v1/advanced-usage/handling-on-demand-notifications.md) - [Using your own notification log model](https://spatie.be/docs/laravel-notification-log/v1/advanced-usage/using-your-own-notification-log-model.md) - [Adding extra info to a logged notifications](https://spatie.be/docs/laravel-notification-log/v1/basic-usage/adding-extra-info-to-your-notification.md) - [Querying the notification log](https://spatie.be/docs/laravel-notification-log/v1/basic-usage/querying-the-notification-log.md) - [Working with fingerprints](https://spatie.be/docs/laravel-notification-log/v1/basic-usage/working-with-fingerprints.md) - [Requirements](https://spatie.be/docs/laravel-notification-log/v1/requirements.md) - [Installation & setup](https://spatie.be/docs/laravel-notification-log/v1/installation-setup.md) - [Questions and issues](https://spatie.be/docs/laravel-notification-log/v1/questions-issues.md) - [Changelog](https://spatie.be/docs/laravel-notification-log/v1/changelog.md) - [About us](https://spatie.be/docs/laravel-notification-log/v1/about-us.md) ### General PHP - [php-attribute-reader](https://spatie.be/docs/php-attribute-reader/v1/introduction.md): A clean API for working with PHP attributes - [Introduction](https://spatie.be/docs/php-attribute-reader/v1/introduction.md) - [Reading class attributes](https://spatie.be/docs/php-attribute-reader/v1/usage/reading-class-attributes.md) - [Support us](https://spatie.be/docs/php-attribute-reader/v1/support-us.md) - [Reading from specific targets](https://spatie.be/docs/php-attribute-reader/v1/usage/reading-from-specific-targets.md) - [Requirements](https://spatie.be/docs/php-attribute-reader/v1/requirements.md) - [Discovering attributes](https://spatie.be/docs/php-attribute-reader/v1/usage/discovering-attributes.md) - [Installation & setup](https://spatie.be/docs/php-attribute-reader/v1/installation-setup.md) - [Attribute inheritance](https://spatie.be/docs/php-attribute-reader/v1/usage/attribute-inheritance.md) - [Questions and issues](https://spatie.be/docs/php-attribute-reader/v1/questions-issues.md) - [Changelog](https://spatie.be/docs/php-attribute-reader/v1/changelog.md) - [About us](https://spatie.be/docs/php-attribute-reader/v1/about-us.md) - [browsershot](https://spatie.be/docs/browsershot/v4/introduction.md): Convert a webpage to an image or PDF - [Introduction](https://spatie.be/docs/browsershot/v4/introduction.md) - [Adding extra headers to every request](https://spatie.be/docs/browsershot/v4/miscellaneous-options/adding-extra-headers-to-every-request.md) - [Introduction](https://spatie.be/docs/browsershot/v4/usage/introduction.md) - [Adding extra headers to the navigational request](https://spatie.be/docs/browsershot/v4/miscellaneous-options/adding-extra-headers-to-the-navigational-request.md) - [Support us](https://spatie.be/docs/browsershot/v4/support-us.md) - [Creating images](https://spatie.be/docs/browsershot/v4/usage/creating-images.md) - [Creating PDFs](https://spatie.be/docs/browsershot/v4/usage/creating-pdfs.md) - [Changing the language of the browser](https://spatie.be/docs/browsershot/v4/miscellaneous-options/changing-the-language-of-the-browser.md) - [Requirements](https://spatie.be/docs/browsershot/v4/requirements.md) - [Creating HTML](https://spatie.be/docs/browsershot/v4/usage/creating-html.md) - [Installation & setup](https://spatie.be/docs/browsershot/v4/installation-setup.md) - [Changing the value of a dropdown](https://spatie.be/docs/browsershot/v4/miscellaneous-options/changing-the-value-of-a-dropdown.md) - [Upgrading](https://spatie.be/docs/browsershot/v4/upgrading.md) - [Clicking on the page](https://spatie.be/docs/browsershot/v4/miscellaneous-options/clicking-on-the-page.md) - [Questions and issues](https://spatie.be/docs/browsershot/v4/questions-issues.md) - [Changelog](https://spatie.be/docs/browsershot/v4/changelog.md) - [Connection to a remote chromium/chrome instance](https://spatie.be/docs/browsershot/v4/miscellaneous-options/connection-to-a-remote-chrome-instance.md) - [Disable sandboxing](https://spatie.be/docs/browsershot/v4/miscellaneous-options/disable-sandboxing.md) - [Fixing cors issues](https://spatie.be/docs/browsershot/v4/miscellaneous-options/fixing-cors-options.md) - [Getting console output](https://spatie.be/docs/browsershot/v4/miscellaneous-options/getting-console-ouput.md) - [Getting failed requests](https://spatie.be/docs/browsershot/v4/miscellaneous-options/getting-failed-requests.md) - [Ignore HTTPS errors](https://spatie.be/docs/browsershot/v4/miscellaneous-options/ignore-https-errors.md) - [Passing environment variables to the browser](https://spatie.be/docs/browsershot/v4/miscellaneous-options/passing-environment-variables-to-the-browser.md) - [Performance](https://spatie.be/docs/browsershot/v4/miscellaneous-options/performance.md) - [Prevent unsuccessful responses](https://spatie.be/docs/browsershot/v4/miscellaneous-options/prevent-unsuccessful-responses.md) - [Sending POST requests](https://spatie.be/docs/browsershot/v4/miscellaneous-options/sending-post-requests.md) - [Setting an arbitrary option](https://spatie.be/docs/browsershot/v4/miscellaneous-options/setting-an-arbirary-option.md) - [Setting the CSS media type of the page](https://spatie.be/docs/browsershot/v4/miscellaneous-options/setting-the-css-media-type-of-the-page.md) - [Setting the timeout](https://spatie.be/docs/browsershot/v4/miscellaneous-options/setting-the-timeout.md) - [Setting the user agent](https://spatie.be/docs/browsershot/v4/miscellaneous-options/setting-the-user-agent.md) - [Specifying-a-proxy-server](https://spatie.be/docs/browsershot/v4/miscellaneous-options/specifying-a-proxy-server.md) - [Typing on the page](https://spatie.be/docs/browsershot/v4/miscellaneous-options/typing-on-the-page.md) - [Using a pipe instead of a WebSocket](https://spatie.be/docs/browsershot/v4/miscellaneous-options/using-a-pipe-instead-of-a-websocket.md) - [Using cookies](https://spatie.be/docs/browsershot/v4/miscellaneous-options/using-cookies.md) - [Using HTTP Authentication](https://spatie.be/docs/browsershot/v4/miscellaneous-options/using-http-authentication.md) - [Using url for html content](https://spatie.be/docs/browsershot/v4/miscellaneous-options/using-url-for-html-content.md) - [Writing options to a file](https://spatie.be/docs/browsershot/v4/miscellaneous-options/writing-options-to-a-file.md) - [Disabling redirects](https://spatie.be/docs/browsershot/v4/miscellaneous-options/disabling-redirects.md) - [Read redirect history](https://spatie.be/docs/browsershot/v4/miscellaneous-options/read-redirect-history.md) - [About us](https://spatie.be/docs/browsershot/v4/about-us.md) - [menu](https://spatie.be/docs/menu/v3/introduction.md): Html menu generator - [Your First Menu](https://spatie.be/docs/menu/v3/basic-usage/your-first-menu.md) - [Item Attributes](https://spatie.be/docs/menu/v3/controlling-the-html-output/item-attributes.md) - [Bootstrap Menu](https://spatie.be/docs/menu/v3/examples/bootstrap-menu.md) - [Introduction](https://spatie.be/docs/menu/v3/introduction.md) - [Active Items](https://spatie.be/docs/menu/v3/items-in-depth/active-items.md) - [Convenience Methods](https://spatie.be/docs/menu/v3/menus-in-your-laravel-app/convenience-methods.md) - [Adding Items](https://spatie.be/docs/menu/v3/basic-usage/adding-items.md) - [Parent Attributes](https://spatie.be/docs/menu/v3/controlling-the-html-output/parent-attributes.md) - [Manipulating Items](https://spatie.be/docs/menu/v3/items-in-depth/manipulating-items.md) - [Views as Menu Items](https://spatie.be/docs/menu/v3/menus-in-your-laravel-app/views-as-menu-items.md) - [Postcardware](https://spatie.be/docs/menu/v3/postcardware.md) - [Building a menu from a data source](https://spatie.be/docs/menu/v3/basic-usage/building-a-menu-from-a-data-source.md) - [Appending and Prepending Html](https://spatie.be/docs/menu/v3/controlling-the-html-output/appending-and-prepending-html.md) - [Conditionally Adding Items](https://spatie.be/docs/menu/v3/items-in-depth/conditionally-adding-items.md) - [Conditional Items Based on Permissions](https://spatie.be/docs/menu/v3/menus-in-your-laravel-app/conditional-items-based-on-permissions.md) - [Requirements](https://spatie.be/docs/menu/v3/requirements.md) - [Non-list Menus](https://spatie.be/docs/menu/v3/controlling-the-html-output/non-list-menus.md) - [Installation and Setup](https://spatie.be/docs/menu/v3/installation-and-setup.md) - [Using Macros](https://spatie.be/docs/menu/v3/menus-in-your-laravel-app/using-macros.md) - [Questions & Issues](https://spatie.be/docs/menu/v3/questions-and-issues.md) - [Changelog](https://spatie.be/docs/menu/v3/changelog.md) - [About Us](https://spatie.be/docs/menu/v3/about-us.md) - [image](https://spatie.be/docs/image/v3/introduction.md): Manipulate images with an expressive API - [Overview](https://spatie.be/docs/image/v3/image-manipulations/overview.md) - [Introduction](https://spatie.be/docs/image/v3/introduction.md) - [Basic usage](https://spatie.be/docs/image/v3/usage/basic-usage.md) - [Resizing images](https://spatie.be/docs/image/v3/image-manipulations/resizing-images.md) - [Postcardware](https://spatie.be/docs/image/v3/postcardware.md) - [Saving images](https://spatie.be/docs/image/v3/usage/saving-images.md) - [Optimizing images](https://spatie.be/docs/image/v3/image-manipulations/optimizing-images.md) - [Installation and setup](https://spatie.be/docs/image/v3/installation-and-setup.md) - [Retrieving properties](https://spatie.be/docs/image/v3/usage/retrieving-properties.md) - [Supported formats](https://spatie.be/docs/image/v3/formats.md) - [Adjustments](https://spatie.be/docs/image/v3/image-manipulations/adjustments.md) - [Questions & issues](https://spatie.be/docs/image/v3/questions-and-issues.md) - [Colors](https://spatie.be/docs/image/v3/usage/colors.md) - [Changelog](https://spatie.be/docs/image/v3/changelog.md) - [Image canvas](https://spatie.be/docs/image/v3/image-manipulations/image-canvas.md) - [About us](https://spatie.be/docs/image/v3/about-us.md) - [Effects](https://spatie.be/docs/image/v3/image-manipulations/effects.md) - [Upgrading](https://spatie.be/docs/image/v3/upgrading.md) - [Adding a watermark](https://spatie.be/docs/image/v3/image-manipulations/adding-a-watermark.md) - [Adding text](https://spatie.be/docs/image/v3/image-manipulations/text.md) - [enum](https://spatie.be/docs/enum/v3/introduction.md): Strongly typed enums - [Introduction](https://spatie.be/docs/enum/v3/introduction.md) - [Postcardware](https://spatie.be/docs/enum/v3/postcardware.md) - [Internal enum values](https://spatie.be/docs/enum/v3/usage/2-internal-enum-values.md) - [Installation and setup](https://spatie.be/docs/enum/v3/installation-and-setup.md) - [Overriding enum values](https://spatie.be/docs/enum/v3/usage/3-overriding-enum-values.md) - [Questions & issues](https://spatie.be/docs/enum/v3/questions-and-issues.md) - [Overriding enum labels](https://spatie.be/docs/enum/v3/usage/4-overriding-enum-labels.md) - [Changelog](https://spatie.be/docs/enum/v3/changelog.md) - [Comparing enums](https://spatie.be/docs/enum/v3/usage/5-comparing-enums.md) - [About us](https://spatie.be/docs/enum/v3/about-us.md) - [Laravel](https://spatie.be/docs/enum/v3/usage/100-laravel.md) - [typescript-transformer](https://spatie.be/docs/typescript-transformer/v3/introduction.md): Convert PHP types to TypeScript - [Extensions](https://spatie.be/docs/typescript-transformer/v3/advanced/extensions.md) - [Setting up](https://spatie.be/docs/typescript-transformer/v3/getting-started/setting-up.md) - [Introduction](https://spatie.be/docs/typescript-transformer/v3/introduction.md) - [Installation and setup](https://spatie.be/docs/typescript-transformer/v3/laravel/installation-and-setup.md) - [Getting started](https://spatie.be/docs/typescript-transformer/v3/providers/getting-started.md) - [Getting started](https://spatie.be/docs/typescript-transformer/v3/transformers/getting-started.md) - [Introduction](https://spatie.be/docs/typescript-transformer/v3/typescript-nodes/introduction.md) - [How does it work?](https://spatie.be/docs/typescript-transformer/v3/watch-mode/how-it-works.md) - [Managing transformers](https://spatie.be/docs/typescript-transformer/v3/advanced/managing-transformers.md) - [Running TypeScript Transformer for the first time](https://spatie.be/docs/typescript-transformer/v3/getting-started/first-run.md) - [Laravel Data](https://spatie.be/docs/typescript-transformer/v3/laravel/laravel-data.md) - [Postcardware](https://spatie.be/docs/typescript-transformer/v3/postcardware.md) - [Using different writers in providers](https://spatie.be/docs/typescript-transformer/v3/providers/writers-in-providers.md) - [Class transformer](https://spatie.be/docs/typescript-transformer/v3/transformers/class-transformer.md) - [Building your own TypeScript node](https://spatie.be/docs/typescript-transformer/v3/typescript-nodes/custom-nodes.md) - [Setting up the runner](https://spatie.be/docs/typescript-transformer/v3/watch-mode/setting-up-the-runner.md) - [Loggers](https://spatie.be/docs/typescript-transformer/v3/advanced/loggers.md) - [Special attributes](https://spatie.be/docs/typescript-transformer/v3/getting-started/attributes.md) - [Installation](https://spatie.be/docs/typescript-transformer/v3/installation.md) - [Controllers](https://spatie.be/docs/typescript-transformer/v3/laravel/controllers.md) - [Logging in providers](https://spatie.be/docs/typescript-transformer/v3/providers/logging.md) - [Enum transformer](https://spatie.be/docs/typescript-transformer/v3/transformers/enum-transformer.md) - [Visiting TypeScript nodes](https://spatie.be/docs/typescript-transformer/v3/typescript-nodes/visitor.md) - [Watch events](https://spatie.be/docs/typescript-transformer/v3/watch-mode/watch-events.md) - [Custom writers](https://spatie.be/docs/typescript-transformer/v3/advanced/custom-writers.md) - [Typing properties](https://spatie.be/docs/typescript-transformer/v3/getting-started/typing-properties.md) - [Routes](https://spatie.be/docs/typescript-transformer/v3/laravel/routes.md) - [Referencing types](https://spatie.be/docs/typescript-transformer/v3/providers/references.md) - [Node reference](https://spatie.be/docs/typescript-transformer/v3/typescript-nodes/reference.md) - [PHP Nodes](https://spatie.be/docs/typescript-transformer/v3/watch-mode/php-nodes.md) - [Replacing common types](https://spatie.be/docs/typescript-transformer/v3/getting-started/replacing-types.md) - [Route filters](https://spatie.be/docs/typescript-transformer/v3/laravel/route-filters.md) - [Helpers](https://spatie.be/docs/typescript-transformer/v3/providers/helpers.md) - [Formatters](https://spatie.be/docs/typescript-transformer/v3/getting-started/formatters.md) - [Watch mode](https://spatie.be/docs/typescript-transformer/v3/laravel/watch-mode.md) - [Questions & issues](https://spatie.be/docs/typescript-transformer/v3/questions-and-issues.md) - [Changelog](https://spatie.be/docs/typescript-transformer/v3/changelog.md) - [About us](https://spatie.be/docs/typescript-transformer/v3/about-us.md) ### Other - [wordpress-mailcoach](https://spatie.be/docs/wordpress-mailcoach/v1/introduction.md): WordPress integration for Mailcoach - [Introduction](https://spatie.be/docs/wordpress-mailcoach/v1/introduction.md) - [Requirements](https://spatie.be/docs/wordpress-mailcoach/v1/requirements.md) - [Creating a form](https://spatie.be/docs/wordpress-mailcoach/v1/using-mailcoach/forms/creating-a-form.md) - [Setting up credentials](https://spatie.be/docs/wordpress-mailcoach/v1/using-mailcoach/getting-started/credentials.md) - [Introduction](https://spatie.be/docs/wordpress-mailcoach/v1/installation/introduction.md) - [Troubleshooting](https://spatie.be/docs/wordpress-mailcoach/v1/troubleshooting.md) - [Embed a Form on a Page](https://spatie.be/docs/wordpress-mailcoach/v1/using-mailcoach/forms/embed-form-on-a-page.md) - [In an existing WordPress app](https://spatie.be/docs/wordpress-mailcoach/v1/installation/in-an-existing-wordpress-app.md) - [Upgrading](https://spatie.be/docs/wordpress-mailcoach/v1/upgrading.md) - [Changelog](https://spatie.be/docs/wordpress-mailcoach/v1/changelog.md) ## Products - [Ray](https://spatie.be/products/ray):
Debug without breaking your flow
- [Media Library Pro](https://spatie.be/products/media-library-pro):UI components for laravel-medialibrary
- [Mailcoach Self-Hosted](https://spatie.be/products/mailcoach):Email marketing you host yourself. Mailcoach Self-Hosted is a powerful email platform for email marketing, automations and transactional emails, seamlessly integrated into your Laravel application.... - [Laravel Package Training v2.0](https://spatie.be/products/laravel-package-training): Learn how to create a Laravel package and become the next package maestro - [Laravel Comments](https://spatie.be/products/laravel-comments): A beautiful Livewire component to associate comments with models - [Laravel Beyond CRUD](https://spatie.be/products/laravel-beyond-crud): Learn how to build larger-than-average Laravel applications and maintain them for years to come. - [Testing Laravel](https://spatie.be/products/testing-laravel): Learn how to automatically test your Laravel app using PHPUnit and Pest - [Front Line PHP](https://spatie.be/products/front-line-php):
An ebook on cutting edge tactics in PHP 8.3, accompanied by videos and practical examples.
- [Event Sourcing in Laravel](https://spatie.be/products/event-sourcing-in-laravel): A hands-on course to start using event sourcing in large apps - [Writing Readable PHP](https://spatie.be/products/writing-readable-php): Learn how to write PHP that is a joy to read and easy to understand ## Courses - [Writing Readable PHP](https://spatie.be/courses/writing-readable-php): Learn how to write code that’s a joy to read for your co-workers and future self. You'll see dozens of tips and tricks that will increase code readiblity today. - [Laravel Package Training v2.0](https://spatie.be/courses/laravel-package-training-v2): Have you ever wondered how to create your own packages? Interested in how some of our packages work under the hood? This series reveals all secrets! - [Laravel Beyond CRUD](https://spatie.be/courses/laravel-beyond-crud): During 2 hours of video, Brent teaches you how to build a bigger than usual Laravel application. You'll see lots of practical examples and live coding. Serious content, brought in Brent's enthusiastic... - [Testing Laravel with Pest](https://spatie.be/courses/testing-laravel-with-pest): Testing is a fundamental skill for every developer. In this course, Freek will show you how to get started with testing. He'll cover how to test and entire Laravel application, and show you cool techn... - [Testing Laravel with PHPUnit](https://spatie.be/courses/testing-laravel-with-phpunit): In this course, Brent will help you get started testing a Laravel application. He'll cover how to get started, how to test every functionality in Laravel, and gives handy tips and tricks on how to imp... - [Event Sourcing in Laravel](https://spatie.be/courses/event-sourcing-in-laravel): These videos will show you how an event sourced system works. These videos are part of a paid course that includes these videos, an ebook and example app. - [Front Line PHP](https://spatie.be/courses/front-line-php): In this **free video series**, we dive deep into into new PHP features. - [Discovering Laravel Media Library](https://spatie.be/courses/discovering-laravel-media-library): Media Library is a powerful package that can associate all kinds of files with Eloquent models, generate thumbnails & responsive images, keep track of media across file systems, and much more! - [Readable Laravel](https://spatie.be/courses/readable-laravel): In this **completely free** series, we'll explore best practices on how to write maintainable and readable code. - [Show me the code](https://spatie.be/courses/show-me-the-code): Here are some problems that we solved in an elegant way - [Using Mailcoach](https://spatie.be/courses/using-mailcoach): In this **free video series**, Freek shows you how you can use Mailcoach to automate your email marketing - [Building Mailcoach (legacy course)](https://spatie.be/courses/building-mailcoach): Learn about the problems that we tackled and the clean code patterns that we applied when building the initial version of Mailcoach. These videos use a legacy version of Mailcoach - [Laravel Package Training (legacy course)](https://spatie.be/courses/laravel-package-training): These are the videos of are old Laravel Package Training. You should probably watch v2, which is the latest version of this course. ## Open Source - [All Packages](https://spatie.be/open-source/packages): Browse all Spatie open source packages ## Blog - [Blog](https://spatie.be/blog): Articles about Laravel, PHP, and web development