{"id":14962486,"url":"https://github.com/microdao-corporation/plug-n-play","last_synced_at":"2025-10-24T22:32:31.307Z","repository":{"id":255445508,"uuid":"848140663","full_name":"microdao-corporation/plug-n-play","owner":"microdao-corporation","description":"A wallet wrapper/adapter for the Internet Computer","archived":false,"fork":false,"pushed_at":"2024-09-19T12:54:03.000Z","size":4556,"stargazers_count":1,"open_issues_count":4,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2024-09-29T10:49:55.476Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/microdao-corporation.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","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":"2024-08-27T07:54:20.000Z","updated_at":"2024-09-19T12:54:07.000Z","dependencies_parsed_at":"2024-09-04T17:57:06.427Z","dependency_job_id":"3fac08a8-c209-414b-bcc6-0868271378d4","html_url":"https://github.com/microdao-corporation/plug-n-play","commit_stats":null,"previous_names":["microdao-corporation/plug-n-play"],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/microdao-corporation%2Fplug-n-play","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/microdao-corporation%2Fplug-n-play/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/microdao-corporation%2Fplug-n-play/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/microdao-corporation%2Fplug-n-play/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/microdao-corporation","download_url":"https://codeload.github.com/microdao-corporation/plug-n-play/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":219867519,"owners_count":16555889,"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":[],"created_at":"2024-09-24T13:29:53.689Z","updated_at":"2025-10-24T22:32:31.302Z","avatar_url":"https://github.com/microdao-corporation.png","language":"TypeScript","funding_links":[],"categories":["Wallets and Authentication"],"sub_categories":["Libraries"],"readme":"# Plug N Play for the Internet Computer\n\nUnified wallet adapter for Internet Computer dApps with support for IC, Solana (SIWS), and Ethereum (SIWE) wallets.\n\n## Features\n\n- 🔌 **Multiple Wallets** - Internet Identity, NFID, Plug, Oisy, MetaMask, Phantom, Solflare, WalletConnect, OKX, Coinbase\n- 📦 **Modular** - Install only what you need with separate wallet packages\n- 🚀 **Simple API** - Connect, disconnect, and interact with canisters easily\n- 🔐 **Multi-Chain** - Support for IC, Solana (SIWS), and Ethereum (SIWE)\n- ⚡ **Lightweight** - Minimal dependencies, optimized bundles\n- 🔄 **Session Management** - Reliable session persistence across all wallets\n\n## Installation\n\n```bash\n# Core (IC wallets)\nnpm install @windoge98/plug-n-play@beta\n\n# Individual wallet packages\nnpm install @windoge98/pnp-metamask@beta    # Ethereum - MetaMask\nnpm install @windoge98/pnp-phantom@beta     # Solana - Phantom\nnpm install @windoge98/pnp-solflare@beta    # Solana - Solflare\nnpm install @windoge98/pnp-walletconnect@beta # Solana - WalletConnect\nnpm install @windoge98/pnp-okx@beta         # Solana - OKX\nnpm install @windoge98/pnp-coinbase@beta    # Solana - Coinbase Wallet\n```\n\n## Quick Start\n\n```typescript\nimport { createPNP } from \"@windoge98/plug-n-play\";\n\n// Create PNP instance\nconst pnp = createPNP({\n  network: 'ic', // or 'local' for development\n  adapters: {\n    ii: { enabled: true },\n    plug: { enabled: true }\n  }\n});\n\n// Connect wallet\nconst account = await pnp.connect('ii');\n\n// Use with canister\nconst actor = pnp.getActor(canisterId, idl);\nawait actor.someMethod();\n```\n\n## Configuration\n\n### Complete Example\n\n```typescript\nimport { createPNP, ConfigBuilder } from \"@windoge98/plug-n-play\";\nimport { MetaMaskExtension } from \"@windoge98/pnp-metamask\";\nimport { PhantomExtension } from \"@windoge98/pnp-phantom\";\n\n// Option 1: Object configuration with extensions\nconst pnp = createPNP({\n  network: 'ic',\n  ports: { replica: 8080, frontend: 3000 },\n  security: { fetchRootKey: false, verifyQuerySignatures: true },\n  delegation: { \n    timeout: BigInt(24 * 60 * 60 * 1000 * 1000 * 1000),\n    targets: ['canister1', 'canister2']\n  },\n  providers: {\n    siws: 'SIWS_CANISTER_ID',\n    siwe: 'SIWE_CANISTER_ID', \n    frontend: 'FRONTEND_CANISTER_ID'\n  },\n  extensions: [MetaMaskExtension, PhantomExtension], // Modular wallet support\n  adapters: {\n    ii: { enabled: true },\n    plug: { enabled: true },\n    metamask: { \n      enabled: true,\n      siweProviderCanisterId: 'YOUR_SIWE_CANISTER_ID'\n    },\n    phantom: { \n      enabled: true,\n      siwsProviderCanisterId: 'YOUR_SIWS_CANISTER_ID'\n    }\n  }\n});\n\n// Option 2: Builder pattern\nconst pnp2 = createPNP(\n  ConfigBuilder.create()\n    .withEnvironment('local', { replica: 8080 })\n    .withSecurity(true, false)\n    .withAdapter('ii', { enabled: true })\n    .build()\n);\n\n```\n\n### Configuration Options\n\n| Group | Description | Default |\n|-------|-------------|---------|\n| `network` | 'local' or 'ic' | 'ic' |\n| `ports` | `{ replica, frontend }` | `{ 8080, 3000 }` |\n| `security` | `{ fetchRootKey, verifyQuerySignatures }` | Auto-configured |\n| `delegation` | `{ timeout, targets }` | 1 day, [] |\n| `providers` | `{ siws, siwe, frontend }` | undefined |\n| `adapters` | Wallet configurations | All enabled |\n\n## Adapter Extensions\n\n### Declarative Adapter Registration\n\nInstead of manual registration loops, use adapter extensions:\n\n```typescript\nimport { createPNP } from '@windoge98/plug-n-play';\nimport { MetaMaskExtension } from '@windoge98/pnp-metamask';\nimport { PhantomExtension } from '@windoge98/pnp-phantom';\nimport { WalletConnectExtension } from '@windoge98/pnp-walletconnect';\n\n// Declarative configuration with extensions\nconst pnp = createPNP({\n  extensions: [MetaMaskExtension, PhantomExtension, WalletConnectExtension],\n  providers: { \n    siws: 'YOUR_SIWS_CANISTER_ID',\n    siwe: 'YOUR_SIWE_CANISTER_ID'\n  },\n  adapters: {\n    metamask: { enabled: true },\n    phantom: { enabled: true },\n    walletconnect: { \n      enabled: true,\n      projectId: 'YOUR_PROJECT_ID'\n    }\n  }\n});\n\n// Or with builder pattern\nconst pnp2 = ConfigBuilder.create()\n  .withExtensions(MetaMaskExtension, PhantomExtension)\n  .withProviders({ \n    siws: 'YOUR_SIWS_CANISTER_ID',\n    siwe: 'YOUR_SIWE_CANISTER_ID'\n  })\n  .withAdapter('metamask', { enabled: true })\n  .build();\n```\n\n### Creating Custom Extensions\n\n```typescript\nimport { createAdapterExtension } from '@windoge98/plug-n-play';\n\nexport const MyCustomExtension = createAdapterExtension({\n  myWallet: {\n    id: 'myWallet',\n    walletName: 'My Custom Wallet',\n    chain: 'ICP',\n    adapter: MyWalletAdapter,\n    config: { /* adapter specific config */ }\n  }\n});\n```\n\n## API Reference\n\n### Core Methods\n\n```typescript\n// Connection\nawait pnp.connect(walletId: string): Promise\u003cAccount\u003e\nawait pnp.disconnect(): Promise\u003cvoid\u003e\npnp.isAuthenticated(): boolean\n\n// Actor creation\npnp.getActor(canisterId: string, idl: IDL): ActorSubclass\npnp.getActor(canisterId, idl, { anon: true }) // Anonymous actor\n\n// Wallet info\npnp.getEnabledWallets(): AdapterConfig[]\npnp.getAccount(): Account | null\n```\n\n## Resources\n\n- [Documentation](https://github.com/microdao-corporation/plug-n-play)\n- [Issues](https://github.com/microdao-corporation/plug-n-play/issues)\n- [License](https://github.com/microdao-corporation/plug-n-play/blob/main/LICENSE.txt)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmicrodao-corporation%2Fplug-n-play","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmicrodao-corporation%2Fplug-n-play","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmicrodao-corporation%2Fplug-n-play/lists"}