Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Eloquent Encryptable Laravel Package

kduma/eloquent-encryptable

Transparently encrypt sensitive Eloquent attributes at rest. A simple trait encrypts chosen fields on save and decrypts them on read, so your code keeps using plain values while the database stores ciphertext—no schema changes required.

View on GitHub
Deep Wiki
Context7

Product Decisions This Supports

  • Data-at-rest protection for PII: deciding which model attributes (emails, phone numbers, national IDs, health notes, payment references) must be encrypted inside the database rather than relying solely on disk/volume encryption. This is the core decision the package addresses.
  • Compliance positioning: whether we can credibly claim "sensitive fields are encrypted at the application layer" in a security questionnaire, SOC 2 / GDPR / HIPAA-style review, or enterprise sales conversation — and where the residual gaps are (searchability, key custody, audit).
  • Build vs. buy vs. use-the-framework: whether to (a) adopt a third-party trait, (b) use Laravel's native encrypted casts, or (c) build an in-house cast/trait. This package is one data point in that comparison, not the default answer.
  • Crypto-shredding as a deletion strategy: encryption at the field level enables "delete by destroying the key" for right-to-erasure requests where hard deletes conflict with referential integrity or audit retention. That is a roadmap-level capability, not just a column change.
  • Query and UX trade-offs: encrypted columns cannot be WHERE-filtered, sorted, or partially matched by the database. Accepting this package implicitly decides that admin search, exact-match lookups, and reporting on those fields must move to a separate index (blind index, hash column, or search service) — a real product-visible constraint.
  • Schema migration planning: ciphertext (base64 of AES output plus IV/tag) is materially longer than plaintext, and every encrypted column plus its index/lookup companion becomes a migration, backfill, and rollout plan.

When to Consider This Package

Consider it only in narrow, usually legacy circumstances:

  • An existing codebase already depends on it and you are evaluating whether to keep, patch, or migrate — the realistic case given the repo is archived.
  • You need a drop-in trait on a Laravel version that predates native encrypted casts (Laravel < 10) and upgrading the framework is off the table in the current cycle.
  • You want a reference implementation for how to structure a custom cast/trait — reading it to inform an in-house build rather than shipping it.
  • You have a small, low-traffic internal app with a small blast radius and acceptable key-management simplicity.

Look elsewhere — specifically at Laravel's built-in encrypted / encrypted:array / encrypted:collection casts — when:

  • The repo is archived. Zero commits since 2024-11-11, 5 stars, 0 dependents, no maintainer. Cryptographic code with no security patching path is a liability, not a dependency. This alone disqualifies it for new production work.
  • You need a maintenance commitment: security advisories, PHP/Laravel version support, key rotation, algorithm agility (AES-GCM vs CBC), and someone to call when a CVE lands.
  • You need searchable or deterministic encryption. Deterministic schemes leak equality patterns; verify any package's claims here with a security reviewer rather than trusting a README.
  • You need key rotation, per-tenant keys, or KMS/HSM integration (AWS KMS, GCP KMS, Vault). Native Laravel handles a single APP_KEY; anything beyond that is custom work regardless of package.
  • You operate at scale where per-row decrypt overhead, index sizing, and cache/queue serialization of decrypted attributes matter.

How to Pitch It (Stakeholders)

To executives: Field-level encryption is a checkbox item for enterprise deals and a real control for PII, but this specific package is archived, unmaintained, and has effectively no user base — adopting it would introduce a security dependency with no upgrade path. Laravel ships this capability natively, so the recommendation is to standardize on the framework's encrypted casts (or a vetted, actively maintained alternative) and treat this package as reference-only. Cost of doing it right is low; cost of a stranded crypto dependency in the stack is high.

To engineering: The package gives Eloquent models transparent encrypted attributes via a trait, which is the right shape for the problem. The blockers are lifecycle and crypto hygiene: archived since late 2024, no security response, no key rotation or KMS story, and encrypted columns lose WHERE/ORDER BY/LIKE — so any feature needing lookup or search on those fields requires a companion hash/blind-index column. Use Laravel's native encrypted casts as the default; if the trait's ergonomics are genuinely better, fork it into our own namespace, pin the algorithm (AES-256-GCM), add key rotation and a backfill/rollback plan, and own the maintenance explicitly.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
mehedimi/laravel-amp-mail
happones/laravel-vue-i18n-generator
jwerd/inertia-table
siberfx/flysystem-wasabi
hollyit/token-replace
ippanelcom/laravel-sdk
adachsoft/changelog-linter
adachsoft/collection
payerurl/telegrambot-crypto-payment-instant-payout
dskripchenko/laravel-hybrid-search
riorizkyrainey/lara-ced
mehedimi/static-vel
zharp/zharp
nonsapiens/bigquery-model-sync
lgu-bayambang-ict-office/lgu-laravel-development-standards
andydefer/laravel-support
se7enxweb/flysystem
lampwick/laravel
jeslage/statamic-emojis
micahdshackelford/rmap-laravel