Convex 1.11 is here with improved debugging and testing tools, faster queries, and more.

Highlights:

  • Live updating action log lines in npx convex logs and the dashboard
  • Run a custom query from the dashboard
  • New testing library
  • Python client can subscribe to live query updates
  • Faster queries with Promise.all

Live updating log lines from actions

Instead of reporting all log lines at the end of a function call, we now show the log lines from actions as they happen via npx convex logs and in the dashboard. We hope this helps with debugging and observability for long running actions.

A screenshot of the dashboard logs page showing log lines for a running action.

Custom queries in the dashboard

In the dashboard, you can write a custom query to inspect your data and try out new changes without having to deploy new Convex functions. See docs.

A screenshot of a custom test query result in the dashboard.

Testing library and docs

We released a new TypeScript library called convex-test for testing your Convex functions using a mock implementation of the Convex backend. Read the new Testing documentation page to get started.

Test output from running tests with convex-test.

You can also run tests against a real local backend. See this Stack post.

Query subscriptions in the Python client

Version 0.6 of the Convex Python client supports subscribing to queries. Install it with pip install convex or try it out here: https://colab.research.google.com/drive/19o5xpraHnfrh-fcOwqiLK-LpoxlWZNYx

The old HTTP-based client is still available at convex.http_client.ConvexHttpClient. If you need to run the Python client in an environment where WebSockets are not available or have some other reason an HTTP protocol is preferable, please let us know.

Other improvements

  • Faster concurrent database reads: Convex now parallelizes more concurrent database reads, making patterns such as joins with Promise.all significantly faster:
const authors = await Promise.all(messages.map(
    (msg) => ctx.db.get(msg.authorId)
));
  • Improvements to crypto in the Convex runtime
    • more algorithms and formats supported by crypto.subtle.importKey (all except elliptic curve ECDSA/ECDH)
    • crypto.subtle.exportKey
    • crypto.subtle.sign (except RSA-PSS)
    • crypto.subtle.verify
  • Removal of deprecated convex/server types: DatabaseReader, DatabaseWriter, QueryCtx, MutationCtx, ActionCtx
    • Either use the Generic version (e.g. GenericQueryCtx) or import the type specific to your schema from _generated/server