All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project follows Semantic Versioning.
2.0.0 - 2026-06-01
Configuration#provider_options: keyword options for built-in providers are forwarded toEnvProvider.new/AwsKmsProvider.new(Hash/OrderedOptions, no separateaws_kms/env_provideraccessors).- Breaking:
EnvProvidernow acceptsencryption_key:directly; passprovider_options[:encryption_key] = ENV.fetch("ACTIVE_CIPHER_MASTER_KEY")instead of configuring an env-var name. - Provider
Stringaliases"aws:kms","env", and related spellings (seeConfiguration). AwsKmsProvideracceptsendpoint,access_key_id,secret_access_key, buildsAws::KMS::Clientinternally;key_id:is required (configure viaprovider_optionsor pass a custom instance).
- Breaking: Global
Configuration#chunk_sizeremoved — passchunk_sizeintoStreamCipher,S3Adapter,EncryptedMultipartUpload, and theActiveCipherStorageActive Storage service (storage.yml). - Breaking: Built-in provider config is
provider_optionsonly (removed#aws_kms/#env_provider).AwsKmsProviderno longer readsENVfor KMS settings; setprovider_optionsfrom your app. - Blob metadata: Rescue
StandardErroronly; re-raise inRails.env.development?so misconfiguration surfaces during development. - Engine: Remove global
ActiveSupport::LogSubscriber.loggerassignment (host apps useRails.logger/ActiveStorage.logger). - Engine: Load
ActiveStorage::Service::ActiveCipherStorageServicedirectly from the Rails Active Storage hook. ActiveCipherStorageService: RaiseNotImplementedErrorforpath_forwhen the inner service does not implement it (e.g. S3).
ActiveCipherStorage::KeyRotationand related rotation orchestration.- Breaking: Legacy
ActiveCipherStorage::Adapters::ActiveStorageServicealias andactive_cipher_storage/active_storage_integrationshim. ActiveCipherStorageService#rekey,BlobMetadata.blobs_for,BlobMetadata.update_after_rotation.- Provider methods
wrap_data_keyandrotate_data_keyfromProviders::Base,EnvProvider, andAwsKmsProvider. Key or provider changes are left to the application (e.g. AWS KMS, custom jobs).
1.0.3 - 2026-04-25
- Update the README with clearer usage guidance and improved readability.
1.0.2 - 2026-04-25
- Publish updated RubyGems metadata for Rails Active Storage encryption, Ruby encryption/decryption, S3 streaming, multipart uploads, AES-256-GCM, and AWS KMS discoverability.
1.0.1 - 2026-04-25
- Back gem configuration with Rails-style ActiveSupport options while preserving the existing public configuration API.
- Document the Active Storage upload encryption flag and plaintext read compatibility behavior.
- Mark plaintext Active Storage uploads explicitly when encryption is disabled.
1.0.0 - 2026-04-25
- Initial public ActiveCipherStorage gem release.
- Transparent Rails Active Storage encryption service.
- Direct S3 encrypted upload, download, streaming, and multipart support.
- Backend-managed encrypted multipart uploads for frontend chunk upload flows.
- AES-256-GCM envelope encryption with self-describing payload headers.
- Environment-variable and AWS KMS providers, plus a custom provider interface.
- Header-only key rotation for re-wrapping encrypted DEKs.
- Unit and integration coverage for crypto, providers, Active Storage, S3, multipart upload, streaming, metadata, and key rotation.