[{"data":1,"prerenderedAt":1034},["ShallowReactive",2],{"navigation_docs":3,"-guide-grpc":172,"-guide-grpc-surround":1029},[4,30,100,134],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":29},"Getting started","i-lucide-rocket","\u002Fgetting-started","1.getting-started",[10,14,18,21,25],{"title":11,"path":12,"stem":13},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction",{"title":15,"path":16,"stem":17},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation",{"title":5,"path":19,"stem":20},"\u002Fgetting-started\u002Fquick-start","1.getting-started\u002F3.quick-start",{"title":22,"path":23,"stem":24},"Build from source","\u002Fgetting-started\u002Fbuild-from-source","1.getting-started\u002F4.build-from-source",{"title":26,"path":27,"stem":28},"Troubleshooting","\u002Fgetting-started\u002Ftroubleshooting","1.getting-started\u002F5.troubleshooting",false,{"title":31,"icon":32,"path":33,"stem":34,"children":35,"page":29},"Guide","i-lucide-book-open","\u002Fguide","2.guide",[36,40,44,48,52,56,60,64,68,72,76,80,84,88,92,96],{"title":37,"path":38,"stem":39},"Interface","\u002Fguide\u002Finterface","2.guide\u002F01.interface",{"title":41,"path":42,"stem":43},"Workspace","\u002Fguide\u002Fworkspace","2.guide\u002F02.workspace",{"title":45,"path":46,"stem":47},"Collections","\u002Fguide\u002Fcollections","2.guide\u002F03.collections",{"title":49,"path":50,"stem":51},"HTTP requests","\u002Fguide\u002Fhttp-requests","2.guide\u002F04.http-requests",{"title":53,"path":54,"stem":55},"Variables","\u002Fguide\u002Fvariables","2.guide\u002F05.variables",{"title":57,"path":58,"stem":59},"Authorization","\u002Fguide\u002Fauthorization","2.guide\u002F06.authorization",{"title":61,"path":62,"stem":63},"Scripts and tests","\u002Fguide\u002Fscripts-and-tests","2.guide\u002F07.scripts-and-tests",{"title":65,"path":66,"stem":67},"Collection runner","\u002Fguide\u002Fcollection-runner","2.guide\u002F08.collection-runner",{"title":69,"path":70,"stem":71},"Import and export","\u002Fguide\u002Fimport-export","2.guide\u002F09.import-export",{"title":73,"path":74,"stem":75},"Code snippets","\u002Fguide\u002Fcode-snippets","2.guide\u002F10.code-snippets",{"title":77,"path":78,"stem":79},"gRPC","\u002Fguide\u002Fgrpc","2.guide\u002F11.grpc",{"title":81,"path":82,"stem":83},"WebSocket","\u002Fguide\u002Fwebsocket","2.guide\u002F12.websocket",{"title":85,"path":86,"stem":87},"Cookies, proxy and certificates","\u002Fguide\u002Fcookies-proxy-certificates","2.guide\u002F13.cookies-proxy-certificates",{"title":89,"path":90,"stem":91},"Settings","\u002Fguide\u002Fsettings","2.guide\u002F14.settings",{"title":93,"path":94,"stem":95},"Keyboard shortcuts","\u002Fguide\u002Fkeyboard-shortcuts","2.guide\u002F15.keyboard-shortcuts",{"title":97,"path":98,"stem":99},"Privacy and security","\u002Fguide\u002Fprivacy-and-security","2.guide\u002F16.privacy-and-security",{"title":101,"icon":102,"path":103,"stem":104,"children":105,"page":29},"Reference","i-lucide-square-terminal","\u002Freference","3.reference",[106,110,114,118,122,126,130],{"title":107,"path":108,"stem":109},"Command line","\u002Freference\u002Fcli","3.reference\u002F1.cli",{"title":111,"path":112,"stem":113},"Automation tools","\u002Freference\u002Fautomation-tools","3.reference\u002F2.automation-tools",{"title":115,"path":116,"stem":117},"Scripting API","\u002Freference\u002Fscripting-api","3.reference\u002F3.scripting-api",{"title":119,"path":120,"stem":121},"Dynamic variables","\u002Freference\u002Fdynamic-variables","3.reference\u002F4.dynamic-variables",{"title":123,"path":124,"stem":125},"UI control channel","\u002Freference\u002Fui-control-channel","3.reference\u002F5.ui-control-channel",{"title":127,"path":128,"stem":129},"Workspace format","\u002Freference\u002Fworkspace-format","3.reference\u002F6.workspace-format",{"title":131,"path":132,"stem":133},"Feature status","\u002Freference\u002Ffeature-status","3.reference\u002F7.feature-status",{"title":135,"icon":136,"path":137,"stem":138,"children":139,"page":29},"Contributing","i-lucide-git-pull-request","\u002Fcontributing","4.contributing",[140,144,148,152,156,160,164,168],{"title":141,"path":142,"stem":143},"Contributing overview","\u002Fcontributing\u002Foverview","4.contributing\u002F1.overview",{"title":145,"path":146,"stem":147},"Development","\u002Fcontributing\u002Fdevelopment","4.contributing\u002F2.development",{"title":149,"path":150,"stem":151},"Architecture","\u002Fcontributing\u002Farchitecture","4.contributing\u002F3.architecture",{"title":153,"path":154,"stem":155},"Known gaps","\u002Fcontributing\u002Fgaps","4.contributing\u002F4.gaps",{"title":157,"path":158,"stem":159},"Adding a feature","\u002Fcontributing\u002Fadding-a-feature","4.contributing\u002F5.adding-a-feature",{"title":161,"path":162,"stem":163},"Assets and clean-room","\u002Fcontributing\u002Fassets-and-clean-room","4.contributing\u002F6.assets-and-clean-room",{"title":165,"path":166,"stem":167},"Releasing","\u002Fcontributing\u002Freleasing","4.contributing\u002F7.releasing",{"title":169,"path":170,"stem":171},"Writing the documentation","\u002Fcontributing\u002Fdocumentation","4.contributing\u002F8.documentation",{"id":173,"title":77,"body":174,"description":1022,"extension":1023,"links":1024,"meta":1025,"navigation":1026,"path":78,"seo":1027,"stem":79,"__hash__":1028},"docs\u002F2.guide\u002F11.grpc.md",{"type":175,"value":176,"toc":1007},"minimark",[177,181,198,224,229,242,245,256,260,274,392,395,462,466,469,507,521,589,599,602,636,640,661,664,667,717,720,743,746,750,776,783,786,804,807,811,817,825,828,832,851,854,861,891,895,1002],[178,179,180],"p",{},"Postguy calls gRPC methods with a dynamic codec. There is no code generation: you send JSON and get JSON back. Descriptors come from one of three places:",[182,183,184,188,195],"ul",{},[185,186,187],"li",{},"The server's reflection service.",[185,189,190,194],{},[191,192,193],"code",{},".proto"," files in the workspace.",[185,196,197],{},"Inline file lists.",[199,200,201,202,205,206,209,210,213,214,217,218,223],"note",{},"The parity file marks parts of area D as ",[191,203,204],{},"partial",", and ",[191,207,208],{},"d.grpcurl-snippet"," and ",[191,211,212],{},"d.generate-collection"," as ",[191,215,216],{},"planned",". The list under ",[219,220,222],"a",{"href":221},"#not-yet","Not yet"," says what is missing. The collection runner skips gRPC requests.",[225,226,228],"h2",{"id":227},"create-a-grpc-request","Create a gRPC request",[230,231,232,235],"ol",{},[185,233,234],{},"Select a collection or folder in the sidebar.",[185,236,237,238,241],{},"Open the plus menu and choose ",[191,239,240],{},"New gRPC request",".",[178,243,244],{},"The protocol (HTTP, gRPC or WebSocket) is fixed when a request is created.",[178,246,247,248,255],{},"Or ",[219,249,251,252,254],{"href":250},"\u002Fguide\u002Fimport-export#proto-files","import ",[191,253,193],{}," files"," to get a collection with one request per method.",[225,257,259],{"id":258},"the-request-tab","The request tab",[178,261,262,263,266,267,270,271,241],{},"The top of the tab holds the request name, the ",[191,264,265],{},"TLS"," checkbox, ",[191,268,269],{},"Save",", and a bar with the method picker, the URL and ",[191,272,273],{},"Invoke",[275,276,277,290],"table",{},[278,279,280],"thead",{},[281,282,283,287],"tr",{},[284,285,286],"th",{},"Control",[284,288,289],{},"Notes",[291,292,293,324,348,362,379],"tbody",{},[281,294,295,299],{},[296,297,298],"td",{},"Method picker",[296,300,301,302,305,306,305,309,305,312,315,316,319,320,323],{},"Lists the methods of the loaded definition, grouped by service, with their call shape (",[191,303,304],{},"unary",", ",[191,307,308],{},"server stream",[191,310,311],{},"client stream",[191,313,314],{},"bidi stream","). Without a loaded definition it says ",[191,317,318],{},"Set the service definition first."," and offers ",[191,321,322],{},"Open Service definition",". Picking a method on an empty message fills in an example message.",[281,325,326,329],{},[296,327,328],{},"URL field",[296,330,331,332,335,336,339,340,343,344,347],{},"Placeholder ",[191,333,334],{},"localhost:50051",". Without a ",[191,337,338],{},":\u002F\u002F"," scheme, Postguy adds ",[191,341,342],{},"http:\u002F\u002F",", or ",[191,345,346],{},"https:\u002F\u002F"," when TLS is on. Variables are resolved.",[281,349,350,355],{},[296,351,352,354],{},[191,353,265],{}," checkbox",[296,356,357,358,361],{},"Explicit toggle. Typing a ",[191,359,360],{},"grpcs:\u002F\u002F"," URL never sets it silently. With TLS off, the connection is plain HTTP\u002F2 (h2c).",[281,363,364,368],{},[296,365,366],{},[191,367,273],{},[296,369,370,371,374,375,378],{},"Calls the method with the current, possibly unsaved, request. The call shape comes from the method. While the call runs the button becomes ",[191,372,373],{},"Cancel",". ",[191,376,377],{},"Cmd\u002FCtrl+Enter"," also invokes.",[281,380,381,385],{},[296,382,383],{},[191,384,269],{},[296,386,387,388,391],{},"Saves the request. ",[191,389,390],{},"Cmd\u002FCtrl+S"," also saves. Unsaved edits survive a restart and closing the tab asks to save.",[178,393,394],{},"Below the bar are six tabs.",[275,396,397,407],{},[278,398,399],{},[281,400,401,404],{},[284,402,403],{},"Tab",[284,405,406],{},"Contents",[291,408,409,423,431,438,446,454],{},[281,410,411,414],{},[296,412,413],{},"Service definition",[296,415,416,419,420,422],{},[191,417,418],{},"Use server reflection",", or a ",[191,421,193],{}," file, and the loaded request and response messages.",[281,424,425,428],{},[296,426,427],{},"Message",[296,429,430],{},"The JSON message editor.",[281,432,433,435],{},[296,434,57],{},[296,436,437],{},"Inherit, No Auth, API Key, Basic, Bearer and OAuth 2.0.",[281,439,440,443],{},[296,441,442],{},"Metadata",[296,444,445],{},"Key\u002Fvalue table with bulk edit.",[281,447,448,451],{},[296,449,450],{},"Scripts",[296,452,453],{},"Pre-invoke, On message and Post-response scripts.",[281,455,456,459],{},[296,457,458],{},"Test",[296,460,461],{},"Assertions and a test script, the same as the HTTP Test tab.",[225,463,465],{"id":464},"service-definitions","Service definitions",[178,467,468],{},"On the Service definition tab:",[182,470,471,489],{},[185,472,473,476,477,480,481,484,485,488],{},[474,475,418],"strong",{}," (default). ",[191,478,479],{},"Load services"," asks the server at the URL for its services and their message types. Nothing is sent until you click it. If the server has no reflection service, or cannot be reached, the tab shows ",[191,482,483],{},"Server reflection failed: …"," with the reason. ",[191,486,487],{},"Reload services"," asks again.",[185,490,491,494,495,498,499,502,503,506],{},[474,492,493],{},"Proto file."," Untick reflection and click ",[191,496,497],{},"Choose .proto file…",". The files you pick, and the files they import from the same folder tree, are copied into ",[191,500,501],{},"\u003Cworkspace>\u002Fprotos\u002F\u003Cname>\u002F"," and the request points at that proto set. ",[191,504,505],{},"Reload"," recompiles it.",[178,508,509,510,513,514,209,517,520],{},"Once loaded and a method is picked, the tab shows ",[191,511,512],{},"Service \u002F Method",", the call shape, then ",[191,515,516],{},"request \u003CType>",[191,518,519],{},"response \u003CType>",", each with a Field\u002FType table. Hover a type to see its full name.",[275,522,523,533],{},[278,524,525],{},[281,526,527,530],{},[284,528,529],{},"Source",[284,531,532],{},"Behaviour",[291,534,535,559,573],{},[281,536,537,540],{},[296,538,539],{},"Reflection",[296,541,542,543,546,547,550,551,554,555,558],{},"Lists the services with ",[191,544,545],{},"ListServices",", then fetches each service's file set. Tries ",[191,548,549],{},"grpc.reflection.v1"," and falls back to ",[191,552,553],{},"v1alpha"," if the server answers ",[191,556,557],{},"UNIMPLEMENTED",". Uses the same TLS settings as the call. At most 256 services.",[281,560,561,564],{},[296,562,563],{},"Proto set",[296,565,566,567,569,570,572],{},"A named folder ",[191,568,501],{},". The set is compiled from every ",[191,571,193],{}," file in it (up to 256 files, nesting 8). Imports can be relative to the protos root or to the set's own folder.",[281,574,575,578],{},[296,576,577],{},"Inline",[296,579,580,581,584,585,588],{},"A list of files under ",[191,582,583],{},"\u003Cworkspace>\u002Fprotos\u002F"," plus extra import folders, also under that root. Set through the ",[191,586,587],{},"request_update"," tool.",[178,590,591,592,594,595,598],{},"Paths are confined to ",[191,593,583],{},". Absolute paths, ",[191,596,597],{},".."," and symlinks that leave the root are refused.",[225,600,427],{"id":601},"message",[182,603,604,607,621,627,633],{},[185,605,606],{},"The editor holds one JSON object. For client-streaming and bidirectional methods, write a JSON array; each element is sent as one message.",[185,608,609,610,613,614,616,617,620],{},"With a loaded definition, keys the input message does not define are shown in red. Hover one to see ",[191,611,612],{},"Unknown field"," and the message it was checked against. A count of unknown fields appears next to the ",[191,615,427],{}," label above the editor. Map keys and the contents of ",[191,618,619],{},"google.protobuf.*"," types are never flagged.",[185,622,623,626],{},[191,624,625],{},"Generate example"," writes a default message for the method's input type. A cycle guard stops recursive message types.",[185,628,629,632],{},[191,630,631],{},"Beautify"," reformats valid JSON.",[185,634,635],{},"A message that is not valid JSON stops before any call is made.",[225,637,639],{"id":638},"variables-auth-and-metadata","Variables, auth and metadata",[182,641,642,645,651,654],{},[185,643,644],{},"Variables (environment, collection, secrets) are resolved in the URL, method path, message, metadata and definition fields.",[185,646,647,648,241],{},"A name that cannot be resolved fails the call instead of being sent literally: ",[191,649,650],{},"the gRPC request message has unresolved variable(s): …",[185,652,653],{},"Auth, whether set on the request or inherited, is sent as metadata. API Key auth is always sent as metadata; the query location does not exist for gRPC.",[185,655,656,657,660],{},"Metadata keys are lowercased. A key ending in ",[191,658,659],{},"-bin"," is decoded from base64 and sent as binary metadata.",[225,662,61],{"id":663},"scripts-and-tests",[178,665,666],{},"Request-level scripts run around the call. Collection and folder scripts do not run for gRPC.",[275,668,669,679],{},[278,670,671],{},[281,672,673,676],{},[284,674,675],{},"Script",[284,677,678],{},"When",[291,680,681,697,709],{},[281,682,683,686],{},[296,684,685],{},"Pre-invoke",[296,687,688,689,692,693,696],{},"Before variables are resolved. It can set variables and change the URL, the metadata (",[191,690,691],{},"pm.request.headers",") and the message (",[191,694,695],{},"pm.request.body",").",[281,698,699,702],{},[296,700,701],{},"On message",[296,703,704,705,708],{},"After the call, once per received message, for at most 1,000 messages. ",[191,706,707],{},"pm.response.json()"," is that message.",[281,710,711,714],{},[296,712,713],{},"Post-response",[296,715,716],{},"After the call, followed by the Test tab.",[178,718,719],{},"In On message and Post-response scripts:",[182,721,722,740],{},[185,723,724,727,728,731,732,735,736,739],{},[191,725,726],{},"pm.response.code"," is the numeric gRPC status (",[191,729,730],{},"0"," is ",[191,733,734],{},"OK",") and ",[191,737,738],{},"pm.response.status"," its name.",[185,741,742],{},"The body is the reply message as JSON, a JSON array of all replies for server-streaming methods, or the status message when the call failed.",[178,744,745],{},"A non-OK status is a result: the response pane shows it and the scripts and tests still run. Results appear in the response pane's Tests tab. When scripts are disabled in Settings, scripts and tests are skipped with a warning.",[225,747,749],{"id":748},"calls","Calls",[182,751,752,758,764,770],{},[185,753,754,757],{},[474,755,756],{},"Unary."," One JSON message in, one out.",[185,759,760,763],{},[474,761,762],{},"Server streaming."," One request message. Every reply is collected.",[185,765,766,769],{},[474,767,768],{},"Client streaming."," The input messages are sent in order. The single reply is returned.",[185,771,772,775],{},[474,773,774],{},"Bidirectional."," A finite list of input messages is sent, then all replies are collected.",[178,777,778,779,782],{},"The response pane shows the status (",[191,780,781],{},"0 OK"," or the error code and name), the time, the message count for streams, the replies, the response metadata and the test results.",[178,784,785],{},"Limits:",[182,787,788,791,801],{},[185,789,790],{},"At most 10,000 input messages are sent. Extras are ignored.",[185,792,793,794,797,798,696],{},"A reply stream that goes past 10,000 messages ends with ",[191,795,796],{},"gRPC status 8: response exceeded 10000 messages"," (",[191,799,800],{},"RESOURCE_EXHAUSTED",[185,802,803],{},"Interactive streaming, where you send and end the stream by hand, does not exist yet.",[178,805,806],{},"gRPC calls are not recorded in History.",[225,808,810],{"id":809},"tls-and-certificates","TLS and certificates",[178,812,813,814,816],{},"For gRPC, the TLS toggle is the request's ",[191,815,265],{}," checkbox.",[178,818,819,820,824],{},"Postguy uses the system trust store, the custom CA bundle and the PEM client certificate from ",[219,821,823],{"href":822},"\u002Fguide\u002Fcookies-proxy-certificates#tls-and-certificates","Settings › Certificates",". PEM files are limited to 1 MiB.",[178,826,827],{},"There is no insecure (verification off) mode for gRPC.",[225,829,831],{"id":830},"per-request-settings","Per-request settings",[178,833,834,835,305,838,305,841,305,844,209,847,850],{},"A gRPC request stores ",[191,836,837],{},"verifySsl",[191,839,840],{},"serverName",[191,842,843],{},"includeDefaultFields",[191,845,846],{},"maxResponseMb",[191,848,849],{},"deadlineMs",". The engine does not read them, so they have no effect today.",[225,852,222],{"id":853},"not-yet",[178,855,856,857,860],{},"From area D of ",[191,858,859],{},"parity\u002Fpostman-features.toml",":",[182,862,863,866,869,876,879,888],{},[185,864,865],{},"Proto-aware completion and saved messages in the editor.",[185,867,868],{},"Interactive Send \u002F End streaming and a live message timeline.",[185,870,871,872,875],{},"Trailers and ",[191,873,874],{},"grpc-status-details-bin"," decoding.",[185,877,878],{},"The server-name (SNI) override.",[185,880,881,882,885,886,696],{},"A ",[191,883,884],{},"grpcurl"," snippet (",[219,887,73],{"href":74},[185,889,890],{},"Collection and folder scripts, and runner support.",[225,892,894],{"id":893},"headless","Headless",[275,896,897,907],{},[278,898,899],{},[281,900,901,904],{},[284,902,903],{},"Tool",[284,905,906],{},"Purpose",[291,908,909,919,929,939,949,962,976,989],{},[281,910,911,916],{},[296,912,913],{},[191,914,915],{},"grpc_describe",[296,917,918],{},"Services, methods with streaming flags, and every reachable message's fields and types (read-only). With reflection it lists every service.",[281,920,921,926],{},[296,922,923],{},[191,924,925],{},"grpc_check_message",[296,927,928],{},"Keys in a message that the method's input type does not define (read-only)",[281,930,931,936],{},[296,932,933],{},[191,934,935],{},"grpc_example_message",[296,937,938],{},"Example input message (read-only)",[281,940,941,946],{},[296,942,943],{},[191,944,945],{},"grpc_send",[296,947,948],{},"Full pipeline: scripts, auth, the call (shape from the method) and tests",[281,950,951,956],{},[296,952,953],{},[191,954,955],{},"grpc_invoke",[296,957,958,959,961],{},"Unary call; optional ",[191,960,601],{}," overrides the stored one",[281,963,964,969],{},[296,965,966],{},[191,967,968],{},"grpc_stream",[296,970,971,972,975],{},"Streaming call with a ",[191,973,974],{},"messages"," array; replies in arrival order",[281,977,978,983],{},[296,979,980],{},[191,981,982],{},"grpc_set_proto",[296,984,985,986,988],{},"Copy ",[191,987,193],{}," files into a proto set and point the request at it",[281,990,991,996],{},[296,992,993],{},[191,994,995],{},"proto_import",[296,997,998,999,1001],{},"Import ",[191,1000,193],{}," files into a proto set and collection",[178,1003,1004,1005,241],{},"All take the collection and request ids. See ",[219,1006,111],{"href":112},{"title":1008,"searchDepth":1009,"depth":1009,"links":1010},"",2,[1011,1012,1013,1014,1015,1016,1017,1018,1019,1020,1021],{"id":227,"depth":1009,"text":228},{"id":258,"depth":1009,"text":259},{"id":464,"depth":1009,"text":465},{"id":601,"depth":1009,"text":427},{"id":638,"depth":1009,"text":639},{"id":663,"depth":1009,"text":61},{"id":748,"depth":1009,"text":749},{"id":809,"depth":1009,"text":810},{"id":830,"depth":1009,"text":831},{"id":853,"depth":1009,"text":222},{"id":893,"depth":1009,"text":894},"Call unary and streaming gRPC methods using server reflection, imported .proto files or inline definitions.","md",null,{},true,{"title":77,"description":1022},"3w9YEoWorHMajSr_wz4I29EQr-dHCG_gaNptB5nrGOM",[1030,1032],{"title":73,"path":74,"stem":75,"description":1031,"children":-1},"Generate cURL, raw HTTP, fetch, Python, Go, Rust, PowerShell and Node axios code from an HTTP request.",{"title":81,"path":82,"stem":83,"description":1033,"children":-1},"Connect to ws:\u002F\u002F and wss:\u002F\u002F endpoints, send text messages and read the event log. The full composer is available through tools.",1793179613334]