Requirements
Textstem is a Laravel package and inherits Laravel's server requirements. This page covers everything you need to run Textstem in development and production.
Server Requirements
PHP
PHP >= 8.3 is required. The following extensions must be enabled:
mbstringopensslPDO+pdo_mysqltokenizerxmlctypejsonbcmathfileinfocurlgdorimagick(for image processing)
Database
MySQL 5.7+ or MariaDB 10.10+ is required. SQLite is supported in test environments only.
Web Server
Any web server compatible with Laravel:
- Nginx (recommended)
- Apache (with
mod_rewrite) - Laravel Herd or Valet for local development
System Packages
Some Textstem features require system-level packages to be installed on the server:
| Package | Purpose | Required |
|---|---|---|
| Ghostscript | PDF processing and PDF-to-image conversion | Yes (if using PDF assets) |
| ImageMagick | Advanced image manipulation | Recommended |
Install on Ubuntu/Debian:
sudo apt-get install ghostscript imagemagick
Install on macOS (Homebrew):
brew install ghostscript imagemagick
Laravel Requirements
| Dependency | Version |
|---|---|
| Laravel Framework | ^10.0 or ^11.0 or ^12.0 |
| Laravel Jetstream | ^4.0 or ^5.3 |
| Laravel Sanctum | * |
| Laravel Scout | ^10.5 |
| Livewire | ^3.2 |
Textstem uses Jetstream for authentication scaffolding. If you are installing into an existing application that already has a different auth setup, review the installation guide before proceeding.
Storage
By default, Textstem stores uploaded assets on the local disk. For production deployments, Amazon S3 (or any S3-compatible service) is strongly recommended.
Required for S3 storage:
composer require league/flysystem-aws-s3-v3
Configure in .env:
FILESYSTEM_DISK=s3
AWS_ACCESS_KEY_ID=your-key
AWS_SECRET_ACCESS_KEY=your-secret
AWS_DEFAULT_REGION=ap-southeast-2
AWS_BUCKET=your-bucket
Optional Services
These services are optional but unlock additional Textstem features.
OpenAI (AI content tools)
Required for AI-assisted content generation, automatic alt-text, keyword extraction, and taxonomy automation.
OPENAI_API_KEY=your-openai-key
OPENAI_ORGANIZATION=your-org-id
Algolia (Search)
Required for full-text search in the admin panel and front-end search features. Textstem uses Laravel Scout with the Algolia driver.
ALGOLIA_APP_ID=your-app-id
ALGOLIA_SECRET=your-admin-api-key
Pusher / Laravel Reverb (Real-time notifications)
Required for real-time queue monitoring and admin notifications. Supports Pusher or Laravel Reverb.
BROADCAST_DRIVER=pusher
PUSHER_APP_ID=your-app-id
PUSHER_APP_KEY=your-app-key
PUSHER_APP_SECRET=your-app-secret
PUSHER_APP_CLUSTER=ap4
Google Cloud Vision (Image analysis)
Required for automatic image labelling and accessibility analysis of uploaded assets. Configure credentials via the GOOGLE_APPLICATION_CREDENTIALS environment variable pointing to your service account JSON file.
Google Services
| Service | Purpose |
|---|---|
| Google Tag Manager | Analytics and tag management |
| Google Analytics 4 | Site traffic reporting |
| Google Maps | Map embeds in page components |
| reCAPTCHA | Form spam protection |
Queue Worker
A queue worker is strongly recommended for production. Textstem offloads the following to the queue:
- AI content generation (articles, alt-text, keywords, tags)
- Asset processing (thumbnails, metadata extraction, fingerprinting)
- Accessibility and SEO analysis
- Email notifications
php artisan queue:work --tries=3
For production, use a process supervisor such as Supervisor or Laravel Horizon.
Summary
| Requirement | Minimum | Recommended |
|---|---|---|
| PHP | 8.3 | Latest 8.x |
| Laravel | 10 | 12 |
| MySQL | 5.7 | 8.x |
| MariaDB | 10.10 | 11.x |
| Storage | Local disk | Amazon S3 |
| Search | -- | Algolia |
| Queue | sync driver | Supervisor + database/redis |
| Websockets | -- | Pusher or Reverb |