[{"data":1,"prerenderedAt":566},["ShallowReactive",2],{"nav-docs":3,"nav-api":60,"docs-configuration":89},[4],{"title":5,"path":6,"stem":7,"children":8},"Docs","\u002Fdocs","docs",[9,12,16,20,24,28,32,36,40,44,48,52,56],{"title":10,"path":6,"stem":11},"Installation","docs\u002Findex",{"title":13,"path":14,"stem":15},"Sending files","\u002Fdocs\u002Fsending-files","docs\u002F02.sending-files",{"title":17,"path":18,"stem":19},"Receiving files","\u002Fdocs\u002Freceiving-files","docs\u002F03.receiving-files",{"title":21,"path":22,"stem":23},"Passwords, galleries and backgrounds","\u002Fdocs\u002Fshare-options","docs\u002F04.share-options",{"title":25,"path":26,"stem":27},"Expiry and deletion","\u002Fdocs\u002Fexpiry","docs\u002F05.expiry",{"title":29,"path":30,"stem":31},"Users","\u002Fdocs\u002Fusers","docs\u002F06.users",{"title":33,"path":34,"stem":35},"Configuration","\u002Fdocs\u002Fconfiguration","docs\u002F07.configuration",{"title":37,"path":38,"stem":39},"Colours and branding","\u002Fdocs\u002Fcolors","docs\u002F08.colors",{"title":41,"path":42,"stem":43},"Docker","\u002Fdocs\u002Fdocker","docs\u002F09.docker",{"title":45,"path":46,"stem":47},"API keys","\u002Fdocs\u002Fapi-keys","docs\u002F10.api-keys",{"title":49,"path":50,"stem":51},"MCP server","\u002Fdocs\u002Fmcp-server","docs\u002F11.mcp-server",{"title":53,"path":54,"stem":55},"Troubleshooting","\u002Fdocs\u002Ftroubleshooting","docs\u002F12.troubleshooting",{"title":57,"path":58,"stem":59},"Contributing","\u002Fdocs\u002Fcontributing","docs\u002F13.contributing",[61],{"title":62,"path":63,"stem":64,"children":65},"Api","\u002Fapi","api",[66,69,73,77,81,85],{"title":67,"path":63,"stem":68},"REST API","api\u002Findex",{"title":70,"path":71,"stem":72},"Transfers","\u002Fapi\u002Ftransfers","api\u002F02.transfers",{"title":74,"path":75,"stem":76},"Uploading files","\u002Fapi\u002Fupload","api\u002F03.upload",{"title":78,"path":79,"stem":80},"Sending a transfer","\u002Fapi\u002Fsend","api\u002F04.send",{"title":82,"path":83,"stem":84},"Downloading","\u002Fapi\u002Fdownload","api\u002F05.download",{"title":86,"path":87,"stem":88},"Recipients","\u002Fapi\u002Frecipients","api\u002F06.recipients",{"id":90,"title":33,"body":91,"description":560,"extension":561,"meta":562,"navigation":563,"path":34,"seo":564,"stem":35,"__hash__":565},"docs\u002Fdocs\u002F07.configuration.md",{"type":92,"value":93,"toc":554},"minimark",[94,98,107,114,119,349,354,358,426,437,447,451,511,519,525,529,539,550],[95,96,33],"h1",{"id":97},"configuration",[99,100,101,102,106],"p",{},"Everything is read through Nuxt's ",[103,104,105],"code",{},"runtimeConfig",", so one build can be deployed\nwith different settings. Changing a colour, a limit or the database does not\nneed a rebuild — which is what makes a single published Docker image usable by\neveryone.",[99,108,109,110,113],{},"See ",[103,111,112],{},".env.example"," in the repository for the full list.",[115,116,118],"h2",{"id":117},"the-ones-that-matter-most","The ones that matter most",[120,121,122,138],"table",{},[123,124,125],"thead",{},[126,127,128,132,135],"tr",{},[129,130,131],"th",{},"Variable",[129,133,134],{},"Default",[129,136,137],{},"Purpose",[139,140,141,157,203,223,238,253,268,287,305,319,334],"tbody",{},[126,142,143,149,154],{},[144,145,146],"td",{},[103,147,148],{},"NUXT_APP_URL",[144,150,151],{},[103,152,153],{},"http:\u002F\u002Flocalhost:3000",[144,155,156],{},"Base for download and magic links",[126,158,159,164,169],{},[144,160,161],{},[103,162,163],{},"NUXT_LANGUAGE",[144,165,166],{},[103,167,168],{},"en",[144,170,171,172,174,175,174,178,174,181,174,184,174,187,174,190,174,193,174,196,199,200],{},"Interface and e-mail language: ",[103,173,168],{},", ",[103,176,177],{},"de",[103,179,180],{},"fr",[103,182,183],{},"es",[103,185,186],{},"it",[103,188,189],{},"nl",[103,191,192],{},"pl",[103,194,195],{},"uk",[103,197,198],{},"pt"," or ",[103,201,202],{},"cs",[126,204,205,210,215],{},[144,206,207],{},[103,208,209],{},"NUXT_TIMEZONE",[144,211,212],{},[103,213,214],{},"Europe\u002FBerlin",[144,216,217,218,222],{},"Zone dates are ",[219,220,221],"em",{},"displayed"," in",[126,224,225,230,235],{},[144,226,227],{},[103,228,229],{},"NUXT_STORAGE_PATH",[144,231,232],{},[103,233,234],{},".\u002Fstorage",[144,236,237],{},"Where uploads live",[126,239,240,245,250],{},[144,241,242],{},[103,243,244],{},"NUXT_MAX_FILE_SIZE_MB",[144,246,247],{},[103,248,249],{},"2048",[144,251,252],{},"Per-file limit",[126,254,255,260,265],{},[144,256,257],{},[103,258,259],{},"NUXT_MAX_FILES_PER_TRANSFER",[144,261,262],{},[103,263,264],{},"50",[144,266,267],{},"Files per transfer",[126,269,270,275,280],{},[144,271,272],{},[103,273,274],{},"NUXT_DEFAULT_RETENTION_DAYS",[144,276,277],{},[103,278,279],{},"14",[144,281,282,283,286],{},"Pre-selected retention; ",[103,284,285],{},"0"," = no expiry",[126,288,289,294,299],{},[144,290,291],{},[103,292,293],{},"NUXT_EXPIRY_WARNING_HOURS",[144,295,296],{},[103,297,298],{},"24",[144,300,301,302,304],{},"Lead time on the warning mail; ",[103,303,285],{}," disables",[126,306,307,312,316],{},[144,308,309],{},[103,310,311],{},"NUXT_DRAFT_MAX_AGE_HOURS",[144,313,314],{},[103,315,298],{},[144,317,318],{},"When an abandoned upload is swept",[126,320,321,326,331],{},[144,322,323],{},[103,324,325],{},"NUXT_SESSION_MAX_AGE_DAYS",[144,327,328],{},[103,329,330],{},"7",[144,332,333],{},"Member session lifetime",[126,335,336,341,346],{},[144,337,338],{},[103,339,340],{},"NUXT_GUEST_SESSION_MAX_AGE_HOURS",[144,342,343],{},[103,344,345],{},"12",[144,347,348],{},"Guest session lifetime",[99,350,351,353],{},[103,352,148],{}," is the one to get right first. Every download link and every\nmagic link is built from it, so if it is wrong in production, every link you\nsend is wrong.",[115,355,357],{"id":356},"database","Database",[359,360,365],"pre",{"className":361,"code":362,"language":363,"meta":364,"style":364},"language-bash shiki shiki-themes github-light github-dark","NUXT_MYSQL_HOST=localhost\nNUXT_MYSQL_DATABASE=lokaltransfer\nNUXT_MYSQL_USER=root\nNUXT_MYSQL_PASSWORD=\nNUXT_MYSQL_SSL=false\n","bash","",[103,366,367,384,395,406,415],{"__ignoreMap":364},[368,369,372,376,380],"span",{"class":370,"line":371},"line",1,[368,373,375],{"class":374},"sVt8B","NUXT_MYSQL_HOST",[368,377,379],{"class":378},"szBVR","=",[368,381,383],{"class":382},"sZZnC","localhost\n",[368,385,387,390,392],{"class":370,"line":386},2,[368,388,389],{"class":374},"NUXT_MYSQL_DATABASE",[368,391,379],{"class":378},[368,393,394],{"class":382},"lokaltransfer\n",[368,396,398,401,403],{"class":370,"line":397},3,[368,399,400],{"class":374},"NUXT_MYSQL_USER",[368,402,379],{"class":378},[368,404,405],{"class":382},"root\n",[368,407,409,412],{"class":370,"line":408},4,[368,410,411],{"class":374},"NUXT_MYSQL_PASSWORD",[368,413,414],{"class":378},"=\n",[368,416,418,421,423],{"class":370,"line":417},5,[368,419,420],{"class":374},"NUXT_MYSQL_SSL",[368,422,379],{"class":378},[368,424,425],{"class":382},"false\n",[99,427,428,429,432,433,436],{},"Set ",[103,430,431],{},"NUXT_MYSQL_SSL=true"," for a managed database that requires it. Leave it\n",[103,434,435],{},"false"," for a local MySQL — a local server presents a self-signed certificate,\nand turning TLS on without turning off verification produces a\n\"self-signed certificate in certificate chain\" failure at startup.",[99,438,439,440,442,443,446],{},"Timestamps are stored and compared in UTC end to end, whatever\n",[103,441,209],{}," says. That variable only changes how a date is ",[219,444,445],{},"rendered"," for a\nperson.",[115,448,450],{"id":449},"mail","Mail",[359,452,454],{"className":361,"code":453,"language":363,"meta":364,"style":364},"NUXT_EMAIL_HOST=mail.example.com\nNUXT_EMAIL_PORT=465\nNUXT_EMAIL_SECURE=true\nNUXT_EMAIL_USER=noreply@example.com\nNUXT_EMAIL_PASS=\nNUXT_EMAIL_FROM=\n",[103,455,456,466,476,486,496,503],{"__ignoreMap":364},[368,457,458,461,463],{"class":370,"line":371},[368,459,460],{"class":374},"NUXT_EMAIL_HOST",[368,462,379],{"class":378},[368,464,465],{"class":382},"mail.example.com\n",[368,467,468,471,473],{"class":370,"line":386},[368,469,470],{"class":374},"NUXT_EMAIL_PORT",[368,472,379],{"class":378},[368,474,475],{"class":382},"465\n",[368,477,478,481,483],{"class":370,"line":397},[368,479,480],{"class":374},"NUXT_EMAIL_SECURE",[368,482,379],{"class":378},[368,484,485],{"class":382},"true\n",[368,487,488,491,493],{"class":370,"line":408},[368,489,490],{"class":374},"NUXT_EMAIL_USER",[368,492,379],{"class":378},[368,494,495],{"class":382},"noreply@example.com\n",[368,497,498,501],{"class":370,"line":417},[368,499,500],{"class":374},"NUXT_EMAIL_PASS",[368,502,414],{"class":378},[368,504,506,509],{"class":370,"line":505},6,[368,507,508],{"class":374},"NUXT_EMAIL_FROM",[368,510,414],{"class":378},[99,512,513,515,516,518],{},[103,514,508],{}," is separate because many providers require the envelope sender\nto be the authenticated mailbox while you would rather show a friendlier\naddress. It falls back to ",[103,517,490],{},".",[99,520,428,521,524],{},[103,522,523],{},"NUXT_EMAIL_TRANSPORT=json"," to render mail without sending it. Nothing\nleaves the machine — useful for trying the app out before SMTP is configured,\nand what the test suite runs under.",[115,526,528],{"id":527},"storage","Storage",[99,530,531,533,534,538],{},[103,532,229],{}," must be on a volume that survives redeploys, and belongs in\nyour backups ",[535,536,537],"strong",{},"alongside"," the database. The two are only consistent together:\nfiles without rows are unreachable, and rows without files answer 404.",[99,540,541,542,545,546,549],{},"Uploads live outside ",[103,543,544],{},"public\u002F"," and are never served statically. Every download\ngoes through a handler that checks the token and the expiry first, and files are\nalways sent as attachments so an uploaded ",[103,547,548],{},".html"," cannot execute on your origin.",[551,552,553],"style",{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}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":364,"searchDepth":386,"depth":386,"links":555},[556,557,558,559],{"id":117,"depth":386,"text":118},{"id":356,"depth":386,"text":357},{"id":449,"depth":386,"text":450},{"id":527,"depth":386,"text":528},"Everything is read through Nuxt's runtimeConfig, so one build can be deployed\nwith different settings. Changing a colour, a limit or the database does not\nneed a rebuild — which is what makes a single published Docker image usable by\neveryone.","md",{},true,{"title":33,"description":560},"B1Ld-XT7a_Xe6FBC7RaJfDUT7xALAUQeoCb-6utcFHw",1790104591923]