Encrypt and ship your DLC! Create your DLC logic and assets and securely unlock it at runtime with signed licenses (generated using bevy-dlc CLI).
Works with Bevy's asset pipeline.
Features
- Pack assets into encrypted
.dlcpackcontainers - Sign licenses with Ed25519 (private key embeds the symmetric encryption key)
- Verify signatures at runtime and unlock encrypted content
- Lazy loading of labeled assets (e.g.
pack.dlcpack#sprites/player.png) - Product binding — prevent token reuse across games
Install
Add to your Cargo.toml:
= "1.1"
To use the CLI tool:
Then bevy-dlc --help for available commands.
Quick Start
Generate a license
This will generate two files in keys/:
expansion_1.slicense— a secure license token that can be safely embedded in your game binary (e.g. withsecure::include_secure_str_aes!()) or stored securely on disk. This token contains the encrypted symmetric key needed to unlock the DLC, but can't be decrypted without the private key.expansion_1.pubkey— the public key that your game uses to verify the license and extract the symmetric key to unlock the DLC.
Create a pack
--product— binds the pack to a product nameassets/expansionA— directory or file(s) to packexpansionA— DLC ID (used in licenses to unlock this pack)-o dlc— output path for the generated.dlcpack
This creates expansion_1.dlcpack and prints a signed license token.
Alternatively you can use bevy-dlc generate --help to review how to generate a signed license without packing, or bevy-dlc validate --help to verify it.
[!NOTE]
bevy-dlc help <command>for detailed usage of each CLI command.
Load in your app
// <aes-key> can be generated using `bevy-dlc generate --aes-key` or any secure random 32-byte key.
include_secure_str_aes!;
let dlc_key = public.expect;
let signedlicense = from;
new
.add_plugins
.add_plugins
.
.
.add_systems
.add_systems
.run
Load assets
Once unlocked, load assets from your pack like normal:
let pack: = asset_server.load;
let image: = asset_server.load;
Review the examples for a complete example (run with cargo run --manifest-path bevy-dlc-examples/Cargo.toml).
Suggestions and Contributions
Contributions are very welcome! Please open an issue or submit a pull request with any improvements, bug fixes, PERFORMANCE IMPROVEMENTS, or new features.
License
MIT