waf-v2 — AWS WAFv2

A zero-dependency, in-process emulator for AWS WAFv2 (Web ACLs, IP sets, and rule groups).

PropertyValue
Port4716
ProtocolAWS JSON 1.1
Target prefixAWSWAF_20190729
HealthGET /_parlel/health
ResetPOST /_parlel/reset

Default connection

AWS_ENDPOINT_URL=http://127.0.0.1:4716
AWS_REGION=us-east-1
AWS_ACCESS_KEY_ID=parlel
AWS_SECRET_ACCESS_KEY=parlel

Supported operations

OperationNotes
CreateWebACLReturns Summary with LockToken
ListWebACLsFilter by Scope
GetWebACLReturns WebACL + LockToken
DeleteWebACL
CreateIPSetRequires IPAddressVersion
ListIPSetsFilter by Scope
GetIPSet
DeleteIPSet
CreateRuleGroupRequires Capacity
ListRuleGroupsFilter by Scope
GetRuleGroup

Scope may be REGIONAL or CLOUDFRONT.

SDK usage example

import { WAFV2Client, CreateWebACLCommand } from "@aws-sdk/client-wafv2";

const waf = new WAFV2Client({
  endpoint: "http://127.0.0.1:4716",
  region: "us-east-1",
  credentials: { accessKeyId: "parlel", secretAccessKey: "parlel" },
});

await waf.send(
  new CreateWebACLCommand({
    Name: "my-acl",
    Scope: "REGIONAL",
    DefaultAction: { Allow: {} },
    VisibilityConfig: {
      SampledRequestsEnabled: true,
      CloudWatchMetricsEnabled: true,
      MetricName: "myAcl",
    },
  }),
);

Access via MCP / preview URL

Point any AWS SDK or MCP tool at the allocated preview URL via AWS_ENDPOINT_URL.

Surface coverage

This emulator faithfully replicates the API surface most application code and agents exercise. Anything below the supported lines is either an intentional design choice for a fast, zero-cost local emulator (✓ By design) or a candidate for a future release (⟳ Roadmap) — never a silent inaccuracy.

Legend: ✅ fully supported · ◐ accepted (stored, not strictly enforced) · ✓ by design · ⟳ on the roadmap.

AreaLimitation
Rule evaluationRules are stored but never evaluated against traffic
LockTokenReturned but optimistic locking is not enforced
AssociationsAssociateWebACL / resource scoping not implemented
Update operationsUpdate operations are not implemented
StateIn-memory only; lost on restart
<!-- parlel:testenv:start -->

Configuration — test.env

Copy these into your test.env (used by the bridge sidecar flow). Tokens are Parlel's seeded test credentials — any non-empty value is accepted by the emulator, so you rarely need to change them. Swap in real credentials only when pointing at the live service in prod.env.

AWS_ACCESS_KEY_ID=parlel
AWS_SECRET_ACCESS_KEY=parlel
AWS_REGION=us-east-1
AWS_ENDPOINT_URL=http://parlel-bridge:4716
<!-- parlel:testenv:end -->