From 8841126c748e0688a2b233c4afb57afdf4fdee5f Mon Sep 17 00:00:00 2001 From: Ray Clanan <115944+rclanan@users.noreply.github.com> Date: Mon, 12 Oct 2026 12:03:25 -0400 Subject: [PATCH] feat(marketing): publish factual local-first comparison guides --- 404.html | 2 +- compare-beeceptor.html | 15 + compare-bruno.html | 15 + compare-microcks.html | 15 + compare-mockoon.html | 15 + compare-mockserver.html | 2 +- compare-postman-mock.html | 409 +----------------- compare-wiremock.html | 389 +---------------- comparisons.html | 222 ++++++++++ contact.html | 2 +- engineering-notes.html | 2 +- index.html | 16 +- note-announcing-v1.html | 2 +- ...drift-detection-and-contract-alerting.html | 2 +- note-client-generation-tradeoffs.html | 2 +- note-cloud-launch.html | 2 +- note-conformance-maturity.html | 2 +- note-conformance-testing.html | 2 +- note-cost-cap-design.html | 2 +- note-fault-injection-patterns.html | 2 +- note-grpc-dynamic-routing-release.html | 2 +- note-grpc-mocking-in-ci.html | 2 +- note-migration-from-static-fixtures.html | 2 +- note-mocking-kafka-without-broker.html | 2 +- ...rget-conformance-and-real-world-specs.html | 2 +- note-our-saas-infrastructure.html | 2 +- note-release-cadence-and-risk.html | 2 +- note-reliability-update-march-2026.html | 2 +- ...ability-updates-conformance-and-admin.html | 2 +- note-scenario-switching.html | 2 +- note-security-guardrails-v0-2x.html | 2 +- note-spec-driven-openapi-conformance.html | 2 +- note-testing-failure-paths.html | 2 +- note-v0-1-3-protocol-expansion.html | 2 +- note-v0-2-0-client-generation.html | 2 +- note-v0-2-3-bug-fixes.html | 2 +- note-v0-2-4-client-fixes.html | 2 +- note-v0-2-5-enterprise-security.html | 2 +- note-v0-2-6-security-infrastructure.html | 2 +- note-v0-2-7-api-sync-tcp.html | 2 +- note-v0-3-227-release.html | 2 +- note-v0-3-migration-playbook.html | 2 +- note-vs-postman-mock.html | 2 +- note-wafbench-security-hardening.html | 2 +- note-wafbench-sqli-detection.html | 2 +- note-wasm-plugins.html | 2 +- note-when-wiremock-isnt-enough.html | 2 +- note-why-multi-protocol.html | 2 +- pricing.html | 2 +- privacy.html | 2 +- public/sitemap.xml | 9 +- public/styles.css | 2 +- scripts/build-pages.js | 20 +- scripts/check-links.mjs | 13 +- src/pages/compare-beeceptor.html | 31 ++ src/pages/compare-bruno.html | 31 ++ src/pages/compare-microcks.html | 31 ++ src/pages/compare-mockoon.html | 31 ++ src/pages/compare-postman-mock.html | 232 ++-------- src/pages/compare-wiremock.html | 212 ++------- src/pages/comparisons.html | 18 + src/pages/index.html | 14 +- tailwind.config.js | 2 +- trust.html | 2 +- vs/beeceptor.html | 235 ++++++++++ vs/bruno.html | 235 ++++++++++ vs/microcks.html | 235 ++++++++++ vs/mockoon.html | 235 ++++++++++ vs/postman-mock.html | 235 ++++++++++ vs/postman.html | 15 + vs/wiremock.html | 235 ++++++++++ 71 files changed, 2030 insertions(+), 1223 deletions(-) create mode 100644 compare-beeceptor.html create mode 100644 compare-bruno.html create mode 100644 compare-microcks.html create mode 100644 compare-mockoon.html create mode 100644 comparisons.html create mode 100644 src/pages/compare-beeceptor.html create mode 100644 src/pages/compare-bruno.html create mode 100644 src/pages/compare-microcks.html create mode 100644 src/pages/compare-mockoon.html create mode 100644 src/pages/comparisons.html create mode 100644 vs/beeceptor.html create mode 100644 vs/bruno.html create mode 100644 vs/microcks.html create mode 100644 vs/mockoon.html create mode 100644 vs/postman-mock.html create mode 100644 vs/postman.html create mode 100644 vs/wiremock.html diff --git a/404.html b/404.html index 1803f86..052fe63 100644 --- a/404.html +++ b/404.html @@ -193,7 +193,7 @@

Docs Notes Pricing - Compare: WireMock + Compare tools Compare: MockServer GitHub LinkedIn diff --git a/compare-beeceptor.html b/compare-beeceptor.html new file mode 100644 index 0000000..9b65d36 --- /dev/null +++ b/compare-beeceptor.html @@ -0,0 +1,15 @@ + + + + + + Redirecting to MockForge comparison | MockForge + + + + + + +

This page has moved to MockForge comparison.

+ + diff --git a/compare-bruno.html b/compare-bruno.html new file mode 100644 index 0000000..83d9a29 --- /dev/null +++ b/compare-bruno.html @@ -0,0 +1,15 @@ + + + + + + Redirecting to MockForge comparison | MockForge + + + + + + +

This page has moved to MockForge comparison.

+ + diff --git a/compare-microcks.html b/compare-microcks.html new file mode 100644 index 0000000..0eb66a5 --- /dev/null +++ b/compare-microcks.html @@ -0,0 +1,15 @@ + + + + + + Redirecting to MockForge comparison | MockForge + + + + + + +

This page has moved to MockForge comparison.

+ + diff --git a/compare-mockoon.html b/compare-mockoon.html new file mode 100644 index 0000000..3074ba7 --- /dev/null +++ b/compare-mockoon.html @@ -0,0 +1,15 @@ + + + + + + Redirecting to MockForge comparison | MockForge + + + + + + +

This page has moved to MockForge comparison.

+ + diff --git a/compare-mockserver.html b/compare-mockserver.html index 4731925..71c00d9 100644 --- a/compare-mockserver.html +++ b/compare-mockserver.html @@ -318,7 +318,7 @@

Ne Docs Notes Pricing - Compare: WireMock + Compare tools Compare: MockServer GitHub LinkedIn diff --git a/compare-postman-mock.html b/compare-postman-mock.html index b82e04a..b14d462 100644 --- a/compare-postman-mock.html +++ b/compare-postman-mock.html @@ -1,408 +1,15 @@ - + - MockForge vs Postman Mock Server - - - - - - - - - - - - - - - - - - - - - - - - - - + Redirecting to MockForge comparison | MockForge + + + + - -
- - -
- - -
-
-
-
-
-

Comparison guide

-

- MockForge vs Postman Mock Server -

-

- Postman's mock server returns saved examples from your collections, convenient if your team already lives in Postman. MockForge is built for multi-protocol simulation, realistic behavior, and a path that doesn't depend on one vendor's platform. -

-

Last updated May 12, 2026.

- -
-
-
-

Best fit by workflow

-
-
-
Choose MockForge when
-

- You need protocols beyond HTTP (gRPC, WebSocket, GraphQL, Kafka, MQTT), realistic behavior (latency, faults, data drift), or a self-hostable option that isn't tied to one vendor's collection format. -

-
-
-
Choose Postman Mock when
-

- Your team already authors API specs in Postman collections, you only need HTTP mocking, and per-seat pricing inside Postman suits your billing. -

-
-
-
-
-
-
-
- - -
-
-
-

Capability comparison

-

- Postman's mock server is built into Postman and reuses saved collection examples as responses. MockForge is a standalone platform built around realistic simulation across protocols. -

-

This is a maintained workflow comparison, not a certification of every vendor feature or roadmap detail.

-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
CapabilityMockForgePostman Mock Server
Protocol scopeHTTP, gRPC, WebSocket, GraphQL, Kafka, MQTT, AMQP, SMTP, FTP, TCPHTTP only
Source of truthOpenAPI specs, gRPC protos, GraphQL schemas, or hand-authored route rulesPostman Collections with saved response examples
Behavior realismBuilt-in latency injection, fault scenarios, data drift, partial-response and chunked-encoding simulationReturns the matching saved example; latency simulation is limited
Synthetic dataFaker-driven generation, schema-aware inference, optional RAG/AI for context-aware responsesWhatever example bodies you saved in the collection
DeploymentOSS self-host, Docker, Kubernetes, or managed cloud, your choiceHosted by Postman; cloud-only
LicensingMIT or Apache-2.0 OSS core, paid managed tierProprietary, included with Postman plans
Pricing modelFree OSS, plan-tiered cloud ($29 Pro / $99 Team for hosted mocks)Per-user Postman seat plus per-plan mock-call quotas
Integration storyStandalone, runs alongside any tooling, CI, or workflowTightly integrated with the Postman ecosystem (collections, environments, monitors)
-
- -
-
- -

Multi-protocol coverage

-

- If your services span gRPC, WebSockets, Kafka, or message brokers, Postman Mock won't help. MockForge simulates all of them from one interface. -

-
-
- -

Realistic, not static

-

- Postman returns the example you saved. MockForge injects latency, fault patterns, and data drift, the conditions your service faces in production. -

-
-
- -

No platform lock-in

-

- MockForge runs anywhere, from laptop to CI runner to Kubernetes to managed cloud, and stays useful even if your team's tooling changes. -

-
-
-
-
- - -
-
-

Outgrowing collection-based mocks?

-

- Postman Mock works when your test surface is small and HTTP-only. Teams shipping across multiple protocols, testing failure paths, or wanting OSS portability tend to land on MockForge. -

- -
-
- - - - + +

This page has moved to MockForge comparison.

diff --git a/compare-wiremock.html b/compare-wiremock.html index fa2d997..28f4def 100644 --- a/compare-wiremock.html +++ b/compare-wiremock.html @@ -1,388 +1,15 @@ - + - MockForge vs WireMock - - - - - - - - - - - - - - - - - - - - - - - - - - + Redirecting to MockForge comparison | MockForge + + + + - -
- - -
- - -
-
-
-
-
-

Comparison guide

-

- MockForge vs WireMock -

-

- WireMock is a mature HTTP mocking tool. MockForge targets teams that need broader protocol support, realism-focused simulation, and a path from open source into managed team workflows. -

-

Last updated March 8, 2026.

- -
-
-
-

Best fit by workflow

-
-
-
Choose MockForge when
-

- You need more than HTTP stubs, want realistic latency and failure behavior, or want service virtualization patterns that work across teams. -

-
-
-
Choose WireMock when
-

- Your main requirement is established HTTP mocking with a familiar ecosystem, and your test surface does not need multi-protocol simulation. -

-
-
-
-
-
-
-
- - -
-
-
-

Capability comparison

-

- The main difference is scope: WireMock centers on HTTP stubbing, while MockForge is built for realistic service simulation across a wider set of protocols and environments. -

-

This is a maintained workflow comparison, not a certification of every vendor feature or roadmap detail.

-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
CapabilityMockForgeWireMock
Primary protocol focusREST, gRPC, GraphQL, WebSocket, and SMTP workflowsHTTP and REST-centric mocking
Behavior realismLatency, faults, drift, and data variability built into simulation workflowsStub matching, templating, and rule-based behavior
Synthetic dataRealistic generation workflows aimed at test and staging environmentsTemplating and extension-based customization
Operational workflowOpen-source entry point with admin-oriented team and enterprise trajectoryMature standalone mocking ecosystem with strong HTTP test workflows
-
- -
-
- -

Broader coverage

-

- MockForge fits teams simulating systems that span REST plus newer service interfaces like gRPC, GraphQL, and WebSockets. -

-
-
- -

More realism

-

- The direction is realistic behavior, not just deterministic stubbing, which matters once teams test failure paths and degraded performance. -

-
-
- -

Cleaner handoff path

-

- Begin with OSS and move toward managed workflows without changing vendors once the testing surface expands. -

-
-
-
-
- - -
-
-

Need more than HTTP stubs?

-

- If your team tests service interactions across multiple protocols, synthetic data scenarios, or realistic latency and failure behavior, MockForge is the closer fit. -

- -
-
- - - - + +

This page has moved to MockForge comparison.

diff --git a/comparisons.html b/comparisons.html new file mode 100644 index 0000000..5df1259 --- /dev/null +++ b/comparisons.html @@ -0,0 +1,222 @@ + + + +Compare MockForge API development workflows + + + + + + + + + + + + +
+ + +
+
+

Choose a mock workflow

Start with how you build and run your tests. These guides describe the available workflows and link to each tool’s own documentation.

+ + + diff --git a/contact.html b/contact.html index 0470d49..cd9d567 100644 --- a/contact.html +++ b/contact.html @@ -236,7 +236,7 @@

Privacy and legal

Docs Notes Pricing - Compare: WireMock + Compare tools Compare: MockServer GitHub LinkedIn diff --git a/engineering-notes.html b/engineering-notes.html index 0bdb913..bc3c782 100644 --- a/engineering-notes.html +++ b/engineering-notes.html @@ -538,7 +538,7 @@

Migration Guide: Moving f Docs Notes Pricing - Compare: WireMock + Compare tools Compare: MockServer GitHub LinkedIn diff --git a/index.html b/index.html index cf53111..e99880a 100644 --- a/index.html +++ b/index.html @@ -186,7 +186,7 @@

- Start with open source in minutes. Scale to realistic data, latency, and admin-grade controls when your team needs them. + Run your first mock locally without a MockForge account. Keep OpenAPI specifications and YAML configuration in Git, then add realistic data, latency, and failure behavior as your tests grow.

@@ -232,6 +232,18 @@

+ + +
@@ -473,7 +485,7 @@

Re Docs Notes Pricing - Compare: WireMock + Compare tools Compare: MockServer GitHub LinkedIn diff --git a/note-announcing-v1.html b/note-announcing-v1.html index f31d16f..85225cb 100644 --- a/note-announcing-v1.html +++ b/note-announcing-v1.html @@ -189,7 +189,7 @@

Getting Docs Notes Pricing - Compare: WireMock + Compare tools Compare: MockServer GitHub LinkedIn diff --git a/note-api-drift-detection-and-contract-alerting.html b/note-api-drift-detection-and-contract-alerting.html index 03e6c75..ddaa3bb 100644 --- a/note-api-drift-detection-and-contract-alerting.html +++ b/note-api-drift-detection-and-contract-alerting.html @@ -171,7 +171,7 @@

Docs Notes Pricing - Compare: WireMock + Compare tools Compare: MockServer GitHub LinkedIn diff --git a/note-client-generation-tradeoffs.html b/note-client-generation-tradeoffs.html index 9de879c..1cf6482 100644 --- a/note-client-generation-tradeoffs.html +++ b/note-client-generation-tradeoffs.html @@ -175,7 +175,7 @@

Docs Notes Pricing - Compare: WireMock + Compare tools Compare: MockServer GitHub LinkedIn diff --git a/note-cloud-launch.html b/note-cloud-launch.html index 7552f77..7b23f8e 100644 --- a/note-cloud-launch.html +++ b/note-cloud-launch.html @@ -198,7 +198,7 @@

What's n Docs Notes Pricing - Compare: WireMock + Compare tools Compare: MockServer GitHub LinkedIn diff --git a/note-conformance-maturity.html b/note-conformance-maturity.html index a6566b8..86e7470 100644 --- a/note-conformance-maturity.html +++ b/note-conformance-maturity.html @@ -211,7 +211,7 @@

Lessons Docs Notes Pricing - Compare: WireMock + Compare tools Compare: MockServer GitHub LinkedIn diff --git a/note-conformance-testing.html b/note-conformance-testing.html index ba7ba26..5aa8db6 100644 --- a/note-conformance-testing.html +++ b/note-conformance-testing.html @@ -182,7 +182,7 @@

Strategi Docs Notes Pricing - Compare: WireMock + Compare tools Compare: MockServer GitHub LinkedIn diff --git a/note-cost-cap-design.html b/note-cost-cap-design.html index bc3894a..f0eb2c9 100644 --- a/note-cost-cap-design.html +++ b/note-cost-cap-design.html @@ -215,7 +215,7 @@

What we' Docs Notes Pricing - Compare: WireMock + Compare tools Compare: MockServer GitHub LinkedIn diff --git a/note-fault-injection-patterns.html b/note-fault-injection-patterns.html index d5de461..9838b79 100644 --- a/note-fault-injection-patterns.html +++ b/note-fault-injection-patterns.html @@ -255,7 +255,7 @@

What thi Docs Notes Pricing - Compare: WireMock + Compare tools Compare: MockServer GitHub LinkedIn diff --git a/note-grpc-dynamic-routing-release.html b/note-grpc-dynamic-routing-release.html index df434b8..dde60d0 100644 --- a/note-grpc-dynamic-routing-release.html +++ b/note-grpc-dynamic-routing-release.html @@ -191,7 +191,7 @@

Schema-A Docs Notes Pricing - Compare: WireMock + Compare tools Compare: MockServer GitHub LinkedIn diff --git a/note-grpc-mocking-in-ci.html b/note-grpc-mocking-in-ci.html index ca5bdc7..02a3afb 100644 --- a/note-grpc-mocking-in-ci.html +++ b/note-grpc-mocking-in-ci.html @@ -241,7 +241,7 @@

When to Docs Notes Pricing - Compare: WireMock + Compare tools Compare: MockServer GitHub LinkedIn diff --git a/note-migration-from-static-fixtures.html b/note-migration-from-static-fixtures.html index b227967..6dfe4f0 100644 --- a/note-migration-from-static-fixtures.html +++ b/note-migration-from-static-fixtures.html @@ -176,7 +176,7 @@

Docs Notes Pricing - Compare: WireMock + Compare tools Compare: MockServer GitHub LinkedIn diff --git a/note-mocking-kafka-without-broker.html b/note-mocking-kafka-without-broker.html index 5a7ac95..03e6a4e 100644 --- a/note-mocking-kafka-without-broker.html +++ b/note-mocking-kafka-without-broker.html @@ -248,7 +248,7 @@

When thi Docs Notes Pricing - Compare: WireMock + Compare tools Compare: MockServer GitHub LinkedIn diff --git a/note-multi-target-conformance-and-real-world-specs.html b/note-multi-target-conformance-and-real-world-specs.html index 51a34c2..70016ef 100644 --- a/note-multi-target-conformance-and-real-world-specs.html +++ b/note-multi-target-conformance-and-real-world-specs.html @@ -202,7 +202,7 @@

What We Docs Notes Pricing - Compare: WireMock + Compare tools Compare: MockServer GitHub LinkedIn diff --git a/note-our-saas-infrastructure.html b/note-our-saas-infrastructure.html index 1f1c442..621a4f7 100644 --- a/note-our-saas-infrastructure.html +++ b/note-our-saas-infrastructure.html @@ -208,7 +208,7 @@

Would we Docs Notes Pricing - Compare: WireMock + Compare tools Compare: MockServer GitHub LinkedIn diff --git a/note-release-cadence-and-risk.html b/note-release-cadence-and-risk.html index da8c21e..331d86e 100644 --- a/note-release-cadence-and-risk.html +++ b/note-release-cadence-and-risk.html @@ -171,7 +171,7 @@

Docs Notes Pricing - Compare: WireMock + Compare tools Compare: MockServer GitHub LinkedIn diff --git a/note-reliability-update-march-2026.html b/note-reliability-update-march-2026.html index 16c10ec..8431345 100644 --- a/note-reliability-update-march-2026.html +++ b/note-reliability-update-march-2026.html @@ -182,7 +182,7 @@

Why This Docs Notes Pricing - Compare: WireMock + Compare tools Compare: MockServer GitHub LinkedIn diff --git a/note-reliability-updates-conformance-and-admin.html b/note-reliability-updates-conformance-and-admin.html index 564b070..d0002da 100644 --- a/note-reliability-updates-conformance-and-admin.html +++ b/note-reliability-updates-conformance-and-admin.html @@ -184,7 +184,7 @@

Why this Docs Notes Pricing - Compare: WireMock + Compare tools Compare: MockServer GitHub LinkedIn diff --git a/note-scenario-switching.html b/note-scenario-switching.html index 3ac21e7..e2c20bc 100644 --- a/note-scenario-switching.html +++ b/note-scenario-switching.html @@ -181,7 +181,7 @@

ResultDocs Notes Pricing - Compare: WireMock + Compare tools Compare: MockServer GitHub LinkedIn diff --git a/note-security-guardrails-v0-2x.html b/note-security-guardrails-v0-2x.html index a4af04a..5251cc3 100644 --- a/note-security-guardrails-v0-2x.html +++ b/note-security-guardrails-v0-2x.html @@ -182,7 +182,7 @@

Migratio Docs Notes Pricing - Compare: WireMock + Compare tools Compare: MockServer GitHub LinkedIn diff --git a/note-spec-driven-openapi-conformance.html b/note-spec-driven-openapi-conformance.html index 940c5e6..e96b4f4 100644 --- a/note-spec-driven-openapi-conformance.html +++ b/note-spec-driven-openapi-conformance.html @@ -183,7 +183,7 @@

Why this Docs Notes Pricing - Compare: WireMock + Compare tools Compare: MockServer GitHub LinkedIn diff --git a/note-testing-failure-paths.html b/note-testing-failure-paths.html index 3f76576..373498e 100644 --- a/note-testing-failure-paths.html +++ b/note-testing-failure-paths.html @@ -175,7 +175,7 @@

Docs Notes Pricing - Compare: WireMock + Compare tools Compare: MockServer GitHub LinkedIn diff --git a/note-v0-1-3-protocol-expansion.html b/note-v0-1-3-protocol-expansion.html index d23887b..ae0d9cf 100644 --- a/note-v0-1-3-protocol-expansion.html +++ b/note-v0-1-3-protocol-expansion.html @@ -188,7 +188,7 @@

Testing Docs Notes Pricing - Compare: WireMock + Compare tools Compare: MockServer GitHub LinkedIn diff --git a/note-v0-2-0-client-generation.html b/note-v0-2-0-client-generation.html index 54f024b..700802e 100644 --- a/note-v0-2-0-client-generation.html +++ b/note-v0-2-0-client-generation.html @@ -185,7 +185,7 @@

CLI Enha Docs Notes Pricing - Compare: WireMock + Compare tools Compare: MockServer GitHub LinkedIn diff --git a/note-v0-2-3-bug-fixes.html b/note-v0-2-3-bug-fixes.html index aff8b7d..c226b55 100644 --- a/note-v0-2-3-bug-fixes.html +++ b/note-v0-2-3-bug-fixes.html @@ -182,7 +182,7 @@

Test Cov Docs Notes Pricing - Compare: WireMock + Compare tools Compare: MockServer GitHub LinkedIn diff --git a/note-v0-2-4-client-fixes.html b/note-v0-2-4-client-fixes.html index 589fec1..da81708 100644 --- a/note-v0-2-4-client-fixes.html +++ b/note-v0-2-4-client-fixes.html @@ -182,7 +182,7 @@

Test Cov Docs Notes Pricing - Compare: WireMock + Compare tools Compare: MockServer GitHub LinkedIn diff --git a/note-v0-2-5-enterprise-security.html b/note-v0-2-5-enterprise-security.html index e2a0068..cc16938 100644 --- a/note-v0-2-5-enterprise-security.html +++ b/note-v0-2-5-enterprise-security.html @@ -188,7 +188,7 @@

Addition Docs Notes Pricing - Compare: WireMock + Compare tools Compare: MockServer GitHub LinkedIn diff --git a/note-v0-2-6-security-infrastructure.html b/note-v0-2-6-security-infrastructure.html index 330870e..960fbfa 100644 --- a/note-v0-2-6-security-infrastructure.html +++ b/note-v0-2-6-security-infrastructure.html @@ -182,7 +182,7 @@

Infrastr Docs Notes Pricing - Compare: WireMock + Compare tools Compare: MockServer GitHub LinkedIn diff --git a/note-v0-2-7-api-sync-tcp.html b/note-v0-2-7-api-sync-tcp.html index d0a4d8c..17d6582 100644 --- a/note-v0-2-7-api-sync-tcp.html +++ b/note-v0-2-7-api-sync-tcp.html @@ -185,7 +185,7 @@

Enhanced Docs Notes Pricing - Compare: WireMock + Compare tools Compare: MockServer GitHub LinkedIn diff --git a/note-v0-3-227-release.html b/note-v0-3-227-release.html index 7964670..51f6581 100644 --- a/note-v0-3-227-release.html +++ b/note-v0-3-227-release.html @@ -191,7 +191,7 @@

Security Docs Notes Pricing - Compare: WireMock + Compare tools Compare: MockServer GitHub LinkedIn diff --git a/note-v0-3-migration-playbook.html b/note-v0-3-migration-playbook.html index 5c85962..e87cfcd 100644 --- a/note-v0-3-migration-playbook.html +++ b/note-v0-3-migration-playbook.html @@ -171,7 +171,7 @@

Docs Notes Pricing - Compare: WireMock + Compare tools Compare: MockServer GitHub LinkedIn diff --git a/note-vs-postman-mock.html b/note-vs-postman-mock.html index 8355e3f..92e7d2c 100644 --- a/note-vs-postman-mock.html +++ b/note-vs-postman-mock.html @@ -202,7 +202,7 @@

The hone Docs Notes Pricing - Compare: WireMock + Compare tools Compare: MockServer GitHub LinkedIn diff --git a/note-wafbench-security-hardening.html b/note-wafbench-security-hardening.html index a92fbc8..e46d8f1 100644 --- a/note-wafbench-security-hardening.html +++ b/note-wafbench-security-hardening.html @@ -182,7 +182,7 @@

Practica Docs Notes Pricing - Compare: WireMock + Compare tools Compare: MockServer GitHub LinkedIn diff --git a/note-wafbench-sqli-detection.html b/note-wafbench-sqli-detection.html index a834647..6da0c95 100644 --- a/note-wafbench-sqli-detection.html +++ b/note-wafbench-sqli-detection.html @@ -184,7 +184,7 @@

Why this Docs Notes Pricing - Compare: WireMock + Compare tools Compare: MockServer GitHub LinkedIn diff --git a/note-wasm-plugins.html b/note-wasm-plugins.html index 739680d..0ca1b5c 100644 --- a/note-wasm-plugins.html +++ b/note-wasm-plugins.html @@ -232,7 +232,7 @@

Growing Docs Notes Pricing - Compare: WireMock + Compare tools Compare: MockServer GitHub LinkedIn diff --git a/note-when-wiremock-isnt-enough.html b/note-when-wiremock-isnt-enough.html index c7cfe94..4f035cc 100644 --- a/note-when-wiremock-isnt-enough.html +++ b/note-when-wiremock-isnt-enough.html @@ -202,7 +202,7 @@

How to k Docs Notes Pricing - Compare: WireMock + Compare tools Compare: MockServer GitHub LinkedIn diff --git a/note-why-multi-protocol.html b/note-why-multi-protocol.html index 662b5bc..a6c1e55 100644 --- a/note-why-multi-protocol.html +++ b/note-why-multi-protocol.html @@ -197,7 +197,7 @@

What thi Docs Notes Pricing - Compare: WireMock + Compare tools Compare: MockServer GitHub LinkedIn diff --git a/pricing.html b/pricing.html index 5f1a94b..284968a 100644 --- a/pricing.html +++ b/pricing.html @@ -392,7 +392,7 @@

Docs Notes Pricing - Compare: WireMock + Compare tools Compare: MockServer GitHub LinkedIn diff --git a/privacy.html b/privacy.html index 2f686e4..f26d499 100644 --- a/privacy.html +++ b/privacy.html @@ -232,7 +232,7 @@

Questions

Docs Notes Pricing - Compare: WireMock + Compare tools Compare: MockServer GitHub LinkedIn diff --git a/public/sitemap.xml b/public/sitemap.xml index 6f68bbd..e167b01 100644 --- a/public/sitemap.xml +++ b/public/sitemap.xml @@ -2,8 +2,7 @@ https://mockforge.dev/ https://mockforge.dev/compare-mockserver.html - https://mockforge.dev/compare-postman-mock.html - https://mockforge.dev/compare-wiremock.html + https://mockforge.dev/comparisons.html https://mockforge.dev/engineering-notes.html https://mockforge.dev/note-announcing-v1.html https://mockforge.dev/note-api-drift-detection-and-contract-alerting.html @@ -43,4 +42,10 @@ https://mockforge.dev/note-why-multi-protocol.html https://mockforge.dev/pricing.html https://mockforge.dev/trust.html + https://mockforge.dev/vs/beeceptor.html + https://mockforge.dev/vs/bruno.html + https://mockforge.dev/vs/microcks.html + https://mockforge.dev/vs/mockoon.html + https://mockforge.dev/vs/postman-mock.html + https://mockforge.dev/vs/wiremock.html diff --git a/public/styles.css b/public/styles.css index ac60433..857600a 100644 --- a/public/styles.css +++ b/public/styles.css @@ -1 +1 @@ -*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }/*! tailwindcss v3.4.17 | MIT License | https://tailwindcss.com*/*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Geist,Inter,system-ui,Segoe UI,Roboto,Helvetica,Arial,sans-serif;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:JetBrains Mono,ui-monospace,SFMono-Regular,Menlo,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.pointer-events-none{pointer-events:none}.visible{visibility:visible}.invisible{visibility:hidden}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:0}.-bottom-5{bottom:-1.25rem}.-right-24{right:-6rem}.-top-3{top:-.75rem}.-top-32{top:-8rem}.left-1\/2{left:50%}.left-5{left:1.25rem}.top-0{top:0}.z-40{z-index:40}.mx-auto{margin-left:auto;margin-right:auto}.mb-10{margin-bottom:2.5rem}.mb-2{margin-bottom:.5rem}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-1\.5{margin-top:.375rem}.mt-10{margin-top:2.5rem}.mt-12{margin-top:3rem}.mt-14{margin-top:3.5rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-5{margin-top:1.25rem}.mt-6{margin-top:1.5rem}.mt-7{margin-top:1.75rem}.mt-8{margin-top:2rem}.block{display:block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.hidden{display:none}.h-16{height:4rem}.h-3{height:.75rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-\[28rem\]{height:28rem}.h-auto{height:auto}.h-full{height:100%}.min-h-\[200px\]{min-height:200px}.w-3{width:.75rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-8{width:2rem}.w-9{width:2.25rem}.w-\[28rem\]{width:28rem}.w-full{width:100%}.min-w-0{min-width:0}.max-w-2xl{max-width:42rem}.max-w-3xl{max-width:48rem}.max-w-5xl{max-width:64rem}.max-w-7xl{max-width:80rem}.max-w-md{max-width:28rem}.max-w-xl{max-width:36rem}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.flex-grow,.grow{flex-grow:1}.-translate-x-1\/2{--tw-translate-x:-50%}.-translate-x-1\/2,.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.list-inside{list-style-position:inside}.list-decimal{list-style-type:decimal}.list-disc{list-style-type:disc}.auto-rows-fr{grid-auto-rows:minmax(0,1fr)}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-center{align-items:center}.items-baseline{align-items:baseline}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-10{gap:2.5rem}.gap-12{gap:3rem}.gap-2{gap:.5rem}.gap-2\.5{gap:.625rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-5{gap:1.25rem}.gap-6{gap:1.5rem}.gap-8{gap:2rem}.gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.gap-x-6{-moz-column-gap:1.5rem;column-gap:1.5rem}.gap-x-8{-moz-column-gap:2rem;column-gap:2rem}.gap-y-2{row-gap:.5rem}.gap-y-5{row-gap:1.25rem}.gap-y-7{row-gap:1.75rem}.space-y-10>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(2.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2.5rem*var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem*var(--tw-space-y-reverse))}.space-y-2\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.625rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.625rem*var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.75rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem*var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem*var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem*var(--tw-space-y-reverse))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0;border-top-width:calc(1px*(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px*var(--tw-divide-y-reverse))}.divide-black\/5>:not([hidden])~:not([hidden]){border-color:rgba(0,0,0,.05)}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.scroll-smooth{scroll-behavior:smooth}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.break-words{overflow-wrap:break-word}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:1rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-xl{border-radius:.75rem}.border{border-width:1px}.border-y{border-top-width:1px}.border-b,.border-y{border-bottom-width:1px}.border-t{border-top-width:1px}.border-dashed{border-style:dashed}.border-black{--tw-border-opacity:1;border-color:rgb(0 0 0/var(--tw-border-opacity,1))}.border-black\/10{border-color:rgba(0,0,0,.1)}.border-black\/5{border-color:rgba(0,0,0,.05)}.border-brand-orange\/30{border-color:rgba(211,84,0,.3)}.border-slate-300{--tw-border-opacity:1;border-color:rgb(203 213 225/var(--tw-border-opacity,1))}.border-white\/15{border-color:hsla(0,0%,100%,.15)}.bg-amber-400\/80{background-color:rgba(251,191,36,.8)}.bg-black{--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity,1))}.bg-black\/5{background-color:rgba(0,0,0,.05)}.bg-brand-dark{--tw-bg-opacity:1;background-color:rgb(44 62 80/var(--tw-bg-opacity,1))}.bg-brand-orange{--tw-bg-opacity:1;background-color:rgb(211 84 0/var(--tw-bg-opacity,1))}.bg-brand-orange\/10{background-color:rgba(211,84,0,.1)}.bg-emerald-400\/80{background-color:rgba(52,211,153,.8)}.bg-orange-50{--tw-bg-opacity:1;background-color:rgb(255 247 237/var(--tw-bg-opacity,1))}.bg-red-400\/80{background-color:hsla(0,91%,71%,.8)}.bg-slate-100{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity,1))}.bg-slate-800{--tw-bg-opacity:1;background-color:rgb(30 41 59/var(--tw-bg-opacity,1))}.bg-slate-900{--tw-bg-opacity:1;background-color:rgb(15 23 42/var(--tw-bg-opacity,1))}.bg-slate-950{--tw-bg-opacity:1;background-color:rgb(2 6 23/var(--tw-bg-opacity,1))}.bg-stone-100{--tw-bg-opacity:1;background-color:rgb(245 245 244/var(--tw-bg-opacity,1))}.bg-surface-subtle{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.bg-white\/10{background-color:hsla(0,0%,100%,.1)}.bg-white\/90{background-color:hsla(0,0%,100%,.9)}.bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}.from-brand-dark{--tw-gradient-from:#2c3e50 var(--tw-gradient-from-position);--tw-gradient-to:rgba(44,62,80,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-slate-950{--tw-gradient-from:#020617 var(--tw-gradient-from-position);--tw-gradient-to:rgba(2,6,23,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.via-slate-900{--tw-gradient-to:rgba(15,23,42,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),#0f172a var(--tw-gradient-via-position),var(--tw-gradient-to)}.to-slate-800{--tw-gradient-to:#1e293b var(--tw-gradient-to-position)}.object-cover{-o-object-fit:cover;object-fit:cover}.object-left-top{-o-object-position:left top;object-position:left top}.p-0{padding:0}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-7{padding:1.75rem}.p-8{padding:2rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-8{padding-left:2rem;padding-right:2rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-10{padding-top:2.5rem;padding-bottom:2.5rem}.py-12{padding-top:3rem;padding-bottom:3rem}.py-16{padding-top:4rem;padding-bottom:4rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-20{padding-top:5rem;padding-bottom:5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-5{padding-top:1.25rem;padding-bottom:1.25rem}.py-8{padding-top:2rem;padding-bottom:2rem}.pb-20{padding-bottom:5rem}.pl-6{padding-left:1.5rem}.pr-4{padding-right:1rem}.text-left{text-align:left}.text-center{text-align:center}.font-mono{font-family:JetBrains Mono,ui-monospace,SFMono-Regular,Menlo,monospace}.font-sans{font-family:Geist,Inter,system-ui,Segoe UI,Roboto,Helvetica,Arial,sans-serif}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-medium{font-weight:500}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.leading-5{line-height:1.25rem}.leading-6{line-height:1.5rem}.leading-7{line-height:1.75rem}.leading-8{line-height:2rem}.leading-\[1\.05\]{line-height:1.05}.leading-\[1\.1\]{line-height:1.1}.leading-relaxed{line-height:1.625}.tracking-\[0\.18em\]{letter-spacing:.18em}.tracking-\[0\.24em\]{letter-spacing:.24em}.tracking-tight{letter-spacing:-.025em}.tracking-wide{letter-spacing:.025em}.text-brand-dark,.text-brand-ink{--tw-text-opacity:1;color:rgb(44 62 80/var(--tw-text-opacity,1))}.text-brand-orange{--tw-text-opacity:1;color:rgb(211 84 0/var(--tw-text-opacity,1))}.text-emerald-400{--tw-text-opacity:1;color:rgb(52 211 153/var(--tw-text-opacity,1))}.text-emerald-500{--tw-text-opacity:1;color:rgb(16 185 129/var(--tw-text-opacity,1))}.text-green-400{--tw-text-opacity:1;color:rgb(74 222 128/var(--tw-text-opacity,1))}.text-orange-200{--tw-text-opacity:1;color:rgb(254 215 170/var(--tw-text-opacity,1))}.text-orange-300{--tw-text-opacity:1;color:rgb(253 186 116/var(--tw-text-opacity,1))}.text-slate-100{--tw-text-opacity:1;color:rgb(241 245 249/var(--tw-text-opacity,1))}.text-slate-200{--tw-text-opacity:1;color:rgb(226 232 240/var(--tw-text-opacity,1))}.text-slate-300{--tw-text-opacity:1;color:rgb(203 213 225/var(--tw-text-opacity,1))}.text-slate-400{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity,1))}.text-slate-500{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity,1))}.text-slate-600{--tw-text-opacity:1;color:rgb(71 85 105/var(--tw-text-opacity,1))}.text-slate-700{--tw-text-opacity:1;color:rgb(51 65 85/var(--tw-text-opacity,1))}.text-text-primary{--tw-text-opacity:1;color:rgb(46 46 46/var(--tw-text-opacity,1))}.text-text-secondary{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.underline{text-decoration-line:underline}.underline-offset-4{text-underline-offset:4px}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.shadow-note{--tw-shadow:0 14px 40px rgba(15,23,42,.08);--tw-shadow-colored:0 14px 40px var(--tw-shadow-color)}.shadow-note,.shadow-soft{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-soft{--tw-shadow:0 2px 10px rgba(0,0,0,.06);--tw-shadow-colored:0 2px 10px var(--tw-shadow-color)}.ring-1{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring-1,.ring-2{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-2{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring-black{--tw-ring-opacity:1;--tw-ring-color:rgb(0 0 0/var(--tw-ring-opacity,1))}.ring-black\/10{--tw-ring-color:rgba(0,0,0,.1)}.ring-black\/5{--tw-ring-color:rgba(0,0,0,.05)}.ring-brand-orange{--tw-ring-opacity:1;--tw-ring-color:rgb(211 84 0/var(--tw-ring-opacity,1))}.blur-3xl{--tw-blur:blur(64px);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-blur{--tw-backdrop-blur:blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.selection\:bg-brand-orange\/20 ::-moz-selection{background-color:rgba(211,84,0,.2)}.selection\:bg-brand-orange\/20 ::selection{background-color:rgba(211,84,0,.2)}.selection\:bg-brand-orange\/20::-moz-selection{background-color:rgba(211,84,0,.2)}.selection\:bg-brand-orange\/20::selection{background-color:rgba(211,84,0,.2)}.hover\:-translate-y-0\.5:hover{--tw-translate-y:-0.125rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:gap-3:hover{gap:.75rem}.hover\:bg-black\/5:hover{background-color:rgba(0,0,0,.05)}.hover\:bg-white\/10:hover{background-color:hsla(0,0%,100%,.1)}.hover\:px-2:hover{padding-left:.5rem;padding-right:.5rem}.hover\:text-text-primary:hover{--tw-text-opacity:1;color:rgb(46 46 46/var(--tw-text-opacity,1))}.hover\:text-white:hover{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-80:hover{opacity:.8}.hover\:opacity-90:hover{opacity:.9}.hover\:shadow-note:hover{--tw-shadow:0 14px 40px rgba(15,23,42,.08);--tw-shadow-colored:0 14px 40px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.focus-visible\:outline:focus-visible{outline-style:solid}.focus-visible\:outline-2:focus-visible{outline-width:2px}.focus-visible\:outline-brand-orange:focus-visible{outline-color:#d35400}.active\:scale-\[\.98\]:active{--tw-scale-x:.98;--tw-scale-y:.98;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group:hover .group-hover\:text-brand-orange{--tw-text-opacity:1;color:rgb(211 84 0/var(--tw-text-opacity,1))}.dark\:block:is(.dark *){display:block}.dark\:hidden:is(.dark *){display:none}.dark\:border-white\/10:is(.dark *){border-color:hsla(0,0%,100%,.1)}.dark\:border-white\/20:is(.dark *){border-color:hsla(0,0%,100%,.2)}.dark\:bg-brand-dark:is(.dark *){--tw-bg-opacity:1;background-color:rgb(44 62 80/var(--tw-bg-opacity,1))}.dark\:bg-gray-900:is(.dark *){--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity,1))}.dark\:bg-orange-500\/10:is(.dark *){background-color:rgba(249,115,22,.1)}.dark\:bg-slate-800:is(.dark *){--tw-bg-opacity:1;background-color:rgb(30 41 59/var(--tw-bg-opacity,1))}.dark\:bg-slate-900:is(.dark *){--tw-bg-opacity:1;background-color:rgb(15 23 42/var(--tw-bg-opacity,1))}.dark\:text-gray-100:is(.dark *){--tw-text-opacity:1;color:rgb(243 244 246/var(--tw-text-opacity,1))}.dark\:text-gray-300:is(.dark *){--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity,1))}.dark\:text-white:is(.dark *){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.dark\:hover\:bg-white\/10:hover:is(.dark *){background-color:hsla(0,0%,100%,.1)}.dark\:hover\:text-white:hover:is(.dark *){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}@media (min-width:640px){.sm\:col-span-2{grid-column:span 2/span 2}.sm\:flex{display:flex}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:p-10{padding:2.5rem}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:py-20{padding-top:5rem;padding-bottom:5rem}.sm\:py-28{padding-top:7rem;padding-bottom:7rem}.sm\:text-4xl{font-size:2.25rem;line-height:2.5rem}.sm\:text-5xl{font-size:3rem;line-height:1}}@media (min-width:768px){.md\:col-span-2{grid-column:span 2/span 2}.md\:col-span-3{grid-column:span 3/span 3}.md\:flex{display:flex}.md\:hidden{display:none}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:text-4xl{font-size:2.25rem;line-height:2.5rem}.md\:text-5xl{font-size:3rem;line-height:1}}@media (min-width:1024px){.lg\:col-span-5{grid-column:span 5/span 5}.lg\:col-span-7{grid-column:span 7/span 7}.lg\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.lg\:grid-cols-\[0\.6fr_1\.4fr\]{grid-template-columns:.6fr 1.4fr}.lg\:grid-cols-\[0\.8fr_1\.2fr\]{grid-template-columns:.8fr 1.2fr}.lg\:grid-cols-\[1\.05fr_0\.95fr\]{grid-template-columns:1.05fr .95fr}.lg\:gap-12{gap:3rem}.lg\:gap-16{gap:4rem}.lg\:gap-4{gap:1rem}.lg\:px-3{padding-left:.75rem;padding-right:.75rem}.lg\:px-8{padding-left:2rem;padding-right:2rem}.lg\:py-16{padding-top:4rem;padding-bottom:4rem}.lg\:py-2{padding-top:.5rem;padding-bottom:.5rem}.lg\:py-20{padding-top:5rem;padding-bottom:5rem}.lg\:py-24{padding-top:6rem;padding-bottom:6rem}.lg\:text-\[3\.1rem\]{font-size:3.1rem}.lg\:text-\[3\.25rem\]{font-size:3.25rem}.lg\:text-base{font-size:1rem;line-height:1.5rem}} \ No newline at end of file +*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }/*! tailwindcss v3.4.17 | MIT License | https://tailwindcss.com*/*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Geist,Inter,system-ui,Segoe UI,Roboto,Helvetica,Arial,sans-serif;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:JetBrains Mono,ui-monospace,SFMono-Regular,Menlo,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.pointer-events-none{pointer-events:none}.visible{visibility:visible}.invisible{visibility:hidden}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:0}.-bottom-5{bottom:-1.25rem}.-right-24{right:-6rem}.-top-3{top:-.75rem}.-top-32{top:-8rem}.left-1\/2{left:50%}.left-5{left:1.25rem}.top-0{top:0}.z-40{z-index:40}.mx-auto{margin-left:auto;margin-right:auto}.mb-10{margin-bottom:2.5rem}.mb-2{margin-bottom:.5rem}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-1\.5{margin-top:.375rem}.mt-10{margin-top:2.5rem}.mt-12{margin-top:3rem}.mt-14{margin-top:3.5rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-5{margin-top:1.25rem}.mt-6{margin-top:1.5rem}.mt-7{margin-top:1.75rem}.mt-8{margin-top:2rem}.block{display:block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.hidden{display:none}.h-16{height:4rem}.h-3{height:.75rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-\[28rem\]{height:28rem}.h-auto{height:auto}.h-full{height:100%}.min-h-\[200px\]{min-height:200px}.w-3{width:.75rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-8{width:2rem}.w-9{width:2.25rem}.w-\[28rem\]{width:28rem}.w-full{width:100%}.min-w-0{min-width:0}.max-w-2xl{max-width:42rem}.max-w-3xl{max-width:48rem}.max-w-5xl{max-width:64rem}.max-w-7xl{max-width:80rem}.max-w-md{max-width:28rem}.max-w-xl{max-width:36rem}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.flex-grow,.grow{flex-grow:1}.-translate-x-1\/2{--tw-translate-x:-50%}.-translate-x-1\/2,.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.list-inside{list-style-position:inside}.list-decimal{list-style-type:decimal}.list-disc{list-style-type:disc}.auto-rows-fr{grid-auto-rows:minmax(0,1fr)}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-center{align-items:center}.items-baseline{align-items:baseline}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-10{gap:2.5rem}.gap-12{gap:3rem}.gap-2{gap:.5rem}.gap-2\.5{gap:.625rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-5{gap:1.25rem}.gap-6{gap:1.5rem}.gap-8{gap:2rem}.gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.gap-x-6{-moz-column-gap:1.5rem;column-gap:1.5rem}.gap-x-8{-moz-column-gap:2rem;column-gap:2rem}.gap-y-2{row-gap:.5rem}.gap-y-5{row-gap:1.25rem}.gap-y-7{row-gap:1.75rem}.space-y-10>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(2.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2.5rem*var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem*var(--tw-space-y-reverse))}.space-y-2\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.625rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.625rem*var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.75rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem*var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem*var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem*var(--tw-space-y-reverse))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0;border-top-width:calc(1px*(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px*var(--tw-divide-y-reverse))}.divide-black\/5>:not([hidden])~:not([hidden]){border-color:rgba(0,0,0,.05)}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.scroll-smooth{scroll-behavior:smooth}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.break-words{overflow-wrap:break-word}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:1rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-xl{border-radius:.75rem}.border{border-width:1px}.border-y{border-top-width:1px}.border-b,.border-y{border-bottom-width:1px}.border-t{border-top-width:1px}.border-dashed{border-style:dashed}.border-black{--tw-border-opacity:1;border-color:rgb(0 0 0/var(--tw-border-opacity,1))}.border-black\/10{border-color:rgba(0,0,0,.1)}.border-black\/5{border-color:rgba(0,0,0,.05)}.border-brand-orange\/30{border-color:rgba(211,84,0,.3)}.border-slate-300{--tw-border-opacity:1;border-color:rgb(203 213 225/var(--tw-border-opacity,1))}.border-white\/15{border-color:hsla(0,0%,100%,.15)}.bg-amber-400\/80{background-color:rgba(251,191,36,.8)}.bg-black{--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity,1))}.bg-black\/5{background-color:rgba(0,0,0,.05)}.bg-brand-dark{--tw-bg-opacity:1;background-color:rgb(44 62 80/var(--tw-bg-opacity,1))}.bg-brand-orange{--tw-bg-opacity:1;background-color:rgb(211 84 0/var(--tw-bg-opacity,1))}.bg-brand-orange\/10{background-color:rgba(211,84,0,.1)}.bg-emerald-400\/80{background-color:rgba(52,211,153,.8)}.bg-orange-50{--tw-bg-opacity:1;background-color:rgb(255 247 237/var(--tw-bg-opacity,1))}.bg-red-400\/80{background-color:hsla(0,91%,71%,.8)}.bg-slate-100{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity,1))}.bg-slate-800{--tw-bg-opacity:1;background-color:rgb(30 41 59/var(--tw-bg-opacity,1))}.bg-slate-900{--tw-bg-opacity:1;background-color:rgb(15 23 42/var(--tw-bg-opacity,1))}.bg-slate-950{--tw-bg-opacity:1;background-color:rgb(2 6 23/var(--tw-bg-opacity,1))}.bg-stone-100{--tw-bg-opacity:1;background-color:rgb(245 245 244/var(--tw-bg-opacity,1))}.bg-surface-subtle{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.bg-white\/10{background-color:hsla(0,0%,100%,.1)}.bg-white\/90{background-color:hsla(0,0%,100%,.9)}.bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}.from-brand-dark{--tw-gradient-from:#2c3e50 var(--tw-gradient-from-position);--tw-gradient-to:rgba(44,62,80,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-slate-950{--tw-gradient-from:#020617 var(--tw-gradient-from-position);--tw-gradient-to:rgba(2,6,23,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.via-slate-900{--tw-gradient-to:rgba(15,23,42,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),#0f172a var(--tw-gradient-via-position),var(--tw-gradient-to)}.to-slate-800{--tw-gradient-to:#1e293b var(--tw-gradient-to-position)}.object-cover{-o-object-fit:cover;object-fit:cover}.object-left-top{-o-object-position:left top;object-position:left top}.p-0{padding:0}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-7{padding:1.75rem}.p-8{padding:2rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-8{padding-left:2rem;padding-right:2rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-10{padding-top:2.5rem;padding-bottom:2.5rem}.py-12{padding-top:3rem;padding-bottom:3rem}.py-16{padding-top:4rem;padding-bottom:4rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-20{padding-top:5rem;padding-bottom:5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-5{padding-top:1.25rem;padding-bottom:1.25rem}.py-8{padding-top:2rem;padding-bottom:2rem}.pb-20{padding-bottom:5rem}.pl-6{padding-left:1.5rem}.pr-4{padding-right:1rem}.text-left{text-align:left}.text-center{text-align:center}.font-mono{font-family:JetBrains Mono,ui-monospace,SFMono-Regular,Menlo,monospace}.font-sans{font-family:Geist,Inter,system-ui,Segoe UI,Roboto,Helvetica,Arial,sans-serif}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-medium{font-weight:500}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.leading-5{line-height:1.25rem}.leading-6{line-height:1.5rem}.leading-7{line-height:1.75rem}.leading-8{line-height:2rem}.leading-\[1\.05\]{line-height:1.05}.leading-\[1\.1\]{line-height:1.1}.leading-relaxed{line-height:1.625}.tracking-\[0\.18em\]{letter-spacing:.18em}.tracking-\[0\.24em\]{letter-spacing:.24em}.tracking-tight{letter-spacing:-.025em}.tracking-wide{letter-spacing:.025em}.text-brand-dark,.text-brand-ink{--tw-text-opacity:1;color:rgb(44 62 80/var(--tw-text-opacity,1))}.text-brand-orange{--tw-text-opacity:1;color:rgb(211 84 0/var(--tw-text-opacity,1))}.text-emerald-400{--tw-text-opacity:1;color:rgb(52 211 153/var(--tw-text-opacity,1))}.text-emerald-500{--tw-text-opacity:1;color:rgb(16 185 129/var(--tw-text-opacity,1))}.text-green-400{--tw-text-opacity:1;color:rgb(74 222 128/var(--tw-text-opacity,1))}.text-orange-200{--tw-text-opacity:1;color:rgb(254 215 170/var(--tw-text-opacity,1))}.text-orange-300{--tw-text-opacity:1;color:rgb(253 186 116/var(--tw-text-opacity,1))}.text-slate-100{--tw-text-opacity:1;color:rgb(241 245 249/var(--tw-text-opacity,1))}.text-slate-200{--tw-text-opacity:1;color:rgb(226 232 240/var(--tw-text-opacity,1))}.text-slate-300{--tw-text-opacity:1;color:rgb(203 213 225/var(--tw-text-opacity,1))}.text-slate-400{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity,1))}.text-slate-500{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity,1))}.text-slate-600{--tw-text-opacity:1;color:rgb(71 85 105/var(--tw-text-opacity,1))}.text-slate-700{--tw-text-opacity:1;color:rgb(51 65 85/var(--tw-text-opacity,1))}.text-text-primary{--tw-text-opacity:1;color:rgb(46 46 46/var(--tw-text-opacity,1))}.text-text-secondary{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.underline{text-decoration-line:underline}.underline-offset-4{text-underline-offset:4px}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.shadow-note{--tw-shadow:0 14px 40px rgba(15,23,42,.08);--tw-shadow-colored:0 14px 40px var(--tw-shadow-color)}.shadow-note,.shadow-soft{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-soft{--tw-shadow:0 2px 10px rgba(0,0,0,.06);--tw-shadow-colored:0 2px 10px var(--tw-shadow-color)}.ring-1{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring-1,.ring-2{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-2{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring-black{--tw-ring-opacity:1;--tw-ring-color:rgb(0 0 0/var(--tw-ring-opacity,1))}.ring-black\/10{--tw-ring-color:rgba(0,0,0,.1)}.ring-black\/5{--tw-ring-color:rgba(0,0,0,.05)}.ring-brand-orange{--tw-ring-opacity:1;--tw-ring-color:rgb(211 84 0/var(--tw-ring-opacity,1))}.blur-3xl{--tw-blur:blur(64px)}.blur-3xl,.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-blur{--tw-backdrop-blur:blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.selection\:bg-brand-orange\/20 ::-moz-selection{background-color:rgba(211,84,0,.2)}.selection\:bg-brand-orange\/20 ::selection{background-color:rgba(211,84,0,.2)}.selection\:bg-brand-orange\/20::-moz-selection{background-color:rgba(211,84,0,.2)}.selection\:bg-brand-orange\/20::selection{background-color:rgba(211,84,0,.2)}.hover\:-translate-y-0\.5:hover{--tw-translate-y:-0.125rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:gap-3:hover{gap:.75rem}.hover\:bg-black\/5:hover{background-color:rgba(0,0,0,.05)}.hover\:bg-white\/10:hover{background-color:hsla(0,0%,100%,.1)}.hover\:px-2:hover{padding-left:.5rem;padding-right:.5rem}.hover\:text-text-primary:hover{--tw-text-opacity:1;color:rgb(46 46 46/var(--tw-text-opacity,1))}.hover\:text-white:hover{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-80:hover{opacity:.8}.hover\:opacity-90:hover{opacity:.9}.hover\:shadow-note:hover{--tw-shadow:0 14px 40px rgba(15,23,42,.08);--tw-shadow-colored:0 14px 40px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.focus-visible\:outline:focus-visible{outline-style:solid}.focus-visible\:outline-2:focus-visible{outline-width:2px}.focus-visible\:outline-brand-orange:focus-visible{outline-color:#d35400}.active\:scale-\[\.98\]:active{--tw-scale-x:.98;--tw-scale-y:.98;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group:hover .group-hover\:text-brand-orange{--tw-text-opacity:1;color:rgb(211 84 0/var(--tw-text-opacity,1))}.dark\:block:is(.dark *){display:block}.dark\:hidden:is(.dark *){display:none}.dark\:border-white\/10:is(.dark *){border-color:hsla(0,0%,100%,.1)}.dark\:border-white\/20:is(.dark *){border-color:hsla(0,0%,100%,.2)}.dark\:bg-brand-dark:is(.dark *){--tw-bg-opacity:1;background-color:rgb(44 62 80/var(--tw-bg-opacity,1))}.dark\:bg-gray-900:is(.dark *){--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity,1))}.dark\:bg-orange-500\/10:is(.dark *){background-color:rgba(249,115,22,.1)}.dark\:bg-slate-800:is(.dark *){--tw-bg-opacity:1;background-color:rgb(30 41 59/var(--tw-bg-opacity,1))}.dark\:bg-slate-900:is(.dark *){--tw-bg-opacity:1;background-color:rgb(15 23 42/var(--tw-bg-opacity,1))}.dark\:text-gray-100:is(.dark *){--tw-text-opacity:1;color:rgb(243 244 246/var(--tw-text-opacity,1))}.dark\:text-gray-300:is(.dark *){--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity,1))}.dark\:text-white:is(.dark *){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.dark\:hover\:bg-white\/10:hover:is(.dark *){background-color:hsla(0,0%,100%,.1)}.dark\:hover\:text-white:hover:is(.dark *){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}@media (min-width:640px){.sm\:col-span-2{grid-column:span 2/span 2}.sm\:flex{display:flex}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:p-10{padding:2.5rem}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:py-20{padding-top:5rem;padding-bottom:5rem}.sm\:py-28{padding-top:7rem;padding-bottom:7rem}.sm\:text-4xl{font-size:2.25rem;line-height:2.5rem}.sm\:text-5xl{font-size:3rem;line-height:1}}@media (min-width:768px){.md\:col-span-2{grid-column:span 2/span 2}.md\:col-span-3{grid-column:span 3/span 3}.md\:flex{display:flex}.md\:hidden{display:none}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:text-4xl{font-size:2.25rem;line-height:2.5rem}.md\:text-5xl{font-size:3rem;line-height:1}}@media (min-width:1024px){.lg\:col-span-5{grid-column:span 5/span 5}.lg\:col-span-7{grid-column:span 7/span 7}.lg\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.lg\:grid-cols-\[0\.6fr_1\.4fr\]{grid-template-columns:.6fr 1.4fr}.lg\:grid-cols-\[0\.8fr_1\.2fr\]{grid-template-columns:.8fr 1.2fr}.lg\:grid-cols-\[1\.05fr_0\.95fr\]{grid-template-columns:1.05fr .95fr}.lg\:gap-12{gap:3rem}.lg\:gap-16{gap:4rem}.lg\:gap-4{gap:1rem}.lg\:px-3{padding-left:.75rem;padding-right:.75rem}.lg\:px-8{padding-left:2rem;padding-right:2rem}.lg\:py-16{padding-top:4rem;padding-bottom:4rem}.lg\:py-2{padding-top:.5rem;padding-bottom:.5rem}.lg\:py-20{padding-top:5rem;padding-bottom:5rem}.lg\:py-24{padding-top:6rem;padding-bottom:6rem}.lg\:text-\[3\.25rem\]{font-size:3.25rem}.lg\:text-base{font-size:1rem;line-height:1.5rem}} \ No newline at end of file diff --git a/scripts/build-pages.js b/scripts/build-pages.js index 71ed26d..ee8b6f4 100644 --- a/scripts/build-pages.js +++ b/scripts/build-pages.js @@ -182,7 +182,7 @@ function renderFooter() { Docs Notes Pricing - Compare: WireMock + Compare tools Compare: MockServer GitHub LinkedIn @@ -428,6 +428,7 @@ ${items} // so each alias becomes a tiny redirect page: meta refresh for no-JS clients, // location.replace for everyone else, and a canonical pointing at the target. const REDIRECTS = { + 'vs/postman.html': { to: '/vs/postman-mock.html', label: 'MockForge vs Postman' }, 'notes.html': { to: '/engineering-notes.html', label: 'Engineering Notes' }, 'blog.html': { to: '/engineering-notes.html', label: 'Engineering Notes' }, 'docs.html': { to: 'https://docs.mockforge.dev/', label: 'MockForge documentation' }, @@ -511,6 +512,15 @@ if (outputRoot !== projectRoot) { ensureDir(outputRoot); } +const COMPARISON_OUTPUTS = { + 'compare-wiremock.html': 'vs/wiremock.html', + 'compare-mockoon.html': 'vs/mockoon.html', + 'compare-microcks.html': 'vs/microcks.html', + 'compare-beeceptor.html': 'vs/beeceptor.html', + 'compare-bruno.html': 'vs/bruno.html', + 'compare-postman-mock.html': 'vs/postman-mock.html', +}; + const pageFiles = fs.readdirSync(sourceRoot).filter((name) => name.endsWith('.html')).sort(); // Parse engineering-notes index once for per-post metadata (slug → meta). @@ -573,6 +583,7 @@ const sitemapUrls = new Set(); const siteOrigin = 'https://mockforge.dev'; for (const file of pageFiles) { + const outputFile = COMPARISON_OUTPUTS[file] || file; const config = getPageConfig(file); let text = fs.readFileSync(path.join(sourceRoot, file), 'utf8'); @@ -610,7 +621,7 @@ for (const file of pageFiles) { } const canonical = canonicalTags.length ? canonicalTags[0][1] - : `${siteOrigin}/${file === 'index.html' ? '' : file}`; + : `${siteOrigin}/${outputFile === 'index.html' ? '' : outputFile}`; const url = new URL(canonical); if (url.origin !== siteOrigin || url.search || url.hash) { throw new Error(`Invalid canonical URL in ${file}`); @@ -622,7 +633,10 @@ for (const file of pageFiles) { if (!noindex) sitemapUrls.add(url.href); } - emit(file, text); + emit(outputFile, text); + if (outputFile !== file) { + emit(file, renderRedirectPage({ to: '/' + outputFile, label: 'MockForge comparison' })); + } } const sitemap = ` diff --git a/scripts/check-links.mjs b/scripts/check-links.mjs index 83a656f..811cedb 100644 --- a/scripts/check-links.mjs +++ b/scripts/check-links.mjs @@ -28,10 +28,15 @@ if (!fs.existsSync(path.join(siteRoot, 'index.html'))) { process.exit(2); } -const sources = [ - ...fs.readdirSync(siteRoot).filter((f) => f.endsWith('.html')), - 'llms.txt', -].filter((f) => fs.existsSync(path.join(siteRoot, f))); +function htmlSources(directory, prefix = '') { + return fs.readdirSync(directory, { withFileTypes: true }).flatMap(entry => { + const relative = path.join(prefix, entry.name); + if (entry.isDirectory()) return htmlSources(path.join(directory, entry.name), relative); + return entry.name.endsWith('.html') ? [relative] : []; + }); +} +const sources = [...htmlSources(siteRoot), 'llms.txt'] + .filter(file => fs.existsSync(path.join(siteRoot, file))); // Attribute-based references in HTML, plus bare URLs in text files. const HTML_REF = /<(?:a|link|script|img|source)\b[^>]*?\s(?:href|src)="([^"]+)"/gi; diff --git a/src/pages/compare-beeceptor.html b/src/pages/compare-beeceptor.html new file mode 100644 index 0000000..5ae66a3 --- /dev/null +++ b/src/pages/compare-beeceptor.html @@ -0,0 +1,31 @@ + + + +MockForge vs Beeceptor + + + + + + +{{SHARED_HEAD_BLOCK}} + +{{HEADER}} +
+All comparisons +

MockForge vs Beeceptor

+

A shared hosted HTTP endpoint, or a mock you operate locally?

+

Reviewed October 12, 2026. Compare the documented workflows below using your own contract and fixtures.

+

Where each tool fits

Beeceptor offers hosted mock endpoints with matching rules, forwarding to upstream services, and local tunnels. Its forwarding proxy can combine mocked responses with a real backend.

Choose Beeceptor when a readily shared hosted URL is the immediate need. Choose the open-source MockForge CLI when you want to operate the mock on your laptop or inside your own CI without a MockForge account.

Beeceptor sources: Mock endpoint setup. Forwarding proxy. Local tunneling.

+

What you can run with MockForge

+
+ + + + +
MockForge local workflow and supporting documentation
WorkflowAvailable pathProof and setup
Local serverOpen-source CLI or container; no MockForge account required.Quick start
Configuration in GitReview YAML configuration and OpenAPI files alongside your code.Configuration files
Failure behaviorConfigure latency and fault simulation for your test environment.Chaos configuration
CostsThe open-source local runtime is free. Hosted plans are a separate choice.Hosted pricing
+

Evaluate a migration

Record the endpoint rules and expected request/response pairs before migrating. Recreate equivalent behavior locally and use synthetic fixtures when production payloads contain sensitive data.

External AI providers and upstream services use the connections you configure. Keep credentials out of committed configuration and use synthetic data for shared fixtures.

Run a local mock
+
+{{FOOTER}} +{{SHELL_SCRIPT}} + diff --git a/src/pages/compare-bruno.html b/src/pages/compare-bruno.html new file mode 100644 index 0000000..8c180fd --- /dev/null +++ b/src/pages/compare-bruno.html @@ -0,0 +1,31 @@ + + + +MockForge vs Bruno + + + + + + +{{SHARED_HEAD_BLOCK}} + +{{HEADER}} +
+All comparisons +

MockForge vs Bruno

+

A Git-friendly API client with local mocks, or a dedicated mock runtime?

+

Reviewed October 12, 2026. Compare the documented workflows below using your own contract and fixtures.

+

Where each tool fits

Bruno is an offline-first API client with plain-text collections. Its local mock servers are currently marked Beta and can use saved responses or OpenAPI specifications. Matching rules and delays are supported; mock logs are held in memory.

Choose Bruno when sending requests and serving collection examples in the same desktop client is convenient. Choose MockForge when you want the mock runtime to run as a separate CLI process or container alongside any API client.

Bruno sources: Bruno getting started. Local mock servers. Collection formats.

+

What you can run with MockForge

+
+ + + + +
MockForge local workflow and supporting documentation
WorkflowAvailable pathProof and setup
Local serverOpen-source CLI or container; no MockForge account required.Quick start
Configuration in GitReview YAML configuration and OpenAPI files alongside your code.Configuration files
Failure behaviorConfigure latency and fault simulation for your test environment.Chaos configuration
CostsThe open-source local runtime is free. Hosted plans are a separate choice.Hosted pricing
+

Evaluate a migration

Keep Bruno collections for exercising requests. Use the same OpenAPI contract to evaluate MockForge as the server. A collection export does not automatically transfer saved-example selection or mock rules into MockForge configuration.

External AI providers and upstream services use the connections you configure. Keep credentials out of committed configuration and use synthetic data for shared fixtures.

Run a local mock
+
+{{FOOTER}} +{{SHELL_SCRIPT}} + diff --git a/src/pages/compare-microcks.html b/src/pages/compare-microcks.html new file mode 100644 index 0000000..3004dc7 --- /dev/null +++ b/src/pages/compare-microcks.html @@ -0,0 +1,31 @@ + + + +MockForge vs Microcks + + + + + + +{{SHARED_HEAD_BLOCK}} + +{{HEADER}} +
+All comparisons +

MockForge vs Microcks

+

A contract-testing platform, or a local simulation process?

+

Reviewed October 12, 2026. Compare the documented workflows below using your own contract and fixtures.

+

Where each tool fits

Microcks supports REST, SOAP, GraphQL, gRPC, and event-driven API artifacts. It offers protocol-specific contract testing, including OpenAPI, AsyncAPI, and protobuf strategies.

Choose Microcks when artifact management and provider or consumer conformance are central to your team workflow. Choose MockForge when you want a local CLI process driven by checked-in configuration and specifications.

Microcks sources: Microcks. Contract test strategies. Supported artifacts.

+

What you can run with MockForge

+
+ + + + +
MockForge local workflow and supporting documentation
WorkflowAvailable pathProof and setup
Local serverOpen-source CLI or container; no MockForge account required.Quick start
Configuration in GitReview YAML configuration and OpenAPI files alongside your code.Configuration files
Failure behaviorConfigure latency and fault simulation for your test environment.Chaos configuration
CostsThe open-source local runtime is free. Hosted plans are a separate choice.Hosted pricing
+

Evaluate a migration

Treat the OpenAPI document as a shared contract. Recreate example selection and test expectations explicitly; Microcks artifact and test-strategy configuration is not interchangeable with MockForge configuration.

External AI providers and upstream services use the connections you configure. Keep credentials out of committed configuration and use synthetic data for shared fixtures.

Run a local mock
+
+{{FOOTER}} +{{SHELL_SCRIPT}} + diff --git a/src/pages/compare-mockoon.html b/src/pages/compare-mockoon.html new file mode 100644 index 0000000..4e5999e --- /dev/null +++ b/src/pages/compare-mockoon.html @@ -0,0 +1,31 @@ + + + +MockForge vs Mockoon + + + + + + +{{SHARED_HEAD_BLOCK}} + +{{HEADER}} +
+All comparisons +

MockForge vs Mockoon

+

A desktop environment editor, or a specification-driven CLI?

+

Reviewed October 12, 2026. Compare the documented workflows below using your own contract and fixtures.

+

Where each tool fits

Mockoon provides a desktop editor and a CLI for running environments locally or on your own infrastructure. Its JSON data files can be versioned in Git. Rules, templates, proxying, and OpenAPI import are supported.

Choose Mockoon when editing HTTP mock routes visually is the main workflow. Choose MockForge when you want the server configuration and OpenAPI specification to drive a standalone simulation process.

Mockoon sources: Mockoon CLI. Environment data files. OpenAPI compatibility.

+

What you can run with MockForge

+
+ + + + +
MockForge local workflow and supporting documentation
WorkflowAvailable pathProof and setup
Local serverOpen-source CLI or container; no MockForge account required.Quick start
Configuration in GitReview YAML configuration and OpenAPI files alongside your code.Configuration files
Failure behaviorConfigure latency and fault simulation for your test environment.Chaos configuration
CostsThe open-source local runtime is free. Hosted plans are a separate choice.Hosted pricing
+

Evaluate a migration

Keep Mockoon environment files for faithful reuse: OpenAPI export can lose environment-specific behavior. Import a shared OpenAPI contract into MockForge, then explicitly recreate rules and compare response behavior.

External AI providers and upstream services use the connections you configure. Keep credentials out of committed configuration and use synthetic data for shared fixtures.

Run a local mock
+
+{{FOOTER}} +{{SHELL_SCRIPT}} + diff --git a/src/pages/compare-postman-mock.html b/src/pages/compare-postman-mock.html index 9d52558..3a5a03b 100644 --- a/src/pages/compare-postman-mock.html +++ b/src/pages/compare-postman-mock.html @@ -1,203 +1,31 @@ - - - - - MockForge vs Postman Mock Server - - - - - - - - - - - - - - - - - - - - - {{SHARED_HEAD_BLOCK}} - - - {{HEADER}} - - -
-
-
-
-
-

Comparison guide

-

- MockForge vs Postman Mock Server -

-

- Postman's mock server returns saved examples from your collections, convenient if your team already lives in Postman. MockForge is built for multi-protocol simulation, realistic behavior, and a path that doesn't depend on one vendor's platform. -

-

Last updated May 12, 2026.

- -
-
-
-

Best fit by workflow

-
-
-
Choose MockForge when
-

- You need protocols beyond HTTP (gRPC, WebSocket, GraphQL, Kafka, MQTT), realistic behavior (latency, faults, data drift), or a self-hostable option that isn't tied to one vendor's collection format. -

-
-
-
Choose Postman Mock when
-

- Your team already authors API specs in Postman collections, you only need HTTP mocking, and per-seat pricing inside Postman suits your billing. -

-
-
-
-
-
-
-
- - -
-
-
-

Capability comparison

-

- Postman's mock server is built into Postman and reuses saved collection examples as responses. MockForge is a standalone platform built around realistic simulation across protocols. -

-

This is a maintained workflow comparison, not a certification of every vendor feature or roadmap detail.

-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
CapabilityMockForgePostman Mock Server
Protocol scopeHTTP, gRPC, WebSocket, GraphQL, Kafka, MQTT, AMQP, SMTP, FTP, TCPHTTP only
Source of truthOpenAPI specs, gRPC protos, GraphQL schemas, or hand-authored route rulesPostman Collections with saved response examples
Behavior realismBuilt-in latency injection, fault scenarios, data drift, partial-response and chunked-encoding simulationReturns the matching saved example; latency simulation is limited
Synthetic dataFaker-driven generation, schema-aware inference, optional RAG/AI for context-aware responsesWhatever example bodies you saved in the collection
DeploymentOSS self-host, Docker, Kubernetes, or managed cloud, your choiceHosted by Postman; cloud-only
LicensingMIT or Apache-2.0 OSS core, paid managed tierProprietary, included with Postman plans
Pricing modelFree OSS, plan-tiered cloud ($29 Pro / $99 Team for hosted mocks)Per-user Postman seat plus per-plan mock-call quotas
Integration storyStandalone, runs alongside any tooling, CI, or workflowTightly integrated with the Postman ecosystem (collections, environments, monitors)
-
- -
-
- -

Multi-protocol coverage

-

- If your services span gRPC, WebSockets, Kafka, or message brokers, Postman Mock won't help. MockForge simulates all of them from one interface. -

-
-
- -

Realistic, not static

-

- Postman returns the example you saved. MockForge injects latency, fault patterns, and data drift, the conditions your service faces in production. -

-
-
- -

No platform lock-in

-

- MockForge runs anywhere, from laptop to CI runner to Kubernetes to managed cloud, and stays useful even if your team's tooling changes. -

-
-
-
-
- - -
-
-

Outgrowing collection-based mocks?

-

- Postman Mock works when your test surface is small and HTTP-only. Teams shipping across multiple protocols, testing failure paths, or wanting OSS portability tend to land on MockForge. -

- -
-
- - {{FOOTER}} - - {{SHELL_SCRIPT}} - - + + +MockForge vs Postman + + + + + + +{{SHARED_HEAD_BLOCK}} + +{{HEADER}} +
+All comparisons +

MockForge vs Postman

+

Programmable mocks inside an API workspace, or a standalone server?

+

Reviewed October 12, 2026. Compare the documented workflows below using your own contract and fixtures.

+

Where each tool fits

Postman supports JavaScript-based local mocks with dynamic responses and state, as well as cloud deployment and collection-example mocks. Local View stores mock configuration and scenario files in a local Git repository.

Choose Postman when programmable mock handlers and API development belong in the same application. Choose MockForge when you want to operate the mock as a standalone CLI or container using specifications and configuration files.

Postman sources: Programmable local mocks. Cloud deployment.

+

What you can run with MockForge

+
+ + + + +
MockForge local workflow and supporting documentation
WorkflowAvailable pathProof and setup
Local serverOpen-source CLI or container; no MockForge account required.Quick start
Configuration in GitReview YAML configuration and OpenAPI files alongside your code.Configuration files
Failure behaviorConfigure latency and fault simulation for your test environment.Chaos configuration
CostsThe open-source local runtime is free. Hosted plans are a separate choice.Hosted pricing
+

Evaluate a migration

Keep Postman collections as request clients if they suit your team. Evaluate a MockForge server from a shared OpenAPI contract; Postman JavaScript scenarios and pm.state behavior need an explicit migration, not a format-only conversion.

External AI providers and upstream services use the connections you configure. Keep credentials out of committed configuration and use synthetic data for shared fixtures.

Run a local mock
+
+{{FOOTER}} +{{SHELL_SCRIPT}} + diff --git a/src/pages/compare-wiremock.html b/src/pages/compare-wiremock.html index a17f94d..ecc1b33 100644 --- a/src/pages/compare-wiremock.html +++ b/src/pages/compare-wiremock.html @@ -1,183 +1,31 @@ - - - - - MockForge vs WireMock - - - - - - - - - - - - - - - - - - - - - {{SHARED_HEAD_BLOCK}} - - - {{HEADER}} - - -
-
-
-
-
-

Comparison guide

-

- MockForge vs WireMock -

-

- WireMock is a mature HTTP mocking tool. MockForge targets teams that need broader protocol support, realism-focused simulation, and a path from open source into managed team workflows. -

-

Last updated March 8, 2026.

- -
-
-
-

Best fit by workflow

-
-
-
Choose MockForge when
-

- You need more than HTTP stubs, want realistic latency and failure behavior, or want service virtualization patterns that work across teams. -

-
-
-
Choose WireMock when
-

- Your main requirement is established HTTP mocking with a familiar ecosystem, and your test surface does not need multi-protocol simulation. -

-
-
-
-
-
-
-
- - -
-
-
-

Capability comparison

-

- The main difference is scope: WireMock centers on HTTP stubbing, while MockForge is built for realistic service simulation across a wider set of protocols and environments. -

-

This is a maintained workflow comparison, not a certification of every vendor feature or roadmap detail.

-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
CapabilityMockForgeWireMock
Primary protocol focusREST, gRPC, GraphQL, WebSocket, and SMTP workflowsHTTP and REST-centric mocking
Behavior realismLatency, faults, drift, and data variability built into simulation workflowsStub matching, templating, and rule-based behavior
Synthetic dataRealistic generation workflows aimed at test and staging environmentsTemplating and extension-based customization
Operational workflowOpen-source entry point with admin-oriented team and enterprise trajectoryMature standalone mocking ecosystem with strong HTTP test workflows
-
- -
-
- -

Broader coverage

-

- MockForge fits teams simulating systems that span REST plus newer service interfaces like gRPC, GraphQL, and WebSockets. -

-
-
- -

More realism

-

- The direction is realistic behavior, not just deterministic stubbing, which matters once teams test failure paths and degraded performance. -

-
-
- -

Cleaner handoff path

-

- Begin with OSS and move toward managed workflows without changing vendors once the testing surface expands. -

-
-
-
-
- - -
-
-

Need more than HTTP stubs?

-

- If your team tests service interactions across multiple protocols, synthetic data scenarios, or realistic latency and failure behavior, MockForge is the closer fit. -

- -
-
- - {{FOOTER}} - - {{SHELL_SCRIPT}} - - + + +MockForge vs WireMock + + + + + + +{{SHARED_HEAD_BLOCK}} + +{{HEADER}} +
+All comparisons +

MockForge vs WireMock

+

An established stubbing ecosystem, or a standalone simulation CLI?

+

Reviewed October 12, 2026. Compare the documented workflows below using your own contract and fixtures.

+

Where each tool fits

WireMock offers request matching, response templates, recording and playback, delays, and fault simulation. Its gRPC extension adds protobuf-based matching; it is not limited to plain HTTP stubs.

Choose WireMock when your tests already use its Java integrations or stub mappings. Choose MockForge when you want OpenAPI-driven mocks and configuration-based simulation in a standalone CLI.

WireMock sources: WireMock documentation. Recording and playback. Fault simulation. gRPC extension.

+

What you can run with MockForge

+
+ + + + +
MockForge local workflow and supporting documentation
WorkflowAvailable pathProof and setup
Local serverOpen-source CLI or container; no MockForge account required.Quick start
Configuration in GitReview YAML configuration and OpenAPI files alongside your code.Configuration files
Failure behaviorConfigure latency and fault simulation for your test environment.Chaos configuration
CostsThe open-source local runtime is free. Hosted plans are a separate choice.Hosted pricing
+

Evaluate a migration

Keep WireMock mappings alongside existing tests. For a MockForge evaluation, start with an OpenAPI document and check representative requests, response bodies, and failure cases before replacing any mappings.

External AI providers and upstream services use the connections you configure. Keep credentials out of committed configuration and use synthetic data for shared fixtures.

Run a local mock
+
+{{FOOTER}} +{{SHELL_SCRIPT}} + diff --git a/src/pages/comparisons.html b/src/pages/comparisons.html new file mode 100644 index 0000000..c1cc0f9 --- /dev/null +++ b/src/pages/comparisons.html @@ -0,0 +1,18 @@ + + + +Compare MockForge API development workflows + + + + + + +{{SHARED_HEAD_BLOCK}} + +{{HEADER}} +
+

Choose a mock workflow

Start with how you build and run your tests. These guides describe the available workflows and link to each tool’s own documentation.

+{{FOOTER}} +{{SHELL_SCRIPT}} + diff --git a/src/pages/index.html b/src/pages/index.html index 7ef588a..f2859b1 100644 --- a/src/pages/index.html +++ b/src/pages/index.html @@ -97,7 +97,7 @@

- Start with open source in minutes. Scale to realistic data, latency, and admin-grade controls when your team needs them. + Run your first mock locally without a MockForge account. Keep OpenAPI specifications and YAML configuration in Git, then add realistic data, latency, and failure behavior as your tests grow.

+
diff --git a/tailwind.config.js b/tailwind.config.js index abdee84..cecef5d 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -1,5 +1,5 @@ module.exports = { - content: ['./*.html'], + content: ['./src/pages/*.html', './scripts/build-pages.js'], darkMode: 'class', theme: { extend: { diff --git a/trust.html b/trust.html index 7b84bfa..1d84a1b 100644 --- a/trust.html +++ b/trust.html @@ -387,7 +387,7 @@

Start with the free, local tier

Docs Notes Pricing - Compare: WireMock + Compare tools Compare: MockServer GitHub LinkedIn diff --git a/vs/beeceptor.html b/vs/beeceptor.html new file mode 100644 index 0000000..3b698f9 --- /dev/null +++ b/vs/beeceptor.html @@ -0,0 +1,235 @@ + + + +MockForge vs Beeceptor + + + + + + + + + + + + +
+ + +
+
+All comparisons +

MockForge vs Beeceptor

+

A shared hosted HTTP endpoint, or a mock you operate locally?

+

Reviewed October 12, 2026. Compare the documented workflows below using your own contract and fixtures.

+

Where each tool fits

Beeceptor offers hosted mock endpoints with matching rules, forwarding to upstream services, and local tunnels. Its forwarding proxy can combine mocked responses with a real backend.

Choose Beeceptor when a readily shared hosted URL is the immediate need. Choose the open-source MockForge CLI when you want to operate the mock on your laptop or inside your own CI without a MockForge account.

Beeceptor sources: Mock endpoint setup. Forwarding proxy. Local tunneling.

+

What you can run with MockForge

+
+ + + + +
MockForge local workflow and supporting documentation
WorkflowAvailable pathProof and setup
Local serverOpen-source CLI or container; no MockForge account required.Quick start
Configuration in GitReview YAML configuration and OpenAPI files alongside your code.Configuration files
Failure behaviorConfigure latency and fault simulation for your test environment.Chaos configuration
CostsThe open-source local runtime is free. Hosted plans are a separate choice.Hosted pricing
+

Evaluate a migration

Record the endpoint rules and expected request/response pairs before migrating. Recreate equivalent behavior locally and use synthetic fixtures when production payloads contain sensitive data.

External AI providers and upstream services use the connections you configure. Keep credentials out of committed configuration and use synthetic data for shared fixtures.

Run a local mock
+
+ + + diff --git a/vs/bruno.html b/vs/bruno.html new file mode 100644 index 0000000..12a8d3a --- /dev/null +++ b/vs/bruno.html @@ -0,0 +1,235 @@ + + + +MockForge vs Bruno + + + + + + + + + + + + +
+ + +
+
+All comparisons +

MockForge vs Bruno

+

A Git-friendly API client with local mocks, or a dedicated mock runtime?

+

Reviewed October 12, 2026. Compare the documented workflows below using your own contract and fixtures.

+

Where each tool fits

Bruno is an offline-first API client with plain-text collections. Its local mock servers are currently marked Beta and can use saved responses or OpenAPI specifications. Matching rules and delays are supported; mock logs are held in memory.

Choose Bruno when sending requests and serving collection examples in the same desktop client is convenient. Choose MockForge when you want the mock runtime to run as a separate CLI process or container alongside any API client.

Bruno sources: Bruno getting started. Local mock servers. Collection formats.

+

What you can run with MockForge

+
+ + + + +
MockForge local workflow and supporting documentation
WorkflowAvailable pathProof and setup
Local serverOpen-source CLI or container; no MockForge account required.Quick start
Configuration in GitReview YAML configuration and OpenAPI files alongside your code.Configuration files
Failure behaviorConfigure latency and fault simulation for your test environment.Chaos configuration
CostsThe open-source local runtime is free. Hosted plans are a separate choice.Hosted pricing
+

Evaluate a migration

Keep Bruno collections for exercising requests. Use the same OpenAPI contract to evaluate MockForge as the server. A collection export does not automatically transfer saved-example selection or mock rules into MockForge configuration.

External AI providers and upstream services use the connections you configure. Keep credentials out of committed configuration and use synthetic data for shared fixtures.

Run a local mock
+
+ + + diff --git a/vs/microcks.html b/vs/microcks.html new file mode 100644 index 0000000..486e514 --- /dev/null +++ b/vs/microcks.html @@ -0,0 +1,235 @@ + + + +MockForge vs Microcks + + + + + + + + + + + + +
+ + +
+
+All comparisons +

MockForge vs Microcks

+

A contract-testing platform, or a local simulation process?

+

Reviewed October 12, 2026. Compare the documented workflows below using your own contract and fixtures.

+

Where each tool fits

Microcks supports REST, SOAP, GraphQL, gRPC, and event-driven API artifacts. It offers protocol-specific contract testing, including OpenAPI, AsyncAPI, and protobuf strategies.

Choose Microcks when artifact management and provider or consumer conformance are central to your team workflow. Choose MockForge when you want a local CLI process driven by checked-in configuration and specifications.

Microcks sources: Microcks. Contract test strategies. Supported artifacts.

+

What you can run with MockForge

+
+ + + + +
MockForge local workflow and supporting documentation
WorkflowAvailable pathProof and setup
Local serverOpen-source CLI or container; no MockForge account required.Quick start
Configuration in GitReview YAML configuration and OpenAPI files alongside your code.Configuration files
Failure behaviorConfigure latency and fault simulation for your test environment.Chaos configuration
CostsThe open-source local runtime is free. Hosted plans are a separate choice.Hosted pricing
+

Evaluate a migration

Treat the OpenAPI document as a shared contract. Recreate example selection and test expectations explicitly; Microcks artifact and test-strategy configuration is not interchangeable with MockForge configuration.

External AI providers and upstream services use the connections you configure. Keep credentials out of committed configuration and use synthetic data for shared fixtures.

Run a local mock
+
+ + + diff --git a/vs/mockoon.html b/vs/mockoon.html new file mode 100644 index 0000000..27a2956 --- /dev/null +++ b/vs/mockoon.html @@ -0,0 +1,235 @@ + + + +MockForge vs Mockoon + + + + + + + + + + + + +
+ + +
+
+All comparisons +

MockForge vs Mockoon

+

A desktop environment editor, or a specification-driven CLI?

+

Reviewed October 12, 2026. Compare the documented workflows below using your own contract and fixtures.

+

Where each tool fits

Mockoon provides a desktop editor and a CLI for running environments locally or on your own infrastructure. Its JSON data files can be versioned in Git. Rules, templates, proxying, and OpenAPI import are supported.

Choose Mockoon when editing HTTP mock routes visually is the main workflow. Choose MockForge when you want the server configuration and OpenAPI specification to drive a standalone simulation process.

Mockoon sources: Mockoon CLI. Environment data files. OpenAPI compatibility.

+

What you can run with MockForge

+
+ + + + +
MockForge local workflow and supporting documentation
WorkflowAvailable pathProof and setup
Local serverOpen-source CLI or container; no MockForge account required.Quick start
Configuration in GitReview YAML configuration and OpenAPI files alongside your code.Configuration files
Failure behaviorConfigure latency and fault simulation for your test environment.Chaos configuration
CostsThe open-source local runtime is free. Hosted plans are a separate choice.Hosted pricing
+

Evaluate a migration

Keep Mockoon environment files for faithful reuse: OpenAPI export can lose environment-specific behavior. Import a shared OpenAPI contract into MockForge, then explicitly recreate rules and compare response behavior.

External AI providers and upstream services use the connections you configure. Keep credentials out of committed configuration and use synthetic data for shared fixtures.

Run a local mock
+
+ + + diff --git a/vs/postman-mock.html b/vs/postman-mock.html new file mode 100644 index 0000000..d9a4098 --- /dev/null +++ b/vs/postman-mock.html @@ -0,0 +1,235 @@ + + + +MockForge vs Postman + + + + + + + + + + + + +
+ + +
+
+All comparisons +

MockForge vs Postman

+

Programmable mocks inside an API workspace, or a standalone server?

+

Reviewed October 12, 2026. Compare the documented workflows below using your own contract and fixtures.

+

Where each tool fits

Postman supports JavaScript-based local mocks with dynamic responses and state, as well as cloud deployment and collection-example mocks. Local View stores mock configuration and scenario files in a local Git repository.

Choose Postman when programmable mock handlers and API development belong in the same application. Choose MockForge when you want to operate the mock as a standalone CLI or container using specifications and configuration files.

Postman sources: Programmable local mocks. Cloud deployment.

+

What you can run with MockForge

+
+ + + + +
MockForge local workflow and supporting documentation
WorkflowAvailable pathProof and setup
Local serverOpen-source CLI or container; no MockForge account required.Quick start
Configuration in GitReview YAML configuration and OpenAPI files alongside your code.Configuration files
Failure behaviorConfigure latency and fault simulation for your test environment.Chaos configuration
CostsThe open-source local runtime is free. Hosted plans are a separate choice.Hosted pricing
+

Evaluate a migration

Keep Postman collections as request clients if they suit your team. Evaluate a MockForge server from a shared OpenAPI contract; Postman JavaScript scenarios and pm.state behavior need an explicit migration, not a format-only conversion.

External AI providers and upstream services use the connections you configure. Keep credentials out of committed configuration and use synthetic data for shared fixtures.

Run a local mock
+
+ + + diff --git a/vs/postman.html b/vs/postman.html new file mode 100644 index 0000000..f58c76a --- /dev/null +++ b/vs/postman.html @@ -0,0 +1,15 @@ + + + + + + Redirecting to MockForge vs Postman | MockForge + + + + + + +

This page has moved to MockForge vs Postman.

+ + diff --git a/vs/wiremock.html b/vs/wiremock.html new file mode 100644 index 0000000..830a555 --- /dev/null +++ b/vs/wiremock.html @@ -0,0 +1,235 @@ + + + +MockForge vs WireMock + + + + + + + + + + + + +
+ + +
+
+All comparisons +

MockForge vs WireMock

+

An established stubbing ecosystem, or a standalone simulation CLI?

+

Reviewed October 12, 2026. Compare the documented workflows below using your own contract and fixtures.

+

Where each tool fits

WireMock offers request matching, response templates, recording and playback, delays, and fault simulation. Its gRPC extension adds protobuf-based matching; it is not limited to plain HTTP stubs.

Choose WireMock when your tests already use its Java integrations or stub mappings. Choose MockForge when you want OpenAPI-driven mocks and configuration-based simulation in a standalone CLI.

WireMock sources: WireMock documentation. Recording and playback. Fault simulation. gRPC extension.

+

What you can run with MockForge

+
+ + + + +
MockForge local workflow and supporting documentation
WorkflowAvailable pathProof and setup
Local serverOpen-source CLI or container; no MockForge account required.Quick start
Configuration in GitReview YAML configuration and OpenAPI files alongside your code.Configuration files
Failure behaviorConfigure latency and fault simulation for your test environment.Chaos configuration
CostsThe open-source local runtime is free. Hosted plans are a separate choice.Hosted pricing
+

Evaluate a migration

Keep WireMock mappings alongside existing tests. For a MockForge evaluation, start with an OpenAPI document and check representative requests, response bodies, and failure cases before replacing any mappings.

External AI providers and upstream services use the connections you configure. Keep credentials out of committed configuration and use synthetic data for shared fixtures.

Run a local mock
+
+ + +