PHPackages                             thorsten/phpmyfaq - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Database &amp; ORM](/categories/database)
4. /
5. thorsten/phpmyfaq

ActiveApplication[Database &amp; ORM](/categories/database)

thorsten/phpmyfaq
=================

Open source FAQ web application for PHP 8.4+ with multi-database support, full-text search, user management, and a REST API

4.1.5(2w ago)61979262[15 issues](https://github.com/thorsten/phpMyFAQ/issues)MPL-2.0PHPPHP &gt;=8.3.0CI passing

Since Aug 27Pushed 1w ago30 watchersCompare

[ Source](https://github.com/thorsten/phpMyFAQ)[ Packagist](https://packagist.org/packages/thorsten/phpmyfaq)[ Docs](https://www.phpmyfaq.de)[ GitHub Sponsors](https://github.com/thorsten)[ RSS](/packages/thorsten-phpmyfaq/feed)WikiDiscussions main Synced today

READMEChangelog (10)Dependencies (205)Versions (704)Used By (0)Security (105)

phpMyFAQ
========

[](#phpmyfaq)

[![Packagist PHP Version Support](https://camo.githubusercontent.com/d412ad2929666ab3a4d2c6b0747b1cc1f1e44e7ff5ee937c212a52ea2d831a8d/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f7068702d762f74686f727374656e2f7068704d79464151)](https://camo.githubusercontent.com/d412ad2929666ab3a4d2c6b0747b1cc1f1e44e7ff5ee937c212a52ea2d831a8d/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f7068702d762f74686f727374656e2f7068704d79464151)[![GitHub](https://camo.githubusercontent.com/ccfd72d6139d51d7127105503763ca76e09c9d87d4cb6aa7140993d62325beed/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f74686f727374656e2f7068704d79464151)](https://camo.githubusercontent.com/ccfd72d6139d51d7127105503763ca76e09c9d87d4cb6aa7140993d62325beed/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f74686f727374656e2f7068704d79464151)[![GitHub commit activity](https://camo.githubusercontent.com/12af7f82bfec15f8db073b14bc0779db800087fafe974cf2fbdcd4cf755cf849/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f636f6d6d69742d61637469766974792f6d2f74686f727374656e2f7068704d79464151)](https://camo.githubusercontent.com/12af7f82bfec15f8db073b14bc0779db800087fafe974cf2fbdcd4cf755cf849/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f636f6d6d69742d61637469766974792f6d2f74686f727374656e2f7068704d79464151)[![Documentation Status](https://camo.githubusercontent.com/02d0b8b9231476efdfa842960d0e6d01bb9b85359f176af926d44007f463bd2d/68747470733a2f2f72656164746865646f63732e6f72672f70726f6a656374732f7068706d796661712f62616467652f3f76657273696f6e3d6c6174657374)](https://phpmyfaq.readthedocs.io/en/latest/?badge=latest)

What is phpMyFAQ?
-----------------

[](#what-is-phpmyfaq)

phpMyFAQ is a multilingual, AI-ready, and scalable FAQ platform built for modern knowledge management. Powered by PHP 8.4+ and a fully database-driven architecture, it delivers fast search with Elasticsearch/OpenSearch, flexible multi-user permissions, and a powerful content management system with revision history and WYSIWYG editing.

With 40+ languages, responsive Twig-based templates, a REST API, 2FA security, enterprise authentication (LDAP, Active Directory, Entra ID), and a built-in plugin system, phpMyFAQ integrates seamlessly into almost any environment.

Deploy it on traditional hosting or run it in the cloud via Docker.

Requirements
------------

[](#requirements)

phpMyFAQ requires PHP 8.4 or higher and a supported database system. Supported databases include MySQL, MariaDB, Percona Server, PostgreSQL, Microsoft SQL Server, and SQLite3.

For enhanced search capabilities using Elasticsearch or OpenSearch, Elasticsearch 8.x or later or OpenSearch 2.x or later is required.

For a complete and up-to-date list of system requirements, please refer to the official documentation at [phpmyfaq.de](https://www.phpmyfaq.de/requirements).

Installation
------------

[](#installation)

### phpMyFAQ installation package for end-users

[](#phpmyfaq-installation-package-for-end-users)

The best way to install phpMyFAQ is to download it on [phpmyfaq.de](https://www.phpmyfaq.de/download), unzip the package, and open  in your preferred browser.

### phpMyFAQ installation with Docker

[](#phpmyfaq-installation-with-docker)

#### Dockerfile

[](#dockerfile)

The Dockerfile provided in this repo only builds an environment to run any release for development purpose. It does not contain any code as the phpmyfaq folder is meant to be mounted as the `/var/www/html` folder in the container.

#### docker-compose.yml

[](#docker-composeyml)

For development purposes, you can run your current phpMyFAQ source code from your local repo. Every service is gated behind a [Compose profile](https://docs.docker.com/compose/profiles/), so you pick exactly the combination you need (one web server + the databases and search engines you want to test against).

The easiest way is the `bin/dev` helper, which maps friendly names to profiles and adds guardrails (it refuses to start two web servers on the same port, auto-adds Redis, generates self-signed dev TLS certificates, and installs dependencies on first run):

```
$ bin/dev up nginx mariadb opensearch         # exactly these (Redis added automatically)
$ bin/dev up apache postgres elasticsearch --tools
$ bin/dev preset default                      # nginx + mariadb + opensearch + redis
$ bin/dev preset full                         # one web server + every backing service
$ bin/dev down                                # stop and remove the running stack
$ bin/dev ps | logs [service] | shell

```

Run `bin/dev help`, `bin/dev presets`, or `bin/dev profiles` for the full list. The same commands are available through pnpm: `pnpm dev:up`, `pnpm dev:down`, `pnpm dev:default`, `pnpm dev:full`, etc.

If you prefer raw Compose, pass the profiles yourself — a bare `docker compose up` now starts nothing, because no service is in the default profile:

```
$ docker compose --profile nginx --profile mariadb --profile opensearch --profile redis up

```

The available services (grouped by their profile) are:

*Web servers — pick one (all bind `:443`), each with PHP 8.5 support:*

- **nginx** (`nginx`): mounts `phpmyfaq` as `/var/www/html`, served via the **php-fpm** container.
- **apache** (`apache`): mounts `phpmyfaq` as `/var/www/html`.
- **frankenphp** (`frankenphp`): mounts `phpmyfaq` as `/var/www/html`, with HTTP/3 support.

*Databases — pick any:*

- **mariadb** (`mariadb`): MariaDB database (reachable under the `db` network alias).
- **postgres** (`postgres`): PostgreSQL database.
- **sqlserver** (`mssql`): Azure SQL Edge image (runs natively on Apple Silicon and x86).

*Search engines — pick any:*

- **elasticsearch** (`elasticsearch`): Open Source Software image (no XPack installed).
- **opensearch** (`opensearch`): OpenSearch image (no XPack installed).

*Cache:*

- **redis** (`redis`): Redis database (added automatically by `bin/dev` unless `--no-redis`).

*Admin tools (`--tools`, or the `phpmyadmin` / `pgadmin` profiles):*

- **phpmyadmin** (`phpmyadmin`): a PHP tool to inspect your MariaDB database.
- **pgadmin** (`pgadmin`): a PHP tool to inspect your PostgreSQL database.

*Dependency bootstrap (`build` profile, run once via `bin/dev build`):*

- **composer**: installs the Composer (PHP) dependencies.
- **pnpm**: installs the pnpm (TypeScript) dependencies and builds the assets.

Then services will be available at the following addresses:

- phpMyFAQ: ( or  as fallback)
- phpMyAdmin: ()
- pgAdmin: ()

#### Running tests

[](#running-tests)

To run the test using Docker, you have to install the Composer development dependencies

```
$ docker build -t phpmyfaq-test . && docker run --rm -it docker.io/library/phpmyfaq-test:latest

```

#### Quote from Elasticsearch documentation

[](#quote-from-elasticsearch-documentation)

The vm.max\_map\_count kernel setting needs to be set to at least 262144 for production use. Depending on your platform:

##### Linux

[](#linux)

The vm.max\*map\_count setting should be set permanently in \*/etc/sysctl.conf\_:

```
$ grep vm.max_map_count /etc/sysctl.conf
vm.max_map_count=262144

```

To apply the setting on a live system type: `sysctl -w vm.max_map_count=262144`

##### macOS and Windows with Docker Desktop

[](#macos-and-windows-with-docker-desktop)

Docker Desktop runs containers inside a managed Linux VM. Open a shell in that VM and apply the setting there:

```
$ docker run --rm --privileged --pid=host alpine nsenter -t 1 -m -u -n -i sysctl -w vm.max_map_count=262144

```

This change is not persistent and must be reapplied after restarting Docker Desktop.

### phpMyFAQ local installation from Github

[](#phpmyfaq-local-installation-from-github)

To run phpMyFAQ locally, you need at least a running web server with PHP support and a database.

```
$ git clone git://github.com/thorsten/phpMyFAQ.git
$ cd phpMyFAQ
$ git checkout main
$ curl -s https://getcomposer.org/installer | php
$ php composer.phar install
$ curl -fsSL https://get.pnpm.io/install.sh | sh -
$ pnpm install
$ pnpm build

```

Then open  in your browser.

Testing
-------

[](#testing)

### PHP

[](#php)

To run our unit tests via PHPUnit v13.x, execute this command on your CLI

```
$ curl -s https://getcomposer.org/installer | php
$ php composer.phar install
$ composer test

```

Please note that phpMyFAQ needs to be installed via Composer.

### TypeScript

[](#typescript)

To run our TypeScript tests via Vitest, execute this command on your CLI

```
$ curl -fsSL https://get.pnpm.io/install.sh | sh -
$ pnpm install
$ pnpm test

```

### End-to-end (Playwright)

[](#end-to-end-playwright)

The end-to-end suite drives a real browser against a freshly installed instance that is seeded with bilingual (German + English) test data. Provisioning, serving, and teardown are fully automated by the `bin/e2e` helper, so no manual setup or existing installation is required — your local configuration is backed up and restored automatically.

Install the browser once, then run the suite:

```
$ pnpm install
$ pnpm e2e:install                # downloads the Chromium browser
$ pnpm e2e:local                  # SQLite + built-in PHP server (fast)
$ pnpm e2e:docker                 # dedicated MariaDB container (production-like)

```

`bin/e2e` installs phpMyFAQ headlessly via `php bin/console phpmyfaq:install`, seeds the test data with `php bin/console phpmyfaq:seed-testdata`, serves the app, and runs Playwright. Pass extra arguments through to Playwright after `--`, for example `./bin/e2e local -- tests/e2e/search.spec.ts`. The specs live in `tests/e2e/` and cover bilingual content, search, admin login, and basic accessibility.

The suite also runs nightly in CI (`.github/workflows/e2e-nightly.yml`) using the SQLite path, uploading the Playwright HTML report and failure traces as build artifacts.

Versioning
----------

[](#versioning)

For transparency and insight into our release cycle, and for striving to maintain backward compatibility, phpMyFAQ will be maintained under the Semantic Versioning guidelines as much as possible.

Releases will be numbered with the following format:

`..`

And constructed with the following guidelines:

- Breaking backward compatibility bumps the major (and resets the minor and patch)
- New additions without breaking backward compatibility bump the minor (and reset the patch)
- Bug fixes and misc changes bump the patch

For more information on SemVer, please visit .

Issue tracker
-------------

[](#issue-tracker)

Found a bug, or do you have a feature request? [Please open a new issue](https://github.com/thorsten/phpMyFAQ/issues). Before opening any issue, please search for existing issues.

Contributing
------------

[](#contributing)

Please check out our page about contributing on [phpmyfaq.de](https://www.phpmyfaq.de/contribute).

Documentation
-------------

[](#documentation)

You can read the complete documentation on [here](https://phpmyfaq.readthedocs.io/en/latest/).

REST API documentation
----------------------

[](#rest-api-documentation)

The REST API documentation is available as an OpenAPI 3.0 specification:

- [JSON](docs/openapi.json)
- [YAML](docs/openapi.yaml)

The Swagger UI is available at .

Discord server
--------------

[](#discord-server)

If you like to chat with the phpMyFAQ team, please join our [Discord server](https://discord.gg/wszhTceuNM). We're happy to help you with your questions!

License
-------

[](#license)

Mozilla Public License 2.0, see LICENSE for more information.

Copyright © 2001–2026 Thorsten Rinne and the phpMyFAQ Team

###  Health Score

69

—

FairBetter than 100% of packages

Maintenance97

Actively maintained with recent releases

Popularity35

Limited adoption so far

Community34

Small or concentrated contributor base

Maturity98

Battle-tested with a long release history

 Bus Factor1

Top contributor holds 79.6% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~28 days

Recently: every ~15 days

Total

182

Last Release

5d ago

Major Versions

3.2.6 → 4.0.0-alpha.22024-06-01

3.2.8 → 4.0.0-alpha.32024-07-21

3.2.9 → 4.0.0-alpha.42024-07-23

3.2.10 → 4.0.0-RC.42024-11-09

3.2.x-dev → 4.0.02024-12-06

PHP version history (12 changes)2.8.0-alpha2PHP &gt;=5.3.2

2.8.0-betaPHP &gt;=5.3.3

2.9.0-alphaPHP &gt;=5.4.4

2.9.0-alpha3PHP &gt;=5.5.0

2.10.0-alphaPHP &gt;=5.6.0

3.0.0-alpha.3PHP &gt;=7.1.0

3.0.0-RCPHP &gt;=7.2.0

3.1.0-alphaPHP &gt;=7.3.0

3.1.0-RCPHP &gt;=7.4.0

3.2.0-alphaPHP &gt;=8.1.0

4.0.0-alphaPHP &gt;=8.2.0

4.1.0-alpha.2PHP &gt;=8.3.0

### Community

Maintainers

![](https://www.gravatar.com/avatar/03776dfc00b258ac23dc7f7a611d9092896197775a052aa88aca51ea440d8d42?d=identicon)[thorsten](/maintainers/thorsten)

---

Top Contributors

[![thorsten](https://avatars.githubusercontent.com/u/45284?v=4)](https://github.com/thorsten "thorsten (8852 commits)")[![dependabot[bot]](https://avatars.githubusercontent.com/in/29110?v=4)](https://github.com/dependabot[bot] "dependabot[bot] (1476 commits)")[![modelrailroader](https://avatars.githubusercontent.com/u/96944229?v=4)](https://github.com/modelrailroader "modelrailroader (200 commits)")[![dependabot-preview[bot]](https://avatars.githubusercontent.com/in/2141?v=4)](https://github.com/dependabot-preview[bot] "dependabot-preview[bot] (108 commits)")[![weltling](https://avatars.githubusercontent.com/u/22016?v=4)](https://github.com/weltling "weltling (74 commits)")[![Copilot](https://avatars.githubusercontent.com/in/1143301?v=4)](https://github.com/Copilot "Copilot (66 commits)")[![thorsten-rinne-mw](https://avatars.githubusercontent.com/u/161828644?v=4)](https://github.com/thorsten-rinne-mw "thorsten-rinne-mw (49 commits)")[![Maghin](https://avatars.githubusercontent.com/u/19150723?v=4)](https://github.com/Maghin "Maghin (47 commits)")[![sasamario](https://avatars.githubusercontent.com/u/43754736?v=4)](https://github.com/sasamario "sasamario (40 commits)")[![d0ubIeU](https://avatars.githubusercontent.com/u/247658984?v=4)](https://github.com/d0ubIeU "d0ubIeU (32 commits)")[![winks](https://avatars.githubusercontent.com/u/44402?v=4)](https://github.com/winks "winks (27 commits)")[![derrabus](https://avatars.githubusercontent.com/u/1506493?v=4)](https://github.com/derrabus "derrabus (22 commits)")[![greenkeeper[bot]](https://avatars.githubusercontent.com/in/505?v=4)](https://github.com/greenkeeper[bot] "greenkeeper[bot] (21 commits)")[![dsp](https://avatars.githubusercontent.com/u/14013?v=4)](https://github.com/dsp "dsp (16 commits)")[![Chris--A](https://avatars.githubusercontent.com/u/6584350?v=4)](https://github.com/Chris--A "Chris--A (13 commits)")[![werkstrom](https://avatars.githubusercontent.com/u/13434693?v=4)](https://github.com/werkstrom "werkstrom (9 commits)")[![aherking](https://avatars.githubusercontent.com/u/29854349?v=4)](https://github.com/aherking "aherking (8 commits)")[![peter-lyons-kehl](https://avatars.githubusercontent.com/u/4270240?v=4)](https://github.com/peter-lyons-kehl "peter-lyons-kehl (8 commits)")[![c1972](https://avatars.githubusercontent.com/u/112912128?v=4)](https://github.com/c1972 "c1972 (7 commits)")[![to-kn](https://avatars.githubusercontent.com/u/1778428?v=4)](https://github.com/to-kn "to-kn (7 commits)")

---

Tags

databasedockerdocker-composeelasticsearchfaqfrankenphpkubernetesmariadbmcp-servermssqlmysqlopensearchphpphpmyfaqpostgresqlsqliteFAQphpMyFAQ

###  Code Quality

TestsPHPUnit

Static AnalysisPHPStan, Rector

Code StylePHP\_CodeSniffer

Type Coverage Yes

### Embed Badge

![Health badge](/badges/thorsten-phpmyfaq/health.svg)

```
[![Health](https://phpackages.com/badges/thorsten-phpmyfaq/health.svg)](https://phpackages.com/packages/thorsten-phpmyfaq)
```

###  Alternatives

[shopware/core

Shopware platform is the core for all Shopware ecommerce products.

585.6M574](/packages/shopware-core)[open-dxp/opendxp

Content &amp; Product Management Framework (CMS/PIM)

9421.6k61](/packages/open-dxp-opendxp)[shopware/platform

The Shopware e-commerce core

3.4k1.5M3](/packages/shopware-platform)[chameleon-system/chameleon-base

The Chameleon System core.

1028.6k5](/packages/chameleon-system-chameleon-base)[pimcore/pimcore

Content &amp; Product Management Framework (CMS/PIM/E-Commerce)

3.8k3.8M508](/packages/pimcore-pimcore)[oro/platform

Business Application Platform (BAP)

645143.5k115](/packages/oro-platform)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
