omniscient / omnibase
Base helper integration for Symfony
Package info
github.com/glitchr-studio/omnibase
Type:symfony-bundle
pkg:composer/omniscient/omnibase
Requires
- php: ^8.2
- ext-exif: *
- ext-igbinary: *
- ext-imagick: *
- api-platform/doctrine-orm: ^4.0
- api-platform/symfony: ^4.0
- beberlei/doctrineextensions: ^1.0
- doctrine/doctrine-bundle: ^2.0|^3.0
- doctrine/orm: ^2.15|^3.0
- embed/embed: ^4.4
- endroid/qr-code: ^6.0
- enshrined/svg-sanitize: ^1.0
- florianv/swap: ^4.0
- glitchr/backup-manager: 4.0.*-dev
- glitchr/base-plugin: 2.0.*-dev
- glitchr/doctrine-dc2type: 1.0.*-dev
- glitchr/ux-google: 1.0.*-dev
- glitchr/well-known: 1.0.*-dev
- hashids/hashids: ^5.0
- hwi/oauth-bundle: ^2.1
- imagine/imagine: ^1.2
- jaybizzle/crawler-detect: ^1.2
- league/flysystem-bundle: ^3.1
- league/flysystem-ftp: ^3.0
- nelmio/cors-bundle: ^2.2
- nelmio/security-bundle: ^3.0
- omnibridge/doctrine: 1.x-dev
- omnibridge/twig: 1.x-dev
- phpoffice/phpspreadsheet: ^1.23|^2.0
- picqer/php-barcode-generator: ^2.0
- psr/clock: ^1.0
- psr/container: ^1.1|^2.0
- psr/event-dispatcher: ^1.0
- scheb/2fa: ^7.0|^8.0
- scienta/doctrine-json-functions: ~4.3
- symfony/asset: ^6.0|^7.0|^8.0
- symfony/config: ^6.0|^7.0|^8.0
- symfony/dependency-injection: ^6.0|^7.0|^8.0
- symfony/discord-notifier: ^6.0|^7.0|^8.0
- symfony/dotenv: ^6.0|^7.0|^8.0
- symfony/expression-language: ^6.0|^7.0|^8.0
- symfony/form: ^6.0|^7.0|^8.0
- symfony/framework-bundle: ^6.0|^7.0|^8.0
- symfony/http-client: ^6.0|^7.0|^8.0
- symfony/intl: ^6.0|^7.0|^8.0
- symfony/mailer: ^6.0|^7.0|^8.0
- symfony/messenger: ^6.0|^7.0|^8.0
- symfony/monolog-bundle: ^3.8|^4.0
- symfony/notifier: ^6.0|^7.0|^8.0
- symfony/process: ^6.0|^7.0|^8.0
- symfony/security-bundle: ^6.0|^7.0|^8.0
- symfony/serializer: ^6.0|^7.0|^8.0
- symfony/translation: ^6.0|^7.0|^8.0
- symfony/twig-bundle: ^6.0|^7.0|^8.0
- symfony/uid: ^6.0|^7.0|^8.0
- symfony/ux-twig-component: ^2.0|^3.0
- symfony/validator: ^6.0|^7.0|^8.0
- symfony/webpack-encore-bundle: ^2.0
- symfony/workflow: ^6.0|^7.0|^8.0
- twig/cache-extra: ^3.0
- twig/cssinliner-extra: ^3.0
- twig/extra-bundle: ^3.0
- twig/inky-extra: ^3.0
- twig/intl-extra: ^3.0
- twig/twig: ^3.0
- web-auth/webauthn-symfony-bundle: ^5.3
Requires (Dev)
- doctrine/doctrine-fixtures-bundle: ^3.4
- doctrine/doctrine-migrations-bundle: ^3.0
- omniscient/omnishield: 1.x-dev
- omniscient/omnisign: 1.x-dev
- omnishield/akismet: 1.x-dev
- omnishield/altcha: 1.x-dev
- omnishield/disposable: 1.x-dev
- omnisign/docuseal: 1.x-dev
- phpstan/phpstan: ^1.12
- phpunit/phpunit: ^10.5
- squizlabs/php_codesniffer: ^3.7
- symfony/debug-bundle: ^6.0|^7.0|^8.0
- symfony/lock: ^6.0|^7.0|^8.0
- symfony/phpunit-bridge: ^6.0|^7.0|^8.0
- symfony/stopwatch: ^6.0|^7.0|^8.0
- symfony/var-dumper: ^6.0|^7.0|^8.0
- symfony/web-profiler-bundle: ^6.0|^7.0|^8.0
- wapmorgan/php-deprecation-detector: ^2.0
Suggests
- doctrine/doctrine-fixtures-bundle: demo:reset reloads the fixtures (the demo environment)
- dompdf/dompdf: Base\Response\PdfResponse: an HTML page answered as a PDF (^3.0)
- omniscient/omnishield: Base\Service\FormGuard's captcha, address lists and content classifier (the option `guard` of a form, Akismet behind SpamChecker): register Omnishield\Bridge\Symfony\OmnishieldBundle; not on Packagist yet - a vcs repository, https://github.com/glitchr-studio/omnishield
- omniscient/omnisign: Base\Service\Signatures: documents signed for any entity (Base\Entity\Signature\Envelope, mapped only with it), the signed file and its evidence kept in the private storage; register Omnisign\Bridge\Symfony\OmnisignBundle; not on Packagist yet - a vcs repository, https://github.com/glitchr-studio/omnisign
- omnishield/akismet: Akismet behind Base\Service\SpamChecker (base.guard.classifier)
- omnishield/altcha: ALTCHA, the default captcha of FormGuard: a proof of work served and checked by the site, no third party, no cookie, no consent
- omnishield/disposable: Disposable e-mail domains refused at sign-up (base.guard.reputation)
- omnisign/docuseal: A DocuSeal instance of one's own: nothing leaves for a third party (omnisign/yousign, omnisign/docusign for the providers)
- symfony/lock: demo:reset runs under a lock (the demo environment)
Provides
None
Conflicts
None
Replaces
- glitchr/omnibase: 3.x-dev
README
Bedrock Symfony bundle for Glitchr projects: it pre-configures a full application
stack (admin, security, media, i18n, workflow, API) so host apps only add their
domain code. The Base\ namespace deliberately mirrors the host apps' App\
structure — a host class can usually extend or decorate its Base\ counterpart
one-to-one.
Published as omniscient/omnibase (formerly glitchr/omnibase, which this package replaces: a
composer.json that still requires the old name keeps resolving to it, and never installs both).
Composer now installs it in vendor/omniscient/omnibase; nothing in the package depends on that
path (its templates, documentation and scripts are found from its own directory), but an
application that names the old path in its configuration has to follow - see CHANGELOG.
Requires PHP ≥ 8.2 (omnibridge/doctrine) and Symfony 6, 7 or 8. Licensed MIT (LICENSE) since 2026-10-09;
earlier versions remain published under LGPL-3.0-or-later.
Docker: every plugin, running
docker/ builds this checkout into one Symfony application with every omnibase/* plugin -
the back office, the shop, the forge, the forum, the mailbox, the docs - on SQLite, with a demo
page that seeds members and a shop and signs you in:
cd docker docker compose up # → http://localhost:8000/ docker compose run --rm omnibase check # container and templates linted, routes counted docker compose -f compose.yml -f compose.checkouts.yml run --rm omnibase bare # the Fondation loaded without the framework docker compose -f compose.yml -f compose.checkouts.yml up # the checkouts beside this one instead of Packagist docker compose -f compose.yml -f compose.checkouts.yml run --rm omnibase test [admin|marketplace|forge|...] # a suite, on the checkouts
The suites run there in the test environment on a fresh SQLite database: see docs/30-operations/harness.md.
Installation
The package is resolved from Packagist (repository: https://github.com/glitchr-studio/omnibase):
composer require omniscient/omnibase:^3.0
Enable in config/bundles.php (Flex usually does it):
Base\BaseBundle::class => ['all' => true],
Bundle configuration lives under the base: key; the tree is defined in
src/DependencyInjection/BaseConfiguration.php.
Try it in one command
A self-contained demo (bare Symfony skeleton + this bundle + SQLite, one flat
page touring the App\ ↔ Base\ mirroring, the shipped entity layer, the
setting bag, the obfuscator and the translator) ships in the root
Dockerfile:
docker build -t base-bundle-demo . docker run --rm -p 8000:8000 base-bundle-demo # → http://localhost:8000/
The demo app under example/app/ doubles as a minimal
reference: the smallest bundles.php, base.yaml, doctrine.yaml,
security.yaml and flysystem.yaml a host application needs.
What's inside (map of src/)
| Area | Directories | Purpose |
|---|---|---|
| Admin | Admin/, Field/, Form/ |
EasyAdmin integration: custom CRUD fields (~40, e.g. WysiwygField, CropperField, TranslationField) with their configurators, form types and extensions |
| Persistence | Database/, Entity/, Repository/, EntityDispatcher/, *Subscriber/ |
Doctrine attributes (Hierarchify, Versionable, Vault, …), base entities (User, Thread, Layout, …), lifecycle dispatching |
| HTTP | Controller/, Routing/, Response/ |
Public/admin/UX controllers, advanced router, sitemap |
| Security | Security/, Validator/ |
Voters, 2FA (scheb), access tokens, dynamic session storage |
| Services | Service/, Cache/, Notifier/, Serializer/ |
BaseService facade, media/file/flysystem services, localizer, notifier channels |
| Presentation | Twig/, templates/, translations/ |
Twig extensions/components, EasyAdmin + client templates, translations |
| Assets | assets/, public/, Imagine/ |
Encore entrypoints (async/defer), built assets, image filters |
| Tooling | Console/, Inspector/, Attributes/ |
Console commands, profiler data collectors, attribute reader |
Extension points are autoconfigured by tag — implement the interface, the tag is
applied automatically (see src/DependencyInjection/BaseExtension.php):
base.entity_extension, base.annotation, base.icon_provider,
base.service.sharer, base.simple_cache, …
Service wiring
Service definitions live in config/:
services.php— registrations (split per domain, loaded byBaseExtension)services-decoration.php— decorations of framework/third-party servicesservices-public.php— services forced publicservices-fix.php— targeted workarounds
Development
The bundle is developed inside a host app's vendor/omniscient/omnibase
checkout (composer VCS install keeps .git) and pushed from there.
make build # yarn install --frozen-lockfile (yarn.lock) + Encore, production build make linter # php-cs-fixer + phpstan (level max) make tests # phpunit
CI (.gitlab-ci.yml) runs cs-fixer, PHPStan and PHPUnit on every push.
Releases
One development branch per major (1.x, 2.x, 3.x — the current one is the
main branch; the next major starts 4.x), tags per release (3.0.0, 3.1.0,
…) — tag after each meaningful batch so consumers can pin stable versions:
git tag -a 3.1.0 -m "..." && git push origin 3.1.0
The legacy 1.0/2.0/3.0 branches carry the pre-2026 unslimmed history and
are frozen — do not push to them.
See CHANGELOG.md.