Package Exports
- pinme
- pinme/dist/index.js
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (pinme) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
Deploy your site in one command.
PinMe
PinMe is a zero-config frontend deployment tool. No servers. No accounts. No setup.
Build a static site, generate a page with AI, or export your frontend — then deploy instantly with a single command.
PinMe publishes your site as verifiable content, making silent tampering and accidental breakage far harder than traditional hosting.
You don’t manage servers, regions, or uptime. PinMe handles availability and persistence for you.
Website: https://pinme.eth.limo/
Installation
Using npm
npm install -g pinmeUsing yarn
yarn global add pinmeUsage
Upload files or directories
# Interactive upload
pinme upload
# Specify path directly
pinme upload /path/to/file-or-directory
# Upload and bind to a domain
pinme upload /path/to/file-or-directory --domain <name>
pinme upload /path/to/file-or-directory -d <name>Remove files from IPFS
# Interactive removal
pinme rm
# Remove a specific file by hash
pinme rm <IPFS_hash>View upload history
# Show the last 10 upload records
pinme list
# Or use the shorthand command
pinme ls
# Limit the number of records shown
pinme list -l 5
# Clear all upload history
pinme list -cSet AppKey for authentication
# Interactive AppKey setup
pinme set-appkey
# Set AppKey directly
pinme set-appkey <AppKey>View your domains
# List all domains owned by current account
pinme my-domains
# Or use the shorthand command
pinme domainGet help
# Display help information
pinme helpCommand Details
upload
Upload a file or directory to the IPFS network. Supports binding to a Pinme subdomain after upload.
pinme upload [path] [--domain <name>]Options:
path: Path to the file or directory to upload (optional, if not provided, interactive mode will be entered)-d, --domain <name>: Pinme subdomain to bind after upload (optional)
Examples:
# Interactive upload
pinme upload
# Upload a specific file
pinme upload ./example.jpg
# Upload an entire directory
pinme upload ./my-website
# Upload and bind to a domain
pinme upload ./my-website --domain my-site
pinme upload ./my-website -d my-siterm
Remove a file from the IPFS network.
pinme rm [hash]Options:
hash: IPFS content hash to remove (optional, if not provided, interactive mode will be entered)
Examples:
# Interactive removal
pinme rm
# Remove a specific file by hash
pinme rm bafybeifdwyoz66u5czbbjvmmais5fzrzrolxbyiydqsbrxessndt3s6zdiNote: This action unpins the content from our IPFS node and deletes the ENS subdomain record. It does not ensure that the file is removed from the IPFS network.
list / ls
Display upload history.
pinme list [options]
pinme ls [options]Options:
-l, --limit <number>: Limit the number of records displayed-c, --clear: Clear all upload history
Examples:
# Show the last 10 records
pinme list
# Show the last 5 records
pinme ls -l 5
# Clear all history records
pinme list -cset-appkey
Set AppKey for authentication and automatically merge anonymous upload history to the current account.
pinme set-appkey [AppKey]Options:
AppKey: Your AppKey for authentication (optional, if not provided, interactive mode will be entered)
Examples:
# Interactive AppKey setup
pinme set-appkey
# Set AppKey directly
pinme set-appkey your-app-key-hereNote: After setting the AppKey, your anonymous upload history will be automatically merged to your account.
my-domains / domain
List all domains owned by the current account.
pinme my-domains
pinme domainExamples:
# List all domains
pinme my-domains
# Shorthand command
pinme domainThis command displays information about each domain including:
- Domain name
- Domain type
- Bind time
- Expire time
help
Display help information.
pinme help [command]Options:
command: The specific command to view help for (optional)
Examples:
# Display general help
pinme helpUpload Limits
- Single file size limit: 20MB
- Total directory size limit: 500MB
File Storage
Uploaded files are stored on the IPFS network and accessible through the Glitter Protocol's IPFS gateway. After a successful upload, you will receive:
- IPFS content hash
- Accessible URL link
Log Locations
Logs and configuration files are stored in:
- Linux/macOS:
~/.pinme/ - Windows:
%USERPROFILE%\.pinme\
License
MIT License - See the LICENSE file for details
Usage Tips
Uploading Vite Projects
When uploading projects built with Vite, please note:
- Vite Configuration: Add
base: "./"to your Vite configuration file to ensure proper asset path resolution:
// vite.config.js
export default {
base: "./",
// other configurations...
}GitHub Actions Integration
PinMe can be integrated with GitHub Actions to automatically deploy your project when you push code to GitHub. This enables a fully automated CI/CD workflow.
Quick Setup
Add the workflow file to your repository:
- Copy
.github/workflows/deploy.ymlfrom the PinMe repository to your project - Or create
.github/workflows/deploy.ymlin your repository
- Copy
Configure GitHub Secrets:
- Go to your repository → Settings → Secrets and variables → Actions
- Add a new secret named
PINME_APPKEYwith your PinMe AppKey - (Optional) Add
PINME_DOMAINto specify a custom domain name
Push to trigger deployment:
- Push code to
mainormasterbranch to trigger automatic deployment - Or manually trigger via Actions tab → "Deploy to PinMe" → Run workflow
- Push code to
Workflow Features
The GitHub Actions workflow automatically:
- ✅ Detects and installs project dependencies
- ✅ Builds your project (if a build script exists)
- ✅ Installs PinMe CLI
- ✅ Sets up authentication using your AppKey
- ✅ Auto-detects build output directory (
dist,build,public, orout) - ✅ Uploads to IPFS and binds to your domain
- ✅ Provides deployment summary with access URL
Configuration Options
Using GitHub Secrets
You can configure the following secrets in your repository:
PINME_APPKEY(Required): Your PinMe AppKey for authentication- Format:
<address>-<jwt> - Get your AppKey from PinMe website
- Format:
PINME_DOMAIN(Optional): Default domain name to bind- If not set, the workflow will generate a domain from your repository name
- Example:
my-awesome-project→https://my-awesome-project.pinit.eth.limo
Manual Workflow Dispatch
You can also manually trigger the workflow with custom parameters:
- Go to Actions tab in your repository
- Select "Deploy to PinMe" workflow
- Click "Run workflow"
- Enter:
- Domain: Your desired PinMe domain name
- Build Directory: Your build output directory (default:
dist)
Example Workflow
name: Deploy to PinMe
on:
push:
branches: [main, master]
workflow_dispatch:
inputs:
domain:
description: 'PinMe domain name'
required: true
build_dir:
description: 'Build directory'
default: 'dist'
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '18'
- run: npm ci
- run: npm run build
- run: npm install -g pinme
- run: pinme set-appkey "${{ secrets.PINME_APPKEY }}"
- run: pinme upload dist --domain "${{ secrets.PINME_DOMAIN }}"Supported Build Tools
The workflow automatically detects and supports:
- Vite: Builds to
dist/ - Create React App: Builds to
build/ - Next.js: Builds to
out/(withoutput: 'export') - Vue CLI: Builds to
dist/ - Angular: Builds to
dist/ - Static sites: Uses root directory or
public/
Troubleshooting
Build directory not found:
- Ensure your build script outputs to a standard directory (
dist,build,public, orout) - Or set
PINME_DOMAINsecret and use manual workflow dispatch to specify custom directory
Authentication failed:
- Verify your
PINME_APPKEYsecret is correctly set - Ensure the AppKey format is correct:
<address>-<jwt>
Domain binding failed:
- Check if the domain name is available
- Ensure you have permission to bind the domain
- Try a different domain name
Contact Us
If you have questions or suggestions, please contact us through:
- GitHub Issues: https://github.com/glitternetwork/pinme/issues
- Email: pinme@glitterprotocol.io
Developed and maintained by the Glitter Protocol team