Modern, Modular Content Management System
Built with Laravel 12 Β· Vue 3 Β· Tailwind CSS Β· GraphQL
PolyCMS is an open-source content management system for modern web applications, inspired by the WordPress plugin and theme ecosystem but built on top of the Laravel framework. It is designed to provide a complete foundation for content publishing, e-commerce, multi-language support, and extensible module architecture β powered by a Vue 3 admin panel with data served entirely through RESTful APIs.
Whether you're building a blog, a documentation site, an online store, or a multi-tenant SaaS platform, PolyCMS aims to give you a comprehensive starting scaffold so you can ship quickly and extend easily through integrated modules and themes. In particular, themes in PolyCMS follow a multi-theme architecture β one Main theme and an unlimited number of Sub themes can run side by side on the same installation.
We hope this ready-made foundation proves useful for building your next website, blog, or web app, saving you from having to start completely from scratch.
- Block Editor β Rich TipTap-based editor with drag-and-drop blocks (Hero, Gallery, CTA, Pricing, Tabs, Accordion, and more)
- Posts & Pages β Full CRUD with categories, tags, authors, SEO metadata, and scheduled publishing
- Media Library β Centralized asset manager with image optimization, variant generation, and cloud storage support
- Taxonomy System β Flexible categories, tags, and custom taxonomies with hierarchical nesting
- Product Catalog β Products with variants, pricing, inventory, and attribute management
- Payment Gateways β Built-in PayPal and SePay (QR code for Vietnamese banks) integrations, with extensible gateway API
- Order Management β Complete order lifecycle with status tracking and transaction history
- Multi-Currency β Dynamic currency switching with live exchange rate support
- Multi-Language β Full i18n with per-locale content, URL slugs, and admin interface translation
- SEO Optimized β Auto-generated meta tags, Open Graph, JSON-LD structured data, canonical URLs, and sitemap generation
- Regional Variants β Support for locale variants (e.g.,
en-US,vi-VN) with properhreflanghandling
- Hot-Pluggable Modules β Install, activate, and deactivate modules without touching core code
- Hook & Filter System β WordPress-inspired action/filter hooks for deep customization
- GraphQL API β Auto-discovered schemas per module via Lighthouse
- REST API β Sanctum-authenticated
/api/v1endpoints with rate limiting and token management
- Multi-Theme Architecture β One Main theme with unlimited Sub themes active simultaneously; switch or preview themes without downtime
- Landing Page Builder β Visual block-based page construction with pre-built templates
- Theme Hooks β
header_scripts,footer_scripts,after_body_open, and more for flexible injection - Responsive β All bundled themes are mobile-first and fully responsive
- Laravel Sanctum β Token-based API authentication with scoped abilities
- Google 2FA β TOTP two-factor authentication via Google Authenticator
- Role & Permission β Granular RBAC via Spatie Permission with per-module permission registration
- Cookie Consent β GDPR/CCPA-compliant consent banner with configurable policies
- Modern Admin Panel β Vue 3 SPA with dark mode, command palette, and responsive layout
- Settings Hub β Centralized settings management with module-contributed setting groups
- Menu Builder β Drag-and-drop visual menu editor with nesting support
- Widget System β Configurable widget areas with per-theme widget zones
- Backup & Restore β Full database and file backup with one-click restore
| Module | Description |
|---|---|
| SampleModule | Developer reference blueprint β demonstrates all available hooks, CRUD, admin pages, and patterns |
| CookieConsent | GDPR/CCPA-compliant cookie consent banner |
| Google2FA | Google Authenticator TOTP two-factor authentication |
| PaypalGateway | PayPal payment gateway for e-commerce |
| SepayGateway | SePay QR Code payment gateway (Vietnamese banks) |
| BannerSlider | Promotional banner management with scheduling and responsive slider |
| Backup | Full backup & restore system with cloud storage integration |
Pro Edition includes additional modules: Accounting, Data Builder (API management & visual reporting), Remote Server Manager, SEO Optimizer, Demo Builder, and more. Visit polycms.org for details.
| Layer | Technology |
|---|---|
| Backend | Laravel 12 (PHP 8.2+) |
| Frontend | Vue.js 3 (Composition API), TypeScript |
| Styling | Tailwind CSS 3 |
| Editor | TipTap (ProseMirror) |
| API | REST (Sanctum) + GraphQL (Lighthouse) |
| Database | PostgreSQL 16+ (recommended) / MySQL 8+ |
| Build | Vite 7 |
| State | Pinia |
| Auth | Laravel Sanctum, Spatie Permission |
- PHP 8.2+
- Composer 2+
- Node.js 18+ & npm
- PostgreSQL 16+ (recommended) or MySQL 8+
# Clone the repository
git clone https://github.com/PolyXGO/polycms.git
cd polycms/polycms
# Install dependencies
composer install
npm install
# Configure environment
cp .env.example .env
php artisan key:generate
# Setup database
# Edit .env with your database credentials
# Tip: Set CACHE_STORE=file for first-time migration
php artisan migrate
php artisan db:seed
# Link storage
php artisan storage:link
# Start development server
npm run dev:allThe admin panel is available at http://localhost:8000/admin
Default admin account:
- Email:
admin@polycms.org - Password:
1
β οΈ Change the default password immediately after first login.
composer setupThis runs the full setup pipeline: install dependencies, generate key, run migrations, link storage, and build assets.
For shared hosting or non-CLI deployments, PolyCMS includes a built-in Web Installer. Simply upload the files to your server and navigate to:
https://your-domain.com/install
The installer will guide you through:
- System Requirements β PHP version, extensions, directory permissions
- Database Configuration β Enter your MySQL or PostgreSQL credentials
- Run Migrations β Create all database tables automatically
- Admin Account β Set up your administrator email and password
- Finish β Generates
storage/installed.lockand redirects to the admin panel
π‘ The
/installroute is automatically disabled once installation is complete.
PolyCMS uses Laravel's Task Scheduler for background operations (backups, email campaigns, syncs).
* * * * * cd /path/to/polycms && php artisan schedule:run >> /dev/null 2>&1php artisan schedule:workpolycms/
βββ app/ # Core application (Models, Controllers, Services)
β βββ Http/Controllers/ # Web & API controllers
β βββ Models/ # Eloquent models
β βββ Services/ # Business logic services
βββ config/ # Configuration files
βββ database/ # Migrations, seeders, factories
βββ graphql/ # Core GraphQL schemas
βββ lang/ # Language files (en, vi, ...)
βββ modules/Polyx/ # Installable modules
β βββ SampleModule/ # Developer reference module
β βββ CookieConsent/ # GDPR consent
β βββ Google2FA/ # Two-factor auth
β βββ ...
βββ resources/
β βββ js/admin/ # Vue 3 admin SPA
β βββ js/ # Frontend scripts
β βββ css/ # Stylesheets
βββ routes/ # Web, API, auth routes
βββ themes/ # Installable themes
β βββ flexiwhite/ # Clean multi-purpose theme
β βββ fleximyta/ # Business & e-commerce theme
β βββ flexidocs/ # Documentation & wiki theme
βββ public/ # Public assets
Modules follow a Vendor/Module namespace convention and live in modules/<Vendor>/<ModuleName>/. The built-in modules use the Polyx vendor namespace, but you can use any vendor name for your own modules (e.g., Acme, MyCompany, your brand name).
Use SampleModule as your blueprint:
modules/
βββ Polyx/ # Official PolyCMS vendor (built-in modules)
β βββ SampleModule/ # Developer reference
β βββ Backup/
β βββ ...
βββ Acme/ # Your custom vendor namespace
βββ MyModule/
βββ module.json # Module metadata & dependencies
βββ src/
β βββ MyModuleServiceProvider.php
β βββ Http/Controllers/
β βββ Models/
β βββ routes/
βββ resources/admin/
β βββ routes.ts # Vue admin routes
β βββ views/ # Vue components
βββ graphql/ # Module GraphQL schemas
βββ database/ # Migrations
The module identifier format is Vendor.ModuleName (e.g., Acme.MyModule). PolyCMS auto-discovers all modules by scanning every modules/*/ vendor directory for module.json manifests.
Themes live in themes/<theme-name>/ and require:
my-theme/
βββ theme.json # Theme metadata
βββ config/theme.php # Theme options schema
βββ functions.php # Hook registrations
βββ resources/views/ # Blade templates
βββ public/css/ # Compiled CSS
βββ public/js/ # Compiled JS
# Development server (Vite + Laravel concurrent)
npm run dev:all
# Production build
npm run build
# Run tests
composer test
# Code formatting
vendor/bin/pintPolyCMS Community Edition is open-source software licensed under the MIT License.
- Website: polycms.org
- GitHub: github.com/PolyXGO/polycms
- Issues: github.com/PolyXGO/polycms/issues
Made with β€οΈ by PolyXGO
This project uses HeraSpec for spec-driven development.
# Initialize HeraSpec (if not already done)
heraspec init
# List active changes
heraspec list
# View a change
heraspec show <change-name>
# Validate changes
heraspec validate <change-name>heraspec/project.md- Project overview and configurationheraspec/specs/- Source of truth specificationsheraspec/changes/- Active changes in progressheraspec/skills/- Reusable skills for AI agentsAGENTS.heraspec.md- AI agent instructions
- Create a change: Ask AI to create a HeraSpec change, or create manually
- Refine specs: Review and update delta specs in
heraspec/specs/<change-name>/ - Implement: Follow tasks in
heraspec/changes/<change-name>/tasks.md - Archive: Run
heraspec archive <change-name> --yeswhen complete
Add skills to your project:
# List available skills
heraspec skill list
# Add a skill
heraspec skill add ui-ux
heraspec skill add unit-test
# View skill details
heraspec skill show ui-uxFor more information, see the HeraSpec documentation.
This section is automatically updated by heraspec init. Last updated: 2026-05-03