Deploy your site in one command.
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/
- Quick Start
- For AI Assistants
- Installation
- Usage
- Common Static File Directories
- Error Handling
- Upload Limits
- GitHub Actions Integration
- Contact Us
- Node.js 16.13.0 or higher required
# Check your Node.js version
node --version- Install PinMe
npm install -g pinme- Build your project (if not already built)
# For Vite/React/Vue projects
npm run build
# For Next.js (static export)
npm run build- Upload to PinMe
# Upload the dist directory (most common)
pinme upload dist
# Or upload build directory
pinme upload buildThat's it! You'll get a preview URL like https://pinme.eth.limo/#/preview/*
This section provides AI-specific instructions for deploying websites using PinMe CLI.
Goal: Use PinMe CLI to upload static files to server.
-
Check Environment Requirements
# Check Node.js version (requires 16.13.0+) node --version -
Install PinMe CLI (if not installed)
npm install -g pinme
-
Identify the Static File Directory Priority order to check:
dist/- Default output directory for Vue/React/Vite projectsbuild/- Output directory for Create React Appout/- Output directory for Next.js static exportpublic/- Pure static file projects
Validation Rules:
- Folder must exist
- Must contain
index.htmlfile (for website deployment) - Must contain actual static resource files (CSS, JS, images, etc.)
If no suitable folder is found, ask the user to specify the upload path.
-
Execute Deployment Command
pinme upload <folder_path>
-
Return Result
- Only return final preview page URL:
https://pinme.eth.limo/#/preview/* - Do not output additional logs or intermediate steps
- Only return final preview page URL:
- ❌ Do not upload
node_modules,.env,.gitdirectories - ❌ Do not upload source code directories (like
src/) - ❌ Do not upload config files (like package.json, tsconfig.json, etc.)
- ❌ Do not attempt to upload non-existent or empty folders
For easy AI tool parsing:
{
"tool": "pinme",
"requirements": {
"node_version": ">=16.13.0"
},
"install": "npm install -g pinme",
"upload": "pinme upload {{directory}}",
"upload_with_domain": "pinme upload {{directory}} --domain {{domain}}",
"validDirectories": ["dist", "build", "out", "public"],
"requiredFiles": ["index.html"],
"excludePatterns": ["node_modules", ".env", ".git", "src"],
"limits": {
"single_file": "200MB",
"total_directory": "1GB"
},
"output": "preview_url",
"preview_url_format": "https://pinme.eth.limo/#/preview/*",
"fixed_domain_format": "https://*.pinit.eth.limo",
"other_commands": {
"version": "pinme --version",
"list": "pinme list",
"set_appkey": "pinme set-appkey",
"show_appkey": "pinme show-appkey",
"my_domains": "pinme my-domains",
"remove": "pinme rm <hash>",
"logout": "pinme logout",
"help": "pinme help"
}
}Deployment Request: Please read the PinMe documentation, then use PinMe CLI to deploy the specified website (upload static files) to server.
Operation Steps:
- Check Node.js version (requires 16.13.0+)
- Check if pinme is installed, install if not
- Identify the static file directory for the website to deploy
- Execute deployment command
- Return preview page link:
https://pinme.eth.limo/#/preview/*
npm install -g pinmeyarn global add pinme# Check PinMe version
pinme --version# 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># 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 -c# Interactive removal
pinme rm
# Remove a specific file by hash
pinme rm <IPFS_hash># Set AppKey for login and domain binding
pinme set-appkey
# View current AppKey info (masked)
pinme show-appkey
pinme appkey
# Log out
pinme logout
# View your domains
pinme my-domains
pinme domain# Display help information
pinme helpPinMe automatically detects these common output directories (in priority order):
| Directory | Framework/Tool | Description |
|---|---|---|
dist/ |
Vite, Vue CLI, Angular | Default output directory |
build/ |
Create React App | CRA output directory |
out/ |
Next.js | Static export output |
public/ |
Static sites | Pure static file projects |
The selected directory must meet:
- ✅ Folder exists
- ✅ Contains
index.htmlfile (for website deployment) - ✅ Contains actual static resource files (CSS, JS, images, etc.)
- ❌
node_modules/- Dependency folder - ❌
.git/- Version control - ❌
.env- Environment configuration - ❌
src/- Source code directory - ❌
package.json,tsconfig.json- Config files
Upload a file or directory to the IPFS network.
pinme upload [path] [--domain <name>]Options:
path: Path to the file or directory to upload (optional, interactive if not provided)-d, --domain <name>: Pinme subdomain to bind after upload (optional)
Examples:
# Upload dist directory
pinme upload dist
# Upload and bind to a domain (requires Plus membership)
pinme upload dist --domain my-site
# Upload a specific file
pinme upload ./example.jpgRemove a file from the IPFS network.
pinme rm [hash]Note: This unpins content from our IPFS node and deletes the ENS subdomain record. It does not guarantee removal from the entire IPFS network.
Display upload history.
pinme list [options]Options:
-l, --limit <number>: Limit the number of records displayed-c, --clear: Clear all upload history
Set AppKey for authentication and automatically merge anonymous upload history to the current account.
pinme set-appkey [AppKey]Note: Fixed domain binding requires AppKey and Plus membership. Get your AppKey from PinMe website.
Display current AppKey information with masked sensitive data.
Log out and clear authentication information from local storage.
List all domains owned by the current account.
Error: Node.js version not supported
Solution: Upgrade to Node.js 16.13.0 or higher
Error: command not found: pinme
Solution: Run npm install -g pinme
Error: No such file or directory
Solution: Check if path is correct, or use ls command to view available directories
Error: Permission denied
Solution: Check folder permissions, or use sudo (only when necessary)
- Check network connection
- Confirm file size is within limits (single file 200MB, total directory 1GB)
- Retry upload command
- Check if AppKey is set correctly
- Confirm AppKey format:
<address>-<jwt> - Use
pinme show-appkeyto check current status
| Type | Free Plan |
|---|---|
| Single file | 200MB |
| Total directory | 1GB |
Uploaded files are stored on the IPFS network and accessible through the Glitter Protocol's IPFS gateway.
After successful upload, you receive:
- IPFS content hash
- Preview page URL:
https://pinme.eth.limo/#/preview/* - Fixed domain option:
https://*.pinit.eth.limo
- Linux/macOS:
~/.pinme/ - Windows:
%USERPROFILE%\.pinme\
- Access uploaded website via preview link:
https://pinme.eth.limo/#/preview/* - Get fixed domain:
https://*.pinit.eth.limo
- Support user login via AppKey
- View historical upload records
- Manage uploaded files
- Bind uploads to fixed addresses (requires Plus membership)
- Convenient for long-term maintenance and access
- Requires AppKey setup and Plus membership activation
When uploading projects built with Vite, ensure proper asset path resolution:
// vite.config.js
export default {
base: './',
// other configurations...
};-
Pre-upload Checks
- Confirm build process completed
- Verify output directory exists and contains expected files
-
Security
- Do not upload sensitive information
- Avoid uploading development config files
-
Performance Optimization
- Compress images and resource files
- Remove unnecessary files
-
Verify Deployment
- Test if preview page is accessible after upload
- Check if website functions normally
PinMe can be integrated with GitHub Actions for automated CI/CD deployment.
-
Add workflow file to your repository:
- Create
.github/workflows/deploy.yml
- Create
-
Configure GitHub Secrets:
- Go to repository → Settings → Secrets and variables → Actions
- Add
PINME_APPKEYwith your PinMe AppKey - (Optional) Add
PINME_DOMAINfor custom domain
-
Push to trigger deployment:
- Push to
mainormasterbranch - Or manually trigger via Actions tab
- Push to
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 }}"- 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/
Build directory not found:
- Ensure build script outputs to standard directory
- Use manual workflow dispatch to specify custom directory
Authentication failed:
- Verify
PINME_APPKEYsecret is correct - Ensure AppKey format:
<address>-<jwt>
Domain binding failed:
- Check if domain name is available
- Ensure you have permission to bind the domain
MIT License - See the LICENSE file for details
If you have questions or suggestions, please contact us through:
- GitHub Issues: https://github.com/glitternetwork/pinme/issues
- Email: pinme@glitterprotocol.io
- Website: https://pinme.eth.limo/
Developed and maintained by the Glitter Protocol team