| Crates.io | mockforge-registry-server |
| lib.rs | mockforge-registry-server |
| version | 0.3.20 |
| created_at | 2025-12-15 13:58:57.398286+00 |
| updated_at | 2025-12-31 14:18:40.284497+00 |
| description | Plugin registry server for MockForge |
| homepage | |
| repository | |
| max_upload_size | |
| id | 1986140 |
| size | 1,318,508 |
Central plugin registry backend for MockForge.
This crate implements the REST API server that powers the MockForge plugin marketplace. It handles:
┌─────────────────┐
│ CLI Client │ mockforge plugin registry search ...
└────────┬────────┘
│
│ HTTPS
│
┌────────▼────────────────────────────────────────┐
│ Registry Server (this crate) │
│ │
│ ┌────────────┐ ┌──────────┐ ┌────────────┐ │
│ │ Axum API │──│ Auth │──│ Storage │ │
│ │ Handlers │ │ (JWT) │ │ (S3) │ │
│ └─────┬──────┘ └──────────┘ └────────────┘ │
│ │ │
│ ┌─────▼───────────────────────────────────┐ │
│ │ PostgreSQL Database │ │
│ │ (plugins, versions, users, reviews) │ │
│ └─────────────────────────────────────────┘ │
└─────────────────────────────────────────────────┘
# Using Docker Compose (recommended)
cd crates/mockforge-registry-server
docker-compose up -d
This starts:
# Create .env file
cat > .env <<EOF
DATABASE_URL=postgres://postgres:password@localhost:5432/mockforge_registry
JWT_SECRET=your-secret-key-change-me
S3_BUCKET=mockforge-plugins
S3_REGION=us-east-1
S3_ENDPOINT=http://localhost:9000
AWS_ACCESS_KEY_ID=minioadmin
AWS_SECRET_ACCESS_KEY=minioadmin
PORT=8080
EOF
cargo install sqlx-cli
sqlx migrate run
cargo run --package mockforge-registry-server
The server will start on http://localhost:8080.
# Health check
curl http://localhost:8080/health
# Register user
curl -X POST http://localhost:8080/api/v1/auth/register \
-H "Content-Type: application/json" \
-d '{
"username": "testuser",
"email": "test@example.com",
"password": "securepassword"
}'
# Search plugins
curl -X POST http://localhost:8080/api/v1/plugins/search \
-H "Content-Type: application/json" \
-d '{
"query": "auth",
"page": 0,
"per_page": 20
}'
GET /health - Health checkPOST /api/v1/plugins/search - Search pluginsGET /api/v1/plugins/:name - Get plugin detailsGET /api/v1/plugins/:name/versions/:version - Get version detailsGET /api/v1/plugins/:name/reviews - Get plugin reviewsGET /api/v1/stats - Get registry statisticsPOST /api/v1/auth/register - Register new userPOST /api/v1/auth/login - Login and get JWT tokenPOST /api/v1/plugins/publish - Publish new plugin versionDELETE /api/v1/plugins/:name/versions/:version/yank - Yank versionPOST /api/v1/plugins/:name/reviews - Submit reviewPOST /api/v1/admin/plugins/:name/verify - Verify plugin (add badge)See docs/PLUGIN_MARKETPLACE_IMPLEMENTATION.md for complete schema.
Key tables:
plugins - Plugin metadataplugin_versions - Version informationusers - User accountsreviews - Plugin reviewstags - Tag catalogplugin_tags - Plugin-tag associations# Build image
docker build -t mockforge-registry:latest .
# Run container
docker run -p 8080:8080 \
-e DATABASE_URL=... \
-e JWT_SECRET=... \
mockforge-registry:latest
src/handlers/src/routes.rscargo test --package mockforge-registry-server
# Create new migration
sqlx migrate add <name>
# Run migrations
sqlx migrate run
# Revert last migration
sqlx migrate revert
All configuration via environment variables:
| Variable | Required | Default | Description |
|---|---|---|---|
DATABASE_URL |
Yes | - | PostgreSQL connection string |
JWT_SECRET |
Yes | - | Secret for signing JWT tokens |
S3_BUCKET |
No | mockforge-plugins |
S3 bucket name |
S3_REGION |
No | us-east-1 |
S3 region |
S3_ENDPOINT |
No | - | Custom S3 endpoint (MinIO, etc.) |
PORT |
No | 8080 |
Server port |
MAX_PLUGIN_SIZE |
No | 52428800 |
Max plugin size (50MB) |
RATE_LIMIT_PER_MINUTE |
No | 60 |
API rate limit |
MIT OR Apache-2.0