Sign in with Stacks (SIWS)

Hey all,

Wanted to share an npm library I created for the sign-in-with-stacks SIP proposal.

The idea is simple, we need a standardized way for users to log into Stacks apps with their wallet. Ethereum has had SIWE (Sign-In with Ethereum) for a while now, and it’s been adopted by many apps and wallets. Stacks should have the same thing.

Right now, if you want wallet-based auth, you’re rolling your own message format and verification logic. This library gives you a clean and easy way to create and verify sign-in messages following the SIP spec:

import { createSiwsMessage, verifySiwsMessage, generateSiwsNonce } from "sign-in-with-stacks";

// Create the message
const message = createSiwsMessage({
  address: "SP2X0TZ59D5SZ8ACQ6YMCHHNR2ZN51Z32E2CJ173",
  chainId: STACKS_MAINNET.chainId,
  domain: "example.com",
  nonce: generateSiwsNonce(),
  uri: "https://example.com",
  version: "1",
});

// Verify on your backend
const valid = verifySiwsMessage({ message, signature, nonce });

It works with any JS backend, and there’s a Better Auth plugin included.

I’ve already opened a proposal for Leather to add native SIWS support to the wallet. You can follow that discussion here: Sign in with Stacks (SIWS) · Issue #1832 · leather-io/mono · GitHub

Links

Would love to hear your thoughts, let me know if you have any feedback!

2 Likes

curious, how was this handled previously for Sigle?

The implementation was internal to the Sigle monorepo, but following the SIP format.