manifest
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
Limit,PostOnly,ImmediateOrCancel,Global,Reverse, andReverseTightorder types
Load supporting references as needed:
resources/manifest-actions.mdresources/manifest-sdk.mddocs/troubleshooting.mdexamples/read-market/read-market.tsexamples/wallet-order/place-order.tsexamples/global-liquidity/global-order.tsexamples/reverse-liquidity/amm-style-batch.tstemplates/manifest-setup.ts
Instructions
- Determine whether the task is read-only market access or transaction-building.
- For read-only access, prefer
Marketreads orManifestClient.getClientReadOnly(...). - For transaction-building, use
getClientForMarket(...)for signer-controlled flows, or usegetSetupIxs(...)first and thengetClientForMarketNoPrivateKey(...)for wallet-adapter flows. - Decide whether liquidity should be market-local (wrapper balances plus a market seat) or global (global account plus
OrderType.Global). - If the task involves recurring two-sided liquidity, evaluate
ReverseorReverseTightinstead of ordinary limit orders. - For UI/orderbook work, prefer
bidsL2()andasksL2()for display-ready levels. - When documenting or implementing cleanup behavior, distinguish wrapper-level cancels from core-level cancels.
cancelAllIx()does not fully cover all reverse/global edge cases;cancelAllOnCoreIx()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(...)orManifestClient.getClientReadOnly(...) - Read
bestBidPrice()andbestAskPrice()orbidsL2()/asksL2() - 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
client.placeOrderIx(...)
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
globalDepositIx(...) - Place
OrderType.Globalorders
Reverse Orders
When user asks: "Provide recurring liquidity that flips after fills"
The agent should:
- Recommend
OrderType.ReverseorOrderType.ReverseTight - Explain that reverse orders use
spreadBpsinstead oflastValidSlot - Use
ReverseTightwhen tighter spread precision matters - Mention that cleanup may require
cancelAllOnCoreIx()rather than only wrapper-level cancellation
Copy-paste oriented examples in this skill:
examples/read-market/read-market.tsexamples/wallet-order/place-order.tsexamples/global-liquidity/global-order.tsexamples/reverse-liquidity/amm-style-batch.ts
Guidelines
- DO: Use
getSetupIxs(...)before wallet-adapter trading flows. - DO: Use
getClientReadOnly(...)for anonymous or pre-setup inspection paths. - DO: Use
bidsL2()/asksL2()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
OrderType.Globalas equivalent to ordinary market-local orders. - DON'T: Use
cancelAllIx()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 getClientForMarket(...) or complete the getSetupIxs(...) 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 OrderType.Global without a funded global account for the supporting token.
Solution: Run createGlobalAddTraderIx(...) if needed, then globalDepositIx(...), 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 cancelAllOnCoreIx() when full core cleanup is required.
References
- Official site:
https://manifest.trade - 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