[{"data":1,"prerenderedAt":2400},["ShallowReactive",2],{"docs-index":3},[4,401,789,931,1029,1937,2305],{"id":5,"title":6,"body":7,"description":393,"extension":394,"meta":395,"navigation":396,"path":397,"seo":398,"stem":399,"__hash__":400},"docs\u002Fdocs\u002Fgetting-started.md","Getting Started",{"type":8,"value":9,"toc":373},"minimark",[10,14,18,21,26,29,50,59,62,64,68,75,78,83,86,113,117,123,126,146,150,157,159,163,166,183,186,188,192,205,207,211,214,234,242,244,248,251,269,271,275,278,280,284,287,307,310,312,316,319,333,335,339,346,348,352],[11,12,6],"h1",{"id":13},"getting-started",[15,16,17],"p",{},"This guide walks you through everything you need to know to use Quark day-to-day. No technical knowledge required.",[19,20],"hr",{},[22,23,25],"h2",{"id":24},"accessing-quark","Accessing Quark",[15,27,28],{},"Once Quark is set up on your home network, you can reach it from any device on your WiFi:",[30,31,32,36,47],"ol",{},[33,34,35],"li",{},"Open a browser on your phone, tablet, or computer",[33,37,38,39,46],{},"Go to ",[40,41,42],"strong",{},[43,44,45],"code",{},"http:\u002F\u002Fquark.home.local"," (or whatever hostname your device was given during setup)",[33,48,49],{},"Log in with your username and password",[51,52,53],"blockquote",{},[15,54,55,58],{},[40,56,57],{},"Tip:"," Bookmark the address so you don't have to type it every time.",[15,60,61],{},"If you can't reach the address, make sure Quark is powered on and connected to the same WiFi network you're on.\nQuark only works on your local network — this is by design to keep your files private.",[19,63],{},[22,65,67],{"id":66},"cirrus-your-files","Cirrus — Your Files",[15,69,70],{},[71,72],"img",{"alt":73,"src":74},"Cirrus Files","\u002Fassets\u002Fdocs\u002Ffiles.webp",[15,76,77],{},"Cirrus is the file browser. Think of it like a Google Drive or iCloud interface, except everything lives on your\nhardware at home.",[79,80,82],"h3",{"id":81},"browsing-your-files","Browsing your files",[15,84,85],{},"When you open Cirrus you'll see your files and folders listed. You can:",[87,88,89,95,101,107],"ul",{},[33,90,91,94],{},[40,92,93],{},"Click a folder"," to open it",[33,96,97,100],{},[40,98,99],{},"Click a file"," to download or preview it (images and common file types open in a viewer)",[33,102,103,106],{},[40,104,105],{},"Use the breadcrumb bar"," at the top to navigate back up the folder tree",[33,108,109,112],{},[40,110,111],{},"Click the home icon"," in the breadcrumb to jump back to the root",[79,114,116],{"id":115},"changing-the-view","Changing the view",[15,118,119],{},[71,120],{"alt":121,"src":122},"View Selection","\u002Fassets\u002Fdocs\u002Fview-buttons.webp",[15,124,125],{},"Cirrus has three layouts — pick whichever works best for what you're doing:",[87,127,128,134,140],{},[33,129,130,133],{},[40,131,132],{},"List"," — a compact row-by-row view, good for lots of files",[33,135,136,139],{},[40,137,138],{},"Grid"," — larger thumbnails, good for photos",[33,141,142,145],{},[40,143,144],{},"Unified \u002F Per-device"," — toggle between seeing all your storage devices as one combined view, or seeing each\ndevice separately",[79,147,149],{"id":148},"searching-for-a-file","Searching for a file",[15,151,152,153,156],{},"Click the ",[40,154,155],{},"search icon"," in the top bar and type a filename. Cirrus will search across all your connected storage.",[19,158],{},[22,160,162],{"id":161},"uploading-files","Uploading Files",[15,164,165],{},"To add files to Quark:",[30,167,168,171,177,180],{},[33,169,170],{},"Navigate to the folder you want to upload into",[33,172,152,173,176],{},[40,174,175],{},"Upload"," button in the top bar",[33,178,179],{},"Choose your files from your device",[33,181,182],{},"Wait for the upload to complete — a progress indicator will show you how it's going",[15,184,185],{},"You can upload multiple files at once. Large files may take a moment depending on your home network speed.",[19,187],{},[22,189,191],{"id":190},"creating-folders","Creating Folders",[30,193,194,197,202],{},[33,195,196],{},"Navigate to where you want the new folder",[33,198,152,199,176],{},[40,200,201],{},"New",[33,203,204],{},"Type a name and confirm",[19,206],{},[22,208,210],{"id":209},"moving-and-renaming-files","Moving and Renaming Files",[15,212,213],{},"Right-click (or long-press on mobile) any file or folder to open the action menu. From there you can:",[87,215,216,222,228],{},[33,217,218,221],{},[40,219,220],{},"Rename"," — change the name",[33,223,224,227],{},[40,225,226],{},"Move"," — move it to a different folder or storage device",[33,229,230,233],{},[40,231,232],{},"Delete"," — remove it permanently",[51,235,236],{},[15,237,238,241],{},[40,239,240],{},"Note:"," Deleting files is permanent. There is no recycle bin.",[19,243],{},[22,245,247],{"id":246},"storage-devices","Storage Devices",[15,249,250],{},"Quark can manage multiple storage devices (hard drives, USB drives) connected to it. If you have more than one:",[87,252,253,260,266],{},[33,254,255,256,259],{},"Use the ",[40,257,258],{},"Unified view"," to see everything in one place",[33,261,255,262,265],{},[40,263,264],{},"Per-device view"," to see what's on each drive separately",[33,267,268],{},"When uploading, you may be prompted to choose which device to upload to",[19,270],{},[22,272,274],{"id":273},"photos","Photos",[15,276,277],{},"The Photos section shows your images organized by time. You can browse, view, and download your photos from here.\nPhotos works best when your images are stored in a dedicated photos folder on your storage device.",[19,279],{},[22,281,283],{"id":282},"health","Health",[15,285,286],{},"The Health page shows you how Quark is doing:",[87,288,289,295,301],{},[33,290,291,294],{},[40,292,293],{},"Disk usage"," — how much storage space is used vs. available",[33,296,297,300],{},[40,298,299],{},"Temperature"," — the device's current temperature (important for small devices like a Raspberry Pi)",[33,302,303,306],{},[40,304,305],{},"Uptime"," — how long the device has been running",[15,308,309],{},"If anything looks off (disk nearly full, temperature very high), this is where you'll see it first.",[19,311],{},[22,313,315],{"id":314},"settings","Settings",[15,317,318],{},"The Settings page lets you:",[87,320,321,327],{},[33,322,323,326],{},[40,324,325],{},"Toggle automatic updates"," — turn on to have Quark update itself overnight when a new version is available;\nturn off if you want to control updates manually",[33,328,329,332],{},[40,330,331],{},"Export performance metrics"," — saves recent health data to a file you can share if you're troubleshooting with\nthe team",[19,334],{},[22,336,338],{"id":337},"logging-out","Logging Out",[15,340,341,342,345],{},"Click your username or the settings icon and choose ",[40,343,344],{},"Log out"," when you're done. This is good practice on shared\ndevices.",[19,347],{},[22,349,351],{"id":350},"next-steps","Next Steps",[87,353,354,364],{},[33,355,356,363],{},[40,357,358],{},[359,360,362],"a",{"href":361},"\u002Fdocs\u002Fhelp","Help & Support"," — troubleshooting and how to get in touch",[33,365,366,372],{},[40,367,368],{},[359,369,371],{"href":370},"\u002Fdocs\u002Fnerd-notes","Nerd Notes"," — technical details for self-hosters and tinkerers",{"title":374,"searchDepth":375,"depth":375,"links":376},"",2,[377,378,384,385,386,387,388,389,390,391,392],{"id":24,"depth":375,"text":25},{"id":66,"depth":375,"text":67,"children":379},[380,382,383],{"id":81,"depth":381,"text":82},3,{"id":115,"depth":381,"text":116},{"id":148,"depth":381,"text":149},{"id":161,"depth":375,"text":162},{"id":190,"depth":375,"text":191},{"id":209,"depth":375,"text":210},{"id":246,"depth":375,"text":247},{"id":273,"depth":375,"text":274},{"id":282,"depth":375,"text":283},{"id":314,"depth":375,"text":315},{"id":337,"depth":375,"text":338},{"id":350,"depth":375,"text":351},"Get up and running with Quark — adding files, managing storage, and finding your way around","md",{},{"title":6,"order":375},"\u002Fdocs\u002Fgetting-started",{"title":6,"description":393},"docs\u002Fgetting-started","no-kjQfPROKF5eQUjVexCaQEgd2t5nxwj3T6oQTOGZ8",{"id":402,"title":403,"body":404,"description":780,"extension":394,"meta":781,"navigation":782,"path":785,"seo":786,"stem":787,"__hash__":788},"docs\u002Fdocs\u002Fgoogle-takeout.md","Migrating from Google — Google Takeout Guide",{"type":8,"value":405,"toc":771},[406,409,416,418,422,485,488,504,506,510,513,524,526,530,533,562,569,571,575,578,602,635,638,640,644,651,668,670,674,680,686,692,712,714,718,721,748,751,753],[11,407,403],{"id":408},"migrating-from-google-google-takeout-guide",[15,410,411,412,415],{},"Google Takeout lets you download a copy of everything you've stored with Google — your photos, Drive files, emails,\nand more. This guide walks you through exporting your Google data and importing it into Quark, where it lives\n",[40,413,414],{},"on your own hardware, on your own home network"," — not on anyone else's server.",[19,417],{},[22,419,421],{"id":420},"step-1-request-your-google-takeout-export","Step 1: Request your Google Takeout export",[30,423,424,435,455,461,467,480],{},[33,425,38,426,434],{},[40,427,428],{},[359,429,433],{"href":430,"rel":431},"https:\u002F\u002Ftakeout.google.com",[432],"nofollow","takeout.google.com"," (sign in if prompted)",[33,436,437,438],{},"You'll see a list of Google products. Deselect everything, then check only the ones you want:\n",[87,439,440,446,452],{},[33,441,442,445],{},[40,443,444],{},"Google Photos"," — your photos and videos",[33,447,448,451],{},[40,449,450],{},"Google Drive"," — documents, spreadsheets, and files",[33,453,454],{},"(You can add others later — start small for your first export)",[33,456,457,458],{},"Click ",[40,459,460],{},"Next step",[33,462,463,464],{},"Under \"Delivery method,\" choose ",[40,465,466],{},"Send download link via email",[33,468,469,470,475,476,479],{},"Set file type to ",[40,471,472],{},[43,473,474],{},".zip"," and choose a size — ",[40,477,478],{},"2 GB"," works well (larger sizes can be harder to upload)",[33,481,457,482],{},[40,483,484],{},"Create export",[15,486,487],{},"Google will take anywhere from a few minutes to a few days to prepare your export, depending on how much data you\nhave. You'll get an email when it's ready.",[51,489,490],{},[15,491,492,495,496,499,500,503],{},[40,493,494],{},"Heads up:"," Large Google Photos libraries often split into multiple zip files (e.g. ",[43,497,498],{},"takeout-20240101-001.zip",",\n",[43,501,502],{},"takeout-20240101-002.zip","). That's normal — just repeat the upload steps below for each one.",[19,505],{},[22,507,509],{"id":508},"step-2-download-your-export","Step 2: Download your export",[15,511,512],{},"When Google emails you that your export is ready:",[30,514,515,518,521],{},[33,516,517],{},"Open the email from Google",[33,519,520],{},"Click the download link for each zip file",[33,522,523],{},"Save them somewhere you can find them (your Downloads folder works fine)",[19,525],{},[22,527,529],{"id":528},"step-3-upload-to-quark","Step 3: Upload to Quark",[15,531,532],{},"Quark runs on your home network — your files go from your computer directly to the device in your home, without\npassing through the internet or any cloud service.",[30,534,535,538,544,551,554,559],{},[33,536,537],{},"Make sure you're connected to your home WiFi",[33,539,540,541],{},"Open Quark in your browser and navigate to ",[40,542,543],{},"Files",[33,545,546,547,550],{},"Create a folder for your Google data if you want to keep things organized (e.g. ",[43,548,549],{},"Google Import",")",[33,552,553],{},"Navigate into that folder",[33,555,457,556,558],{},[40,557,175],{}," and select your Takeout zip file(s)",[33,560,561],{},"Wait for the upload to complete — large files may take a few minutes depending on your home network speed",[51,563,564],{},[15,565,566,568],{},[40,567,57],{}," You can upload multiple zip files at once by selecting them all in the file picker.",[19,570],{},[22,572,574],{"id":573},"step-4-extract-the-contents","Step 4: Extract the contents",[15,576,577],{},"Once uploaded, your zip file is sitting in Quark but still compressed. To get your actual photos and files out:",[30,579,580,586,593,599],{},[33,581,582,583,585],{},"Find the uploaded ",[43,584,474],{}," file in the Files view",[33,587,588,589,592],{},"Right-click it (or tap the ",[40,590,591],{},"⋮"," menu)",[33,594,595,596],{},"Select ",[40,597,598],{},"Extract here",[33,600,601],{},"Quark will unpack the zip in place — this may take a moment for large archives",[51,603,604],{},[15,605,606,609,610,612,613,616,617,620,621,623,624,627,628,627,631,634],{},[40,607,608],{},"About Google Photos' nested structure:"," Google Photos exports put your photos inside a folder called\n",[43,611,444],{},", then inside year folders like ",[43,614,615],{},"Photos from 2022",". Inside each year folder you'll find your photos\nalongside ",[43,618,619],{},".json"," sidecar files containing metadata. The ",[43,622,619],{}," files are Google's metadata — you can keep them or\ndelete them; your actual photos are the ",[43,625,626],{},".jpg",", ",[43,629,630],{},".heic",[43,632,633],{},".mp4",", etc. files.",[15,636,637],{},"After extraction you can delete the original zip file to reclaim space.",[19,639],{},[22,641,643],{"id":642},"step-5-browse-your-files","Step 5: Browse your files",[15,645,646,647,650],{},"Your photos and documents are now stored on ",[40,648,649],{},"your device, in your home"," — not on Google's servers, not on anyone\nelse's. You can access them from any device connected to your home WiFi:",[87,652,653,659,665],{},[33,654,655,656,658],{},"Browse them in the ",[40,657,543],{}," section",[33,660,661,662,664],{},"View photos in the ",[40,663,274],{}," section (Quark automatically finds images in your files)",[33,666,667],{},"Access them from any phone, tablet, or computer on your home network",[19,669],{},[22,671,673],{"id":672},"tips","Tips",[15,675,676,679],{},[40,677,678],{},"Start with a small export first."," Export just one year of photos to get comfortable with the process before\nimporting everything.",[15,681,682,685],{},[40,683,684],{},"Multiple zip files?"," Upload and extract each one the same way. Google splits large libraries into separate zips —\nthey all contain different files, so you want to import all of them.",[15,687,688,691],{},[40,689,690],{},"Zip inside a zip?"," Google sometimes packages exports as a zip containing other zips. If you see nested zips after\nextracting, just extract those too — Quark handles zip extraction at any level.",[15,693,694,697,698,499,701,627,704,707,708,711],{},[40,695,696],{},"What about Google Docs files?"," Google Docs, Sheets, and Slides export as Microsoft Office formats (",[43,699,700],{},".docx",[43,702,703],{},".xlsx",[43,705,706],{},".pptx",") or as ",[43,709,710],{},".pdf",". They'll show up in your files just like any other document.",[19,713],{},[22,715,717],{"id":716},"what-about-other-google-services","What about other Google services?",[15,719,720],{},"This guide covers Photos and Drive, but Google Takeout supports many other products. Once you're comfortable with\nthe process, you can also export:",[87,722,723,733,742],{},[33,724,725,728,729,732],{},[40,726,727],{},"Gmail"," (as ",[43,730,731],{},".mbox"," format) — email clients like Thunderbird can import these",[33,734,735,728,738,741],{},[40,736,737],{},"Google Calendar",[43,739,740],{},".ics",") — most calendar apps can import these",[33,743,744,747],{},[40,745,746],{},"YouTube"," — your videos, watch history, and liked videos",[15,749,750],{},"Quark is primarily a file and photo manager, so the Photos and Drive exports are the most useful to store there\ndirectly.",[19,752],{},[15,754,755],{},[756,757,758,759,764,765,770],"em",{},"Need help? Visit the ",[359,760,763],{"href":761,"rel":762},"https:\u002F\u002Fautobutler.org\u002Fsupport",[432],"support page"," or\n",[359,766,769],{"href":767,"rel":768},"https:\u002F\u002Fautobutler.org\u002Fcommunity",[432],"community forums",".",{"title":374,"searchDepth":375,"depth":375,"links":772},[773,774,775,776,777,778,779],{"id":420,"depth":375,"text":421},{"id":508,"depth":375,"text":509},{"id":528,"depth":375,"text":529},{"id":573,"depth":375,"text":574},{"id":642,"depth":375,"text":643},{"id":672,"depth":375,"text":673},{"id":716,"depth":375,"text":717},"How to export your data from Google and import it into Quark using Google Takeout",{},{"title":783,"order":784},"Google Takeout Guide",5,"\u002Fdocs\u002Fgoogle-takeout",{"title":403,"description":780},"docs\u002Fgoogle-takeout","PfvtgJx0zvLZD78mh0fcJFq9hloBr_X7A3zQ-6xmgYY",{"id":790,"title":362,"body":791,"description":924,"extension":394,"meta":925,"navigation":926,"path":361,"seo":928,"stem":929,"__hash__":930},"docs\u002Fdocs\u002Fhelp.md",{"type":8,"value":792,"toc":914},[793,796,798,802,806,823,827,840,844,847,851,883,887,890,892,896,906],[11,794,362],{"id":795},"help-support",[19,797],{},[22,799,801],{"id":800},"troubleshooting","Troubleshooting",[79,803,805],{"id":804},"i-cant-reach-quark-in-my-browser","I can't reach Quark in my browser",[87,807,808,811,814,820],{},[33,809,810],{},"Make sure Quark is powered on",[33,812,813],{},"Make sure you're on the same WiFi network as your Quark device",[33,815,816,817,819],{},"Try ",[43,818,45],{}," — if you changed the hostname during setup, use that instead",[33,821,822],{},"Try restarting your router and your Quark device",[79,824,826],{"id":825},"im-getting-an-error-when-i-try-to-install-quark","I'm getting an error when I try to install Quark",[15,828,829,830,833,834,839],{},"Make sure you're using the installer for your operating system and architecture. The ",[359,831,832],{"href":370},"nerd notes","\npage has installation details. If you're still stuck,\n",[359,835,838],{"href":836,"rel":837},"https:\u002F\u002Fgithub.com\u002Fautobutler-org\u002Fquark\u002Fissues",[432],"open a GitHub issue"," and someone will help.",[79,841,843],{"id":842},"quark-doesnt-work-with-my-vpn","Quark doesn't work with my VPN",[15,845,846],{},"This is expected. Quark runs entirely on your local network — connecting through a VPN routes traffic outside your\nhome, so the two conflict. Disable your VPN when accessing Quark on your home network. (We're working on built-in\nremote access so you won't need a third-party VPN to reach it from outside your home.)",[79,848,850],{"id":849},"im-having-performance-issues","I'm having performance issues",[30,852,853,859,870],{},[33,854,855,856,858],{},"Check the ",[40,857,283],{}," page in Quark — high disk usage or high temperatures can cause slowdowns",[33,860,861,862,865,866,869],{},"In Settings, click ",[40,863,864],{},"Export Performance Metrics"," — this saves recent health data to a ",[43,867,868],{},"metrics.sqlite"," file",[33,871,872,873,877,878,882],{},"Share that file in a ",[359,874,876],{"href":836,"rel":875},[432],"GitHub issue"," or email it to\n",[359,879,881],{"href":880},"mailto:support@autobutler.org","support@autobutler.org"," and we'll take a look",[79,884,886],{"id":885},"my-files-arent-showing-up-after-i-uploaded-them","My files aren't showing up after I uploaded them",[15,888,889],{},"Try refreshing the page. If they still don't appear, check that your upload completed successfully (the progress\nindicator should have reached 100%). Very large files can take a minute.",[19,891],{},[22,893,895],{"id":894},"get-help","Get Help",[15,897,898,901,902],{},[40,899,900],{},"GitHub Issues"," for questions, bug reports, and feature requests:\n→ ",[359,903,905],{"href":836,"rel":904},[432],"github.com\u002Fautobutler-org\u002Fquark\u002Fissues",[15,907,908,911,912],{},[40,909,910],{},"Email"," for private matters:\n→ ",[359,913,881],{"href":880},{"title":374,"searchDepth":375,"depth":375,"links":915},[916,923],{"id":800,"depth":375,"text":801,"children":917},[918,919,920,921,922],{"id":804,"depth":381,"text":805},{"id":825,"depth":381,"text":826},{"id":842,"depth":381,"text":843},{"id":849,"depth":381,"text":850},{"id":885,"depth":381,"text":886},{"id":894,"depth":375,"text":895},"Get help and support for Quark",{},{"title":927,"order":381},"Help",{"title":362,"description":924},"docs\u002Fhelp","J43mQpWIvWPy2jnF9goxZ5ZVOcVYsrgUJF63X4feQUk",{"id":932,"title":933,"body":934,"description":1020,"extension":394,"meta":1021,"navigation":1022,"path":1025,"seo":1026,"stem":1027,"__hash__":1028},"docs\u002Fdocs\u002Fhow-it-works.md","How Quark Works",{"type":8,"value":935,"toc":1014},[936,939,942,945,949,952,956,959,962,966,969,972,975,978,982,985,1011],[11,937,933],{"id":938},"how-quark-works",[15,940,941],{},"Quark is a small device that sits on your home network and stores your files on hard drives you own. Nothing leaves\nyour house.",[15,943,944],{},"Here's what that looks like.",[22,946,948],{"id":947},"your-files-your-network","Your files, your network",[15,950,951],{},"Every device on your home WiFi — phone, laptop, tablet — talks to your home router, and the router talks to Quark,\nwhich talks to your drive. Your files are stored on the hard drive you plug in — not on Google's servers, not on\nApple's servers, not anywhere else.",[22,953,955],{"id":954},"how-this-is-different-from-icloud-or-google-photos","How this is different from iCloud or Google Photos",[15,957,958],{},"With cloud storage, your photos and files travel over the internet to a server you don't own. Every photo you take,\nevery document you save — it all goes to someone else's computer first, and back again when you want it.",[15,960,961],{},"With Quark, your files go straight to a device sitting in your home over your own WiFi. There's no round trip to\nsomeone else's data center. You own the hardware, you own the data.",[22,963,965],{"id":964},"accessing-from-outside-your-home-coming-soon","Accessing from outside your home (coming soon)",[15,967,968],{},"We're adding the ability to access your files from anywhere — at work, traveling, or on your phone's data\nconnection.",[15,970,971],{},"When you set up Quark, your phone and your device establish a private, encrypted tunnel between them. This happens\nautomatically — you don't need to configure anything.",[15,973,974],{},"A small coordination server only helps your phone and your Quark find each other. Once they're connected, all your\nactual data travels directly between them — encrypted, and never passing through our servers.",[15,976,977],{},"Think of it like FaceTime — Apple helps your devices find each other, but your actual call goes directly between\nthem.",[22,979,981],{"id":980},"what-quark-stores","What Quark stores",[15,983,984],{},"When you plug a drive into Quark, it organizes your files into a simple structure:",[87,986,987,993,999,1005],{},[33,988,989,992],{},[40,990,991],{},"Photos & Videos"," — Synced from your phone or uploaded from your computer. Organized by date, easy to browse.",[33,994,995,998],{},[40,996,997],{},"Documents"," — PDFs, spreadsheets, notes — anything you want to keep safe on your own hardware.",[33,1000,1001,1004],{},[40,1002,1003],{},"Backups"," — Back up one drive to another with a single tap, so you always have a second copy.",[33,1006,1007,1010],{},[40,1008,1009],{},"Books & Media"," — Read EPUBs, watch videos, and browse your files from any device on your network.",[15,1012,1013],{},"Everything is stored in plain folders on your drive. No proprietary format, no lock-in. If you ever want to unplug\nand move to something else, your files are just files.",{"title":374,"searchDepth":375,"depth":375,"links":1015},[1016,1017,1018,1019],{"id":947,"depth":375,"text":948},{"id":954,"depth":375,"text":955},{"id":964,"depth":375,"text":965},{"id":980,"depth":375,"text":981},"How your files stay on your home network — no cloud required",{},{"title":1023,"order":1024},"How It Works",4,"\u002Fdocs\u002Fhow-it-works",{"title":933,"description":1020},"docs\u002Fhow-it-works","FSvCD6CkFz03fE-BD7LX2ncx0N5P3NllDj5KjDRYj6Q",{"id":1030,"title":371,"body":1031,"description":1931,"extension":394,"meta":1932,"navigation":1933,"path":370,"seo":1934,"stem":1935,"__hash__":1936},"docs\u002Fdocs\u002Fnerd-notes.md",{"type":8,"value":1032,"toc":1914},[1033,1036,1045,1047,1051,1158,1161,1163,1167,1171,1388,1399,1403,1406,1408,1412,1422,1426,1442,1517,1528,1532,1636,1638,1642,1648,1658,1676,1686,1696,1698,1702,1714,1769,1773,1818,1822,1877,1884,1886,1890,1910],[11,1034,371],{"id":1035},"nerd-notes",[15,1037,1038,1039,1044],{},"A technical mirror of the ",[359,1040,1043],{"href":1041,"rel":1042},"https:\u002F\u002Fgithub.com\u002Fautobutler-org\u002Fquark",[432],"Quark README",".\nIf you want to understand what's running in your house, this is the page.",[19,1046],{},[22,1048,1050],{"id":1049},"stack","Stack",[1052,1053,1054,1067],"table",{},[1055,1056,1057],"thead",{},[1058,1059,1060,1064],"tr",{},[1061,1062,1063],"th",{},"Layer",[1061,1065,1066],{},"Technology",[1068,1069,1070,1084,1097,1110,1122,1134,1146],"tbody",{},[1058,1071,1072,1076],{},[1073,1074,1075],"td",{},"Backend",[1073,1077,1078,1079],{},"Go + ",[359,1080,1083],{"href":1081,"rel":1082},"https:\u002F\u002Fgithub.com\u002Fgin-gonic\u002Fgin",[432],"Gin",[1058,1085,1086,1089],{},[1073,1087,1088],{},"Frontend",[1073,1090,1091,1096],{},[359,1092,1095],{"href":1093,"rel":1094},"https:\u002F\u002Fflutter.dev",[432],"Flutter"," (web, iOS, Android)",[1058,1098,1099,1102],{},[1073,1100,1101],{},"Database",[1073,1103,1104,1105],{},"SQLite via ",[359,1106,1109],{"href":1107,"rel":1108},"https:\u002F\u002Fpkg.go.dev\u002Fmodernc.org\u002Fsqlite",[432],"modernc.org\u002Fsqlite",[1058,1111,1112,1115],{},[1073,1113,1114],{},"Migrations",[1073,1116,1117],{},[359,1118,1121],{"href":1119,"rel":1120},"https:\u002F\u002Fgithub.com\u002Fgolang-migrate\u002Fmigrate",[432],"golang-migrate",[1058,1123,1124,1127],{},[1073,1125,1126],{},"DB queries",[1073,1128,1129],{},[359,1130,1133],{"href":1131,"rel":1132},"https:\u002F\u002Fsqlc.dev",[432],"sqlc",[1058,1135,1136,1139],{},[1073,1137,1138],{},"API docs",[1073,1140,1141],{},[359,1142,1145],{"href":1143,"rel":1144},"https:\u002F\u002Fgithub.com\u002Fswaggo\u002Fswag",[432],"Swagger\u002Fswag",[1058,1147,1148,1151],{},[1073,1149,1150],{},"Observability",[1073,1152,1153],{},[359,1154,1157],{"href":1155,"rel":1156},"https:\u002F\u002Fopentelemetry.io",[432],"OpenTelemetry",[15,1159,1160],{},"The backend is a single Go binary that serves both the REST API and the Flutter web build.\nOn first boot it runs database migrations automatically.",[19,1162],{},[22,1164,1166],{"id":1165},"installation","Installation",[79,1168,1170],{"id":1169},"download-and-install-a-release","Download and install a release",[1172,1173,1177],"pre",{"className":1174,"code":1175,"language":1176,"meta":374,"style":374},"language-bash shiki shiki-themes catppuccin-mocha catppuccin-mocha catppuccin-mocha","# Stop the running service if upgrading\nsudo systemctl stop quark\n\nOS=\"$(uname -s)\"\nARCH=\"$(uname -m)\"\ncase \"$ARCH\" in\n  aarch64) ARCH=\"arm64\";;\n  x86_64)  ARCH=\"x86_64\";;\nesac\n\ncurl --fail -L \\\n  \"https:\u002F\u002Fgithub.com\u002Fautobutler-org\u002Fquark\u002Freleases\u002Flatest\u002Fdownload\u002Fquark_${OS}_${ARCH}.tar.gz\" \\\n  | tar -xvz\n\nsudo .\u002Fquark install\n","bash",[43,1178,1179,1188,1204,1210,1238,1258,1276,1295,1313,1319,1324,1340,1360,1372,1377],{"__ignoreMap":374},[1180,1181,1184],"span",{"class":1182,"line":1183},"line",1,[1180,1185,1187],{"class":1186},"s5RKK","# Stop the running service if upgrading\n",[1180,1189,1190,1194,1198,1201],{"class":1182,"line":375},[1180,1191,1193],{"class":1192},"stPmG","sudo",[1180,1195,1197],{"class":1196},"sx07h"," systemctl",[1180,1199,1200],{"class":1196}," stop",[1180,1202,1203],{"class":1196}," quark\n",[1180,1205,1206],{"class":1182,"line":381},[1180,1207,1209],{"emptyLinePlaceholder":1208},true,"\n",[1180,1211,1212,1216,1220,1223,1227,1230,1233,1235],{"class":1182,"line":1024},[1180,1213,1215],{"class":1214},"srD2i","OS",[1180,1217,1219],{"class":1218},"s3yxq","=",[1180,1221,1222],{"class":1196},"\"",[1180,1224,1226],{"class":1225},"sagL3","$(",[1180,1228,1229],{"class":1192},"uname",[1180,1231,1232],{"class":1196}," -s",[1180,1234,550],{"class":1225},[1180,1236,1237],{"class":1196},"\"\n",[1180,1239,1240,1243,1245,1247,1249,1251,1254,1256],{"class":1182,"line":784},[1180,1241,1242],{"class":1214},"ARCH",[1180,1244,1219],{"class":1218},[1180,1246,1222],{"class":1196},[1180,1248,1226],{"class":1225},[1180,1250,1229],{"class":1192},[1180,1252,1253],{"class":1196}," -m",[1180,1255,550],{"class":1225},[1180,1257,1237],{"class":1196},[1180,1259,1261,1265,1268,1271,1273],{"class":1182,"line":1260},6,[1180,1262,1264],{"class":1263},"sA6Ar","case",[1180,1266,1267],{"class":1196}," \"",[1180,1269,1270],{"class":1214},"$ARCH",[1180,1272,1222],{"class":1196},[1180,1274,1275],{"class":1263}," in\n",[1180,1277,1279,1282,1284,1287,1289,1292],{"class":1182,"line":1278},7,[1180,1280,1281],{"class":1196},"  aarch64",[1180,1283,550],{"class":1218},[1180,1285,1286],{"class":1214}," ARCH",[1180,1288,1219],{"class":1218},[1180,1290,1291],{"class":1196},"\"arm64\"",[1180,1293,1294],{"class":1225},";;\n",[1180,1296,1298,1301,1303,1306,1308,1311],{"class":1182,"line":1297},8,[1180,1299,1300],{"class":1196},"  x86_64",[1180,1302,550],{"class":1218},[1180,1304,1305],{"class":1214},"  ARCH",[1180,1307,1219],{"class":1218},[1180,1309,1310],{"class":1196},"\"x86_64\"",[1180,1312,1294],{"class":1225},[1180,1314,1316],{"class":1182,"line":1315},9,[1180,1317,1318],{"class":1263},"esac\n",[1180,1320,1322],{"class":1182,"line":1321},10,[1180,1323,1209],{"emptyLinePlaceholder":1208},[1180,1325,1327,1330,1333,1336],{"class":1182,"line":1326},11,[1180,1328,1329],{"class":1192},"curl",[1180,1331,1332],{"class":1196}," --fail",[1180,1334,1335],{"class":1196}," -L",[1180,1337,1339],{"class":1338},"sr61Z"," \\\n",[1180,1341,1343,1346,1349,1352,1355,1358],{"class":1182,"line":1342},12,[1180,1344,1345],{"class":1196},"  \"https:\u002F\u002Fgithub.com\u002Fautobutler-org\u002Fquark\u002Freleases\u002Flatest\u002Fdownload\u002Fquark_",[1180,1347,1348],{"class":1214},"${OS}",[1180,1350,1351],{"class":1196},"_",[1180,1353,1354],{"class":1214},"${ARCH}",[1180,1356,1357],{"class":1196},".tar.gz\"",[1180,1359,1339],{"class":1338},[1180,1361,1363,1366,1369],{"class":1182,"line":1362},13,[1180,1364,1365],{"class":1218},"  |",[1180,1367,1368],{"class":1192}," tar",[1180,1370,1371],{"class":1196}," -xvz\n",[1180,1373,1375],{"class":1182,"line":1374},14,[1180,1376,1209],{"emptyLinePlaceholder":1208},[1180,1378,1380,1382,1385],{"class":1182,"line":1379},15,[1180,1381,1193],{"class":1192},[1180,1383,1384],{"class":1196}," .\u002Fquark",[1180,1386,1387],{"class":1196}," install\n",[15,1389,1390,1391,1394,1395,1398],{},"The ",[43,1392,1393],{},"install"," command registers Quark as a systemd service and starts it.\nOnce running, open ",[43,1396,1397],{},"http:\u002F\u002F\u003Cdevice-ip>:80"," in a browser.",[79,1400,1402],{"id":1401},"first-boot","First boot",[15,1404,1405],{},"On first boot, the web UI shows a setup screen. Create your owner account — you'll get a\nrecovery phrase shown exactly once. Write it down. It's the only way to reset your password.",[19,1407],{},[22,1409,1411],{"id":1410},"api","API",[15,1413,1414,1415,1418,1419,770],{},"The REST API is at ",[43,1416,1417],{},"\u002Fapi\u002Fv1\u002F",". Swagger UI is at ",[43,1420,1421],{},"http:\u002F\u002F\u003Chost>\u002Fswagger",[79,1423,1425],{"id":1424},"authentication","Authentication",[15,1427,1428,1429,627,1432,499,1435,1438,1439,770],{},"All endpoints require a session token except ",[43,1430,1431],{},"\u002Fauth\u002Fsetup",[43,1433,1434],{},"\u002Fauth\u002Flogin",[43,1436,1437],{},"\u002Fauth\u002Frecover",", and ",[43,1440,1441],{},"\u002Fauth\u002Fstatus",[1172,1443,1445],{"className":1174,"code":1444,"language":1176,"meta":374,"style":374},"# Login\ncurl -s -X POST http:\u002F\u002Flocalhost\u002Fapi\u002Fv1\u002Fauth\u002Flogin \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"username\":\"you\",\"password\":\"your-password\"}'\n# → {\"token\":\"\u003C64-char hex token>\"}\n\n# Use the token\ncurl http:\u002F\u002Flocalhost\u002Fapi\u002Fv1\u002Fhealth \\\n  -H \"Authorization: Bearer \u003Ctoken>\"\n",[43,1446,1447,1452,1469,1479,1487,1492,1496,1501,1510],{"__ignoreMap":374},[1180,1448,1449],{"class":1182,"line":1183},[1180,1450,1451],{"class":1186},"# Login\n",[1180,1453,1454,1456,1458,1461,1464,1467],{"class":1182,"line":375},[1180,1455,1329],{"class":1192},[1180,1457,1232],{"class":1196},[1180,1459,1460],{"class":1196}," -X",[1180,1462,1463],{"class":1196}," POST",[1180,1465,1466],{"class":1196}," http:\u002F\u002Flocalhost\u002Fapi\u002Fv1\u002Fauth\u002Flogin",[1180,1468,1339],{"class":1338},[1180,1470,1471,1474,1477],{"class":1182,"line":381},[1180,1472,1473],{"class":1196},"  -H",[1180,1475,1476],{"class":1196}," \"Content-Type: application\u002Fjson\"",[1180,1478,1339],{"class":1338},[1180,1480,1481,1484],{"class":1182,"line":1024},[1180,1482,1483],{"class":1196},"  -d",[1180,1485,1486],{"class":1196}," '{\"username\":\"you\",\"password\":\"your-password\"}'\n",[1180,1488,1489],{"class":1182,"line":784},[1180,1490,1491],{"class":1186},"# → {\"token\":\"\u003C64-char hex token>\"}\n",[1180,1493,1494],{"class":1182,"line":1260},[1180,1495,1209],{"emptyLinePlaceholder":1208},[1180,1497,1498],{"class":1182,"line":1278},[1180,1499,1500],{"class":1186},"# Use the token\n",[1180,1502,1503,1505,1508],{"class":1182,"line":1297},[1180,1504,1329],{"class":1192},[1180,1506,1507],{"class":1196}," http:\u002F\u002Flocalhost\u002Fapi\u002Fv1\u002Fhealth",[1180,1509,1339],{"class":1338},[1180,1511,1512,1514],{"class":1182,"line":1315},[1180,1513,1473],{"class":1196},[1180,1515,1516],{"class":1196}," \"Authorization: Bearer \u003Ctoken>\"\n",[15,1518,1519,1520,1523,1524,1527],{},"Tokens are valid for 30 days. Pass them as ",[43,1521,1522],{},"Authorization: Bearer \u003Ctoken>"," or as a\n",[43,1525,1526],{},"session"," cookie.",[79,1529,1531],{"id":1530},"key-endpoints","Key endpoints",[1052,1533,1534,1547],{},[1055,1535,1536],{},[1058,1537,1538,1541,1544],{},[1061,1539,1540],{},"Method",[1061,1542,1543],{},"Path",[1061,1545,1546],{},"What it does",[1068,1548,1549,1562,1574,1587,1599,1612,1624],{},[1058,1550,1551,1554,1559],{},[1073,1552,1553],{},"GET",[1073,1555,1556],{},[43,1557,1558],{},"\u002Fapi\u002Fv1\u002Fhealth",[1073,1560,1561],{},"System health (CPU, memory, disk, temperature)",[1058,1563,1564,1566,1571],{},[1073,1565,1553],{},[1073,1567,1568],{},[43,1569,1570],{},"\u002Fapi\u002Fv1\u002Fcirrus",[1073,1572,1573],{},"List files",[1058,1575,1576,1579,1584],{},[1073,1577,1578],{},"POST",[1073,1580,1581],{},[43,1582,1583],{},"\u002Fapi\u002Fv1\u002Fcirrus\u002Fupload\u002F{path}",[1073,1585,1586],{},"Upload a file",[1058,1588,1589,1591,1596],{},[1073,1590,1553],{},[1073,1592,1593],{},[43,1594,1595],{},"\u002Fapi\u002Fv1\u002Fstorage\u002Fdevices\u002Fstatus",[1073,1597,1598],{},"List storage devices",[1058,1600,1601,1604,1609],{},[1073,1602,1603],{},"PATCH",[1073,1605,1606],{},[43,1607,1608],{},"\u002Fapi\u002Fv1\u002Fstorage\u002Fdevices\u002F{devicePath}\u002Fname",[1073,1610,1611],{},"Rename a device",[1058,1613,1614,1616,1621],{},[1073,1615,1553],{},[1073,1617,1618],{},[43,1619,1620],{},"\u002Fapi\u002Fv1\u002Fversion",[1073,1622,1623],{},"Installed version",[1058,1625,1626,1628,1633],{},[1073,1627,1578],{},[1073,1629,1630],{},[43,1631,1632],{},"\u002Fapi\u002Fv1\u002Fversion\u002Flatest",[1073,1634,1635],{},"Update to latest release",[19,1637],{},[22,1639,1641],{"id":1640},"architecture-notes","Architecture notes",[15,1643,1644,1647],{},[40,1645,1646],{},"Single binary."," The Go backend embeds the Flutter web build at compile time and serves it\nalongside the API. No separate web server needed.",[15,1649,1650,1653,1654,1657],{},[40,1651,1652],{},"SQLite."," All state lives in a SQLite database at ",[43,1655,1656],{},"\u002Fvar\u002Flib\u002Fquark\u002Fdata\u002Fquark.db",".\nMigrations run on startup — safe to upgrade without manual intervention.",[15,1659,1660,1663,1664,1667,1668,1671,1672,1675],{},[40,1661,1662],{},"Device detection."," On Linux, Quark reads ",[43,1665,1666],{},"\u002Fproc\u002Fmounts"," to discover storage devices.\nUSB device detection uses the ",[43,1669,1670],{},"usbutil"," package. Mounting\u002Funmounting USB storage requires\nroot — run with ",[43,1673,1674],{},"AS_ROOT=1"," in development.",[15,1677,1678,1681,1682,1685],{},[40,1679,1680],{},"Auth."," Passwords are bcrypt-hashed (cost 12). Session tokens are 32 bytes of\n",[43,1683,1684],{},"crypto\u002Frand"," (256-bit entropy). The recovery phrase is a 6-word phrase from a 256-word\nwordlist (~48 bits — deliberate tradeoff for usability on a home device).",[15,1687,1688,1691,1692,1695],{},[40,1689,1690],{},"Updates."," The device can update itself in-place via the ",[43,1693,1694],{},"\u002Fversion\u002Fupdate"," API. It downloads\nthe new binary as a tarball, extracts it, and atomically renames it over the running binary.\nThe process exits and systemd restarts it.",[19,1697],{},[22,1699,1701],{"id":1700},"development","Development",[15,1703,1704,1707,1708,1713],{},[40,1705,1706],{},"Prerequisites:"," Go, Flutter, Make, ",[359,1709,1712],{"href":1710,"rel":1711},"https:\u002F\u002Fgithub.com\u002Fair-verse\u002Fair",[432],"air",", sqlc, swag",[1172,1715,1717],{"className":1174,"code":1716,"language":1176,"meta":374,"style":374},"git clone https:\u002F\u002Fgithub.com\u002Fautobutler-org\u002Fquark.git\ncd quark\nmake setup      # install dev tools\nmake generate   # sqlc + swag + flutter icons + sbom\nmake build      # build everything\n",[43,1718,1719,1730,1738,1749,1759],{"__ignoreMap":374},[1180,1720,1721,1724,1727],{"class":1182,"line":1183},[1180,1722,1723],{"class":1192},"git",[1180,1725,1726],{"class":1196}," clone",[1180,1728,1729],{"class":1196}," https:\u002F\u002Fgithub.com\u002Fautobutler-org\u002Fquark.git\n",[1180,1731,1732,1736],{"class":1182,"line":375},[1180,1733,1735],{"class":1734},"shPfs","cd",[1180,1737,1203],{"class":1196},[1180,1739,1740,1743,1746],{"class":1182,"line":381},[1180,1741,1742],{"class":1192},"make",[1180,1744,1745],{"class":1196}," setup",[1180,1747,1748],{"class":1186},"      # install dev tools\n",[1180,1750,1751,1753,1756],{"class":1182,"line":1024},[1180,1752,1742],{"class":1192},[1180,1754,1755],{"class":1196}," generate",[1180,1757,1758],{"class":1186},"   # sqlc + swag + flutter icons + sbom\n",[1180,1760,1761,1763,1766],{"class":1182,"line":784},[1180,1762,1742],{"class":1192},[1180,1764,1765],{"class":1196}," build",[1180,1767,1768],{"class":1186},"      # build everything\n",[79,1770,1772],{"id":1771},"run-locally","Run locally",[1172,1774,1776],{"className":1174,"code":1775,"language":1176,"meta":374,"style":374},"make watch\u002Fbackend          # backend with hot reload\nmake serve\u002Ffrontend         # Flutter web\nmake emulate\u002Fandroid        # Android emulator\nmake serve\u002Ffrontend\u002Fmobile  # Flutter mobile (after emulator is running)\n",[43,1777,1778,1788,1798,1808],{"__ignoreMap":374},[1180,1779,1780,1782,1785],{"class":1182,"line":1183},[1180,1781,1742],{"class":1192},[1180,1783,1784],{"class":1196}," watch\u002Fbackend",[1180,1786,1787],{"class":1186},"          # backend with hot reload\n",[1180,1789,1790,1792,1795],{"class":1182,"line":375},[1180,1791,1742],{"class":1192},[1180,1793,1794],{"class":1196}," serve\u002Ffrontend",[1180,1796,1797],{"class":1186},"         # Flutter web\n",[1180,1799,1800,1802,1805],{"class":1182,"line":381},[1180,1801,1742],{"class":1192},[1180,1803,1804],{"class":1196}," emulate\u002Fandroid",[1180,1806,1807],{"class":1186},"        # Android emulator\n",[1180,1809,1810,1812,1815],{"class":1182,"line":1024},[1180,1811,1742],{"class":1192},[1180,1813,1814],{"class":1196}," serve\u002Ffrontend\u002Fmobile",[1180,1816,1817],{"class":1186},"  # Flutter mobile (after emulator is running)\n",[79,1819,1821],{"id":1820},"useful-targets","Useful targets",[1172,1823,1825],{"className":1174,"code":1824,"language":1176,"meta":374,"style":374},"make check          # lint (Go + Flutter)\nmake format          # auto-format\nmake test            # run all tests\nmake coverage        # test coverage report\nmake help            # list all targets\n",[43,1826,1827,1837,1847,1857,1867],{"__ignoreMap":374},[1180,1828,1829,1831,1834],{"class":1182,"line":1183},[1180,1830,1742],{"class":1192},[1180,1832,1833],{"class":1196}," check",[1180,1835,1836],{"class":1186},"          # lint (Go + Flutter)\n",[1180,1838,1839,1841,1844],{"class":1182,"line":375},[1180,1840,1742],{"class":1192},[1180,1842,1843],{"class":1196}," format",[1180,1845,1846],{"class":1186},"          # auto-format\n",[1180,1848,1849,1851,1854],{"class":1182,"line":381},[1180,1850,1742],{"class":1192},[1180,1852,1853],{"class":1196}," test",[1180,1855,1856],{"class":1186},"            # run all tests\n",[1180,1858,1859,1861,1864],{"class":1182,"line":1024},[1180,1860,1742],{"class":1192},[1180,1862,1863],{"class":1196}," coverage",[1180,1865,1866],{"class":1186},"        # test coverage report\n",[1180,1868,1869,1871,1874],{"class":1182,"line":784},[1180,1870,1742],{"class":1192},[1180,1872,1873],{"class":1196}," help",[1180,1875,1876],{"class":1186},"            # list all targets\n",[15,1878,1879,1880,1883],{},"Swagger UI is at ",[43,1881,1882],{},"http:\u002F\u002Flocalhost:8080\u002Fswagger"," when the backend is running locally.",[19,1885],{},[22,1887,1889],{"id":1888},"source","Source",[87,1891,1892,1899,1902],{},[33,1893,1894,1895],{},"GitHub: ",[359,1896,1898],{"href":1041,"rel":1897},[432],"autobutler-org\u002Fquark",[33,1900,1901],{},"License: MIT",[33,1903,1904,1905],{},"Contributing:\n",[359,1906,1909],{"href":1907,"rel":1908},"https:\u002F\u002Fgithub.com\u002Fautobutler-org\u002Fquark\u002Fblob\u002Fmain\u002FCONTRIBUTING.md",[432],"CONTRIBUTING.md",[1911,1912,1913],"style",{},"html pre.shiki code .s5RKK, html code.shiki .s5RKK{--shiki-default:#9399B2;--shiki-default-font-style:italic;--shiki-dark:#9399B2;--shiki-dark-font-style:italic;--shiki-light:#9399B2;--shiki-light-font-style:italic}html pre.shiki code .stPmG, html code.shiki .stPmG{--shiki-default:#89B4FA;--shiki-default-font-style:italic;--shiki-dark:#89B4FA;--shiki-dark-font-style:italic;--shiki-light:#89B4FA;--shiki-light-font-style:italic}html pre.shiki code .sx07h, html code.shiki .sx07h{--shiki-default:#A6E3A1;--shiki-dark:#A6E3A1;--shiki-light:#A6E3A1}html pre.shiki code .srD2i, html code.shiki .srD2i{--shiki-default:#CDD6F4;--shiki-dark:#CDD6F4;--shiki-light:#CDD6F4}html pre.shiki code .s3yxq, html code.shiki .s3yxq{--shiki-default:#94E2D5;--shiki-dark:#94E2D5;--shiki-light:#94E2D5}html pre.shiki code .sagL3, html code.shiki .sagL3{--shiki-default:#9399B2;--shiki-dark:#9399B2;--shiki-light:#9399B2}html pre.shiki code .sA6Ar, html code.shiki .sA6Ar{--shiki-default:#CBA6F7;--shiki-dark:#CBA6F7;--shiki-light:#CBA6F7}html pre.shiki code .sr61Z, html code.shiki .sr61Z{--shiki-default:#F5C2E7;--shiki-dark:#F5C2E7;--shiki-light:#F5C2E7}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);}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 pre.shiki code .shPfs, html code.shiki .shPfs{--shiki-default:#F38BA8;--shiki-default-font-style:italic;--shiki-dark:#F38BA8;--shiki-dark-font-style:italic;--shiki-light:#F38BA8;--shiki-light-font-style:italic}",{"title":374,"searchDepth":375,"depth":375,"links":1915},[1916,1917,1921,1925,1926,1930],{"id":1049,"depth":375,"text":1050},{"id":1165,"depth":375,"text":1166,"children":1918},[1919,1920],{"id":1169,"depth":381,"text":1170},{"id":1401,"depth":381,"text":1402},{"id":1410,"depth":375,"text":1411,"children":1922},[1923,1924],{"id":1424,"depth":381,"text":1425},{"id":1530,"depth":381,"text":1531},{"id":1640,"depth":375,"text":1641},{"id":1700,"depth":375,"text":1701,"children":1927},[1928,1929],{"id":1771,"depth":381,"text":1772},{"id":1820,"depth":381,"text":1821},{"id":1888,"depth":375,"text":1889},"Technical overview of Quark — stack, architecture, installation, and development.",{},{"title":371,"order":1260},{"title":371,"description":1931},"docs\u002Fnerd-notes","NeNpUPbdaSJCwtu0GUPM58WRNCwbNw6JU3pjNEIx_30",{"id":1938,"title":1939,"body":1940,"description":2297,"extension":394,"meta":2298,"navigation":2299,"path":2301,"seo":2302,"stem":2303,"__hash__":2304},"docs\u002Fdocs\u002Fsecurity-guide.md","Things You Should Know (Security Guide)",{"type":8,"value":1941,"toc":2286},[1942,1946,1949,1952,1954,1958,1961,1966,1977,1988,1994,1996,2000,2003,2008,2026,2029,2031,2035,2038,2041,2061,2064,2070,2072,2076,2079,2084,2095,2100,2108,2110,2114,2117,2122,2133,2138,2149,2151,2155,2158,2161,2181,2184,2186,2190,2193,2225,2228,2230,2234,2237,2257,2260,2262,2266,2283],[11,1943,1945],{"id":1944},"things-you-should-know","Things You Should Know",[15,1947,1948],{},"Quark is designed so your files stay private by default. But \"private by design\" doesn't mean \"impossible to\nlose.\" This page covers a handful of things every Quark owner should do.",[15,1950,1951],{},"None of this is scary. You've probably done most of it already for other important things in your life.",[19,1953],{},[22,1955,1957],{"id":1956},"your-master-password","Your Master Password",[15,1959,1960],{},"The vault — where Quark stores sensitive things like credentials and recovery phrases — is encrypted with your\nmaster password. That encryption is done with Argon2id, a modern algorithm designed to be slow on purpose. Even if\nsomeone stole your Quark's hard drive, cracking the vault would take them years of compute time if your password is\nreasonable.",[15,1962,1963],{},[40,1964,1965],{},"What makes a reasonable password:",[87,1967,1968,1971,1974],{},[33,1969,1970],{},"At least 12 characters",[33,1972,1973],{},"Not a dictionary word on its own",[33,1975,1976],{},"Not something you've used elsewhere",[15,1978,1979,1980,1983,1984,1987],{},"A passphrase like ",[43,1981,1982],{},"correct-horse-battery-staple"," is better than ",[43,1985,1986],{},"P@ssw0rd1"," — longer beats cleverer.",[15,1989,1990,1993],{},[40,1991,1992],{},"There is no \"forgot password\" button."," This is intentional. Your master password is never sent anywhere, never\nstored, and never recoverable by anyone — including us. If you forget it, the vault is gone. Write it down\nsomewhere physical and store it safely.",[19,1995],{},[22,1997,1999],{"id":1998},"your-recovery-phrase","Your Recovery Phrase",[15,2001,2002],{},"When you first set up Quark, it gave you a 6-word recovery phrase. That phrase is your emergency key — it can\nunlock the vault if you forget your master password.",[15,2004,2005],{},[40,2006,2007],{},"What to do with it:",[87,2009,2010,2013,2016,2023],{},[33,2011,2012],{},"Write it on paper. Not a sticky note.",[33,2014,2015],{},"Store it somewhere you'd store an important document — a fireproof box, a filing cabinet with a lock, or a\nsafety deposit box.",[33,2017,2018,2019,2022],{},"Do ",[40,2020,2021],{},"not"," store it in a Google Doc, Dropbox, or iCloud note. That defeats the purpose.",[33,2024,2025],{},"Make sure your spouse or a trusted person knows where it is. If something happens to you, they'll need it.",[15,2027,2028],{},"You only see this phrase once. If you've lost it and still have your password, you can generate a new one in\nSettings → Security.",[19,2030],{},[22,2032,2034],{"id":2033},"the-3-2-1-backup-rule","The 3-2-1 Backup Rule",[15,2036,2037],{},"Quark stores your files. But Quark is a physical device that can fail, flood, or burn.",[15,2039,2040],{},"The 3-2-1 rule is simple:",[87,2042,2043,2049,2055],{},[33,2044,2045,2048],{},[40,2046,2047],{},"3"," copies of your data",[33,2050,2051,2054],{},[40,2052,2053],{},"2"," different storage types (e.g., Quark's internal drive + an external USB drive)",[33,2056,2057,2060],{},[40,2058,2059],{},"1"," offsite copy (e.g., a hard drive at a relative's house)",[15,2062,2063],{},"Quark helps with the first two: it can mirror your files to an attached external drive automatically. The third\ncopy is on you. A USB drive at your parents' house that you swap out once a month is enough.",[15,2065,2066,2067],{},"There is no backup strategy that can save you from ",[756,2068,2069],{},"no backup at all.",[19,2071],{},[22,2073,2075],{"id":2074},"physical-security","Physical Security",[15,2077,2078],{},"Quark is a small computer that holds your files. Treat it accordingly.",[15,2080,2081],{},[40,2082,2083],{},"Where to put it:",[87,2085,2086,2089,2092],{},[33,2087,2088],{},"Inside your home, not in an unheated garage or shed where it can overheat or freeze",[33,2090,2091],{},"Off the floor — water and flooding are real risks",[33,2093,2094],{},"Out of sight if possible — you don't need to advertise that there's a storage device on your network",[15,2096,2097],{},[40,2098,2099],{},"Your backup drives:",[87,2101,2102,2105],{},[33,2103,2104],{},"Don't keep your only backup drive right next to Quark. If there's a fire or a break-in, you lose both.",[33,2106,2107],{},"A fireproof bag or small safe is a worthwhile investment for a drive holding years of family photos.",[19,2109],{},[22,2111,2113],{"id":2112},"network-security","Network Security",[15,2115,2116],{},"Quark runs on your local network. It does not need the public internet to function, and by default it's not\nreachable from outside your home.",[15,2118,2119],{},[40,2120,2121],{},"What this means in practice:",[87,2123,2124,2127,2130],{},[33,2125,2126],{},"Someone sitting at a coffee shop cannot reach your Quark.",[33,2128,2129],{},"Your ISP cannot see your files (they flow entirely on your local network).",[33,2131,2132],{},"Quark doesn't \"call home\" to any servers beyond checking for updates. Our code is public if you want to verify.",[15,2134,2135],{},[40,2136,2137],{},"What you need to do:",[87,2139,2140,2143,2146],{},[33,2141,2142],{},"Password-protect your WiFi with WPA2 or WPA3. If it's still open, fix that first.",[33,2144,2145],{},"Don't give your WiFi password to people you don't trust.",[33,2147,2148],{},"If you enable remote access via Tailscale, treat your Tailscale account as carefully as your Quark password — it's\nthe key to your network.",[19,2150],{},[22,2152,2154],{"id":2153},"estate-planning","Estate Planning",[15,2156,2157],{},"If something happens to you, can your family access the files you've stored?",[15,2159,2160],{},"Consider:",[30,2162,2163,2169,2175],{},[33,2164,2165,2168],{},[40,2166,2167],{},"Writing down"," your Quark login and master password (or recovery phrase) and storing them with your\nimportant documents — will, insurance policies, that kind of thing.",[33,2170,2171,2174],{},[40,2172,2173],{},"Telling a trusted person"," where Quark is, what it does, and where the login info is stored.",[33,2176,2177,2180],{},[40,2178,2179],{},"Quark's trusted contact feature"," (coming soon) will let you designate someone who can request access after a\nconfigurable waiting period.",[15,2182,2183],{},"This isn't morbid — it's the same reason you keep a spare key with a neighbor.",[19,2185],{},[22,2187,2189],{"id":2188},"if-you-think-your-device-was-compromised","If You Think Your Device Was Compromised",[15,2191,2192],{},"If you suspect someone unauthorized has accessed your Quark:",[30,2194,2195,2201,2207,2213,2219],{},[33,2196,2197,2200],{},[40,2198,2199],{},"Change your password immediately."," Go to Settings → Security → Change Password.",[33,2202,2203,2206],{},[40,2204,2205],{},"Review active sessions."," Settings → Security → Sessions shows every device currently logged in. Revoke\nanything you don't recognize.",[33,2208,2209,2212],{},[40,2210,2211],{},"Rotate your API tokens"," if you use them.",[33,2214,2215,2218],{},[40,2216,2217],{},"Change your WiFi password"," if you suspect your network was the entry point.",[33,2220,2221,2224],{},[40,2222,2223],{},"Review your files"," for anything unexpected — deletions, new folders, modified timestamps.",[15,2226,2227],{},"If you use Tailscale for remote access, also rotate your Tailscale auth keys and remove any unrecognized nodes from\nyour tailnet.",[19,2229],{},[22,2231,2233],{"id":2232},"what-quark-does-not-do","What Quark Does Not Do",[15,2235,2236],{},"To be direct about the limits:",[87,2238,2239,2245,2251],{},[33,2240,2241,2244],{},[40,2242,2243],{},"It doesn't scan for viruses or malware"," in your uploaded files. It stores what you give it.",[33,2246,2247,2250],{},[40,2248,2249],{},"It doesn't protect against physical theft"," of the device — if someone takes the hardware, encryption protects\nthe vault, but your files are readable unless you've enabled per-file encryption (a future feature).",[33,2252,2253,2256],{},[40,2254,2255],{},"It doesn't protect you if your WiFi password is compromised."," Someone on your network can reach Quark. The\npassword prompt protects specific sensitive areas, but not file browsing.",[15,2258,2259],{},"Knowing the limits helps you make good decisions about what you store and how.",[19,2261],{},[22,2263,2265],{"id":2264},"the-short-version","The Short Version",[30,2267,2268,2271,2274,2277,2280],{},[33,2269,2270],{},"Pick a strong master password. Write it down. Store it safely.",[33,2272,2273],{},"Keep your recovery phrase somewhere physical and fireproof.",[33,2275,2276],{},"Set up an external backup drive. Swap it out periodically.",[33,2278,2279],{},"Use WPA2\u002FWPA3 on your WiFi.",[33,2281,2282],{},"Tell someone you trust how to access things if you can't.",[15,2284,2285],{},"That's it. Quark handles the rest.",{"title":374,"searchDepth":375,"depth":375,"links":2287},[2288,2289,2290,2291,2292,2293,2294,2295,2296],{"id":1956,"depth":375,"text":1957},{"id":1998,"depth":375,"text":1999},{"id":2033,"depth":375,"text":2034},{"id":2074,"depth":375,"text":2075},{"id":2112,"depth":375,"text":2113},{"id":2153,"depth":375,"text":2154},{"id":2188,"depth":375,"text":2189},{"id":2232,"depth":375,"text":2233},{"id":2264,"depth":375,"text":2265},"Practical security guidance for Quark owners — written in plain English, not jargon.",{},{"title":2300,"order":1278},"Security Guide","\u002Fdocs\u002Fsecurity-guide",{"title":1939,"description":2297},"docs\u002Fsecurity-guide","5rjdHsRDhPpEb7dZGNIBtpZSYM9lLAK-2VzIY40MpFk",{"id":2306,"title":2307,"body":2308,"description":2393,"extension":394,"meta":2394,"navigation":2395,"path":2396,"seo":2397,"stem":2398,"__hash__":2399},"docs\u002Fdocs\u002Fwelcome.md","Welcome",{"type":8,"value":2309,"toc":2386},[2310,2314,2318,2321,2325,2331,2338,2345,2349,2358,2360,2366,2370],[11,2311,2313],{"id":2312},"welcome-to-quark","Welcome to Quark",[22,2315,2317],{"id":2316},"what-is-quark","What is Quark?",[15,2319,2320],{},"Quark is many things — the simplest way to explain it is like a Google Drive or iCloud service, but it lives\nentirely inside your house. No big tech, no data outside of your home, just your files on your stuff in your house.",[22,2322,2324],{"id":2323},"how-does-quark-work-securely","How does Quark work securely?",[15,2326,2327],{},[71,2328],{"alt":2329,"src":2330},"Quark Architecture","\u002Fassets\u002Fdocs\u002Fquark-architecture.webp",[15,2332,2333,2334,2337],{},"You know how you can't use your home printer when you leave your WiFi network? Quark also works entirely locally,\nmeaning that public internet can't really access it. (We are working on secure ways to access the device from\noutside your home — for the nerds, this would be a reverse VPN going ",[756,2335,2336],{},"into"," your home that only trusted devices have\ninstalled) — but the short version is that the only traffic that can access your files has to come from on your WiFi\nnetwork. The technologies that your router uses to protect your devices work so well, most folks don't know they\neven exist — which is the kind of security we like using. Just make sure your WiFi is password protected.",[15,2339,2340,2341,770],{},"When you access Quark, all you're doing is asking your router to find the device on your local network, as you can\nsee in the image above. The router does the hard work of figuring out which device is which — think of the router\nlike a post office, remembering which zip code is where. The only connection Quark makes with the outside internet is\nthe Update feature. Don't believe us? Our code is hosted online for free at\n",[359,2342,2344],{"href":1041,"rel":2343},[432],"our GitHub",[22,2346,2348],{"id":2347},"how-can-we-trust-you-guys","How can we trust you guys?",[15,2350,2351,2352,2357],{},"Brandon here. First and foremost - this is a product for my parents. We don't take any money from venture\ncapitalists, we don't have any subscriptions (so we can't change pricing), and the way our stuff works is public on\nthe internet. We're active on our Reddit page at ",[359,2353,2356],{"href":2354,"rel":2355},"https:\u002F\u002Fwww.reddit.com\u002Fr\u002Fautobutler\u002F",[432],"r\u002Fautobutler"," if you want to\ntalk to us or the community about concerns. The only price catch is if the hardware breaks, but we designed this so\nthat if you ever want to get a new device, your data is all backed up on your hard drives, so it should be a painless\n1:1 swap.",[22,2359,6],{"id":13},[15,2361,2362,2363,770],{},"Ready to dive in? Check out the ",[359,2364,2365],{"href":397},"Getting Started Guide",[22,2367,2369],{"id":2368},"need-help","Need Help?",[87,2371,2372,2379],{},[33,2373,2374,2378],{},[40,2375,2376],{},[359,2377,6],{"href":397}," — Step-by-step tutorials",[33,2380,2381,2385],{},[40,2382,2383],{},[359,2384,362],{"href":361}," — Troubleshooting and community resources",{"title":374,"searchDepth":375,"depth":375,"links":2387},[2388,2389,2390,2391,2392],{"id":2316,"depth":375,"text":2317},{"id":2323,"depth":375,"text":2324},{"id":2347,"depth":375,"text":2348},{"id":13,"depth":375,"text":6},{"id":2368,"depth":375,"text":2369},"Welcome to Quark — a small box that turns your USB drive into your own cloud",{},{"title":2307,"order":1183},"\u002Fdocs\u002Fwelcome",{"title":2307,"description":2393},"docs\u002Fwelcome","cwIXI3TSUAAz8QXZSC5aHAE1amy0tVB7YCEPMLErF38",1787624039823]