{"adoption": {"forks": 78, "observed_at": "2026-08-28T04:05:10.836815+00:00", "stars": 1609}, "canonical_url": "https://ross.abutalabs.com/products/lockbox", "card": {"archived": false, "artifact_type": "library", "description": "Modern encryption for Ruby and Rails", "domain": ["security", "web-development", "backend", "privacy", "databases"], "enriched": true, "function": ["cryptography", "security", "orm", "serialization"], "health_score": 66, "homepage": null, "language": "Ruby", "license": "MIT", "license_family": "permissive", "maturity": "stable", "member_repos": ["ankane/lockbox"], "name": "ankane/lockbox", "platform": ["ruby", "jvm"], "pushed_at": "2026-04-09T07:04:01+00:00", "repo": "ankane/lockbox", "stars": 1609, "tags": ["encryption", "rails", "activerecord", "activestorage", "libsodium", "key-rotation", "field-level-encryption", "file-encryption"], "topics": ["encryption", "activerecord", "activestorage", "carrierwave", "mongoid", "libsodium"], "urls": [], "use_cases": ["encrypt sensitive database columns in Rails", "secure user emails with Devise", "encrypt uploaded files in Active Storage", "rotate encryption keys for existing data", "encrypt strings and files in Ruby apps", "add encrypted attributes to ActiveRecord models"], "what_it_is": "Lockbox is a Ruby gem providing modern encryption for database fields, files, and strings in Ruby and Rails applications. It integrates with Active Record, Mongoid, Active Storage, CarrierWave, and Shrine, with support for easy data migration and key rotation.", "when_to_avoid": ["you need application-level encryption outside the Ruby ecosystem", "you require searchable encrypted queries without a companion blind index", "your project does not use Ruby or Rails"], "when_to_choose": ["you need transparent field-level encryption in Rails or Ruby", "you want easy key rotation and data migration support", "you need encryption for both database fields and file attachments", "you prefer a zero-dependency library with broad ORM integrations"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/lockbox", "repo": "ankane/lockbox", "role": "main", "score": 66}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:05:10.836815+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T03:51:16.096224+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "b75348a4d1c07288ac448cd6b6e95291e4ade267d97b0022611291dc3dd48666", "fetched_at": "2026-08-28T04:05:10.836815+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ankane/lockbox"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:05:10.836815+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T03:51:16.096224+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "b75348a4d1c07288ac448cd6b6e95291e4ade267d97b0022611291dc3dd48666", "fetched_at": "2026-08-28T04:05:10.836815+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ankane/lockbox"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T03:51:16.096224+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "b75348a4d1c07288ac448cd6b6e95291e4ade267d97b0022611291dc3dd48666", "fetched_at": "2026-08-28T04:05:10.836815+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ankane/lockbox"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:05:10.836815+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:05:10.836815+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:05:10.836815+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T03:51:16.096224+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "b75348a4d1c07288ac448cd6b6e95291e4ade267d97b0022611291dc3dd48666", "fetched_at": "2026-08-28T04:05:10.836815+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ankane/lockbox"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:05:10.836815+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:05:10.836815+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T03:51:16.096224+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "b75348a4d1c07288ac448cd6b6e95291e4ade267d97b0022611291dc3dd48666", "fetched_at": "2026-08-28T04:05:10.836815+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ankane/lockbox"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:05:10.836815+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:05:10.836815+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:05:10.836815+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T03:51:16.096224+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "b75348a4d1c07288ac448cd6b6e95291e4ade267d97b0022611291dc3dd48666", "fetched_at": "2026-08-28T04:05:10.836815+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ankane/lockbox"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:05:10.836815+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:05:10.836815+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T03:51:16.096224+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "b75348a4d1c07288ac448cd6b6e95291e4ade267d97b0022611291dc3dd48666", "fetched_at": "2026-08-28T04:05:10.836815+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ankane/lockbox"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T03:51:16.096224+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "b75348a4d1c07288ac448cd6b6e95291e4ade267d97b0022611291dc3dd48666", "fetched_at": "2026-08-28T04:05:10.836815+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ankane/lockbox"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T03:51:16.096224+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "b75348a4d1c07288ac448cd6b6e95291e4ade267d97b0022611291dc3dd48666", "fetched_at": "2026-08-28T04:05:10.836815+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ankane/lockbox"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T03:51:16.096224+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "b75348a4d1c07288ac448cd6b6e95291e4ade267d97b0022611291dc3dd48666", "fetched_at": "2026-08-28T04:05:10.836815+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ankane/lockbox"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 76, "longevity": 100, "rhythm": 35}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": ["no_releases"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 2800, "days_push": 146, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 66, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}