Manifest DEX Integration Guide
Build trading, routing, portfolio, and frontend integrations on top of Manifest's permissionless orderbook.
Overview
Use this skill when the task involves:
- Reading Manifest market state or orderbooks
- Placing, canceling, depositing, or withdrawing via the Manifest SDK
- Choosing between local market balances and global balances
- Handling wrapper setup, seat claims, and wallet-adapter flows
- Understanding , , , , , and order types
Load supporting references as needed:
resources/manifest-actions.md
resources/manifest-sdk.md
examples/read-market/read-market.ts
examples/wallet-order/place-order.ts
examples/global-liquidity/global-order.ts
examples/reverse-liquidity/amm-style-batch.ts
templates/manifest-setup.ts
Instructions
- Determine whether the task is read-only market access or transaction-building.
- For read-only access, prefer reads or
ManifestClient.getClientReadOnly(...)
.
- For transaction-building, use for signer-controlled flows, or use first and then
getClientForMarketNoPrivateKey(...)
for wallet-adapter flows.
- Decide whether liquidity should be market-local (wrapper balances plus a market seat) or global (global account plus ).
- If the task involves recurring two-sided liquidity, evaluate or instead of ordinary limit orders.
- For UI/orderbook work, prefer and for display-ready levels.
- When documenting or implementing cleanup behavior, distinguish wrapper-level cancels from core-level cancels. does not fully cover all reverse/global edge cases; is the stronger cleanup path.
- State assumptions explicitly:
- cluster
- market address
- trader/signer model
- whether wrapper/global setup already exists
Examples
Basic Usage
When user asks: "Show the best bid and ask on a Manifest market"
The agent should:
- Use
Market.loadFromAddress(...)
or ManifestClient.getClientReadOnly(...)
- Read and or /
- Return prices without introducing signing or setup logic
Wallet Trading Flow
When user asks: "Place a Manifest order from a browser wallet"
The agent should:
- Call
ManifestClient.getSetupIxs(...)
- If setup is needed, create wrapper state and/or claim the seat first
- Then use
ManifestClient.getClientForMarketNoPrivateKey(...)
- Build the order instruction with
Global Liquidity Flow
When user asks: "Use the same capital across multiple Manifest markets"
The agent should:
- Explain that market-local balances are insufficient for this requirement
- Use global-account setup with
createGlobalAddTraderIx(...)
- Deposit via
- Place orders
Reverse Orders
When user asks: "Provide recurring liquidity that flips after fills"
The agent should:
- Recommend or
- Explain that reverse orders use instead of
- Use when tighter spread precision matters
- Mention that cleanup may require rather than only wrapper-level cancellation
Copy-paste oriented examples in this skill:
examples/read-market/read-market.ts
examples/wallet-order/place-order.ts
examples/global-liquidity/global-order.ts
examples/reverse-liquidity/amm-style-batch.ts
Guidelines
- DO: Use before wallet-adapter trading flows.
- DO: Use for anonymous or pre-setup inspection paths.
- DO: Use / for UI-facing orderbook displays.
- DO: Separate market-local account logic from global-account logic.
- DO: Mention wrapper state, market seats, and global accounts explicitly when relevant.
- DON'T: Assume a connected wallet already has wrapper state or a market seat.
- DON'T: Treat as equivalent to ordinary market-local orders.
- DON'T: Use as if it always fully cleans up reverse/global edge cases.
- DON'T: Ask for or embed private keys in examples.
Common Errors
Error: Read only
Cause: A write method was called on a read-only client or without a payer/wrapper context.
Solution: Switch to
or complete the
flow and then use
getClientForMarketNoPrivateKey(...)
.
Error: Setup still required
Cause: Wrapper creation or market seat claim has not been completed.
Solution: Run the instructions returned by
ManifestClient.getSetupIxs(...)
before building normal wrapper-based trading actions.
Error: Global order funded incorrectly
Cause: The trader is using
without a funded global account for the supporting token.
Solution: Run
createGlobalAddTraderIx(...)
if needed, then
, and only then place the global order.
Error: Reverse/global orders remain after cancel-all
Cause: Wrapper-level cancellation does not fully cover all core-level order states.
Solution: Use
when full core cleanup is required.
References
- Official site:
- SDK package:
https://www.npmjs.com/package/@bonasa-tech/manifest-sdk
- Source repository:
https://github.com/Bonasa-Tech/manifest
- TypeScript client docs:
https://github.com/Bonasa-Tech/manifest/tree/main/client/ts