Roadmap
Feature planning and evolution of Pumpkin Hub.
Vision
Pumpkin Hub aims to become the reference platform for the Pumpkin MC ecosystem — a performant, secure and community-driven plugin registry, natively designed for Rust. The roadmap below details the major development phases to achieve this goal.
Legend
Completed
In Progress
Next Up
Planned
Backlog
Phase 0 — Foundations Completed
Development Infrastructure
- Multi-service Docker Compose (API, Frontend, PostgreSQL, Meilisearch)
- Hot-reload with cargo-watch (API) and next dev (Frontend)
- Health checks and persisted volumes
Rust API Skeleton
- Axum architecture with testable
build_app() - Full middleware stack (CORS, Trace, RequestId, Timeout, Compression)
- Typed configuration from environment variables
- Centralized
AppErrortype with automatic HTTP mapping - Operational
/api/v1/healthendpoint
Frontend Skeleton
- Next.js 16 with App Router and React 19
- Tailwind CSS 4 and TypeScript configuration
- ESLint with Next.js configuration
CI/CD and Quality
- GitHub Actions pipeline (lint, clippy, type-check, tests, build)
- NPM and Rust cache for faster builds
Design System & Mockups
- "Brutalist Industrial" art direction validated
- 4 high-fidelity HTML mockups (Landing, Explorer, Plugin, Dashboard)
- Raleway + JetBrains Mono typography, orange/black palette
Phase 1 — Core Platform Completed
Database & Models
- SQLx integration with PostgreSQL (migrations, connection pool)
- Data models: Users, Plugins, Versions, Categories
- Relations and integrity constraints
- Development seeds with test data
GitHub OAuth Authentication
- OAuth 2.0 flow with GitHub —
GET /auth/githubredirect +/auth/github/callback - CSRF state validation via HttpOnly cookie
- JWT session management with
axum-extrasecure cookies (SameSite=Lax,HttpOnly) AuthUsermiddleware extractor for protecting routes (cookie or Bearer header)- User profile sync from GitHub API on each login (upsert)
GET /auth/me— protected current-user endpointPOST /auth/logout— cookie invalidation (POST-only for CSRF protection)
Plugin CRUD
- Complete REST endpoints: list, create, read, update, delete
- Input validation (name, description, categories, license, URLs)
- Pagination, sorting (created_at, updated_at, downloads, name) and category filtering
- Unique URL-safe slug generation with collision handling
- Ownership enforcement — only the author can update or delete
- Soft-delete via
is_activeflag - Batch category loading (N+1 prevention)
Frontend Page Implementation
- Design system with Tailwind CSS 4 tokens (Brutalist Industrial: colors, typography, effects, animations)
- Shared UI components: Navbar, Footer, Badge, Button, PluginCard
- API layer with SWR hooks (
usePlugins,usePlugin) and typed DTOs - Landing page: hero section, trending bento grid, features grid, CTA, live ticker
- Explorer page: sidebar filters (search, sort, categories), paginated results, URL-based state with Suspense boundary
- Plugin detail page: install panel with copy-to-clipboard, tabbed content (Overview/Versions/Dependencies), sidebar (stats, links, details, author)
- Optimized fonts via
next/font/google(Raleway + JetBrains Mono) - Next.js Image optimization for external avatars
Phase 1.5 — Integration & Quality Completed
Categories API Endpoint
GET /api/v1/categories— dynamic list endpoint- Frontend sidebar categories fetched from API (replaces hardcoded list)
- SWR hook
useCategories()and typed DTO
Frontend Authentication Integration
- Navbar "Sign In" button triggers GitHub OAuth redirect
- Session state management (authenticated/unauthenticated)
- User profile display in Navbar (avatar, username, dropdown menu)
- Logout functionality from UI
useCurrentUser()SWR hook consumingGET /auth/me- Cookie-based auth with
credentials: "include"on all API requests
Multi-Provider Authentication
- Email/password registration & login with Argon2 password hashing
- Google OAuth 2.0 —
GET /auth/googleredirect + callback - Discord OAuth 2.0 —
GET /auth/discordredirect + callback auth_providerstable linking multiple providers to a single user (provider + provider_id)- Account linking by email — existing users can add new sign-in methods
- Password hash stored on users table (nullable for OAuth-only accounts)
POST /auth/register— email/password signup with validationPOST /auth/login— email/password authentication- Dedicated
/authfrontend page with sign-in/sign-up forms and OAuth provider buttons
Plugin Submission & Management Forms
- Authenticated "Publish a Plugin" form at
/plugins/new(create) - Fields: name, short description, description (Markdown), categories picker, license, repository URL, documentation URL
- Client-side validation module mirroring backend rules (name 3-100 chars, URL format, max 5 categories, etc.)
- Reusable
PluginFormcomponent shared between create and edit flows - Edit page at
/plugins/{slug}/edit— pre-populated form with ownership enforcement - Delete action with confirmation modal — soft-delete via API
PluginActionscomponent (Edit/Delete) visible only to plugin authors and admins- Navbar "Submit Plugin" link wired to
/plugins/new
User Profile & Creator Dashboard
PUT /api/v1/auth/me— profile update endpoint (display name, bio)POST /api/v1/auth/avatar— multipart avatar upload with MIME + magic-bytes validation (max 2 MB), stored as BYTEAGET /api/v1/users/{id}/avatar— public binary serving with cache headers- User profile page at
/profilewith editable display name, bio and avatar upload - Creator dashboard at
/dashboard— published plugins list with stats and quick-action links (edit, view, delete) - Responsive layout consistent with Brutalist Industrial design system
Versions Tab — Real Data
GET /api/v1/plugins/{slug}/versionsendpoint- Plugin detail Versions tab consuming live API data
- Yanked version indicator and Pumpkin compatibility range display
Unit & Integration Tests
- Rust unit tests: auth handlers, slug generation, input validation, ownership enforcement (81 tests)
- Rust integration tests: plugin CRUD flow, auth, pagination, versions, categories (14 tests)
- Frontend component tests with Vitest + Testing Library (60 tests: validation, Badge, Button, PluginCard)
- CI pipeline updated with PostgreSQL service, migrations, test execution and coverage thresholds (50%)
SEO & Metadata
- Dynamic
generateMetadata()on Explorer and Plugin Detail pages - Open Graph and Twitter Card tags with plugin name and description
- Structured data (JSON-LD /
schema.org/SoftwareApplication) for plugin entries - Plugin Detail page refactored from client to server component
metadataBaseand title template in root layout, configurable viaNEXT_PUBLIC_SITE_URL
Phase 2 — Distribution Completed
Version Metadata Management
- Version CRUD: create, list, yank endpoints
- Semver validation and Pumpkin compatibility ranges (
pumpkin_version_min/pumpkin_version_max) - Changelog per version (Markdown supported)
- Download counter increment on version fetch
- Version management UI for authors (publish, yank)
Binary Storage & Distribution
- Binary file upload with multi-platform support (Windows, macOS, Linux) and MIME-type validation
- S3-compatible object storage: MinIO for development, Cloudflare R2 for production
- Dual-client architecture for SigV4 signature correctness: separate clients for server-side operations (upload/delete) and presigned URL generation (browser downloads)
- Pre-signed download URLs with 1-hour TTL, signed for browser-reachable endpoint
- Automatic SHA-256 checksum generation and storage for integrity verification
- File size limits (100 MB default) and optimized object key structure (
plugins/{slug}/{version}/{platform}/{filename})
Full-Text Search
- Plugin indexing in Meilisearch with automatic sync on CRUD operations
- Instant search with typo-tolerance (Meilisearch SDK integration)
- Faceted filters (category, platform, Pumpkin version) with live counts
- Sort by relevance, downloads, date (newest/oldest/updated), name
- Autocomplete suggestions via
GET /search/suggest - Pumpkin MC version list fetched from official GitHub releases (
GET /pumpkin-versions) - Explorer page fully powered by Meilisearch with SearchBar, faceted sidebar, and processing time display
Dependency Graph
- Inter-plugin dependency declaration — CRUD endpoints (
POST/PUT/DELETE) with ownership enforcement - Compatibility resolution via semver version ranges (
>=0.2.0,^0.3,~1.0) - Dependency graph resolution — BFS traversal with resolved versions (
GET /dependencies/graph) - Conflict detection: no matching version, incompatible ranges, circular dependencies, inactive plugins
- Reverse dependency lookup —
GET /plugins/{slug}/dependants - Frontend: dependency list view, tree graph visualization, conflict alerts, dependants view
Phase 2.5 — Hardening & Polish Done
Rate Limiting & API Protection
- Per-IP rate limiting via
tower-governormiddleware - Stricter limits on authentication endpoints (register, login, OAuth) to prevent brute-force
- Relaxed limits on read-only endpoints (search, plugin list, download)
- Configurable thresholds via environment variables
429 Too Many Requestsresponse withRetry-Afterheader
Password Recovery & Email Verification
- Forgot password flow — email with time-limited reset token (1 hour TTL)
- Reset password page at
/auth/reset-passwordwith token validation - Email verification on registration — activation link sent on signup
- Email sending infrastructure via SMTP or transactional email service (Resend / SendGrid)
email_verifiedflag on users table, enforced on sensitive operations
Custom Error Pages & Toast Notifications
- Custom
404 Not Foundpage consistent with Brutalist Industrial design - Custom
500 Internal Errorpage with helpful recovery actions - Next.js
error.tsxandglobal-error.tsxerror boundaries - Toast notification system for user feedback (success, error, info) on CRUD operations
- Next.js
loading.tsxsuspense boundaries with skeleton UI on all pages
Public Author Profiles
GET /api/v1/users/{username}— public author profile endpointGET /api/v1/users/{username}/plugins— author's published plugins- Public profile page at
/users/{username}with avatar, bio, and plugin portfolio - Author stats: total plugins published, cumulative downloads, member since
- Click-through from plugin detail author name to profile page
Admin Moderation Basics
- Admin-only routes protected by role middleware (
admin/moderator) - Deactivate or flag plugins from admin panel
- User management: ban, role change, account deactivation
- Audit log of admin actions (who, what, when)
- Admin dashboard at
/adminwith pending reviews and flagged content
Performance & Caching Layer
- Redis integration for distributed caching — hot data (popular plugins, category lists, user sessions)
- Cache invalidation strategy on CRUD operations (write-through pattern)
- Meilisearch search result caching with TTL
- Connection pooling and eviction policies (LRU/TTL)
- Measurable performance gains: 90% reduction on popular plugin detail page latency, sub-100ms search responses
Phase 3 — Community In Progress
Advanced Author Dashboard
- Advanced KPIs: total downloads, 7-day & 30-day windows, trend percentage, top plugin identification
- Download charts over time with configurable granularity (daily/weekly/monthly) and period count
- API key management for CI/CD integration — create, list, revoke keys with scoped permissions (publish, upload, read)
- Notification center with download milestone alerts (10, 50, 100, 500, 1K, 5K, 10K, 50K, 100K), unread badge, and mark-as-read
- Permission enforcement — API keys are validated against each endpoint's required permission; admin routes locked to JWT
- API key usage audit trail — every API-key-authenticated request logs action, resource, success/failure, and timestamp
- Per-API-key rate limiting — individual quotas (burst & sustained) replace the global rate limiter for key-authenticated traffic
Publishing from GitHub
- GitHub App to link a repository to a plugin
- Automatic publishing on GitHub tag/release with binary artifact detection
- Webhook to synchronize READMEs and changelogs from repository
- Dynamic "Download on Pumpkin Hub" badge for GitHub repositories
Review System
- Star ratings (1–5) with per-user enforcement (one review per plugin, authors cannot self-review)
- Review form with title, body and inline
StarRatingcomponent (hover + keyboard) - Rating distribution overview (bar chart per star level) and computed average
- Moderation by plugin authors and staff — toggle review visibility via
PATCH /reviews/:id/hide - Abuse reporting with 5 reason types, deduplication guard, and admin resolution workflow
average_rating&review_countincluded inPluginSummaryand Meilisearch documents- Automatic Meilisearch reindex on every review mutation (create / update / delete / hide)
- Rating display on plugin detail page (header), explorer cards (
PluginCard&SearchHitCard) - New
ratingsort option on search endpoint (average_rating:desc/asc)
Enhanced Plugin Detail & Media Gallery
- New Gallery tab on plugin detail page for images and videos (JPEG, PNG, WebP ≤ 10 MB; MP4, WebM ≤ 100 MB, max 20 items per plugin)
- Drag-and-drop
MediaUploadcomponent with client-side validation, preview, and XHR progress bar - Reorder and caption editing for each media item; soft-delete with fire-and-forget S3 cleanup
- Lightbox carousel — fullscreen overlay with prev/next, thumbnail strip, caption, keyboard navigation (← → Esc), video autoplay support
- New Changelog tab with Keep-a-Changelog markdown rendering (headings, lists, code blocks, links); source badge (GitHub synced vs manual)
- Inline markdown editor for owners with live char count (max 200 K chars); UPSERT via
ON CONFLICT - XSS protection in markdown renderer via
escapeHtml()before all output - New API routes:
GET/POST /plugins/{slug}/media,PATCH/DELETE /media/{id},PUT /media/reorder,GET/PUT/DELETE /plugins/{slug}/changelog
Plugin Categories Refinement
- 17 server-plugin categories inspired by Modrinth/CurseForge, aligned with server-side-only plugin use cases
- 4 renamed: Gameplay → Game Mechanics, Administration → Management, API/Library → Library, Performance → Optimization
- 9 new categories: Adventure, Decoration, Equipment, Minigame, Mobs, Social, Storage, Transportation, Utility
- Soft-deletion via
is_activecolumn — deactivated categories preserved in historical data, filtered from all API responses display_ordercolumn for deterministic alphabetical ordering independent of insertion order- Shared
lib/category-icons.tsmodule — singleCATEGORY_ICON_MAP+getCategoryIcon()used across ExplorerSidebar, PluginForm, and PublishFromGithubForm - CategoryPicker updated with Lucide icons and
titletooltip showing category descriptions
User Experience Improvements
Completed
- Grid View toggle on Explorer page — switch between list and card grid layouts for plugin browsing
- Persistent user preference via
localStorage(pumpkin-hub:explorer-viewkey) - Search Bar on Landing Page — unified search experience linking to Explorer with pre-filled query
- Auto-focus and ⌘K / Ctrl+K global keyboard shortcut on Landing & Explorer pages
- Hero section updated with prominent search CTA, OS-aware shortcut hints, and Escape-to-clear
Test Coverage & Code Quality — 80%+ Target
Completed
- Frontend coverage raised from ~5% to 80%+ through progressive milestones (36% → 40% → 45% → 48% → 50% → 53% → 80%+)
- Comprehensive test suites added: smoke tests for all pages, MSW API contract mocks, component integration tests
- Covered modules:
lib/validation.ts,lib/api.ts, UI components (Badge, Button, PluginCard, PluginIcon), plugin forms, review system, dashboard, profile, media gallery, lightbox, changelog, notifications - CI thresholds enforced: lines 80%, functions 80%, branches 75% — hard gate on every PR
- Backend coverage tracked via
cargo-tarpaulinwith LCOV output - SonarQube integration: combined frontend + backend coverage analysis on every CI run
- Quality tooling: MSW (Mock Service Worker) for API contract testing,
@testing-library/user-eventfor interaction scenarios
Security Hardening
Completed
- Secure cookies:
Secureflag on all auth cookies, auto-detected fromALLOWED_ORIGINSHTTPS scheme or forced viaCOOKIE_SECUREenv var - POST-only logout:
POST /auth/logoutreplaces GET to prevent CSRF-based sign-out attacks - HTTP security headers via Next.js:
X-Frame-Options: DENY,X-Content-Type-Options: nosniff,Referrer-Policy: strict-origin-when-cross-origin,Permissions-Policy(camera, mic, geo disabled) - Cookie domain configuration:
COOKIE_DOMAINenv var enables shared auth across subdomains (e.g.,.pumpkinhub.org) - Pre-production security audit performed with P0/P1/P2 findings tracked and resolved
Production Deployment & CI/CD
Completed
- Production Docker stack: multi-stage Dockerfiles for API (Alpine-based, static Rust binary) and Frontend (Next.js standalone)
- Container registry: pre-built images on GitHub Container Registry (
ghcr.io/fablrc/pumpkin-hub-api,ghcr.io/fablrc/pumpkin-hub-frontend) - Docker build workflow: GitHub Actions builds and pushes images on every successful CI run, with Coolify webhook trigger for auto-deployment
- Health checks: Docker
HEALTHCHECKinstructions on frontend and API containers - Deployment target: Hetzner VPS + Coolify (self-hosted PaaS) + Cloudflare R2 for object storage
- Upload proxy: Next.js proxy routes (
/api/upload/*) for browser binary uploads via internal Docker network, with R2 presign fallback - Public statistics API:
GET /api/v1/stats— unauthenticated endpoint returning total plugins, authors, and downloads for the homepage - Plugin icons: icon upload/display on plugin pages with S3 storage and 2-letter initial fallback component
Collections & Curations
- Thematic plugin collections (e.g., "Essential PvP Pack")
- Staff Picks — featured plugins by the team
- Editorial categories and community tags
Phase 3.5 — Server Configuration Planned
Pumpkin Server Builder
- Interactive server build wizard at
/server-builder— select plugins from catalog with granular filtering - Plugin compatibility check — auto-detect conflicts, circular dependencies, version incompatibilities
- Dependency graph auto-resolution — add a plugin and its required dependencies are automatically included
- Pre-configuration of selected plugins — tune parameters, settings, and game mechanics (optional)
- Generate downloadable ZIP with pre-configured server files:
pumpkin-config.toml(server configuration)- All plugin binaries organized by platform (Windows/Linux/macOS)
- README with setup instructions and dependency list
- Save & share configurations — unique shareable links (
/configs/{id}) for easy server setup distribution - Analytics dashboard — track popular plugin combinations and configuration patterns
Phase 4 — Ecosystem Planned
Pumpkin Hub CLI
- Rust CLI tool to publish, search and install plugins
- Commands:
ph publish,ph search,ph install - Lock file for dependency resolution
- Authentication via API token
Public API & Webhooks
- Auto-generated OpenAPI/Swagger documentation
Rate limiting and quotas per API key(moved to Phase 3 — completed)- Configurable webhooks (new version, new plugin, download)
- Client SDKs for third-party integrations
Advanced Security
- Automatic scan of uploaded binaries (antivirus, static analysis)
- Cryptographic release signing (GPG / cosign)
Audit log of all publishing operations(moved to Phase 3 — completed via API key audit trail)- Community bug bounty program
Internationalization
- Multilingual interface (EN, FR, DE, ES, PT, ZH)
- Multilingual plugin descriptions
- Translated documentation
Plugin Co-Creators & Advanced Permissions
- Add co-creators to a plugin with granular permission roles:
- Owner — full control (edit, publish, delete, manage contributors)
- Maintainer — can edit, publish versions, manage dependencies
- Contributor — can edit plugin metadata and create versions (no deletion)
- Viewer — read-only access to dashboard and analytics
- Invite system with email notifications and acceptance flow
- Permission enforcement on all plugin mutations (CRUD, version management, etc.)
- Audit log showing which contributor performed each action
- Remove contributors with history preservation
- UI on plugin dashboard to manage contributors and their roles
Backlog — Future Ideas
These features are not yet scheduled but are part of the long-term project vision. They will be prioritized based on community feedback.
Monetized Marketplace
Premium plugin support with integrated payment system for authors.
Cloud Test Server
Ephemeral Pumpkin MC environment to test a plugin directly from the browser.
Plugin Templates
Plugin project scaffolding via
cargo generate with official templates.Advanced Analytics
Detailed metrics: retention, active versions, geographic distribution.
Role System
Organizations with members, granular permissions and plugin co-ownership.
GraphQL API
Alternative GraphQL endpoint for flexible client-side queries.
Advertising Integration
Community-friendly ad network integration (Google Ads, EthikAds/CarbonAds) to support hosting and development costs. Non-intrusive, focused on environmental/ethical options.
Contribute
Want to contribute to a feature? Check the
contribution guide and open an issue on
GitHub to discuss
the implementation before starting.