The access layer.
The engine that verifies every Totym community is yours as a drop-in SDK. Gate a page, a component, or a single word by what a wallet holds. Verification runs on the server; a balance the client reports is never trusted.
- ZERO RUNTIME DEPENDENCIES
- SERVER-SIDE VERIFICATION
- SOLANA · BASE · ETHEREUM
- SIX PUBLIC ENDPOINTS
- PUBLISHED ON NPM
Everything the builder does, in one tag.
One component. It asks the server what a wallet holds, and renders accordingly. The blockchain is the database; the component is the interface.
import { NimbusGate } from "@buildnimbus/sdk";
<NimbusGate mint="EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v">
<PromoCode />
</NimbusGate>Fails closed — loading, errors, a disconnected wallet and a misconfigured gate all render the locked state, never the content.
Site. Page. Component. Word.
The primitive does not change. Only the scope does.
Three ways to hold the door.
The same gate, three locked states. Switch the style and simulate a holder — this is the component, not a picture of it.
The opening reads; the rest dissolves at fadeAt (60% by default). The text is still in the page source — fade is a teaser, not protection.
<NimbusGate tier="holder" style="fade" fadeAt="60%">
<HolderNote />
</NimbusGate>The opening reads; the rest dissolves. A teaser, and a teaser only — the text is rendered, so a non-holder can read it out of the page source.
Fade and blur are presentation, not protection
You cannot fade what was never drawn, so both render their children. Anything genuinely secret is fetched from a server route that verifies again — whatever style wraps it.
Eleven exports. That is the whole API.
Everything @buildnimbus/sdk@0.1.0 ships, in full. Nothing here is planned, deprecated or partial.
| Export | What it does |
|---|---|
| NimbusProvider | Wraps the app. Holds config, the connected wallet and the cache. |
| NimbusGate | Gates its children. block · fade · blur. |
| NimbusTier | Resolves the highest qualifying tier. .Match and .None select the branch. |
| NimbusWall | The default locked state — message and a buy link. |
| NimbusButton | Connect, for either wallet ecosystem. |
| useNimbusAccess | The raw access state for a query. |
| useNimbusTier | The qualifying tier name, or null. |
| useNimbusWallet | The connected wallet and its ecosystem. |
| defineConfig | Types a config object. Communities, tiers, chains. |
| detectChain | Solana-native or EVM-native, from the address shape. |
| clearCache | Drops the 30s access cache. For after a wallet switch. |
The verification engine, exposed.
Every check the SDK makes goes through one of six GET endpoints. They carry CORS headers, so anything in a browser can call them — and they are the same six Totym itself runs on.
| Endpoint | Returns |
|---|---|
| /api/check-accessGET · Solana | Token or NFT balance check |
| /api/check-access-evmGET · Base · Ethereum | ERC-20 / ERC-721 balance check |
| /api/token-metadataGET · Solana | Name, symbol, logo, supply |
| /api/token-metadata-evmGET · EVM | Token metadata |
| /api/holder-countGET · Solana | Verified holder count |
| /api/profileGET · Both | Wallet identity · ENS · .sol |
30-second client cache · in-flight requests deduplicated · fails closed
We ship on our own primitive.
Every community, every gate, every course video on Totym goes through the same six endpoints you would call. There is no private path and no internal API — if the SDK cannot do it, neither can we.
The vendor building on the primitive is the only honest proof that the primitive is enough.