[{"data":1,"prerenderedAt":923},["ShallowReactive",2],{"navigation_docs":3,"-docs-reference-commands":59,"-docs-reference-commands-surround":918},[4,25,40],{"title":5,"path":6,"stem":7,"children":8,"page":24},"Getting Started","\u002Fdocs\u002Fgetting-started","docs\u002F1.getting-started",[9,14,19],{"title":10,"path":11,"stem":12,"icon":13},"Introduction","\u002Fdocs\u002Fgetting-started\u002Fintroduction","docs\u002F1.getting-started\u002F1.introduction","i-lucide-house",{"title":15,"path":16,"stem":17,"icon":18},"Installation","\u002Fdocs\u002Fgetting-started\u002Finstallation","docs\u002F1.getting-started\u002F2.installation","i-lucide-download",{"title":20,"path":21,"stem":22,"icon":23},"Using Porter","\u002Fdocs\u002Fgetting-started\u002Fusing-porter","docs\u002F1.getting-started\u002F3.using-porter","i-lucide-terminal",false,{"title":26,"path":27,"stem":28,"children":29,"page":24},"Architecture","\u002Fdocs\u002Farchitecture","docs\u002F2.architecture",[30,35],{"title":31,"path":32,"stem":33,"icon":34},"Overview","\u002Fdocs\u002Farchitecture\u002Foverview","docs\u002F2.architecture\u002F1.overview","i-lucide-layers",{"title":36,"path":37,"stem":38,"icon":39},"Receiver internals","\u002Fdocs\u002Farchitecture\u002Freceiver","docs\u002F2.architecture\u002F2.receiver","i-lucide-smartphone",{"title":41,"path":42,"stem":43,"children":44,"page":24},"Reference","\u002Fdocs\u002Freference","docs\u002F3.reference",[45,49,54],{"title":46,"path":47,"stem":48,"icon":23},"Commands","\u002Fdocs\u002Freference\u002Fcommands","docs\u002F3.reference\u002F1.commands",{"title":50,"path":51,"stem":52,"icon":53},"Wire format","\u002Fdocs\u002Freference\u002Fwire-format","docs\u002F3.reference\u002F2.wire-format","i-lucide-binary",{"title":55,"path":56,"stem":57,"icon":58},"Decisions","\u002Fdocs\u002Freference\u002Fdecisions","docs\u002F3.reference\u002F3.decisions","i-lucide-file-text",{"id":60,"title":46,"body":61,"description":911,"extension":912,"links":913,"meta":914,"navigation":915,"path":47,"seo":916,"stem":48,"__hash__":917},"docs\u002Fdocs\u002F3.reference\u002F1.commands.md",{"type":62,"value":63,"toc":904},"minimark",[64,155,159,164,381,397,401,529,534,578,593,637,642,700,714,757,769,773,776,900],[65,66,71],"pre",{"className":67,"code":68,"language":69,"meta":70,"style":70},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","porter-sender \u003Cfile> [options]\nporter-sender \u003Cfile.part*.txt|file.partaa|...> [options]\necho 'data' | porter-sender [options]\n","bash","",[72,73,74,101,132],"code",{"__ignoreMap":70},[75,76,79,83,87,91,95,98],"span",{"class":77,"line":78},"line",1,[75,80,82],{"class":81},"sBMFI","porter-sender",[75,84,86],{"class":85},"sMK4o"," \u003C",[75,88,90],{"class":89},"sfazB","fil",[75,92,94],{"class":93},"sTEyZ","e",[75,96,97],{"class":85},">",[75,99,100],{"class":93}," [options]\n",[75,102,104,106,108,111,114,117,120,123,125,129],{"class":77,"line":103},2,[75,105,82],{"class":81},[75,107,86],{"class":85},[75,109,110],{"class":89},"file.part",[75,112,113],{"class":93},"*",[75,115,116],{"class":89},".txt",[75,118,119],{"class":85},"|",[75,121,122],{"class":81},"file.partaa",[75,124,119],{"class":85},[75,126,128],{"class":127},"s2Zo4","...",[75,130,131],{"class":93},"> [options]\n",[75,133,135,138,141,144,147,150,153],{"class":77,"line":134},3,[75,136,137],{"class":127},"echo",[75,139,140],{"class":85}," '",[75,142,143],{"class":89},"data",[75,145,146],{"class":85},"'",[75,148,149],{"class":85}," |",[75,151,152],{"class":81}," porter-sender",[75,154,100],{"class":93},[156,157,158],"p",{},"Run with no arguments for the built-in usage text.",[160,161,163],"h2",{"id":162},"send-options","Send options",[165,166,167,183],"table",{},[168,169,170],"thead",{},[171,172,173,177,180],"tr",{},[174,175,176],"th",{},"Flag",[174,178,179],{},"Default",[174,181,182],{},"Effect",[184,185,186,200,212,225,238,258,270,285,300,315,327,339,354,369],"tbody",{},[171,187,188,194,197],{},[189,190,191],"td",{},[72,192,193],{},"--slideshow",[189,195,196],{},"off",[189,198,199],{},"Start in slideshow mode rather than paused",[171,201,202,207,209],{},[189,203,204],{},[72,205,206],{},"--fountain",[189,208,196],{},[189,210,211],{},"LT-code symbols instead of sequential chunks",[171,213,214,219,222],{},[189,215,216],{},[72,217,218],{},"--base64",[189,220,221],{},"auto",[189,223,224],{},"Force base64 encoding; auto-enabled for non-UTF-8 input",[171,226,227,232,235],{},[189,228,229],{},[72,230,231],{},"--verify=\u003Cfile>",[189,233,234],{},"—",[189,236,237],{},"Verify the input against an SHA-256 checksum file",[171,239,240,245,247],{},[189,241,242],{},[72,243,244],{},"--split-aware",[189,246,196],{},[189,248,249,250,253,254,257],{},"Detect and concatenate ",[72,251,252],{},".part*.txt"," \u002F ",[72,255,256],{},".partaa"," inputs",[171,259,260,265,267],{},[189,261,262],{},[72,263,264],{},"--multi=N|auto",[189,266,196],{},[189,268,269],{},"Render N QR codes per frame in a grid (1–4)",[171,271,272,277,282],{},[189,273,274],{},[72,275,276],{},"--ecc=L|M|Q|H",[189,278,279],{},[72,280,281],{},"L",[189,283,284],{},"Error-correction level",[171,286,287,292,297],{},[189,288,289],{},[72,290,291],{},"--speed=\u003Cseconds>",[189,293,294],{},[72,295,296],{},"0.5",[189,298,299],{},"Delay between frames",[171,301,302,307,312],{},[189,303,304],{},[72,305,306],{},"--buffer=\u003Clines>",[189,308,309],{},[72,310,311],{},"10",[189,313,314],{},"Vertical buffer lines, which sets the QR version",[171,316,317,322,324],{},[189,318,319],{},[72,320,321],{},"--invert",[189,323,196],{},[189,325,326],{},"Invert QR colours",[171,328,329,334,336],{},[189,330,331],{},[72,332,333],{},"--no-info",[189,335,196],{},[189,337,338],{},"Hide the sidebar",[171,340,341,346,348],{},[189,342,343],{},[72,344,345],{},"--resume",[189,347,196],{},[189,349,350,351],{},"Persist slideshow position via ",[72,352,353],{},".porter_history",[171,355,356,361,363],{},[189,357,358],{},[72,359,360],{},"--reset",[189,362,196],{},[189,364,365,366,368],{},"Ignore a saved position (requires ",[72,367,345],{},")",[171,370,371,376,378],{},[189,372,373],{},[72,374,375],{},"--yes",[189,377,196],{},[189,379,380],{},"Skip the confirmation prompt for very long transfers",[382,383,384,386,387,389,390,393,394,396],"note",{},[72,385,218],{}," has no effect with ",[72,388,206],{}," — fountain payloads are always\nbase64. Higher ",[72,391,392],{},"--ecc"," costs payload capacity, so ",[72,395,281],{}," is the default; raise it\nonly if frames are genuinely failing to decode.",[160,398,400],{"id":399},"keybindings","Keybindings",[165,402,403,413],{},[168,404,405],{},[171,406,407,410],{},[174,408,409],{},"Key",[174,411,412],{},"Action",[184,414,415,435,451,467,477,487,499,509,519],{},[171,416,417,432],{},[189,418,419,422,423,422,426,422,429],{},[72,420,421],{},"→"," ",[72,424,425],{},"l",[72,427,428],{},"k",[72,430,431],{},"space",[189,433,434],{},"Next frame",[171,436,437,448],{},[189,438,439,422,442,422,445],{},[72,440,441],{},"←",[72,443,444],{},"h",[72,446,447],{},"j",[189,449,450],{},"Previous frame",[171,452,453,464],{},[189,454,455,458,459,461,462],{},[72,456,457],{},"Shift","+",[72,460,441],{},"\u002F",[72,463,421],{},[189,465,466],{},"Scrub ~100 chunks",[171,468,469,474],{},[189,470,471],{},[72,472,473],{},"J",[189,475,476],{},"Jump to chunk",[171,478,479,484],{},[189,480,481],{},[72,482,483],{},"G",[189,485,486],{},"Gap-fill mode — loop only specified indices",[171,488,489,496],{},[189,490,491,253,493],{},[72,492,458],{},[72,494,495],{},"-",[189,497,498],{},"Adjust speed",[171,500,501,506],{},[189,502,503],{},[72,504,505],{},"S",[189,507,508],{},"Toggle slideshow",[171,510,511,516],{},[189,512,513],{},[72,514,515],{},"I",[189,517,518],{},"Toggle sidebar",[171,520,521,526],{},[189,522,523],{},[72,524,525],{},"Q",[189,527,528],{},"Quit",[160,530,532],{"id":531},"serve",[72,533,531],{},[65,535,537],{"className":67,"code":536,"language":69,"meta":70,"style":70},"porter-sender serve [--host=0.0.0.0] [--port=8080] [--output-dir=received]\n",[72,538,539],{"__ignoreMap":70},[75,540,541,543,546,549,552,555,558,561,564,567,570,572,575],{"class":77,"line":78},[75,542,82],{"class":81},[75,544,545],{"class":89}," serve",[75,547,548],{"class":93}," [--host=0.0.0.0] ",[75,550,551],{"class":85},"[",[75,553,554],{"class":93},"--port",[75,556,557],{"class":85},"=",[75,559,560],{"class":93},"8080",[75,562,563],{"class":85},"]",[75,565,566],{"class":85}," [",[75,568,569],{"class":93},"--output-dir",[75,571,557],{"class":85},[75,573,574],{"class":93},"received",[75,576,577],{"class":85},"]\n",[156,579,580,581,584,585,588,589,592],{},"An HTTP receiver on ",[72,582,583],{},"axum",". ",[72,586,587],{},"POST \u002Fupload"," accepts raw bodies,\n",[72,590,591],{},"multipart\u002Fform-data",", and QR-scan JSON — sequential, fountain and checksum\nframes — reconstructing multi-part and fountain transfers automatically.",[165,594,595,603],{},[168,596,597],{},[171,598,599,601],{},[174,600,176],{},[174,602,179],{},[184,604,605,617,627],{},[171,606,607,612],{},[189,608,609],{},[72,610,611],{},"--host",[189,613,614],{},[72,615,616],{},"0.0.0.0",[171,618,619,623],{},[189,620,621],{},[72,622,554],{},[189,624,625],{},[72,626,560],{},[171,628,629,633],{},[189,630,631],{},[72,632,569],{},[189,634,635],{},[72,636,574],{},[160,638,640],{"id":639},"join",[72,641,639],{},[65,643,645],{"className":67,"code":644,"language":69,"meta":70,"style":70},"porter-sender join \u003Ctransfer-dir|file|id> [...] [--output \u003Cpath>] [--force] [--no-verify]\n",[72,646,647],{"__ignoreMap":70},[75,648,649,651,654,656,659,661,664,666,669,672,674,677,680,683,686,688,691,693,695,698],{"class":77,"line":78},[75,650,82],{"class":81},[75,652,653],{"class":89}," join",[75,655,86],{"class":85},[75,657,658],{"class":89},"transfer-dir",[75,660,119],{"class":85},[75,662,663],{"class":81},"file",[75,665,119],{"class":85},[75,667,668],{"class":81},"id",[75,670,671],{"class":93},"> [...] ",[75,673,551],{"class":85},[75,675,676],{"class":93},"--output ",[75,678,679],{"class":85},"\u003C",[75,681,682],{"class":93},"path",[75,684,685],{"class":85},">]",[75,687,566],{"class":85},[75,689,690],{"class":93},"--force",[75,692,563],{"class":85},[75,694,566],{"class":85},[75,696,697],{"class":93},"--no-verify",[75,699,577],{"class":85},[156,701,702,703,705,706,709,710,713],{},"Reassembles ",[72,704,256],{},", ",[72,707,708],{},".partab",", … into the original file, verifying against\n",[72,711,712],{},"\u003Cbase>.sha256"," when present. The target may be a transfer directory, any file\ninside one, or a bare transfer id relative to the working directory.",[165,715,716,724],{},[168,717,718],{},[171,719,720,722],{},[174,721,176],{},[174,723,182],{},[184,725,726,739,748],{},[171,727,728,733],{},[189,729,730],{},[72,731,732],{},"--output \u003Cpath>",[189,734,735,736],{},"Write elsewhere than ",[72,737,738],{},"\u003Cbase>.joined",[171,740,741,745],{},[189,742,743],{},[72,744,690],{},[189,746,747],{},"Overwrite an existing destination",[171,749,750,754],{},[189,751,752],{},[72,753,697],{},[189,755,756],{},"Skip the SHA-256 check",[382,758,759,761,762,764,765,768],{},[72,760,639],{}," takes a space-separated ",[72,763,732],{},", unlike the ",[72,766,767],{},"--flag=value","\nshape everything else uses.",[160,770,772],{"id":771},"mise-tasks","mise tasks",[156,774,775],{},"From the repo root:",[165,777,778,788],{},[168,779,780],{},[171,781,782,785],{},[174,783,784],{},"Task",[174,786,787],{},"Runs",[184,789,790,802,815,827,839,849,861,871,888],{},[171,791,792,797],{},[189,793,794],{},[72,795,796],{},"rust-build",[189,798,799],{},[72,800,801],{},"cargo build --release",[171,803,804,809],{},[189,805,806],{},[72,807,808],{},"rust-install",[189,810,811,812],{},"Build, then copy to ",[72,813,814],{},"~\u002F.local\u002Fbin\u002Fporter-sender",[171,816,817,822],{},[189,818,819],{},[72,820,821],{},"rust-test",[189,823,824],{},[72,825,826],{},"cargo test",[171,828,829,834],{},[189,830,831],{},[72,832,833],{},"rust-check",[189,835,836],{},[72,837,838],{},"cargo clippy --all-targets -- -D warnings && cargo fmt --check",[171,840,841,846],{},[189,842,843],{},[72,844,845],{},"rust-send",[189,847,848],{},"Build and run the sender",[171,850,851,856],{},[189,852,853],{},[72,854,855],{},"rust-serve",[189,857,858,859],{},"Build and run ",[72,860,531],{},[171,862,863,868],{},[189,864,865],{},[72,866,867],{},"flutter-build",[189,869,870],{},"Release macOS build, x86_64 half stripped",[171,872,873,878],{},[189,874,875],{},[72,876,877],{},"flutter-install",[189,879,880,881,884,885],{},"Copy ",[72,882,883],{},"PorterRx.app"," to ",[72,886,887],{},"\u002FApplications",[171,889,890,895],{},[189,891,892],{},[72,893,894],{},"flutter-test",[189,896,897],{},[72,898,899],{},"flutter analyze && flutter test",[901,902,903],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":70,"searchDepth":103,"depth":103,"links":905},[906,907,908,909,910],{"id":162,"depth":103,"text":163},{"id":399,"depth":103,"text":400},{"id":531,"depth":103,"text":531},{"id":639,"depth":103,"text":639},{"id":771,"depth":103,"text":772},"Every flag, subcommand and keybinding the sender accepts.","md",null,{},{"icon":23},{"title":46,"description":911},"zY6Av-P_7wsq2eJCce7W6YGxQjLNQ3Z3HOYvjsNGmNQ",[919,921],{"title":36,"path":37,"stem":38,"description":920,"icon":39,"children":-1},"The worker isolate that owns decoding, and the disk hydration that makes a transfer resumable.",{"title":50,"path":51,"stem":52,"description":922,"icon":53,"children":-1},"Normative description of what a Porter QR frame contains.",1786360986182]