{"id":22046133,"url":"https://github.com/sablier-labs/sandbox","last_synced_at":"2026-01-04T17:44:08.993Z","repository":{"id":190068065,"uuid":"681878304","full_name":"sablier-labs/sandbox","owner":"sablier-labs","description":"Front-end sandbox development environments for Sablier V2","archived":false,"fork":false,"pushed_at":"2024-11-20T10:03:50.000Z","size":2945,"stargazers_count":10,"open_issues_count":1,"forks_count":2,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-01-28T20:27:15.694Z","etag":null,"topics":["money-streaming","sablier","token-streaming"],"latest_commit_sha":null,"homepage":"https://sablier.com","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sablier-labs.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-08-23T00:47:59.000Z","updated_at":"2024-11-20T10:03:54.000Z","dependencies_parsed_at":"2023-11-09T12:46:29.649Z","dependency_job_id":"250524cd-5890-427b-9a46-c19cc0ccb6f9","html_url":"https://github.com/sablier-labs/sandbox","commit_stats":null,"previous_names":["sablier-labs/v2-sandbox","sablier-labs/sandbox"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sablier-labs%2Fsandbox","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sablier-labs%2Fsandbox/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sablier-labs%2Fsandbox/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sablier-labs%2Fsandbox/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sablier-labs","download_url":"https://codeload.github.com/sablier-labs/sandbox/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245112714,"owners_count":20562658,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["money-streaming","sablier","token-streaming"],"created_at":"2024-11-30T13:16:32.869Z","updated_at":"2026-01-04T17:44:08.987Z","avatar_url":"https://github.com/sablier-labs.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"![Sablier Sandbox](/packages/assets/banner.png)\n\n# Sablier Sandbox\n\nFront-end sandbox development environments for Sablier. Create streams onchain or source them for preview from indexers\n(the graph, envio).\n\nThe sandbox features integration examples for both EVM (Sepolia) and Solana (Devnet).\n\n| Product          | EVM Sandbox | Solana Sandbox |\n| ---------------- | ----------- | -------------- |\n| Lockup Linear    | ✔︎         | ✔︎            |\n| Lockup Dynamic   | ✔︎         | -              |\n| Lockup Tranched  | ✔︎         | -              |\n| Flow             | ✔︎         | -              |\n| Instant Airdrops | 🕑          | 🕑             |\n| Vested Airdrops  | 🕑          | -              |\n\n## Featured Products 🔮\n\n### 1. Lockup 🔮\n\nThere are three types of lockup streaming in Sablier:\n\n- `Lockup Linear`, which creates streams with linear streaming functions\n- `Lockup Dynamic`, which creates streams with dynamic streaming functions (examples: exponentials, logarithms)\n- `LockupTranched`, which creates streams with stepper/tranched streaming functions (examples: monthly, timelocks, step\n  functions)\n\n\u003e [!IMPORTANT]\n\u003e\n\u003e In some versions of Sablier, each flavor (LL, LD, LT) of Lockup was housed in its own contract. With the latest\n\u003e implementations, the Sablier Lockup contracts will all be accessible through a unified merged interface (Lockup Merged\n\u003e or LK).\n\nWe also support examples on how to **Withdraw** from a Lockup stream.\n\nFor more technical details, please refer to our [documentation](https://docs.sablier.com).\n\n### 2. Flow 🔮\n\nFlow streams work within an open-ended model (no upfront deposits, top-ups, rate adjustments, no end date). The sandbox\nwill showcase how to create a **Flow** stream with a certain rate per second and initial deposit (which can also be\ntopped up later on).\n\nWe also support examples of how to **Withdraw** from a Flow stream.\n\nFor more technical details, please refer to our [documentation](https://docs.sablier.com).\n\n### 3. Airdrops 🔮\n\nInstant and vested airdrops facilitate distribution of tokens (through one-time claims or streams) at scale. This\nsandbox doesn't currently feature integration examples. Feel free to reach out to the team for guidance.\n\nFor more technical details, please refer to our [documentation](https://docs.sablier.com).\n\n## Environments and Examples\n\n![Sablier Sandbox](/packages/assets/banner-s2.png)\n\n### EVM: Wagmi 🟦\n\nThe official Sablier interface uses [wagmi](wagmi.sh/) and [viem](https://viem.sh/). Both libraries offer top-notch\nsupport (check the docs and their github) and integrate nicely with wallet managers like RainbowKit or AppKit.\n\n| Flow (Form)                            | Lockup (Form)                                    |\n| -------------------------------------- | ------------------------------------------------ |\n| ![FL](./packages/assets/flow-dark.png) | ![LD](./packages/assets/lockup-dynamic-dark.png) |\n\n| Headless (Form)                           | Queries                                  |\n| ----------------------------------------- | ---------------------------------------- |\n| ![H](./packages/assets/headless-dark.png) | ![Q](./packages/assets/queries-dark.png) |\n\n#### Features\n\n**↪ Single stream management through Lockup**\n\n- Preview the 10 most recent Lockup (LL, LD or LT) streams using The Graph\n- Create an LL, LD or LT stream with Durations using the UI Form\n- Create an LL, LD or LT stream with Durations in headless mode (tweak durations in code)\n- Create an LL, LD or LT stream with Timestamps in headless mode (tweak timestamps in code)\n- Withdraw from any Lockup (LL, LD or LT) stream using the UI Form\n\n**↪ Single stream management through Flow**\n\n- Preview the 10 most recent Flow streams using Envio\n- Create a Flow stream using the UI Form\n- Withdraw from a Flow stream using the UI Form\n\n**↪ Batch stream creation through Batch Lockup**\n\n- Create group of LL, LD or LT streams with all possible configurations in headless mode, through a dedicated periphery.\n\nMost of the transaction magic happens in [`models/LockupCore.ts`](/examples/evm/src/models/LockupCore.ts) and\n[`models/FlowCore.ts`](/examples/evm/src/models/FlowCore.ts). Have a look to understand how parameters are formatted\n(strings to BigInt, padding numbers with decimals, etc.) and sent to the contracts.\n\nFor the **headless** mode, see [`constants/data.ts`](/examples/evm/src/constants/data.ts). Here, you'll be able to tweak\nthe parameters to create streams of different values or shapes (segments).\n\n**↪ Misc.**\n\n- Mint [Sepolia DAI](https://sepolia.etherscan.io/token/0x776b6fc2ed15d6bb5fc32e0c89de68683118c62a) tokens\n- Approve spending DAI tokens for any Lockup or Flow contract\n\n#### Next steps\n\nIn the UI Forms, you may find `Prefill form` buttons. Clicking on them will add pre-configured data into the fields as\nan example of what the data should look like.\n\nAfter you create a test stream, make sure to connect to our main [app.sablier.com](https://app.sablier.com) interface\nwith your \"sender\" wallet to see what the stream [actually looks like](https://docs.sablier.com/apps/features/overview).\n\n| Payload (LD with two segments)            | Shape                                      |\n| ----------------------------------------- | ------------------------------------------ |\n| ![E](./packages/assets/emission-code.png) | ![E](./packages/assets/emission-shape.png) |\n\n---\n\n![Sablier Sandbox Solana](/packages/assets/banner-sandbox-solana.png)\n\n### @solana/kit 🟪\n\nThe [examples/solana](/examples/solana/) directory features an integration of Sablier's Solana contracts into a Next app\npowered by [@solana/kit](https://github.com/anza-xyz/kit).\n\n\u003e [!TIP]\n\u003e\n\u003e The Solana examples do not include all possible variations since some features haven't been ported over yet.\n\n#### Features\n\n- Create an LL stream with Durations\n- Withdraw from an LL stream\n\n#### Considerations\n\nThe @solana/kit transaction signing is a bit clunky, so we're going to use the RPC methods to get our transaction\nthrough.\n\n---\n\n## Airdrops Helper\n\n### Merkle Proof Generator\n\nFor customers integrating airdrop campaigns into their own UI we recommend either:\n\n- using a self-hosted [rust merkle-api](https://github.com/sablier-labs/merkle-api)\n- getting in touch for a scalable dedicated server (managed by Sablier)\n- pre-generating proofs and serving them locally in their own app\n\nFor the final option, a TS script which computes the list of merkle proofs can be\n[found here](https://gist.github.com/gavriliumircea/c94ccbabac4b71c307040a3516207ae1).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsablier-labs%2Fsandbox","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsablier-labs%2Fsandbox","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsablier-labs%2Fsandbox/lists"}