Sure, Chef's got everyone talking, but the Convex crew has been busy cooking up some awesome enhancements to our core platform! Dive in and see what's fresh:
Better file storage UI in the dashboard
Some of our apps (ahem, Chef) have a large number of files. We’ve updated the dashboard to make it easier to deal with large lists of files. You can now filter files by ID and pause fast updates.

Faster function starts
Convex just got faster for everyone. Every function call now has reduced system overhead, and projects with large schemas will benefit from better internal caching. Check out one of our internal charts:
Sometimes down and to the right is the good direction.
— James Cowling (@jamesacowling) May 20, 2025
Lots more @convex_dev perf improvements soon! pic.twitter.com/d37PrCiSbu
New and updated components
The team has been cranking away at making components that help you build high-quality products faster. There is now a component for building Agents, getting payments from Polar, doing Persistent Text Streaming for AI apps, Workflows are no longer in beta, and Workpool is more performant.
Components are higher-level building blocks that run in their own sandboxed environment in Convex. Check out all the components Convex has to offer.
Custom JWT-based Authentication
Convex deployments now support authentication via other types of JWTs beyond OpenID Connect ID tokens.
To opt into accepting these JWT tokens, add a provider to your convex/auth.config.ts
file with type: "customJwt"
. Since the structure of these fields isn’t standardized like OIDC OpenID, you’ll find whatever subfields of the properties
fields available on the user identity object returned from ctx.auth.getUserIdentity()
. Read the docs.
More crypto options in Convex functions
AES-GCM in SubleCrypto
AES-GCM is now available through SubtleCrypto. You can now use symmetric encryption and decryption in Convex functions:
await crypto.subtle.encrypt({ name: "AES-GCM", iv }, key, data);
The key has to be 128 or 256 bits, and the API conforms to https://developer.mozilla.org/en-US/docs/Web/API/AesGcmParams
Generating keypairs for asymmetric signatures
You can now generate keypairs for asymmetric signatures in Convex actions:
const { privateKey, publicKey } =
await crypto.subtle.generateKey(
"Ed25519" /* or other algorithms */,
true /* extractable */,
["sign", "verify"],
);
const signature = await crypto.subtle.sign("Ed25519", privateKey, data);
- Supported algorithms are
RSASSA-PKCS1-v1_5
,RSA-PSS
,ECDSA
withP256
orP384
, andEd25519.
- Conforms to https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/generateKey
- Only available in actions currently (for determinism/security reasons)
- Also, signing and verification (
crypto.subtle.sign
/crypto.subtle.verify
) are now generally available for all those algorithms. Verification is available everywhere; signatures only in actions.
retry_count
in log streams
You can gain better visibility into how your project is performing by examining log streams to see how often mutations have automatically retried. This is an important signal to determine if you have major write conflicts (OCC errors) in your project. See everything you get in log streams.