Skip to content

vultisig/app-marketplace

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

285 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Vultisig Plugin Marketplace

Vultisig Logo

A decentralized marketplace for Vultisig plugins, automations, and integrations

Build Status License Node Version


πŸ“– Table of Contents


🌟 Overview

The Vultisig Plugin Marketplace is a modern web application built with React, TypeScript, and Vite that serves as the central hub for discovering, installing, and managing Vultisig vault plugins and automations.

This marketplace enables users to:

  • Browse and search through available plugins and automations
  • Install plugins directly to their Vultisig vault via browser extension
  • Manage subscriptions and billing for premium features
  • Create custom automation recipes
  • Access detailed documentation and FAQs of each plugin

Technology Stack

  • Frontend Framework: React 18 with TypeScript
  • Build Tool: Vite (Fast HMR, optimized builds)
  • UI Library: Ant Design (antd) with custom theming
  • State Management: React Query (TanStack Query) for server state
  • Routing: React Router v6
  • Styling: CSS Modules + Ant Design components
  • Protocol Buffers: Generated TypeScript types for blockchain policies
  • WebAssembly: Integration with wallet-core for cryptographic operations
  • Extension Integration: Browser extension communication via postMessage API

✨ Features

Core Features

  • Plugin Discovery: Browse curated plugins with detailed descriptions, ratings, and compatibility info
  • One-Click Installation: Seamless installation via Vultisig browser extension
  • Recipe Builder: Create custom automation workflows using visual policy builders
  • Subscription Management: Flexible billing with trial periods and plan upgrades

User Experience

  • Responsive Design: Mobile-first UI that works on all devices
  • Dark Mode Support: Comfortable viewing in any lighting condition
  • Secure Authentication: Integration with Vultisig vault for identity verification

πŸ—οΈ Architecture

High-Level Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                     Vultisig Marketplace                     β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                              β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”‚
β”‚  β”‚   React UI   β”‚  β”‚  React Query β”‚  β”‚  Extension   β”‚     β”‚
β”‚  β”‚  Components  │◄──   (Cache)    │◄──    Bridge    β”‚     β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β”‚
β”‚         β”‚                  β”‚                  β”‚             β”‚
β”‚         β–Ό                  β–Ό                  β–Ό             β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”‚
β”‚  β”‚  Ant Design  β”‚  β”‚  API Client  β”‚  β”‚   WebAssemblyβ”‚     β”‚
β”‚  β”‚    Theme     β”‚  β”‚   (Fetch)    β”‚  β”‚  wallet-core β”‚     β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β”‚
β”‚                           β”‚                                 β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                            β”‚
                            β–Ό
                 β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                 β”‚   Backend API       β”‚
                 β”‚  (Verifier)  β”‚
                 β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Key Components

Frontend Layers

  1. Presentation Layer (src/pages/, src/components/)

    • Page-level components and routing
    • Reusable UI components
    • Layout and navigation structure
  2. Business Logic Layer (src/utils/, src/providers/)

    • API communication and data fetching
    • Extension integration logic
    • Policy/recipe serialization with Protocol Buffers
  3. State Management

    • React Query for server state (caching, refetching)
    • React Context for global plugin state
    • Local state with useState/useReducer

Integration Points

  • Browser Extension: Communication via window.postMessage (see src/utils/extension.ts)
  • WebAssembly: Wallet operations via wallet-core.wasm (loaded in src/main.tsx)
  • API Backend: RESTful endpoints for plugins, billing, and user data

πŸ“‹ Prerequisites

Required

  • Node.js: v18 or higher (see .nvmrc for exact version)
  • Package Manager: npm, yarn, or pnpm
  • Git: For version control
  • Vultisig Extension: Browser extension must be installed for full functionality

Recommended

  • VS Code: With ESLint and Prettier extensions
  • nvm: For Node version management
  • Docker: For consistent development environments (optional)

πŸš€ Getting Started

Quick Start

# 1. Clone the repository
git clone https://github.com/vultisig/plugin-marketplace.git
cd plugin-marketplace

# 2. Use correct Node version (if using nvm)
nvm use

# 3. Install dependencies
npm ci

# 4. Copy environment variables
cp .env.example .env
# edit .env as needed

# 5. Run development server
npm run dev

Docker Deployment

Using docker-compose (Recommended)

# Build and run with environment variables
docker-compose up

# Or build with custom environment variables
VITE_APP_STORE_URL=https://verifier.vultisig.com/ \
VITE_FEE_APP_ID=vultisig-fees-feee \
VITE_RECURRING_SENDS_APP_ID=vultisig-recurring-sends-0000 \
VITE_RECURRING_SWAPS_APP_ID=vultisig-dca-0000 \
VITE_VULTISIG_SERVER=https://api.vultisig.com/ \
docker-compose up

The application will be available at http://localhost:3000

Using Docker CLI

# Build the image
docker build -t vultisig-marketplace:latest .

# Run the container
docker run -p 3000:8080 vultisig-marketplace:latest

# Build with custom environment variables
docker build \
  --build-arg VITE_APP_STORE_URL=https://verifier.vultisig.com/ \
  --build-arg VITE_FEE_APP_ID=vultisig-fees-feee \
  --build-arg VITE_RECURRING_SENDS_APP_ID=vultisig-recurring-sends-0000 \
  --build-arg VITE_RECURRING_SWAPS_APP_ID=vultisig-dca-0000 \
  --build-arg VITE_VULTISIG_SERVER=https://api.vultisig.com/ \
  -t vultisig-marketplace:latest .

Environment Variables (Build-time)

These variables are compiled into the static build at Docker build time:

Variable Default Description
VITE_APP_STORE_URL https://verifier.vultisig.com/ Backend API endpoint
VITE_FEE_APP_ID vultisig-fees-feee Fee application ID
VITE_LISTING_PAYMENT_APP_ID vultisig-developer-0000 Listing payment (developer) app ID
VITE_RECURRING_SENDS_APP_ID vultisig-recurring-sends-0000 Recurring sends app ID
VITE_RECURRING_SWAPS_APP_ID vultisig-dca-0000 Recurring swaps app ID
VITE_VULTISIG_SERVER https://api.vultisig.com/ Vultisig server endpoint

Note: These are Vite environment variables (prefixed with VITE_) and are baked into the static build. For different environments, build separate Docker images with different values.


πŸ“ Project Structure

plugin-marketplace/
β”œβ”€β”€ .github/                    # GitHub Actions and templates
β”‚   └── PULL_REQUEST_TEMPLATE.md
β”œβ”€β”€ public/                     # Static assets
β”‚   β”œβ”€β”€ vultisig-logo.svg
β”‚   └── favicon.ico
β”œβ”€β”€ proto/                      # Protocol Buffer definitions
β”‚   β”œβ”€β”€ policy.proto
β”‚   └── recipe.proto
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ main.tsx               # Application entry point
β”‚   β”œβ”€β”€ App.tsx                # Root component with routing
β”‚   β”œβ”€β”€ components/            # Reusable UI components
β”‚   β”‚   β”œβ”€β”€ Header/
β”‚   β”‚   β”œβ”€β”€ Footer/
β”‚   β”‚   β”œβ”€β”€ PluginCard/
β”‚   β”‚   └── RecipeBuilder/
β”‚   β”œβ”€β”€ pages/                 # Route-level page components
β”‚   β”‚   β”œβ”€β”€ Home/              # Landing page
β”‚   β”‚   β”œβ”€β”€ Apps/              # Plugin marketplace
β”‚   β”‚   β”œβ”€β”€ MyApps/            # User's installed plugins
β”‚   β”‚   β”œβ”€β”€ Billing/           # Subscription management
β”‚   β”‚   └── FAQ/               # Help and documentation
β”‚   β”œβ”€β”€ providers/             # React context providers
β”‚   β”‚   β”œβ”€β”€ CoreProvider.tsx   # Core app state
β”‚   β”‚   β”œβ”€β”€ QueryProvider.tsx  # React Query setup
β”‚   β”‚   └── ThemeProvider.tsx  # Ant Design theme
β”‚   β”œβ”€β”€ utils/                 # Utility functions and helpers
β”‚   β”‚   β”œβ”€β”€ api.ts             # API client and endpoints
β”‚   β”‚   β”œβ”€β”€ extension.ts       # Extension communication
β”‚   β”‚   β”œβ”€β”€ policy.ts          # Policy serialization
β”‚   β”‚   └── constants.ts       # App-wide constants
β”‚   β”œβ”€β”€ types/                 # TypeScript type definitions
β”‚   β”œβ”€β”€ hooks/                 # Custom React hooks
β”‚   └── styles/                # Global styles and themes
β”œβ”€β”€ .env.example               # Example environment variables
β”œβ”€β”€ .nvmrc                     # Node version specification
β”œβ”€β”€ eslint.config.js           # ESLint configuration
β”œβ”€β”€ tsconfig.json              # TypeScript configuration
β”œβ”€β”€ tsconfig.app.json          # App-specific TS config
β”œβ”€β”€ tsconfig.node.json         # Node-specific TS config
β”œβ”€β”€ vite.config.ts             # Vite build configuration
β”œβ”€β”€ vercel.json                # Vercel deployment config
β”œβ”€β”€ package.json               # Dependencies and scripts
└── README.md                  # This file

Key Files Explained

Entry Points

  • src/main.tsx: Application bootstrap, provider setup, and wasm loading
  • src/App.tsx: Root component with React Router configuration
  • index.html: HTML template with meta tags and initial loading state

Configuration Files

  • vite.config.ts: Vite build settings, plugins, and optimization (view file)
  • eslint.config.js: Linting rules for code quality (view file)
  • tsconfig.*.json: TypeScript compiler options for different contexts
  • vercel.json: Deployment configuration for Vercel platform (view file)

Important Modules

  • src/utils/extension.ts: Browser extension communication layer
  • src/utils/api.ts: Centralized API client with error handling
  • src/providers/CoreProvider.tsx: Global state management
  • src/components/RecipeBuilder/: Visual automation workflow editor

Development Workflow

1. Create a Feature Branch

git checkout -b feature/app-rating-system

2. Make Changes

  • Edit files in src/
  • Vite will auto-reload changes via HMR
  • Check browser console for errors

3. Lint and Format

npm run lint:fix
npm run format

4. Type Check

npm run type-check

5. Test Your Changes

npm run test

6. Build Locally

npm run build
npm run preview

7. Commit with Conventional Commits

git add .
git commit -m "feat(plugins): add rating system with star component"

8. Push and Create PR

git push origin feature/plugin-rating-system

Packages

 
 
 

Contributors

Languages