{"id":44018840,"url":"https://github.com/ykagano/wiremock-hub","last_synced_at":"2026-04-02T18:11:51.396Z","repository":{"id":330442598,"uuid":"1118959120","full_name":"ykagano/wiremock-hub","owner":"ykagano","description":null,"archived":false,"fork":false,"pushed_at":"2026-03-25T04:26:31.000Z","size":14109,"stargazers_count":4,"open_issues_count":2,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-03-25T18:29:14.714Z","etag":null,"topics":["api-mocking","mock-server","testing","wiremock"],"latest_commit_sha":null,"homepage":"https://ykagano.github.io/wiremock-hub/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ykagano.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"ykagano"}},"created_at":"2025-12-18T14:31:16.000Z","updated_at":"2026-03-25T04:26:00.000Z","dependencies_parsed_at":"2026-03-06T11:01:42.114Z","dependency_job_id":null,"html_url":"https://github.com/ykagano/wiremock-hub","commit_stats":null,"previous_names":["ykagano/wiremock-jp"],"tags_count":43,"template":false,"template_full_name":null,"purl":"pkg:github/ykagano/wiremock-hub","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ykagano%2Fwiremock-hub","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ykagano%2Fwiremock-hub/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ykagano%2Fwiremock-hub/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ykagano%2Fwiremock-hub/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ykagano","download_url":"https://codeload.github.com/ykagano/wiremock-hub/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ykagano%2Fwiremock-hub/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31312744,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-02T12:59:32.332Z","status":"ssl_error","status_checked_at":"2026-04-02T12:54:48.875Z","response_time":89,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api-mocking","mock-server","testing","wiremock"],"created_at":"2026-02-07T16:05:57.741Z","updated_at":"2026-04-02T18:11:51.350Z","avatar_url":"https://github.com/ykagano.png","language":"TypeScript","funding_links":["https://github.com/sponsors/ykagano"],"categories":[],"sub_categories":[],"readme":"# WireMock Hub\n\n[![Release](https://img.shields.io/github/v/release/ykagano/wiremock-hub?color=blue)](https://github.com/ykagano/wiremock-hub/releases)\n[![Main](https://github.com/ykagano/wiremock-hub/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/ykagano/wiremock-hub/actions/workflows/ci.yml)\n[![Docker Pulls](https://img.shields.io/docker/pulls/yukagano/wiremock-hub)](https://hub.docker.com/r/yukagano/wiremock-hub)\n\nExtends [WireMock](https://wiremock.org/) with a graphical user interface for centralized management of distributed WireMock environments.\n\n![WireMock Hub - Stub Mappings](docs/images/stub-mappings.png)\n\n## Why WireMock Hub?\n\n- **No more hand-editing JSON** — Create and manage WireMock stubs through a visual editor instead of writing `mappings.json` by hand\n- **Switch stubs per project** — Organize stubs into projects and swap them on a single WireMock instance to match the test scenario you need\n- **Instant sync to all instances** — Push stub changes to every WireMock instance at once, so all environments stay in sync without redeploying or sharing files\n\n## Features\n\n### Stub Management \u0026 Sync\n\n- **Visual stub editor**: Create and edit WireMock mappings with a form-based UI (method, URL matching, headers, query params, body patterns, response, delay, priority)\n- **Bulk sync**: Deploy all stubs to multiple WireMock instances with a single click (Sync resets first; Append preserves existing mappings)\n- **Import / Export**: Import stubs from JSON files or export for sharing\n- **Duplicate**: Clone existing stubs or entire projects\n\n### Scenario Management\n\n- **Visual scenario editor**: Build stateful stub chains with drag-and-drop step reordering\n- **Inline state editing**: Edit state names with automatic propagation to adjacent steps\n- **Flow validation**: Visual warnings for missing \"Started\" state, unreachable states, and duplicates\n- **Scenario reset**: Reset all scenarios on an instance back to \"Started\" state\n\n### Request Log \u0026 Recording\n\n- **Request log viewer**: Browse all HTTP requests with tabs for matched / unmatched requests\n- **Filtering**: Filter by URL pattern, HTTP method, and status code range\n- **Request details**: Inspect full request/response headers, body, and timing\n- **Stub generation**: Convert a logged request into a new stub\n- **Recording**: Start/stop proxy recording on individual or all instances at once\n\n### Registered Stubs View\n\n- **Live inspection**: View stubs actually registered on each WireMock instance\n- **Hub tracking**: Distinguish Hub-created stubs from externally registered ones\n- **Direct management**: Delete individual or all mappings on an instance\n\n### Instance \u0026 Project Management\n\n- **Project-based organization**: Group stubs and instances by environment\n- **Health check**: Monitor connection status of each instance in real-time\n- **Stub testing**: Send test requests against stubs to verify behavior\n\n### Data Persistence \u0026 UI\n\n- **SQLite storage**: File-based persistence, no external database required — share or back up by copying the file\n- **Multilingual UI**: Switch between English and Japanese\n- **Dark / Light / System theme**: Choose your preferred appearance\n- **Responsive design**: Works on desktop and mobile\n\n## Architecture\n\n```\n┌─────────────────────────────────────────────────────────────────┐\n│                        WireMock Hub                             │\n│  ┌──────────────┐    ┌──────────────┐    ┌──────────────┐       │\n│  │   Frontend   │ -\u003e │   Backend    │ -\u003e │    SQLite    │       │\n│  │   (Vue 3)    │    │  (Fastify)   │    │ (Persistence)│       │\n│  └──────────────┘    └──────────────┘    └──────────────┘       │\n└─────────────────────────────────────────────────────────────────┘\n                              │\n                              │ Sync\n                              ▼\n         ┌────────────────────┼────────────────────┐\n         │                    │                    │\n         ▼                    ▼                    ▼\n   ┌──────────┐         ┌──────────┐         ┌──────────┐\n   │ WireMock │         │ WireMock │         │ WireMock │\n   │ Instance │         │ Instance │         │ Instance │\n   │    #1    │         │    #2    │         │    #3    │\n   └──────────┘         └──────────┘         └──────────┘\n```\n\n## Tech Stack\n\n| Layer    | Technology                        |\n| -------- | --------------------------------- |\n| Frontend | Vue 3 + TypeScript + Element Plus |\n| Backend  | Node.js + Fastify + Prisma        |\n| Database | SQLite                            |\n| Build    | Vite + pnpm workspace             |\n\n## Quick Start\n\n### WireMock Hub + WireMock bundled image (Recommended)\n\n```bash\n# WireMock Hub + WireMock bundled image\ndocker run -d -p 3000:3000 ghcr.io/ykagano/wiremock-hub:latest\nopen http://localhost:3000/hub/\n\n# WireMock instance URL (register after creating a project)\nhttp://localhost:3000\n```\n\n\u003e See [All-in-One README](./allinone/README.md) for detailed configuration and ECS deployment.\n\n### WireMock Hub standalone image (connect to existing WireMock)\n\n```bash\ndocker run -d -p 3000:3000 ghcr.io/ykagano/wiremock-hub-standalone:latest\nopen http://localhost:3000\n```\n\nThen register your existing WireMock instances via the UI.\n\n### Docker Compose Examples\n\n```bash\n# All-in-One version (Hub + WireMock bundled)\ncd allinone \u0026\u0026 docker compose up -d\n\n# Hub only\ndocker compose up -d\n\n# Hub + demo WireMock instances (for testing)\ndocker compose -f docker-compose.yml -f docker-compose.demo.yml up -d\n```\n\n## Local Development\n\n### Prerequisites\n\n- Node.js 20.19+ or 22.12+\n- pnpm\n\n### Installation\n\n```bash\n# Install dependencies\npnpm install\n\n# Generate Prisma client and create database\npnpm run db:generate\n\n# Run database migration\ncd packages/backend \u0026\u0026 pnpm exec prisma migrate dev\n\n# Start development server\npnpm run dev\n```\n\n### Environment Variables\n\n```bash\n# packages/backend/.env\nDATABASE_URL=\"file:../../data/wiremock-hub.db\"\n```\n\n## Usage\n\n### 1. Create a Project\n\nA project groups stubs and WireMock instances for a given environment (dev/staging/etc.).\n\n### 2. Add Instances\n\nRegister each WireMock server's admin API URL. Use health check to verify connectivity.\n\n### 3. Create Stubs\n\nCreate stub mappings via the visual editor. Stubs are saved to SQLite.\nFor stateful APIs, use the Scenario editor to build state chains with drag-and-drop.\n\n### 4. Sync\n\n- **Sync All**: Resets all instances and deploys stubs — ensures full consistency\n- **Append All**: Adds stubs on top of existing mappings without resetting\n\n### 5. Monitor\n\n- **Requests**: View request logs, filter by URL/method/status, and import unmatched requests as new stubs\n- **Registered Stubs**: Inspect what's actually registered on each instance\n- **Recording**: Start proxy recording to capture live traffic as stubs\n\n## License\n\nApache 2.0\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fykagano%2Fwiremock-hub","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fykagano%2Fwiremock-hub","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fykagano%2Fwiremock-hub/lists"}