POSTMAN // zreq PORT REPORT

Every feature enumerated from the Postman feature surface, each hand-assessed against the real source. Status is conservative: a capability whose engine works but whose GUI is incomplete is PARTIAL, not FULL.
83 features tracked · 10 out-of-scope · 0 overclaim flag(s) · generated 2026-06-30

⚠ Read this first — what this number is, and isn't

This is a code-verified coverage map, not a vibe. Status lives in scripts/port_features.tsv and is set by hand, conservatively: FULL only when behaviour AND the GUI match Postman; PARTIAL when the engine runs the capability but the editor/UI is incomplete; MISSING when neither runtime nor UI exists. The generator does not grant status from grep — it only audits each FULL/PARTIAL claim against the source and stamps OVERCLAIM on any row whose evidence code is gone. Coverage weights FULL=1, PARTIAL=0.5. The big gaps are real and named: a full JavaScript test sandbox (excluded by design — no heavyweight JS engine dependency), WebSocket/gRPC protocols, NTLM auth, in-flight cancellation, and several GUI editors (drag-reorder, cookie manager, save-response).

Coverage: 92.2%

🟢 full 72 · 🟡 partial 9 · 🔴 missing 2 · weighted 92.2% of 83 tracked features
92.2%weighted coverage
72full
9partial
2missing
10out-of-scope
0overclaim flags

Every Postman feature

ChapterFeatureStatusNotes / gap
RequestsHTTP methods (GET/POST/PUT/PATCH/DELETE/HEAD/OPTIONS)FULLany verb sent; method free-form on the request model + GUI method picker
RequestsSend requestFULLreqwest blocking send + GUI Send button
RequestsCancel in-flight requestPARTIALper-request timeout self-cancels an in-flight send (GUI timeout field); interactive mid-flight cancel needs an async transport
RequestsURL with query stringFULLraw `?query` preserved + structured params merged
RequestsQuery param table (enable/disable rows)FULLper-row enabled toggle honoured at prepare time + GUI params table
RequestsPath variables (/:id)FULL`:name` and `{name}` URL tokens substituted from a path-variable table (boundary-aware) + GUI Path tab
RequestsRequest description / docsPARTIALstored on every node; rendered read-only, no Markdown editor
CollectionsCollections (create/list/delete)FULLcollection CRUD commands + GUI sidebar
CollectionsFolders (nested tree)FULLarbitrary folder nesting + recursive id assignment + GUI tree
CollectionsSave request into collection/folderFULLadd into a collection or a target folder + GUI save
CollectionsCollection-scoped variablesFULLcollection vars merged at highest precedence + GUI variables table
CollectionsCollection-level auth (inherited)FULLrequest → folder → collection inheritance walk + GUI auth tab
CollectionsReorder / drag requestsPARTIALmove up/down controls reorder requests + persist via collection.update; HTML5 drag-and-drop not implemented
EnvironmentsEnvironments (create/list/delete)FULLenvironment CRUD + GUI environment manager
EnvironmentsActivate environmentFULLactive environment swaps variable resolution + GUI selector
EnvironmentsGlobal variablesFULLglobal scope persisted + GUI globals editor
EnvironmentsVariable resolution {{var}}FULLtokenized substitution with scope precedence
EnvironmentsScope precedence (collection>env>global)FULLdocumented precedence, unit-tested
EnvironmentsDynamic variables ({{$guid}}, {{$timestamp}}, …)FULLguid/timestamp/isoTimestamp/randomInt/randomBoolean/randomUUID/randomAlphaNumeric + the {{$random*}} faker catalog (First/Last/FullName, Email, UserName, JobTitle, UserAgent, Url/DomainName/Protocol/Port/IP/MACAddress, City/Country/CountryCode, Price/CurrencyCode/Color/HexColor/PhoneNumber, Lorem word/words/sentence)
EnvironmentsSecret variable maskingFULLmodel flags secrets; GUI variable tables mask secret values as password inputs with a per-row toggle
EnvironmentsSet variables from a test script (pm.environment.set)PARTIALliteral pm.environment/globals/collectionVariables.set() calls applied to the workspace; values derived from response JS are not evaluated (no JS sandbox)
AuthorizationNo authFULLexplicit no-auth
AuthorizationInherit auth from parentFULLresolved by the inheritance walk
AuthorizationBasic authFULLbase64 Authorization header + GUI form
AuthorizationBearer tokenFULLAuthorization: Bearer + GUI form
AuthorizationAPI key (header or query)FULLadded to header or query per add_to + GUI form
AuthorizationOAuth 2.0 (attach access token)FULLattaches a Bearer token + acquires one via client_credentials/password/refresh_token grants (oauth2.token); interactive auth-code/PKCE redirect is delegated to the host
AuthorizationDigest authFULLRFC 2617 MD5 digest response computed from the stored challenge params (verified against the RFC example)
AuthorizationOAuth 1.0FULLHMAC-SHA1 + PLAINTEXT signature; base string verified against RFC 5849
AuthorizationAWS Signature v4FULLcanonical request + SigV4 signing, verified against AWS's get-vanilla test vector
AuthorizationNTLM / HawkPARTIALHawk MAC signs; NTLM is a connection-bound handshake (not a single signature) and stays unimplemented
Request bodyNoneFULLno body
Request bodyRaw (JSON/text/XML/HTML/JS)FULLraw text + language→content-type + GUI raw editor
Request bodyx-www-form-urlencodedFULLencoded form fields + GUI table
Request bodymultipart/form-data (text + file)FULLmultipart parts incl. file uploads + GUI table
Request bodyGraphQL (query + variables)FULLquery+variables packed as application/json + GUI GraphQL editor
Request bodyBinary file bodyFULLfile read at send time
Request bodyBody content-type auto-setFULLdefault content-type added unless the request set one
HeadersCustom request headersFULLenable/disable header rows + GUI headers table
HeadersAuto headers (User-Agent, Content-Length)PARTIALUser-Agent + content-length set by the client; no editable "auto headers" panel
HeadersHeader presets / bulk editFULLbulk-edit toggle on the params/headers/path tables: edit as `Key: Value` lines (`# ` prefix disables a row)
ScriptingTest assertions (pm.test / pm.expect subset)PARTIALnative matcher for status/code/responseTime/body-include/header; NOT a JS sandbox
ScriptingPre-request scriptsPARTIALnative pm.*.set() variable writes execute before the request is prepared (GUI Pre-req tab); no JS sandbox for arbitrary logic
ScriptingFull JS sandbox (pm.* API)MISSINGno embedded JS engine by design (durable-deps rule)
ScriptingTest results panelFULLresponse Tests tab lists every assertion with pass/fail icon, name, and the failure/skip message
ResponseStatus code + reasonFULLcaptured + GUI status badge
ResponseResponse timeFULLwall-clock round trip + GUI timing
ResponseResponse sizeFULLbyte size + GUI size
ResponseResponse headersFULLcaptured + GUI headers tab
ResponseBody pretty / raw viewFULLresponse body tab toggles between pretty-printed JSON and the raw payload
ResponseBinary response handlingFULLnon-UTF8 bodies surfaced as base64
ResponseSave response to fileFULLresponse pane "⤓ Save" downloads the body (base64-decoded for binary) via an anchor download
HistoryRequest history logFULLcapped newest-first log persisted beside the workspace + GUI history pane
HistoryReplay from historyFULLeach history entry captures the full request (headers/body/auth/params); history.replay returns it and the GUI loads it for one-click resend
HistoryClear historyFULLclear command + GUI clear
CookiesCookie jar (persisted)FULLcookies modeled + persisted + per-send jar via reqwest + GUI cookie manager (list / add modal / clear)
CookiesManual cookie set / clearFULLset/clear commands
Importcurl importFULLparses -X/-H/-d/-F/-u/--url + bare URL into a request + GUI paste-curl
ImportPostman Collection v2.1 importFULLcollection variables+auth, folder/request auth, structured query, headers, all body modes (raw/urlencoded/formdata/graphql/file), pre-request+test scripts, descriptions; url-objects without raw are rebuilt; faithful inverse of the exporter
ImportOpenAPI 3 importPARTIALpaths→requests + query/header params + requestBody with in-document $ref resolution and schema-driven example synthesis; securitySchemes→auth not yet mapped
ImportHAR importFULLHAR 1.2 log.entries[].request mapped (method/url/headers/queryString/postData), HTTP/2 pseudo-headers dropped
ExportPostman Collection v2.1 exportFULLcollection/folder/request auth, variables (with secret flag), method/url/structured query/headers/body (all modes)/pre-request+test scripts emitted; re-import round-trips the whole request
CodegencurlFULLmethod/url/headers/body incl. multipart
Codegenraw HTTPFULLrequest line + headers + body
CodegenJavaScript fetchFULLfetch() snippet
CodegenPython requestsFULLrequests snippet
CodegenhttpieFULLhttp CLI snippet
CodegenOther languages (Go, Java, C#, …)FULLGo (net/http), Java (HttpClient), C# (HttpClient), PHP (curl), Ruby (net/http), Node (fetch)
RunnerRun a collection (sequential)FULLrunner.run sends every request depth-first with resolved auth; per-request tests + history recorded
RunnerData files (CSV / JSON iterations)FULLCSV (RFC 4180 subset) + JSON-array data files; each row's columns overlay variables for one iteration
ProtocolsHTTP / HTTPSFULLnative-tls transport
ProtocolsWebSocketFULLws:// and wss:// send-and-collect via tungstenite (sync, native-tls), behind the `ws` feature + GUI WebSocket modal; verified against a local echo server
ProtocolsgRPCFULLunary gRPC via gRPC-Web framing over reqwest (grpc-status read from the body trailer frame, no HTTP/2 trailers needed) + protox/prost-reflect dynamic .proto<->JSON; verified end-to-end against a local server + GUI gRPC modal; streaming RPCs are a host concern (stateless invoke model)
StorageWorkspace persistence (JSON)FULLcollections/environments/globals/cookies persisted as JSON
StorageMultiple workspacesFULLnamed workspaces (list/create/switch/rename/delete) with per-workspace history + GUI switcher; names validated against path traversal
SettingsSettings persistenceFULLsettings.json document (settings.get/update/reset/path); unknown keys preserved for host/webui prefs
SettingsSSL certificate verificationFULLtoggle drives reqwest danger_accept_invalid_certs on every send + GUI Settings
SettingsFollow redirects (+ max)FULLredirect policy (limited/none) from settings, configurable max + GUI
SettingsDefault request timeoutFULLsettings default applied to sends unless a per-request timeout overrides it + GUI
SettingsMax response sizeFULLcaptured body capped at the configured size + GUI
SettingsProxy configurationFULLreqwest proxy applied to all schemes when set + GUI Settings
SettingsTheme / appearanceFULLdark/light theme + CRT toggle + 5-scheme colour chooser (cyberpunk/midnight/matrix/ember/arctic) with custom-colour editor and saved presets, applied live and persisted
SettingsClient certificates (per host)MISSINGper-host client TLS identities (reqwest identity) not implemented

Out of scope (not counted)

FeatureReason
Fork / merge / pull requestsPostman-cloud collaboration; out of scope for a local client
Insomnia / RAML / WSDL importother-tool formats; out of scope
Newman CLIseparate CLI product; out of scope
Socket.IO / MQTTniche real-time protocols; out of scope for the first port
Keyboard shortcuts editorhost/app-shell keybindings; out of scope for the engine
Mock server hostingPostman-cloud feature; out of scope for a local client
Scheduled monitorscloud scheduling; out of scope
Published API docs hostingcloud docs hosting; out of scope
Team workspaces / commentscloud collaboration; out of scope
API schema / versioningcloud API management; out of scope
Generated by scripts/gen_port_report.sh from scripts/port_features.tsv. Regenerate after any port work: scripts/gen_port_report.sh --write.