[{"data":1,"prerenderedAt":690},["ShallowReactive",2],{"navigation_docs":3,"-getting-started-updating":218,"-getting-started-updating-surround":685},[4,20,45,75,95,105,140,168,198],{"title":5,"path":6,"stem":7,"children":8,"page":19},"Introduction","\u002Fintroduction","1.introduction",[9,14],{"title":10,"path":11,"stem":12,"icon":13},"What is GO?","\u002Fintroduction\u002Fwhat-is-go","1.introduction\u002F1.what-is-go","i-lucide-info",{"title":15,"path":16,"stem":17,"icon":18},"Features","\u002Fintroduction\u002Ffeatures","1.introduction\u002F2.features","i-lucide-sparkles",false,{"title":21,"path":22,"stem":23,"children":24,"page":19},"Getting Started","\u002Fgetting-started","2.getting-started",[25,30,35,40],{"title":26,"path":27,"stem":28,"icon":29},"Installation","\u002Fgetting-started\u002Finstallation","2.getting-started\u002F1.installation","i-lucide-download",{"title":31,"path":32,"stem":33,"icon":34},"Configuration","\u002Fgetting-started\u002Fconfiguration","2.getting-started\u002F2.configuration","i-lucide-settings",{"title":36,"path":37,"stem":38,"icon":39},"First Setup","\u002Fgetting-started\u002Ffirst-setup","2.getting-started\u002F3.first-setup","i-lucide-rocket",{"title":41,"path":42,"stem":43,"icon":44},"Updating","\u002Fgetting-started\u002Fupdating","2.getting-started\u002F4.updating","i-lucide-refresh-cw",{"title":46,"icon":19,"path":47,"stem":48,"children":49,"page":19},"User Guide","\u002Fuser-guide","3.user-guide",[50,55,60,65,70],{"title":51,"path":52,"stem":53,"icon":54},"Creating a Short Link","\u002Fuser-guide\u002Fcreating-a-short-link","3.user-guide\u002F1.creating-a-short-link","i-lucide-link",{"title":56,"path":57,"stem":58,"icon":59},"Expiration","\u002Fuser-guide\u002Fexpiration","3.user-guide\u002F2.expiration","i-lucide-clock",{"title":61,"path":62,"stem":63,"icon":64},"Renewing Links","\u002Fuser-guide\u002Frenewing-links","3.user-guide\u002F3.renewing-links","i-lucide-repeat",{"title":66,"path":67,"stem":68,"icon":69},"Dashboard","\u002Fuser-guide\u002Fdashboard","3.user-guide\u002F4.dashboard","i-lucide-layout-dashboard",{"title":71,"path":72,"stem":73,"icon":74},"Analytics","\u002Fuser-guide\u002Fanalytics","3.user-guide\u002F5.analytics","i-lucide-bar-chart-3",{"title":76,"path":77,"stem":78,"children":79,"page":19},"Authentication","\u002Fauthentication","4.authentication",[80,85,90],{"title":81,"path":82,"stem":83,"icon":84},"Email Login","\u002Fauthentication\u002Femail-login","4.authentication\u002F1.email-login","i-lucide-mail",{"title":86,"path":87,"stem":88,"icon":89},"Google Login","\u002Fauthentication\u002Fgoogle-login","4.authentication\u002F2.google-login","i-lucide-globe",{"title":91,"path":92,"stem":93,"icon":94},"Firebase Setup","\u002Fauthentication\u002Ffirebase-setup","4.authentication\u002F3.firebase-setup","i-simple-icons-firebase",{"title":96,"path":97,"stem":98,"children":99,"page":19},"Captcha","\u002Fcaptcha","5.captcha",[100],{"title":101,"path":102,"stem":103,"icon":104},"Cloudflare Turnstile","\u002Fcaptcha\u002Fcloudflare-turnstile","5.captcha\u002F1.cloudflare-turnstile","i-simple-icons-cloudflare",{"title":106,"path":107,"stem":108,"children":109,"page":19},"Administration","\u002Fadministration","6.administration",[110,115,120,125,130,135],{"title":111,"path":112,"stem":113,"icon":114},"Admin Panel","\u002Fadministration\u002Fadmin-panel","6.administration\u002F1.admin-panel","i-lucide-shield",{"title":116,"path":117,"stem":118,"icon":119},"Users","\u002Fadministration\u002Fusers","6.administration\u002F2.users","i-lucide-users",{"title":121,"path":122,"stem":123,"icon":124},"Links","\u002Fadministration\u002Flinks","6.administration\u002F3.links","i-lucide-link-2",{"title":126,"path":127,"stem":128,"icon":129},"Reports","\u002Fadministration\u002Freports","6.administration\u002F4.reports","i-lucide-flag",{"title":131,"path":132,"stem":133,"icon":134},"Bans & Timeouts","\u002Fadministration\u002Fbans-and-timeouts","6.administration\u002F5.bans-and-timeouts","i-lucide-user-x",{"title":136,"path":137,"stem":138,"icon":139},"Audit Logs","\u002Fadministration\u002Faudit-logs","6.administration\u002F6.audit-logs","i-lucide-scroll",{"title":141,"path":142,"stem":143,"children":144,"page":19},"Deployment","\u002Fdeployment","7.deployment",[145,150,155,160,165],{"title":146,"path":147,"stem":148,"icon":149},"VPS Installation","\u002Fdeployment\u002Fvps-installation","7.deployment\u002F1.vps-installation","i-lucide-server",{"title":151,"path":152,"stem":153,"icon":154},"Environment Variables","\u002Fdeployment\u002Fenvironment-variables","7.deployment\u002F2.environment-variables","i-lucide-sliders",{"title":156,"path":157,"stem":158,"icon":159},"Cloudflare Tunnel","\u002Fdeployment\u002Fcloudflare-tunnel","7.deployment\u002F3.cloudflare-tunnel","i-lucide-network",{"title":161,"path":162,"stem":163,"icon":164},"Systemd","\u002Fdeployment\u002Fsystemd","7.deployment\u002F4.systemd","i-lucide-cpu",{"title":41,"path":166,"stem":167,"icon":44},"\u002Fdeployment\u002Fupdating","7.deployment\u002F5.updating",{"title":169,"path":170,"stem":171,"children":172,"page":19},"Developer","\u002Fdeveloper","8.developer",[173,178,183,188,193],{"title":174,"path":175,"stem":176,"icon":177},"Architecture","\u002Fdeveloper\u002Farchitecture","8.developer\u002F1.architecture","i-lucide-box",{"title":179,"path":180,"stem":181,"icon":182},"API Architecture","\u002Fdeveloper\u002Fapi","8.developer\u002F2.api","i-lucide-code-xml",{"title":184,"path":185,"stem":186,"icon":187},"Database","\u002Fdeveloper\u002Fdatabase","8.developer\u002F3.database","i-lucide-database",{"title":189,"path":190,"stem":191,"icon":192},"Development","\u002Fdeveloper\u002Fdevelopment","8.developer\u002F4.development","i-lucide-terminal",{"title":194,"path":195,"stem":196,"icon":197},"Building Releases","\u002Fdeveloper\u002Fbuilding-releases","8.developer\u002F5.building-releases","i-lucide-package-check",{"title":199,"path":200,"stem":201,"children":202,"page":19},"Reference","\u002Freference","9.reference",[203,208,213],{"title":204,"path":205,"stem":206,"icon":207},"Configuration Reference","\u002Freference\u002Fconfiguration","9.reference\u002F1.configuration","i-lucide-file-cog",{"title":209,"path":210,"stem":211,"icon":212},"API Reference","\u002Freference\u002Fapi-reference","9.reference\u002F2.api-reference","i-lucide-webhook",{"title":214,"path":215,"stem":216,"icon":217},"Changelog","\u002Freference\u002Fchangelog","9.reference\u002F3.changelog","i-lucide-history",{"id":219,"title":41,"body":220,"description":676,"extension":677,"links":678,"meta":679,"navigation":680,"path":42,"seo":681,"stem":43,"__hash__":684},"docs\u002F2.getting-started\u002F4.updating.md",{"type":221,"value":222,"toc":662},"minimark",[223,227,231,252,255,260,263,289,292,328,330,334,337,620,622,626,629,658],[224,225,41],"h1",{"id":226},"updating",[228,229,230],"p",{},"Because GO Shortener compiles into a standalone, single-executable binary with embedded frontend assets, upgrading to a new version is simple and carries zero risk of overwriting your configuration or stored data.",[232,233,234,238,239,242,243,247,248,251],"important",{},[235,236,237],"strong",{},"Safety Guarantee",": Upgrades ",[235,240,241],{},"never overwrite"," your existing SQLite database (",[244,245,246],"code",{},"\u002Froot\u002FGo-shortner\u002Fdata\u002Fgo.sqlite",") or your ",[244,249,250],{},".env"," configuration file.",[253,254],"hr",{},[256,257,259],"h2",{"id":258},"method-1-automated-update-via-installer-script","Method 1: Automated Update via Installer Script",[228,261,262],{},"If you installed GO using the official installer script, rerun the script directly on your server:",[264,265,271],"pre",{"className":266,"code":267,"filename":268,"language":269,"meta":270,"style":270},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","sudo bash \u002Froot\u002FGo-shortner\u002Finstall.sh\n","Terminal","bash","",[244,272,273],{"__ignoreMap":270},[274,275,278,282,286],"span",{"class":276,"line":277},"line",1,[274,279,281],{"class":280},"sBMFI","sudo",[274,283,285],{"class":284},"sfazB"," bash",[274,287,288],{"class":284}," \u002Froot\u002FGo-shortner\u002Finstall.sh\n",[228,290,291],{},"The script automatically:",[293,294,295,299,302,309,316,322],"ol",{},[296,297,298],"li",{},"Detects your CPU architecture.",[296,300,301],{},"Queries the GitHub API for the latest release tag.",[296,303,304,305,308],{},"Stops ",[244,306,307],{},"go-shortener.service",".",[296,310,311,312,315],{},"Replaces ",[244,313,314],{},"\u002Froot\u002FGo-shortner\u002Fgo-shortener"," with the new binary.",[296,317,318,319,321],{},"Preserves ",[244,320,250],{}," and all SQLite database files intact.",[296,323,324,325,327],{},"Restarts ",[244,326,307],{}," and checks health.",[253,329],{},[256,331,333],{"id":332},"method-2-manual-update-process","Method 2: Manual Update Process",[228,335,336],{},"Follow this recommended 7-step procedure to perform a controlled manual upgrade:",[338,339,340,345,356,435,439,446,462,466,469,484,491,502,523,527,534,554,558,561,575,579,582],"steps",{},[341,342,344],"h3",{"id":343},"_1-download-the-new-release-binary","1. Download the New Release Binary",[228,346,347,348,355],{},"Download the latest prebuilt binary from the ",[349,350,354],"a",{"href":351,"rel":352},"https:\u002F\u002Fgithub.com\u002FItsARCn\u002FGo-shortner\u002Freleases",[353],"nofollow","GitHub Releases"," page to a temporary location:",[264,357,359],{"className":266,"code":358,"filename":268,"language":269,"meta":270,"style":270},"# For x86_64 servers\ncurl -L -o \u002Ftmp\u002Fgo-shortener-new https:\u002F\u002Fgithub.com\u002FItsARCn\u002FGo-shortner\u002Freleases\u002Flatest\u002Fdownload\u002Fgo-shortener-linux-amd64\n\n# For ARM64 servers\ncurl -L -o \u002Ftmp\u002Fgo-shortener-new https:\u002F\u002Fgithub.com\u002FItsARCn\u002FGo-shortner\u002Freleases\u002Flatest\u002Fdownload\u002Fgo-shortener-linux-arm64\n\n# Ensure executable permissions\nchmod +x \u002Ftmp\u002Fgo-shortener-new\n",[244,360,361,367,385,392,398,412,417,423],{"__ignoreMap":270},[274,362,363],{"class":276,"line":277},[274,364,366],{"class":365},"sHwdD","# For x86_64 servers\n",[274,368,370,373,376,379,382],{"class":276,"line":369},2,[274,371,372],{"class":280},"curl",[274,374,375],{"class":284}," -L",[274,377,378],{"class":284}," -o",[274,380,381],{"class":284}," \u002Ftmp\u002Fgo-shortener-new",[274,383,384],{"class":284}," https:\u002F\u002Fgithub.com\u002FItsARCn\u002FGo-shortner\u002Freleases\u002Flatest\u002Fdownload\u002Fgo-shortener-linux-amd64\n",[274,386,388],{"class":276,"line":387},3,[274,389,391],{"emptyLinePlaceholder":390},true,"\n",[274,393,395],{"class":276,"line":394},4,[274,396,397],{"class":365},"# For ARM64 servers\n",[274,399,401,403,405,407,409],{"class":276,"line":400},5,[274,402,372],{"class":280},[274,404,375],{"class":284},[274,406,378],{"class":284},[274,408,381],{"class":284},[274,410,411],{"class":284}," https:\u002F\u002Fgithub.com\u002FItsARCn\u002FGo-shortner\u002Freleases\u002Flatest\u002Fdownload\u002Fgo-shortener-linux-arm64\n",[274,413,415],{"class":276,"line":414},6,[274,416,391],{"emptyLinePlaceholder":390},[274,418,420],{"class":276,"line":419},7,[274,421,422],{"class":365},"# Ensure executable permissions\n",[274,424,426,429,432],{"class":276,"line":425},8,[274,427,428],{"class":280},"chmod",[274,430,431],{"class":284}," +x",[274,433,434],{"class":284}," \u002Ftmp\u002Fgo-shortener-new\n",[341,436,438],{"id":437},"_2-stop-the-application-service","2. Stop the Application Service",[228,440,441,442,445],{},"Gracefully stop the running ",[244,443,444],{},"systemd"," service:",[264,447,449],{"className":266,"code":448,"filename":268,"language":269,"meta":270,"style":270},"systemctl stop go-shortener\n",[244,450,451],{"__ignoreMap":270},[274,452,453,456,459],{"class":276,"line":277},[274,454,455],{"class":280},"systemctl",[274,457,458],{"class":284}," stop",[274,460,461],{"class":284}," go-shortener\n",[341,463,465],{"id":464},"_3-replace-the-binary","3. Replace the Binary",[228,467,468],{},"Move the new binary into place, overwriting the previous executable:",[264,470,472],{"className":266,"code":471,"filename":268,"language":269,"meta":270,"style":270},"mv \u002Ftmp\u002Fgo-shortener-new \u002Froot\u002FGo-shortner\u002Fgo-shortener\n",[244,473,474],{"__ignoreMap":270},[274,475,476,479,481],{"class":276,"line":277},[274,477,478],{"class":280},"mv",[274,480,381],{"class":284},[274,482,483],{"class":284}," \u002Froot\u002FGo-shortner\u002Fgo-shortener\n",[341,485,487,488,490],{"id":486},"_4-preserve-the-env-configuration","4. Preserve the ",[244,489,250],{}," Configuration",[228,492,493,494,497,498,501],{},"Confirm that ",[244,495,496],{},"\u002Froot\u002FGo-shortner\u002F.env"," remains untouched and contains your existing ",[244,499,500],{},"JWT_SECRET"," and keys.",[264,503,505],{"className":266,"code":504,"filename":268,"language":269,"meta":270,"style":270},"# Verify configuration exists and permissions are intact\nls -l \u002Froot\u002FGo-shortner\u002F.env\n",[244,506,507,512],{"__ignoreMap":270},[274,508,509],{"class":276,"line":277},[274,510,511],{"class":365},"# Verify configuration exists and permissions are intact\n",[274,513,514,517,520],{"class":276,"line":369},[274,515,516],{"class":280},"ls",[274,518,519],{"class":284}," -l",[274,521,522],{"class":284}," \u002Froot\u002FGo-shortner\u002F.env\n",[341,524,526],{"id":525},"_5-preserve-the-sqlite-database","5. Preserve the SQLite Database",[228,528,529,530,533],{},"Confirm that your SQLite database directory ",[244,531,532],{},"\u002Froot\u002FGo-shortner\u002Fdata\u002F"," has not been modified:",[264,535,537],{"className":266,"code":536,"filename":268,"language":269,"meta":270,"style":270},"# Verify database files are present\nls -lh \u002Froot\u002FGo-shortner\u002Fdata\u002Fgo.sqlite\n",[244,538,539,544],{"__ignoreMap":270},[274,540,541],{"class":276,"line":277},[274,542,543],{"class":365},"# Verify database files are present\n",[274,545,546,548,551],{"class":276,"line":369},[274,547,516],{"class":280},[274,549,550],{"class":284}," -lh",[274,552,553],{"class":284}," \u002Froot\u002FGo-shortner\u002Fdata\u002Fgo.sqlite\n",[341,555,557],{"id":556},"_6-start-the-service","6. Start the Service",[228,559,560],{},"Start the updated application service:",[264,562,564],{"className":266,"code":563,"filename":268,"language":269,"meta":270,"style":270},"systemctl start go-shortener\n",[244,565,566],{"__ignoreMap":270},[274,567,568,570,573],{"class":276,"line":277},[274,569,455],{"class":280},[274,571,572],{"class":284}," start",[274,574,461],{"class":284},[341,576,578],{"id":577},"_7-verify-the-service","7. Verify the Service",[228,580,581],{},"Check the service status and inspect the health check endpoint:",[264,583,585],{"className":266,"code":584,"filename":268,"language":269,"meta":270,"style":270},"# Check systemd status\nsystemctl status go-shortener\n\n# Query the internal health endpoint\ncurl -s http:\u002F\u002F127.0.0.1:3000\u002Fapi\u002Fhealth\n",[244,586,587,592,601,605,610],{"__ignoreMap":270},[274,588,589],{"class":276,"line":277},[274,590,591],{"class":365},"# Check systemd status\n",[274,593,594,596,599],{"class":276,"line":369},[274,595,455],{"class":280},[274,597,598],{"class":284}," status",[274,600,461],{"class":284},[274,602,603],{"class":276,"line":387},[274,604,391],{"emptyLinePlaceholder":390},[274,606,607],{"class":276,"line":394},[274,608,609],{"class":365},"# Query the internal health endpoint\n",[274,611,612,614,617],{"class":276,"line":400},[274,613,372],{"class":280},[274,615,616],{"class":284}," -s",[274,618,619],{"class":284}," http:\u002F\u002F127.0.0.1:3000\u002Fapi\u002Fhealth\n",[253,621],{},[256,623,625],{"id":624},"rollback-procedure","Rollback Procedure",[228,627,628],{},"If you ever encounter an issue with a new release:",[293,630,631,637,644,649,655],{},[296,632,633,634],{},"Stop the service: ",[244,635,636],{},"systemctl stop go-shortener",[296,638,639,640,643],{},"Download the previous release binary tag from GitHub releases (e.g. ",[244,641,642],{},"v1.0.0",").",[296,645,646,647,308],{},"Replace ",[244,648,314],{},[296,650,651,652,308],{},"Restart the service: ",[244,653,654],{},"systemctl start go-shortener",[296,656,657],{},"Your database and environment configuration remain untouched.",[659,660,661],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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);}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}",{"title":270,"searchDepth":369,"depth":369,"links":663},[664,665,675],{"id":258,"depth":369,"text":259},{"id":332,"depth":369,"text":333,"children":666},[667,668,669,670,672,673,674],{"id":343,"depth":387,"text":344},{"id":437,"depth":387,"text":438},{"id":464,"depth":387,"text":465},{"id":486,"depth":387,"text":671},"4. Preserve the .env Configuration",{"id":525,"depth":387,"text":526},{"id":556,"depth":387,"text":557},{"id":577,"depth":387,"text":578},{"id":624,"depth":369,"text":625},"Update GO Shortener to a newer release safely without downtime or data loss.","md",null,{},{"icon":44},{"title":682,"description":683},"Updating GO Shortener - Standalone Update Guide","Step-by-step instructions for upgrading GO Shortener while safely preserving configuration and SQLite database files.","jJyvNMk7dm6xwjfE5RBd-ZwOpBYc18SKoRfu-TA2aog",[686,688],{"title":36,"path":37,"stem":38,"description":687,"icon":39,"children":-1},"Initialize GO Shortener, claim the Super Admin role, and complete initial setup.",{"title":51,"path":52,"stem":53,"description":689,"icon":54,"children":-1},"How to shorten URLs, input validation rules, and security protections.",1788462426060]