nowo-tech / yopass-bundle
Symfony bundle for Yopass-style E2E encrypted secret sharing with configurable routes, table prefix, and access control
Package info
github.com/nowo-tech/YopassBundle
Type:symfony-bundle
pkg:composer/nowo-tech/yopass-bundle
Fund package maintenance!
Requires
- php: >=8.2 <8.6
- ext-sodium: *
- doctrine/doctrine-bundle: ^2.10 || ^3.0
- doctrine/orm: ^2.15 || ^3.0
- nowo-tech/form-kit-bundle: ^2.0
- nowo-tech/ui-kit-bundle: ^2.35
- symfony/clock: ^7.4 || ^8.0
- symfony/config: ^7.4 || ^8.0
- symfony/dependency-injection: ^7.4 || ^8.0
- symfony/form: ^7.4 || ^8.0
- symfony/framework-bundle: ^7.4 || ^8.0
- symfony/http-kernel: ^7.4 || ^8.0
- symfony/routing: ^7.4 || ^8.0
- symfony/security-bundle: ^7.4 || ^8.0
- symfony/security-csrf: ^7.4 || ^8.0
- symfony/translation: ^7.4 || ^8.0
- symfony/twig-bundle: ^7.4 || ^8.0
- symfony/validator: ^7.4 || ^8.0
- symfony/yaml: ^7.4 || ^8.0
- twig/extra-bundle: ^3.12
- twig/string-extra: ^3.12
Requires (Dev)
- doctrine/mongodb-odm: ^2.6
- doctrine/mongodb-odm-bundle: ^5.0
- friendsofphp/php-cs-fixer: ^3.0
- igor-php/igor-php: ^0.10.0
- nowo-tech/phpstan-frankenphp: ^1.0
- phpstan/extension-installer: ^1.0
- phpstan/phpstan: ^2.0
- phpstan/phpstan-phpunit: ^2.0
- phpstan/phpstan-symfony: ^2.0
- phpunit/phpunit: ^10.0
- rector/rector: ^2.0
- symfony/browser-kit: ^7.4 || ^8.0
- symfony/dom-crawler: ^7.4 || ^8.0
- vincentlanglet/twig-cs-fixer: ^4.0
Suggests
- doctrine/mongodb-odm-bundle: Required when nowo_yopass.database.platform is mongodb or database.driver is doctrine_mongodb.
Provides
None
Conflicts
None
Replaces
None
- dev-main
- v1.17.0
- v1.16.0
- v1.15.1
- v1.15.0
- v1.14.1
- v1.14.0
- v1.13.0
- v1.12.1
- v1.12.0
- v1.11.0
- v1.10.1
- v1.10.0
- v1.9.0
- v1.8.0
- v1.7.0
- v1.6.0
- v1.5.5
- v1.5.4
- v1.5.3
- v1.5.2
- v1.5.1
- v1.5.0
- v1.4.9
- v1.4.8
- v1.4.7
- v1.4.6
- v1.4.5
- v1.4.4
- v1.4.3
- v1.4.2
- v1.4.1
- v1.4.0
- v1.3.2
- v1.3.1
- v1.3.0
- v1.2.8
- v1.2.7
- v1.2.6
- v1.2.5
- v1.2.4
- v1.2.3
- v1.2.2
- v1.2.1
- v1.2.0
- v1.1.0
- v1.0.1
- v1.0.0
- dev-feat/ddd-p2
- dev-feat/ddd-ports
- dev-fix/mongo-share-reconstitution
- dev-feat/action-kinds
- dev-feat/dialog-sizes-2.29
- dev-feat/1.13.0-list-route-filters
- dev-fix/1.12.1-create-icon
- dev-feat/1.12.0-create-dialog
- dev-chore/symfony-security-2026-11-04
- dev-feat/1.11.0-host-hooks
- dev-fix/req-twig-005
This package is auto-updated.
Last update: 2026-11-10 09:27:50 UTC
README
⭐ Found this useful? Give it a star on GitHub so more developers can find it.
Symfony bundle for Yopass-style E2E encrypted secret sharing: client-side libsodium encryption, expiration, read limits, and public reveal pages.
This bundle is FrankenPHP worker mode friendly.
Manage page — create panel, shares list, row actions (UiKit list scaffold) |
Encrypted share created — short link, key and one-click link |
Recipient reveals the one-time secret, decrypted in the browser |
Features
- Browser-side encryption (
libsodiumsecretbox); server stores ciphertext only - Text and file payloads (max 512 KB files; file tab requires
file_handlerservice) - Configurable expiration options, max-read limits, list pagination, and retention purge (
nowo:yopass:purge-old-shares) - Auto-generated decryption key or custom password mode
- One-click links with the key in the URL fragment (
#decrypt_key=, never sent to the server;sharing.allow_embed_in_url); short links with manual key entry - Authenticated manage UI + anonymous public reveal/consume routes, on the UiKit page contract (list / show scaffolds, guest layout, one host theme for every Nowo bundle; no bundle layout, CSS framework or CDN)
- Configurable routes, table prefix, templates, and pluggable access control
- Share events — customize list queries and per-share access (teams, grants, roles) without built-in ACL
- Public rate limiting — per-IP limits on anonymous
/share/*routes (requirescache.app)
Installation
composer require nowo-tech/yopass-bundle
See Installation for Flex recipe, Doctrine schema, routes, and security firewall setup.
Configuration
# config/packages/nowo_yopass.yaml nowo_yopass: user_class: App\Entity\User table_prefix: yopass_ security: # Defaults to ROLE_ADMIN since 1.3.0 — set explicitly if you need ROLE_USER access_roles: [ROLE_ADMIN] roles: { create: [ROLE_ADMIN], list: [ROLE_ADMIN], revoke: [ROLE_ADMIN] } access_checker: App\Security\CustomYopassAccessChecker # optional # Pages render inside your layouts and theme, configured once in UiKit for every Nowo bundle nowo_ui_kit: css_framework: bootstrap5 layouts: { admin: 'layouts/admin.html.twig', guest: 'layouts/guest.html.twig' }
Full reference: Configuration.
Usage
- Manage UI:
/tools/yopass(configurable) - Public reveal:
/share/{id}or/share/{id}#decrypt_key=…(configurable) - Pages, view models and data blocks: Templates; override Twig:
templates/bundles/NowoYopassBundle/(prefer the UiKit theme)
See Usage and Access control events.
Demo
make -C demo up-symfony8
# Demo started at: http://localhost:8022 → Yopass CRUD at /tools/yopass (auto-login)
The screenshots at the top of this README come from this demo (fake demo text only); refresh them with make -C demo/symfony8 demo-screenshots (make -C demo/symfony8 test-e2e runs the Playwright happy path).
Documentation
- Installation
- Configuration
- Usage
- Templates (UiKit page contract)
- Contributing
- Code of Conduct
- Changelog
- Upgrading
- Release
- Security
- Engram
- Spec-driven development
- GitHub Spec Kit
Additional documentation
- PSR evaluation (REQ-CS-007)
- GitHub Actions CI requirements
- Share list and access events
- Demo with FrankenPHP
- FrankenPHP worker audit
- Local file storage (demo default)
- AWS S3 file shares example (local, gitignored)
Tests and Coverage
PHPUnit (unit + integration with Doctrine ORM/SQLite and MongoDB mocks) and Vitest (libsodium crypto helpers and Stimulus controllers on happy-dom). Both gates fail the build below their threshold.
make test # PHPUnit make test-coverage # PHP coverage + percentage script make coverage-check # PHP coverage + 99% statements gate make test-ts # Vitest + coverage (all TS sources, 90% gate) make release-check # Full pre-release chain
| Language | Coverage | Gate |
|---|---|---|
| PHP | 99.20% (statements 1729/1743, Lines 99.20%) | make coverage-check (≥ 99%) |
| TypeScript | 97.75% (lines 609/623; branches 92.12%) | vitest.config.ts thresholds (≥ 90% lines / statements / functions / branches) |
| Python | N/A | — |
License
MIT — see LICENSE.



