The web app and TypeScript SDK for Plimsoll: see how much of every Stellar-issued asset is backed, who signed the reserve figure, and how old it is. Issuers and auditors post reports from here; anyone can list an asset.
Live: https://plimsoll-app-gths-amber.vercel.app/
Mirror: https://plimsoll-protocol.github.io/plimsoll-app/
Docs: https://plimsoll-protocol.gitbook.io/plimsoll-protocol-docs/
| Repo | What it is |
|---|---|
| plimsoll-contracts | Rust/Soroban contracts |
| plimsoll-app (this repo) | Web app and TypeScript SDK |
| plimsoll-indexer | Go service: supply poster, event indexer, read API |
| Maintainer | GitHub | Contact |
|---|---|---|
| dunnidev | @dunnidev | GitHub Discussions |
| Path | Purpose |
|---|---|
packages/sdk |
@plimsoll/sdk: contract reads via RPC simulation, prepared write transactions, indexer client, formatting and hash verification. |
apps/web |
Next.js 16 static export. Dashboard, asset detail, report submission, asset listing, integration guide. |
The web app reads from the Plimsoll indexer when NEXT_PUBLIC_INDEXER_URL is
set, and falls back to reading the coverage ledger directly over Soroban RPC.
Because it is a static export, it runs on any static host.
| Route | What it does |
|---|---|
/ |
Every listed asset with its coverage ratio, signer tier and report age |
/asset/?sac=… |
Reports per tier, supply breakdown, stellar.toml data, and three in-browser checks: live coverage call, document hash, breakdown hash |
/report/ |
Connect Freighter, hash a document locally, sign and post a reserve report. Shows the tier you will get before you sign. |
/list/ |
List any classic asset; deploys its Stellar Asset Contract first if it has none |
/integrate/ |
How to call is_covered from Rust, TypeScript and the CLI |
Node 22.12 or later.
git clone https://github.com/plimsoll-protocol/plimsoll-app
cd plimsoll-app
npm install
npm run dev # builds the SDK, then serves http://localhost:3000No .env is needed: everything defaults to the testnet deployment. To use an
indexer, copy apps/web/.env.example to apps/web/.env.local and set
NEXT_PUBLIC_INDEXER_URL.
npm test # SDK unit tests
PLIMSOLL_LIVE=1 npm test # plus reads against the live testnet contracts
npm run build # static site in apps/web/outimport { PlimsollContracts, TESTNET, Tier, bpsToPercent } from "@plimsoll/sdk";
const plimsoll = new PlimsollContracts(TESTNET);
const cov = await plimsoll.coverage(TESTNET.assets.PUSD.sac, Tier.Transcribed);
console.log(bpsToPercent(cov!.bps)); // "102.00%"
const ok = await plimsoll.isCovered(TESTNET.assets.PUSD.sac, 10_000, 7 * 86_400, Tier.IssuerSigned);| Variable | Default | Purpose |
|---|---|---|
NEXT_PUBLIC_STELLAR_RPC_URL |
https://soroban-testnet.stellar.org |
Soroban RPC |
NEXT_PUBLIC_NETWORK_PASSPHRASE |
testnet | Network passphrase |
NEXT_PUBLIC_NETWORK_NAME |
testnet |
Label shown in the header and wallet checks |
NEXT_PUBLIC_COVERAGE_LEDGER_ID |
testnet id | coverage-ledger contract |
NEXT_PUBLIC_REPORTER_REGISTRY_ID |
testnet id | reporter-registry contract |
NEXT_PUBLIC_INDEXER_URL |
hosted testnet indexer | Indexer base URL; none reads from chain only |
NEXT_PUBLIC_CHAIN_ASSETS |
PUSD,USDC SACs | Assets shown when reading from chain |
NEXT_PUBLIC_EXPLORER_URL |
stellar.expert testnet | Explorer links |
NEXT_PUBLIC_BASE_PATH |
empty | Set to /plimsoll-app for GitHub Pages |
See CONTRIBUTING.md. Pick an issue, comment to be assigned, open one pull request per change. Security: SECURITY.md.