Spruce Developer Update #31

At Spruce, we’re letting users control their identity and data across the web. Here’s the latest from our development efforts:

Spruce Developer Update #31

In case you missed it, check out our previous update here:

Spruce Developer Update #30
At Spruce, we’re letting users control their identity and data across the web. Here’s the latest from our development efforts.

At Spruce, we’re letting users control their identity and data across the web. Here’s the latest from our development efforts:


SSX (Self-Sovereign Anything) is the easiest way to integrate Sign-In with Ethereum, enable DAO logins, resolve ENS names, and more. It is the go-to library for developers in web3 to get started with decentralized identity.

  • As mentioned in our previous update, there is ongoing work to add support for working with user-controlled data in SSX. If you're curious about this work, message us on Discord!
  • We recently released a tutorial on quickly getting started with using SSX in your Next.js application - check that out here:
Tutorial: SSX and Next.js
Next.js provides developers with the right tools to create their latest projects. This guide will show you how to install Sign-In with Ethereum in your Next.js app by using SSX.
  • We've reviewed and updated all existing examples to be sure they are working correctly with recent package changes. We also added all examples to the workspace to make testing any SSX updates easier (#114, #117, #123).
  • We've added a few optimizations to SSX by reducing CI time to verify PRs faster, updating unit test providers to avoid timeouts, and more (#112, #118).
  • We've updated our ssx-authjs library and corresponding examples to support Next 13 (#120).
  • We've enabled forwarding siweConfig overwrites to extensions (#129).

with Ethereum Core Libraries

Sign-In with Ethereum is a new form of authentication that enables users to control their digital identity with their Ethereum account and ENS profile instead of relying on a traditional intermediary.

  • We have now moved v2.0 out of beta and it is now tagged as latest. We encourage anyone using v1.1.6 to update to the latest version. For more information on changes, check out the following guide:
Release SIWE 2.0 Release · spruceid/siwe
SIWE 2.0 has been released. The interfaces have been updated to allow consistent usage across languages for SIWE message parsing, creation, and verification. Message parsing has been split into its…
  • We have now released v2.1.4 with support for both ethers v5 or v6, and added some additional improvements (#146, #147).
  • We will be working on adding additional updates to our siwe library which will be tagged as v3-experimental. For more information on upcoming changes to the library, get in touch via our Discord!


Kepler is a decentralized storage network organized around data overlays called Orbits. Kepler allows users to Securely share their digital credentials, private files, and sensitive media to blockchain accounts using your existing keys.

  • Our implementation of a libp2p-based synchronization protocol is progressing (#141, #142).
  • A configurable base storage limit has been added for deployments wishing to provide and limit storage for users (#140).
  • We have commenced work on moving the capabilities model implementation into SQL, allowing much more flexible and performant access and authorization checks (#143).


SpruceID is a decentralized identity toolkit that provides everything you need for signing, sharing, and verifying trusted information.

DIDKit / ssi

  • We rewrote our VC API implementation in Axum (didkit #351) and added it to the W3C-CCG interoperability test suites (#64).
  • We made the DIDKit CLI trim input JWTs to avoid verification failure on correct JWTs (didkit #350).
  • We've added the VM JWK algorithm to unsigned JWT VCs, fixing the verification of such VCs (ssi #511).
  • We've serialized NumericDate as int if it doesn't have fractional seconds to improve interoperability with most JWT libraries (ssi #507).
  • We've fixed context map retrieval, and added various improvements, including to our CI pipelines and releases (ssi #506).


TreeLDR is a schema definition language that aims to describe the structure and semantics of the defined schema comprehensibly. It lies at the intersection between RDF and structure-oriented schema definition frameworks such as JSON Schema.

We've made various improvements to the Rust code generator including:

  • Generating and implementing traits for each RDF class (#124).
  • Generating RDF quads iterators for all types (#122).
  • Allowing the import of extern modules, allowing modular code generation (#130).

...and finally, we've improved our JSON-LD serializer (#132), and improved error messages for the JSON-LD context and JSON Schema generators (#126).


  • We're continuing our work to add robust Typescript types to rebase-client.
  • We're investigating adding self-issuance features to rebase-client, built on a previous Proof-of-Concept that allowed self-issuance with Solana keys – which we now hope to support any ed25519 key by using the did:key method. Soon, simple “Witnessed” self-attested credentials will be added for flows for keys that cannot sign VCs. (#61).

Spruce lets users control their data across the web. Spruce provides an ecosystem of open-source tools for developers that let users collect their data in one place they control and show their cards however they want. If you're curious about integrating Spruce's technology into your project, chat with us in our Discord.