{"id":29084382,"url":"https://github.com/aimeos/pagible","last_synced_at":"2026-02-26T14:07:20.201Z","repository":{"id":69054599,"uuid":"603783709","full_name":"aimeos/pagible","owner":"aimeos","description":"Easy, flexible and powerful API-first Laravel CMS package with JSON:API and GraphQL APIs","archived":false,"fork":false,"pushed_at":"2025-06-26T10:30:21.000Z","size":6042,"stargazers_count":39,"open_issues_count":1,"forks_count":9,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-06-26T10:52:23.027Z","etag":null,"topics":["api","api-graphql","cms","content","content-management","content-management-system","contentful","graphql","graphql-api","headless-cms","jsonapi","laravel","laravel-cms","multi-tenancy","multi-tenant","multitenancy","multitenant","php","vuejs","vuejs3"],"latest_commit_sha":null,"homepage":"","language":"Vue","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/aimeos.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2023-02-19T15:10:15.000Z","updated_at":"2025-06-26T10:30:24.000Z","dependencies_parsed_at":"2025-01-10T12:42:33.908Z","dependency_job_id":"03b35af7-a275-40f1-9361-a5dd673882fe","html_url":"https://github.com/aimeos/pagible","commit_stats":{"total_commits":305,"total_committers":2,"mean_commits":152.5,"dds":0.04590163934426228,"last_synced_commit":"2198ac62e1bd5029d48b47e11cd18405efaa50a1"},"previous_names":["aimeos/laravel-cms"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/aimeos/pagible","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aimeos%2Fpagible","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aimeos%2Fpagible/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aimeos%2Fpagible/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aimeos%2Fpagible/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/aimeos","download_url":"https://codeload.github.com/aimeos/pagible/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aimeos%2Fpagible/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":262053098,"owners_count":23251169,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api","api-graphql","cms","content","content-management","content-management-system","contentful","graphql","graphql-api","headless-cms","jsonapi","laravel","laravel-cms","multi-tenancy","multi-tenant","multitenancy","multitenant","php","vuejs","vuejs3"],"created_at":"2025-06-27T22:09:24.174Z","updated_at":"2026-02-26T14:07:20.195Z","avatar_url":"https://github.com/aimeos.png","language":"Vue","funding_links":[],"categories":[],"sub_categories":[],"readme":"# PagibleAI CMS - Simple as Wordpress, the power of Contentful!\n\nThe easy, flexible and scalable API-first PagibleAI CMS package:\n\n* AI generates/enhances drafts and images for you\n* Manage structured content like in Contentful\n* Define new content elements in seconds\n* Assign shared content to multiple pages\n* Save, publish and revert drafts\n* Extremly fast JSON frontend API\n* Versatile GraphQL admin API\n* Multi-language support\n* Multi-domain routing\n* Multi-tenancy capable\n* Supports soft-deletes\n* Fully Open Source\n* Scales from single page with SQLite to millions of pages with DB clusters\n\nIt can be installed into any existing Laravel application.\n\n## Table of contents\n\n* [Installation](#installation)\n* [Authorization](#authorization)\n* [Configuration](#configuration)\n* [Clean up](#clean-up)\n* [Multi-domain](#multi-domain)\n* [Multi-tenancy](#multi-tenancy)\n* [MCP API](#mcp-api)\n* [Security](#security)\n\n## Installation\n\nYou need a working Laravel installation. If you don't have one, you can create it using:\n\n```bash\ncomposer create-project laravel/laravel pagible\ncd pagible\n```\n\nThe application will be available in the `./pagible` sub-directory.\nThen, run this command within your Laravel application directory:\n\n```bash\ncomposer req aimeos/pagible\nphp artisan cms:install\nphp artisan migrate\n```\n\nNow, adapt the `.env` file of your application and change the `APP_URL` setting to your domain. If you are using `php artisan serve` for testing, add the port of the internal web server (`APP_URL=http://localhost:8000`). Otherwise, the uploading files will fail because they wouldn't be loaded!\n\nAdd a line in the \"post-update-cmd\" section of your `composer.json` file to update the admin backend files after each update:\n\n```json\n\"post-update-cmd\": [\n    \"@php artisan vendor:publish --force --tag=admin\",\n    \"@php artisan vendor:publish --tag=public\",\n    \"@php artisan migrate\",\n    ...\n],\n```\n\n### Authorization\n\nTo allow existing users to edit CMS content or to create a new users if they don't exist yet, you can use the `cms:user` command (replace the e-mail address by the users one):\n\n```bash\nphp artisan cms:user editor@example.com\n```\n\nTo disallow users to edit CMS content, use:\n\n```bash\nphp artisan cms:user --disable editor@example.com\n```\n\nThe CMS admin backend is available at (replace \"mydomain.tld\" with your own one):\n\n```\nhttp://mydomain.tld/cmsadmin\n```\n\n### Configuration\n\n#### Captcha protection\n\nTo protect forms like the contact form against misuse and spam, you can add the\n[HCaptcha service](https://www.hcaptcha.com/). Sign up at their web site and\n[create an account](https://dashboard.hcaptcha.com/signup).\n\nIn the HCaptcha dashboard, go to the [Sites](https://dashboard.hcaptcha.com/sites)\npage and add an entry for your web site. When you click on the newly generated entry,\nthe **sitekey** is shown on top. Add this to your `.env` file as:\n\n```\nHCAPTCHA_SITEKEY=\"...\"\n```\n\nIn the [account settings](https://dashboard.hcaptcha.com/settings/secrets), you will\nfind the **secret** that is required too in your `.env` file as:\n\n```\nHCAPTCHA_SECRET=\"...\"\n```\n\n#### AI support\n\nTo generate texts/images from prompts, analyze image/video/audio content, or execute actions based\non your prompts, you have to configure one or more of the AI service providers supported by the\n[Prism](https://github.com/prism-php/prism/blob/main/config/prism.php) and\n[Prisma](https://php-prisma.org/#supported-providers) packages.\n\n**Note:** You only need to configure API keys for the AI service providers you are using, not for all!\n\nAll service providers require to sign-up and create an account first. They will provide\nan API key which you need to add to your `.env` file or as environment variable, e.g.:\n\n```\nGEMINI_API_KEY=\"...\"\nOPENAI_API_KEY=\"...\"\nCLIPDROP_API_KEY=\"...\"\nDEEPL_API_KEY=\"...\"\n\n# Text translation\nCMS_AI_TRANSLATE_API_KEY=\"${DEEPL_API_KEY}\"\n# For DeepL Pro accounts\n# CMS_AI_TRANSLATE_URL=\"https://api.deepl.com/\"\n\n# Analyze content and generate text/images\nCMS_AI_WRITE_API_KEY=\"${GEMINI_API_KEY}\"\nCMS_AI_REFINE_API_KEY=\"${GEMINI_API_KEY}\"\nCMS_AI_DESCRIBE_API_KEY=\"${GEMINI_API_KEY}\"\nCMS_AI_IMAGINE_API_KEY=\"${GEMINI_API_KEY}\"\nCMS_AI_INPAINT_API_KEY=\"${GEMINI_API_KEY}\"\nCMS_AI_REPAINT_API_KEY=\"${GEMINI_API_KEY}\"\n\n# Image manipulation\nCMS_AI_ERASE_API_KEY=\"${CLIPDROP_API_KEY}\"\nCMS_AI_ISOLATE_API_KEY=\"${CLIPDROP_API_KEY}\"\nCMS_AI_UNCROP_API_KEY=\"${CLIPDROP_API_KEY}\"\nCMS_AI_UPSCALE_API_KEY=\"${CLIPDROP_API_KEY}\"\n\n# Audio transcription\nCMS_AI_TRANSCRIBE_API_KEY=\"${OPENAI_API_KEY}\"\n```\n\nFor best results and all features, you need Google, OpenAI, Clipdrop, and DeepL at the moment and they are also configured by default. If you want to use a different provider or model, you can to configure them in your `.env` file too. Please have a look into the [./config/cms.php](https://github.com/aimeos/pagible/blob/master/config/cms.php) for the used environment variables.\n\n**Note:** You can also configure the base URLs for each provider using the `url` key in each provider configuration, e.g.:\n\n```php\n    'transcribe' =\u003e [ // Transcribe audio\n        'provider' =\u003e env( 'CMS_AI_TRANSCRIBE', 'openai' ),\n        'model' =\u003e env( 'CMS_AI_TRANSCRIBE_MODEL', 'whisper-1' ),\n        'api_key' =\u003e env( 'CMS_AI_TRANSCRIBE_API_KEY' ),\n        'url' =\u003e 'https://openai-api.compatible-provider.com'\n    ],\n```\n\n### Publishing\n\nFor scheduled publishing, you need to add this line to the `routes/console.php` class:\n\n```php\n\\Illuminate\\Support\\Facades\\Schedule::command('cms:publish')-\u003edaily();\n```\n\n### Clean up\n\nTo clean up soft-deleted pages, elements and files regularly, add these lines to the `routes/console.php` class:\n\n```php\n\\Illuminate\\Support\\Facades\\Schedule::command('model:prune', [\n    '--model' =\u003e [\n        \\Aimeos\\Cms\\Models\\Page::class,\n        \\Aimeos\\Cms\\Models\\Element::class,\n        \\Aimeos\\Cms\\Models\\File::class\n    ],\n])-\u003edaily();\n```\n\nYou can configure the timeframe after soft-deleted items will be removed permantently by setting the [CMS_PURGE](https://github.com/aimeos/pagible/blob/master/config/cms.php) option in your `.env` file. It's value must be the number of days after the items will be removed permanently or FALSE if the soft-deleted items shouldn't be removed at all.\n\n### Multi-domain\n\nUsing multiple page trees with different domains is possible by adding `CMS_MULTIDOMAIN=true` to your `.env` file.\n\n### Multi-tenancy\n\nPagibleAI CMS supports single database multi-tenancy using existing Laravel tenancy packages or code implemented by your own.\n\nThe [Tenancy for Laravel](https://tenancyforlaravel.com/) package is most often used. How to set up the package is described in the [tenancy quickstart](https://tenancyforlaravel.com/docs/v3/quickstart) and take a look into the [single database tenancy](https://tenancyforlaravel.com/docs/v3/single-database-tenancy) article too.\n\nAfterwards, tell PagibleAI CMS how the ID of the current tenant can be retrieved. Add this code to the `boot()` method of your `\\App\\Providers\\AppServiceProvider` in the `./app/Providers/AppServiceProvider.php` file:\n\n```php\n\\Aimeos\\Cms\\Tenancy::$callback = function() {\n    return tenancy()-\u003einitialized ? tenant()-\u003egetTenantKey() : '';\n};\n```\n\n### MCP API\n\nPagibleAI CMS offers tools within the Laravel MCP API that LLMs can use to interact with the CMS. To make them available, you have to add this line to your `./routes/ai.php` route file:\n\n```php\nMcp::oauthRoutes();\nMcp::web('/mcp/cms', \\Aimeos\\Cms\\Mcp\\CmsServer::class)-\u003emiddleware('auth:api');\n```\n\n**Note:** You need to set up Laravel Passport for [MCP OAuth authentication](https://laravel.com/docs/master/mcp#authentication) too!\n\n## Security\n\nIf you find a security related issue, please contact `security at aimeos.org`.\n\nSpecial thanks to:\n- Lwin Min Oo\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faimeos%2Fpagible","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faimeos%2Fpagible","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faimeos%2Fpagible/lists"}