[{"data":1,"prerenderedAt":800},["ShallowReactive",2],{"navigation_docs":3,"-contributing-architecture":172,"-contributing-architecture-surround":795},[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":149,"body":174,"description":788,"extension":789,"links":790,"meta":791,"navigation":792,"path":150,"seo":793,"stem":151,"__hash__":794},"docs\u002F4.contributing\u002F3.architecture.md",{"type":175,"value":176,"toc":780},"minimark",[177,187,191,563,570,574,717,721],[178,179,181,182,186],"h2",{"id":180},"layer-table-enforced-by-cargo-xtask-layers","Layer table (enforced by ",[183,184,185],"code",{},"cargo xtask layers",")",[188,189,190],"p",{},"A crate may depend only on lower layers.",[192,193,194,210],"table",{},[195,196,197],"thead",{},[198,199,200,204,207],"tr",{},[201,202,203],"th",{},"Layer",[201,205,206],{},"Crate",[201,208,209],{},"Role",[211,212,213,229,243,266,276,287,301,315,326,336,346,406,416,426,445,456,486,496,506],"tbody",{},[198,214,215,219,222],{},[216,217,218],"td",{},"L0",[216,220,221],{},"postguy-model",[216,223,224,225,228],{},"Plain data and serde: ids, collections, folders, requests (HTTP\u002FgRPC\u002FWS), key-value rows, bodies, auth configs, settings, environments, examples, history. No I\u002FO. Unknown fields are preserved in ",[183,226,227],{},"extras",".",[198,230,231,233,236],{},[216,232,218],{},[216,234,235],{},"postguy-util",[216,237,238,239,242],{},"Size-capped readers, depth-limited JSON walker, ring buffer, fractional ordering, atomic file helpers, time (local-time formatting through ",[183,240,241],{},"jiff","; the offset falls back to UTC when the system zone is unreadable).",[198,244,245,248,251],{},[216,246,247],{},"L1",[216,249,250],{},"postguy-vars",[216,252,253,254,257,258,261,262,265],{},"Variable scopes and precedence, ",[183,255,256],{},"{{var}}"," resolver (depth limit, cycle guard), dynamic variables, secret masking, ",[183,259,260],{},"{{% %}}"," body shortcodes (",[183,263,264],{},"shortcode","). Pure.",[198,267,268,270,273],{},[216,269,247],{},[216,271,272],{},"postguy-urlkit",[216,274,275],{},"URL parse\u002Fbuild, per-component percent-encoding, query\u002FURL two-way sync, path variables, host matching. Pure.",[198,277,278,281,284],{},[216,279,280],{},"L2",[216,282,283],{},"postguy-auth",[216,285,286],{},"Pure signing and credential algorithms. A canonical request goes in; headers and params come out. No sockets.",[198,288,289,291,294],{},[216,290,280],{},[216,292,293],{},"postguy-interop",[216,295,296,297,300],{},"Import\u002Fexport (Postman v2.0\u002Fv2.1, environments, cURL, OpenAPI, HAR, Bruno folders) with ",[183,298,299],{},"ImportReport",". Bounded sizes and nesting.",[198,302,303,305,308],{},[216,304,280],{},[216,306,307],{},"postguy-store",[216,309,310,311,314],{},"Workspace on disk: atomic writes with ",[183,312,313],{},".bak",", lock file, trash, history, session, settings, secrets split.",[198,316,317,320,323],{},[216,318,319],{},"L3",[216,321,322],{},"postguy-http",[216,324,325],{},"hyper-direct connector: connect\u002FTLS\u002Ftiming, redirects, compression, cookie jar, proxy, auth retries, streaming, cancellation.",[198,327,328,330,333],{},[216,329,319],{},[216,331,332],{},"postguy-grpc",[216,334,335],{},"protox compile, descriptor pool, reflection, dynamic invoke, examples, status\u002Ftrailers.",[198,337,338,340,343],{},[216,339,319],{},[216,341,342],{},"postguy-ws",[216,344,345],{},"tokio-tungstenite WebSocket client: handshake, TLS, frames, reconnect policy, message log.",[198,347,348,350,353],{},[216,349,319],{},[216,351,352],{},"postguy-script",[216,354,355,356,359,360,363,364,367,368,367,371,367,374,367,377,380,381,384,385,367,388,367,391,367,394,397,398,401,402,405],{},"rquickjs (QuickJS) sandbox with the ",[183,357,358],{},"pm"," API, its superset ",[183,361,362],{},"pg"," (plus Bruno's ",[183,365,366],{},"bru","\u002F",[183,369,370],{},"req",[183,372,373],{},"res",[183,375,376],{},"test",[183,378,379],{},"expect","), request assertions, asset-backed ",[183,382,383],{},"require"," with read-only ",[183,386,387],{},"fs",[183,389,390],{},"path",[183,392,393],{},"Buffer",[183,395,396],{},"crypto.randomUUID"," shims, Chai-style ",[183,399,400],{},"pm.expect"," and hard wall-clock, memory, stack and cancel limits. All of it is Rust closures. ",[183,403,404],{},"Settings.disable_scripts"," is the off switch.",[198,407,408,410,413],{},[216,409,319],{},[216,411,412],{},"postguy-snippets",[216,414,415],{},"Code generation (cURL, fetch, requests, Go, reqwest, PowerShell, axios, grpcurl). Pure.",[198,417,418,420,423],{},[216,419,319],{},[216,421,422],{},"postguy-testkit",[216,424,425],{},"Loopback servers for tests only. A dev-dependency, never shipped.",[198,427,428,431,434],{},[216,429,430],{},"L4",[216,432,433],{},"postguy-runner",[216,435,436,437,440,441,444],{},"Collection runs: plans, iterations, CSV\u002FJSON data files, ",[183,438,439],{},"setNextRequest"," sequencing, results model, CLI\u002FJSON\u002FJUnit\u002FHTML\u002FCSV\u002FXLSX\u002FPDF reporters (one ",[183,442,443],{},"ReportTable"," feeds the CSV, XLSX and PDF writers). Pure.",[198,446,447,450,453],{},[216,448,449],{},"L6",[216,451,452],{},"postguy-engine",[216,454,455],{},"Façade and session: workspace handle, edits\u002Fundo, send pipeline (12 steps), per-collection assets, Bruno folder import, runtime variables, command registry, console, history, runtime.",[198,457,458,461,464],{},[216,459,460],{},"L7",[216,462,463],{},"postguy-platform",[216,465,466,467,470,471,470,474,477,478,481,482,485],{},"OS services. Today: ",[183,468,469],{},"open_url",", ",[183,472,473],{},"save_export",[183,475,476],{},"pick_data_file"," and ",[183,479,480],{},"pick_import_paths"," (",[183,483,484],{},"crates\u002Fplatform\u002Fsrc\u002Flib.rs","). Planned: directories, reveal, clipboard, system proxy and system font fallback.",[198,487,488,490,493],{},[216,489,460],{},[216,491,492],{},"postguy-ui-egui",[216,494,495],{},"The egui shell (eframe + glow): widgets and screens. Depends on postguy-vars (shortcode highlighting) and postguy-util (times).",[198,497,498,500,503],{},[216,499,460],{},[216,501,502],{},"postguy-automation",[216,504,505],{},"Headless tool table over the engine, CLI backend, opt-in UI control channel. The opt-in MCP server is planned, not shipped.",[198,507,508,511,514],{},[216,509,510],{},"apps",[216,512,513],{},"postguy, postguy-cli",[216,515,516,517,520,521,524,525,470,528,470,531,481,534,537,538,541,542,545,546,481,549,552,553,537,555,558,559,562],{},"Desktop app (with the opt-in ",[183,518,519],{},"--control"," server in ",[183,522,523],{},"apps\u002Fpostguy\u002Fsrc\u002Fcontrol.rs","). Headless CLI with the verbs ",[183,526,527],{},"tools",[183,529,530],{},"call",[183,532,533],{},"run",[183,535,536],{},"--script"," \u002F ",[183,539,540],{},"--collection","), ",[183,543,544],{},"ui"," and the dev-only ",[183,547,548],{},"fuzz-target",[183,550,551],{},"apps\u002Fpostguy-cli\u002Fsrc\u002Fmain.rs","). Import, export and snippets go through the ",[183,554,530],{},[183,556,557],{},"run --script"," tools. ",[183,560,561],{},"postguy-cli mcp"," does not exist yet.",[188,564,565,566,569],{},"Tooling: ",[183,567,568],{},"xtask"," (build system, gates, fuzz, icons\u002Flogo, size) is outside the layer system.",[178,571,573],{"id":572},"rules-that-hold-everywhere","Rules that hold everywhere",[575,576,577,631,640,659],"ul",{},[578,579,580,481,584,591,592],"li",{},[581,582,583],"strong",{},"Never crash",[585,586,590],"a",{"href":587,"rel":588},"https:\u002F\u002Fgithub.com\u002Fzuramai\u002Fpostguy\u002Fblob\u002Fmain\u002FAGENTS.md",[589],"nofollow","AGENTS.md 4","):\n",[575,593,594,609,614,617,620,626],{},[578,595,596,597,600,601,604,605,608],{},"Use ",[183,598,599],{},"Result"," everywhere. No ",[183,602,603],{},"unwrap"," or ",[183,606,607],{},"panic"," in non-test code.",[578,610,611,228],{},[183,612,613],{},"unsafe_code = \"forbid\"",[578,615,616],{},"Use checked arithmetic on input-sized values.",[578,618,619],{},"Bound recursion and allocations.",[578,621,596,622,625],{},[183,623,624],{},"catch_unwind"," at import, script and command entry points.",[578,627,628,228],{},[183,629,630],{},"panic = \"unwind\"",[578,632,633,636,637,228],{},[581,634,635],{},"Layering:"," a crate may depend only on lower layers. Nothing below L7 reaches egui, winit, eframe or rfd. The layers gate walks the normal-dependency closure over ",[183,638,639],{},"cargo metadata",[578,641,642,645],{},[581,643,644],{},"Concurrency:",[575,646,647,653,656],{},[578,648,649,652],{},[183,650,651],{},"engine"," owns one tokio runtime on dedicated threads.",[578,654,655],{},"The UI receives events and repaints once per batch.",[578,657,658],{},"Every long operation takes a cancellation token and wraps panics into error rows.",[578,660,661,664,665],{},[581,662,663],{},"Workspace on disk:"," one folder.\n",[575,666,667,700,706],{},[578,668,669,670,470,673,470,676,470,679,470,682,470,685,470,688,470,691,470,694,470,697,228],{},"Contents: ",[183,671,672],{},"postguy.json",[183,674,675],{},"collections\u002F\u003Cid>.json",[183,677,678],{},"environments\u002F",[183,680,681],{},"globals.json",[183,683,684],{},"protos\u002F",[183,686,687],{},"files\u002F",[183,689,690],{},"assets\u002F\u003Ccollection id>\u002F",[183,692,693],{},"history.jsonl",[183,695,696],{},".trash\u002F",[183,698,699],{},".postguy\u002F{secrets,cookies,responses,runs,lock}",[578,701,702,703,705],{},"Writes are atomic. There is a ",[183,704,313],{}," file and corrupt-file recovery.",[578,707,708,709,712,713,716],{},"Settings, session and the recent-workspaces list live in ",[183,710,711],{},".postguy-config\u002F{settings,session,recent}.json"," inside the workspace (",[183,714,715],{},"apps\u002Fpostguy\u002Fsrc\u002Fmain.rs",").",[178,718,720],{"id":719},"decisions-made-with-measurements","Decisions made with measurements",[722,723,724,730,740,746,774],"ol",{},[578,725,726,729],{},[581,727,728],{},"Renderer:"," eframe glow renderer. It is smaller and warms up faster than wgpu.",[578,731,732,735,736,739],{},[581,733,734],{},"Response bodies:"," bytes, plus an off-thread line index, plus ",[183,737,738],{},"show_rows"," virtualisation.",[578,741,742,745],{},[581,743,744],{},"HTTP stack:"," hyper-direct connector. It gives control of timings, redirects, header order and cancellation. tonic shares the same hyper stack.",[578,747,748,751,752],{},[581,749,750],{},"Scripting:"," rquickjs (QuickJS, MIT). The owner approved it for its memory limit, interrupt handler and stack limit.\n",[575,753,754,757,767],{},[578,755,756],{},"boa_engine exposes none of these and is not used.",[578,758,759,762,763,766],{},[183,760,761],{},"rust-alloc"," stays off because it turns ",[183,764,765],{},"set_memory_limit"," into a no-op.",[578,768,769,770,773],{},"Windows x86 and FreeBSD build the bindings with ",[183,771,772],{},"bindgen",", because no pregenerated ones ship for those targets.",[578,775,776,779],{},[581,777,778],{},"Icons and logo:"," build-time path data plus painter strokes. No SVG renderer is shipped.",{"title":781,"searchDepth":782,"depth":782,"links":783},"",2,[784,786,787],{"id":180,"depth":782,"text":785},"Layer table (enforced by cargo xtask layers)",{"id":572,"depth":782,"text":573},{"id":719,"depth":782,"text":720},"The layer table, the rules that hold across crates, the workspace on disk and the measured design decisions.","md",null,{},true,{"title":149,"description":788},"pKkdnhDrSzATe9ogAklqyti2O6Z00dVwK5a1dqQ4FW0",[796,798],{"title":145,"path":146,"stem":147,"description":797,"children":-1},"Toolchain, everyday commands, working rules and the CI gates.",{"title":153,"path":154,"stem":155,"description":799,"children":-1},"Ranked open gaps, the feature investigation matrix and what has been closed.",1793179614399]