[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"navigation":3,"url-settings":86,"blog-\u002Fblog\u002Ftop-10-kotlin-code-snippets-to-keep-handy":671,"blog-author-\u002Fblog\u002Ftop-10-kotlin-code-snippets-to-keep-handy":1109,"i-material-symbols:arrow-back-rounded":1121},{"id":4,"extension":5,"footer":6,"header":73,"meta":83,"stem":84,"__hash__":85},"navigation\u002Fdata\u002Fshared\u002Fnavigation.yml","yml",{"brand":7,"columns":13,"legal":63},{"name":8,"tagline":9,"downloadCta":10},"Pieces","The memory layer for modern work.",{"label":11,"href":12},"All downloads","\u002Fdownloads",[14,26,39,51],{"title":15,"links":16},"Product",[17,20,23],{"label":18,"href":19},"Pieces Desktop","\u002F",{"label":21,"href":22},"Pieces Enterprise","\u002Fenterprise",{"label":24,"href":25},"Pieces MCP","\u002Fmcp",{"title":27,"links":28},"Resources",[29,33,36],{"label":30,"href":31,"external":32},"Documentation","url:docs.home",true,{"label":34,"href":35},"Blog","\u002Fblog",{"label":37,"href":38,"external":32},"GitHub","url:github.org",{"title":40,"links":41},"Community",[42,45,48],{"label":43,"href":44,"external":32},"Discord","url:social.discord",{"label":46,"href":47,"external":32},"X \u002F Twitter","url:social.x",{"label":49,"href":50,"external":32},"LinkedIn","url:social.linkedin",{"title":52,"links":53},"Company",[54,57,60],{"label":55,"href":56},"About","\u002Fabout",{"label":58,"href":59},"Updates","\u002Fupdates",{"label":61,"href":62},"Contact","\u002Fcontact",[64,67,70],{"label":65,"href":66},"Privacy Policy","\u002Flegal\u002Fprivacy",{"label":68,"href":69},"Refund Policy","\u002Flegal\u002Frefund",{"label":71,"href":72},"Terms of Service","\u002Flegal\u002Fterms",{"links":74,"signIn":75,"contact":78,"cta":80},[],{"label":76,"href":77},"Manage account","url:portal.home",{"label":79,"href":62},"Get in touch",{"label":81,"href":82},"Download","url:routes.downloads",{},"data\u002Fshared\u002Fnavigation","XlSALC7vYCXHcmcXnjJViwIZKsqnQWF4bn4o9RrcSBE",{"id":87,"extension":5,"links":88,"meta":668,"stem":669,"__hash__":670},"urlSettings\u002Fdata\u002Fshared\u002Furls.yml",[89,93,97,101,105,109,113,117,121,125,129,133,137,141,145,149,153,157,161,165,169,173,177,181,185,189,192,196,200,204,208,212,216,220,224,228,232,236,240,244,248,252,256,260,264,268,272,276,280,284,288,292,296,300,303,307,311,314,318,322,326,330,334,338,342,346,350,354,358,362,366,370,374,378,382,386,390,394,398,402,406,410,414,418,422,426,430,434,438,442,446,450,454,458,461,465,469,473,477,481,485,488,491,494,497,501,505,508,512,516,520,524,528,532,536,540,544,548,552,556,559,563,567,571,575,579,582,585,588,592,595,599,603,607,611,614,618,622,625,628,631,635,639,643,646,649,652,656,660,664],{"key":90,"label":91,"href":92},"downloads.desktop","Desktop download page","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fdesktop\u002Fdownload",{"key":94,"label":95,"href":96},"downloads.macOS.dmgArm64","macOS DMG Apple Silicon","https:\u002F\u002Fbuilds.pieces.app\u002Fstages\u002Fproduction\u002Fpieces_for_x\u002Fdmg-arm64\u002Fdownload",{"key":98,"label":99,"href":100},"downloads.macOS.dmgIntel","macOS DMG Intel","https:\u002F\u002Fbuilds.pieces.app\u002Fstages\u002Fproduction\u002Fpieces_for_x\u002Fdmg\u002Fdownload",{"key":102,"label":103,"href":104},"downloads.macOS.pkg","macOS PKG","https:\u002F\u002Fbuilds.pieces.app\u002Fstages\u002Fproduction\u002Fmacos_packaging\u002Fpkg\u002Fdownload",{"key":106,"label":107,"href":108},"downloads.macOS.universal","Desktop macOS Universal","https:\u002F\u002Fbuilds.pieces.app\u002Fstages\u002Fproduction\u002Fpieces_for_x\u002Fmacos-universal\u002Fdownload",{"key":110,"label":111,"href":112},"downloads.macOS.pkgArm64","Desktop macOS PKG Apple Silicon","https:\u002F\u002Fbuilds.pieces.app\u002Fstages\u002Fproduction\u002Fmacos_packaging\u002Fpkg-pfd-arm64\u002Fdownload",{"key":114,"label":115,"href":116},"downloads.macOS.pkgIntel","Desktop macOS PKG Intel","https:\u002F\u002Fbuilds.pieces.app\u002Fstages\u002Fproduction\u002Fmacos_packaging\u002Fpkg-pfd\u002Fdownload",{"key":118,"label":119,"href":120},"downloads.windows.appinstaller","Windows App Installer","https:\u002F\u002Fbuilds.pieces.app\u002Fstages\u002Fproduction\u002Fappinstaller\u002Fpieces_for_x.appinstaller",{"key":122,"label":123,"href":124},"downloads.windows.exe","Windows EXE","https:\u002F\u002Fbuilds.pieces.app\u002Fstages\u002Fproduction\u002Fpieces_for_x\u002Fwindows-exe\u002Fdownload",{"key":126,"label":127,"href":128},"downloads.windows.msix","Windows MSIX","https:\u002F\u002Fbuilds.pieces.app\u002Fstages\u002Fproduction\u002Fpieces_for_x\u002Fwindows-msix\u002Fdownload",{"key":130,"label":131,"href":132},"downloads.windows.suiteManager","Windows Suite Manager","https:\u002F\u002Fbuilds.pieces.app\u002Fstages\u002Fproduction\u002Fpieces_suite_windows\u002Fappinstaller\u002Fdownload",{"key":134,"label":135,"href":136},"downloads.linux.flatpakRepo","Linux Flatpak repository","https:\u002F\u002Fbuilds.pieces.app\u002Fpieces-flatpak-repo\u002Fpieces-flatpak.flatpakrepo",{"key":138,"label":139,"href":140},"downloads.linux.snapDesktop","Linux Snap Desktop","https:\u002F\u002Fsnapcraft.io\u002Fpieces-for-developers",{"key":142,"label":143,"href":144},"downloads.linux.snapPiecesOS","Linux Snap PiecesOS","https:\u002F\u002Fsnapcraft.io\u002Fpieces-os",{"key":146,"label":147,"href":148},"downloads.linux.snap","Desktop Linux Snap package","https:\u002F\u002Fbuilds.pieces.app\u002Fstages\u002Fproduction\u002Fpieces_for_x\u002Fsnap\u002Fdownload",{"key":150,"label":151,"href":152},"downloads.piecesOS.macOS.dmgArm64","PiecesOS macOS DMG Apple Silicon","https:\u002F\u002Fbuilds.pieces.app\u002Fstages\u002Fproduction\u002Fos_server\u002Fdmg-arm64\u002Fdownload",{"key":154,"label":155,"href":156},"downloads.piecesOS.macOS.dmgIntel","PiecesOS macOS DMG Intel","https:\u002F\u002Fbuilds.pieces.app\u002Fstages\u002Fproduction\u002Fos_server\u002Fdmg\u002Fdownload",{"key":158,"label":159,"href":160},"downloads.piecesOS.macOS.universal","PiecesOS macOS Universal","https:\u002F\u002Fbuilds.pieces.app\u002Fstages\u002Fproduction\u002Fos_server\u002Fmacos-universal\u002Fdownload",{"key":162,"label":163,"href":164},"downloads.piecesOS.macOS.pkgArm64","PiecesOS macOS PKG Apple Silicon","https:\u002F\u002Fbuilds.pieces.app\u002Fstages\u002Fproduction\u002Fmacos_packaging\u002Fpkg-pos-launch-only-arm64\u002Fdownload",{"key":166,"label":167,"href":168},"downloads.piecesOS.macOS.pkgIntel","PiecesOS macOS PKG Intel","https:\u002F\u002Fbuilds.pieces.app\u002Fstages\u002Fproduction\u002Fmacos_packaging\u002Fpkg-pos-launch-only\u002Fdownload",{"key":170,"label":171,"href":172},"downloads.piecesOS.windows.appinstaller","PiecesOS Windows App Installer","https:\u002F\u002Fbuilds.pieces.app\u002Fstages\u002Fproduction\u002Fappinstaller\u002Fos_server.appinstaller",{"key":174,"label":175,"href":176},"downloads.piecesOS.windows.exe","PiecesOS Windows EXE","https:\u002F\u002Fbuilds.pieces.app\u002Fstages\u002Fproduction\u002Fos_server\u002Fwindows-exe\u002Fdownload",{"key":178,"label":179,"href":180},"downloads.piecesOS.windows.msix","PiecesOS Windows MSIX","https:\u002F\u002Fbuilds.pieces.app\u002Fstages\u002Fproduction\u002Fos_server\u002Fwindows-msix\u002Fdownload",{"key":182,"label":183,"href":184},"downloads.piecesOS.linux.snap","PiecesOS Linux Snap package","https:\u002F\u002Fbuilds.pieces.app\u002Fstages\u002Fproduction\u002Fos_server\u002Fsnap\u002Fdownload",{"key":186,"label":187,"href":188},"downloads.combined.macOS.appleSilicon","Combined macOS installer Apple Silicon","https:\u002F\u002Fbuilds.pieces.app\u002Fstages\u002Fproduction\u002Fmacos_packaging\u002Fpkg-arm64\u002Fdownload",{"key":190,"label":191,"href":104},"downloads.combined.macOS.intel","Combined macOS installer Intel",{"key":193,"label":194,"href":195},"downloads.guides.macOS","macOS installation guide","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fmeet-pieces\u002Fmacos-installation-guide",{"key":197,"label":198,"href":199},"downloads.guides.windows","Windows installation guide","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fmeet-pieces\u002Fwindows-installation-guide",{"key":201,"label":202,"href":203},"downloads.guides.linux","Linux installation guide","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fmeet-pieces\u002Flinux-installation-guide",{"key":205,"label":206,"href":207},"downloads.guides.linuxFlatpak","Linux Flatpak installation guide","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fmeet-pieces\u002Flinux-installation-guide\u002Fflatpak",{"key":209,"label":210,"href":211},"downloads.guides.linuxSnap","Linux Snap installation guide","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fmeet-pieces\u002Flinux-installation-guide\u002Fsnap",{"key":213,"label":214,"href":215},"downloads.guides.piecesOS","PiecesOS manual installation","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fcore-dependencies\u002Fpieces-os\u002Fmanual-installation",{"key":217,"label":218,"href":219},"extensions.chrome","Chrome extension","https:\u002F\u002Fchrome.google.com\u002Fwebstore\u002Fdetail\u002Fpieces-save-code-snippets\u002Figbgibhbfonhmjlechmeefimncpekepm",{"key":221,"label":222,"href":223},"extensions.firefox","Firefox add-on","https:\u002F\u002Faddons.mozilla.org\u002Fen-US\u002Ffirefox\u002Faddon\u002Fpieces-save-code-from-the-web\u002F",{"key":225,"label":226,"href":227},"extensions.edge","Edge add-on","https:\u002F\u002Fmicrosoftedge.microsoft.com\u002Faddons\u002Fdetail\u002Fpieces-save-code-snippet\u002Fhglfimcdgonaeeobjckfdabcldfidmim",{"key":229,"label":230,"href":231},"extensions.vscode","VS Code extension","https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=MeshIntelligentTechnologiesInc.pieces-vscode",{"key":233,"label":234,"href":235},"extensions.visualStudio","Visual Studio extension","https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=MeshIntelligentTechnologiesInc.PiecesVisualStudio",{"key":237,"label":238,"href":239},"extensions.jetbrains","JetBrains plugin","https:\u002F\u002Fplugins.jetbrains.com\u002Fplugin\u002F17328-pieces--save-search-share--reuse-code-snippets",{"key":241,"label":242,"href":243},"extensions.obsidian","Obsidian plugin","https:\u002F\u002Fobsidian.md\u002Fplugins?id=pieces-for-developers",{"key":245,"label":246,"href":247},"extensions.sublime","Sublime package","https:\u002F\u002Fpackagecontrol.io\u002Fpackages\u002FPieces",{"key":249,"label":250,"href":251},"extensions.neovim","Neovim plugin","https:\u002F\u002Fgithub.com\u002Fpieces-app\u002Fplugin_neo_vim",{"key":253,"label":254,"href":255},"extensions.jupyterlab","JupyterLab plugin","https:\u002F\u002Fgithub.com\u002Fpieces-app\u002Fjupyterlab-pieces",{"key":257,"label":258,"href":259},"extensions.cli","Pieces CLI","https:\u002F\u002Fpypi.org\u002Fproject\u002Fpieces-cli\u002F",{"key":261,"label":262,"href":263},"docs.home","Documentation home","https:\u002F\u002Fdocs.pieces.app",{"key":265,"label":266,"href":267},"docs.getStarted","Get started docs","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fmeet-pieces",{"key":269,"label":270,"href":271},"docs.api","API docs","https:\u002F\u002Fdocs.pieces.app\u002Fapi",{"key":273,"label":274,"href":275},"docs.desktop.overview","Desktop overview","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fdesktop",{"key":277,"label":278,"href":279},"docs.desktop.onboarding","Desktop onboarding","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fdesktop\u002Fonboarding",{"key":281,"label":282,"href":283},"docs.desktop.timeline","Desktop timeline docs","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fdesktop\u002Ftimeline",{"key":285,"label":286,"href":287},"docs.desktop.summaries","Desktop summaries docs","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fdesktop\u002Fsingle-click-summaries",{"key":289,"label":290,"href":291},"docs.desktop.search","Desktop conversational search docs","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fdesktop\u002Fconversational-search",{"key":293,"label":294,"href":295},"docs.desktop.drive","Desktop drive docs","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fdesktop\u002Fdrive",{"key":297,"label":298,"href":299},"docs.desktop.account","Desktop account settings docs","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fdesktop\u002Fconfiguration\u002Faccount",{"key":301,"label":302,"href":92},"docs.desktop.download","Desktop download docs",{"key":304,"label":305,"href":306},"docs.piecesOS.overview","PiecesOS overview docs","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fcore-dependencies",{"key":308,"label":309,"href":310},"docs.piecesOS.details","PiecesOS details docs","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fcore-dependencies\u002Fpieces-os",{"key":312,"label":313,"href":215},"docs.piecesOS.install","PiecesOS install docs",{"key":315,"label":316,"href":317},"docs.piecesOS.quickMenu","PiecesOS quick menu docs","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fcore-dependencies\u002Fpieces-os\u002Fquick-menu",{"key":319,"label":320,"href":321},"docs.piecesOS.storage","On-device storage docs","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fcore-dependencies\u002Fon-device-storage",{"key":323,"label":324,"href":325},"docs.piecesOS.troubleshooting","PiecesOS troubleshooting docs","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fcore-dependencies\u002Fpieces-os\u002Ftroubleshooting",{"key":327,"label":328,"href":329},"docs.mcp.overview","MCP overview docs","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fmcp",{"key":331,"label":332,"href":333},"docs.mcp.cursor","MCP Cursor docs","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fmcp\u002Fcursor",{"key":335,"label":336,"href":337},"docs.mcp.vscode","MCP VS Code docs","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fmcp\u002Fvs-code",{"key":339,"label":340,"href":341},"docs.mcp.claudeDesktop","MCP Claude Desktop docs","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fmcp\u002Fclaude-desktop",{"key":343,"label":344,"href":345},"docs.mcp.claudeCode","MCP Claude Code docs","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fmcp\u002Fclaude-code",{"key":347,"label":348,"href":349},"docs.mcp.claudeCowork","MCP Claude Cowork docs","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fmcp\u002Fclaude-cowork",{"key":351,"label":352,"href":353},"docs.mcp.githubCopilot","MCP GitHub Copilot docs","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fmcp\u002Fgithub-copilot",{"key":355,"label":356,"href":357},"docs.mcp.goose","MCP Goose docs","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fmcp\u002Fgoose",{"key":359,"label":360,"href":361},"docs.mcp.windsurf","MCP Windsurf docs","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fmcp\u002Fwindsurf",{"key":363,"label":364,"href":365},"docs.mcp.zed","MCP Zed docs","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fmcp\u002Fzed",{"key":367,"label":368,"href":369},"docs.mcp.jetbrains","MCP JetBrains docs","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fmcp\u002Fjetbrains-ides",{"key":371,"label":372,"href":373},"docs.mcp.continueDev","MCP Continue docs","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fmcp\u002Fcontinue-dev",{"key":375,"label":376,"href":377},"docs.mcp.cline","MCP Cline docs","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fmcp\u002Fcline",{"key":379,"label":380,"href":381},"docs.mcp.raycast","MCP Raycast docs","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fmcp\u002Fraycast",{"key":383,"label":384,"href":385},"docs.mcp.rovoDevCli","MCP Rovo Dev CLI docs","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fmcp\u002Frovo-dev-cli",{"key":387,"label":388,"href":389},"docs.mcp.openaiCodexCli","MCP OpenAI Codex CLI docs","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fmcp\u002Fopenai-codex-cli",{"key":391,"label":392,"href":393},"docs.mcp.googleGeminiCli","MCP Google Gemini CLI docs","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fmcp\u002Fgoogle-gemini-cli",{"key":395,"label":396,"href":397},"docs.mcp.amazonQ","MCP Amazon Q docs","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fmcp\u002Famazon-q-developer",{"key":399,"label":400,"href":401},"docs.mcp.chatgptDev","MCP ChatGPT Developer Mode docs","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fmcp\u002Fchatgpt-developer-mode",{"key":403,"label":404,"href":405},"docs.mcp.openclaw","MCP OpenClaw docs","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fmcp\u002Fopenclaw",{"key":407,"label":408,"href":409},"docs.mcp.mcpRemote","MCP Remote docs","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fmcp\u002Fmcp-remote",{"key":411,"label":412,"href":413},"docs.mcp.ngrok","MCP ngrok docs","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fmcp\u002Fngrok-setup",{"key":415,"label":416,"href":417},"docs.troubleshooting.macOS","macOS troubleshooting docs","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fmeet-pieces\u002Ftroubleshooting\u002Fmacos",{"key":419,"label":420,"href":421},"docs.troubleshooting.windows","Windows troubleshooting docs","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fmeet-pieces\u002Ftroubleshooting\u002Fwindows",{"key":423,"label":424,"href":425},"docs.troubleshooting.linux","Linux troubleshooting docs","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fmeet-pieces\u002Ftroubleshooting\u002Flinux",{"key":427,"label":428,"href":429},"docs.privacy","Privacy and security docs","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fprivacy-security-your-data",{"key":431,"label":432,"href":433},"docs.support","Support docs","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fsupport",{"key":435,"label":436,"href":437},"portal.home","Pieces portal","https:\u002F\u002Fportal.pieces.app",{"key":439,"label":440,"href":441},"site.home","Website home","https:\u002F\u002Fpieces.app",{"key":443,"label":444,"href":445},"site.about","About page","https:\u002F\u002Fpieces.app\u002Fabout",{"key":447,"label":448,"href":449},"site.features","Features page","https:\u002F\u002Fpieces.app\u002Ffeatures",{"key":451,"label":452,"href":453},"site.plugins","Plugins page","https:\u002F\u002Fpieces.app\u002Fplugins",{"key":455,"label":456,"href":457},"site.contact","Contact page","https:\u002F\u002Fpieces.app\u002Fcontact",{"key":459,"label":58,"href":460},"site.updates","https:\u002F\u002Fpieces.app\u002Fupdates",{"key":462,"label":463,"href":464},"site.news","News","https:\u002F\u002Fpieces.app\u002Fnews",{"key":466,"label":467,"href":468},"site.events","Community events","https:\u002F\u002Fpieces.app\u002Fcommunity\u002Fevents",{"key":470,"label":471,"href":472},"site.userStories","User stories","https:\u002F\u002Fpieces.app\u002Fuser-stories",{"key":474,"label":475,"href":476},"site.academy","Academy","https:\u002F\u002Fpieces.app\u002Flearn\u002Facademy",{"key":478,"label":479,"href":480},"site.support","Website support","https:\u002F\u002Fpieces.app\u002Fsupport",{"key":482,"label":483,"href":484},"site.standup","Standup","https:\u002F\u002Fpieces.app\u002Fstandup",{"key":486,"label":34,"href":487},"site.blog","https:\u002F\u002Fcode.pieces.app\u002Fblog",{"key":489,"label":43,"href":490},"social.discord","https:\u002F\u002Fdiscord.gg\u002Fgetpieces",{"key":492,"label":46,"href":493},"social.x","https:\u002F\u002Fx.com\u002Fgetpieces",{"key":495,"label":496,"href":493},"social.twitter","Twitter",{"key":498,"label":499,"href":500},"social.instagram","Instagram","https:\u002F\u002Fwww.instagram.com\u002Fgetpieces\u002F",{"key":502,"label":503,"href":504},"social.tiktok","TikTok","https:\u002F\u002Fwww.tiktok.com\u002F@getpieces",{"key":506,"label":49,"href":507},"social.linkedin","https:\u002F\u002Fwww.linkedin.com\u002Fcompany\u002Fgetpieces\u002F",{"key":509,"label":510,"href":511},"social.youtube","YouTube","https:\u002F\u002Fyoutube.com\u002F@getpieces",{"key":513,"label":514,"href":515},"github.org","GitHub organization","https:\u002F\u002Fgithub.com\u002Fpieces-app",{"key":517,"label":518,"href":519},"github.support","GitHub support","https:\u002F\u002Fgithub.com\u002Fpieces-app\u002Fsupport",{"key":521,"label":522,"href":523},"github.issues","GitHub issues","https:\u002F\u002Fgithub.com\u002Fpieces-app\u002Fsupport\u002Fissues",{"key":525,"label":526,"href":527},"github.discussions","GitHub discussions","https:\u002F\u002Fgithub.com\u002Fpieces-app\u002Fsupport\u002Fdiscussions",{"key":529,"label":530,"href":531},"github.documentation","GitHub documentation","https:\u002F\u002Fgithub.com\u002Fpieces-app\u002Fdocumentation",{"key":533,"label":534,"href":535},"github.opensource","GitHub open source","https:\u002F\u002Fgithub.com\u002Fpieces-app\u002Fopensource",{"key":537,"label":538,"href":539},"github.sdks.python","Python SDK","https:\u002F\u002Fgithub.com\u002Fpieces-app\u002Fpieces-os-client-sdk-for-python",{"key":541,"label":542,"href":543},"github.sdks.typescript","TypeScript SDK","https:\u002F\u002Fgithub.com\u002Fpieces-app\u002Fpieces-os-client-sdk-for-typescript",{"key":545,"label":546,"href":547},"github.sdks.dart","Dart SDK","https:\u002F\u002Fgithub.com\u002Fpieces-app\u002Fpieces-os-client-sdk-for-dart",{"key":549,"label":550,"href":551},"github.sdks.kotlin","Kotlin SDK","https:\u002F\u002Fgithub.com\u002Fpieces-app\u002Fpieces-os-client-sdk-for-kotlin",{"key":553,"label":554,"href":555},"github.plugins.obsidian","Obsidian plugin repository","https:\u002F\u002Fgithub.com\u002Fpieces-app\u002Fobsidian-pieces",{"key":557,"label":558,"href":255},"github.plugins.jupyterlab","JupyterLab plugin repository",{"key":560,"label":561,"href":562},"github.plugins.sublime","Sublime plugin repository","https:\u002F\u002Fgithub.com\u002Fpieces-app\u002Fplugin_sublime",{"key":564,"label":565,"href":566},"github.plugins.neovim","Neovim plugin repository","https:\u002F\u002Fgithub.com\u002Fpieces-app\u002Fplugin_neovim",{"key":568,"label":569,"href":570},"github.cliAgent","CLI agent repository","https:\u002F\u002Fgithub.com\u002Fpieces-app\u002Fcli-agent",{"key":572,"label":573,"href":574},"github.mcpDart","MCP Dart repository","https:\u002F\u002Fgithub.com\u002Fpieces-app\u002Fmcp_dart",{"key":576,"label":577,"href":578},"github.awesomePieces","Awesome Pieces repository","https:\u002F\u002Fgithub.com\u002Fpieces-app\u002Fawesome-pieces",{"key":580,"label":581,"href":66},"legal.privacyPolicy","Privacy policy",{"key":583,"label":584,"href":69},"legal.refundPolicy","Refund policy",{"key":586,"label":587,"href":72},"legal.terms","Terms",{"key":589,"label":590,"href":591},"legal.security","Legal security","https:\u002F\u002Fpieces.app\u002Flegal\u002Fsecurity",{"key":593,"label":594,"href":511},"videos.youtubeChannel","YouTube channel",{"key":596,"label":597,"href":598},"videos.gettingStartedDesktop","Getting started desktop video","https:\u002F\u002Fyoutu.be\u002FdUr1lRM_TYk",{"key":600,"label":601,"href":602},"videos.snippetDiscoveryxR","Snippet discovery video","https:\u002F\u002Fyoutu.be\u002FG6vb1USw-30",{"key":604,"label":605,"href":606},"sales.bookACall","Book a sales call","https:\u002F\u002Fcalendar.app.google\u002FWVUDtUfNy5Vst3sH7",{"key":608,"label":609,"href":610},"sales.enterprise","Enterprise form","https:\u002F\u002Fgetpieces.typeform.com\u002Fto\u002FaVQFTvpE",{"key":612,"label":613,"href":527},"sales.feedback","Feedback discussions",{"key":615,"label":616,"href":617},"sales.earlyAccess","Early access form","https:\u002F\u002Fgetpieces.typeform.com\u002Fearlyaccess",{"key":619,"label":620,"href":621},"sales.supportEmail","Support email","mailto:support@pieces.app",{"key":623,"label":624,"href":19},"routes.home","Home route",{"key":626,"label":627,"href":56},"routes.about","About route",{"key":629,"label":630,"href":12},"routes.downloads","Downloads route",{"key":632,"label":633,"href":634},"routes.thanks","Post-install thanks route","\u002Finstall\u002Fthanks",{"key":636,"label":637,"href":638},"routes.pricing","Pricing route","\u002Fpricing",{"key":640,"label":641,"href":642},"cta.freeTrial","Start free trial CTA (Pieces Pro) — used by \u002Fcampaigns\u002F* landing pages","https:\u002F\u002Fcampaigns.pieces.app\u002F",{"key":644,"label":645,"href":22},"routes.enterprise","Enterprise route",{"key":647,"label":648,"href":62},"routes.contact","Contact route",{"key":650,"label":651,"href":59},"routes.updates","Updates route",{"key":653,"label":654,"href":655},"routes.migrationError","Migration error route","\u002Fmigration\u002Ferror",{"key":657,"label":658,"href":659},"routes.authenticated","Post-login authenticated route","\u002Fauth\u002Fsigned-in",{"key":661,"label":662,"href":663},"routes.signed-out","Signed out route","\u002Fauth\u002Fsigned-out",{"key":665,"label":666,"href":667},"routes.authentication-error","Authentication error route","\u002Fauth\u002Ferror",{},"data\u002Fshared\u002Furls","2AvfSWI6bZACH5Kr1ZS3txMLjteRjCjbDR_ul1uRZ9Q",{"id":672,"title":673,"author":674,"authorPhoto":675,"authorPhotoAlt":676,"authorSlug":677,"body":678,"buttonText":1096,"buttonUrl":1096,"category":1097,"date":1098,"description":1099,"draft":1100,"editorsPick":1100,"extension":1101,"featured":1100,"image":1102,"imageAlt":1103,"meta":1104,"navigation":32,"ogImage":1096,"ogImageAlt":1096,"path":1105,"seo":1106,"stem":1107,"tags":1096,"__hash__":1108},"blog\u002Fblog\u002Ftop-10-kotlin-code-snippets-to-keep-handy.md","Top 10 Kotlin Code Snippets to Keep Handy","Anushka Gupta","https:\u002F\u002Fstorage.googleapis.com\u002Fpieces-marketing-website\u002Fimages\u002Fblog\u002Ftop-10-kotlin-code-snippets-to-keep-handy\u002Fauthor.png","Anushka Gupta headshot.","anushka-gupta",{"type":679,"value":680,"toc":1081},"minimark",[681,685,696,699,702,705,710,713,716,719,727,730,740,744,747,758,764,771,775,782,788,794,797,801,812,818,824,827,831,838,844,850,853,857,860,866,872,881,885,902,918,925,931,937,940,944,947,953,959,967,971,982,988,994,1000,1004,1007,1010,1016,1022,1025,1029,1036,1039,1046,1049,1053,1056,1059,1062,1065,1073],[682,683,684],"p",{},"Kotlin is the cross-platform, general-purpose, open-source programming language developed by JetBrains. It is fully interoperable with Java. According to Stack Overflow, Kotlin is the 4th most loved language among the developer’s community, and it is the preferred language for Android development.",[682,686,687,688,695],{},"Google announced first-class support for Kotlin on Android in addition to the existing languages – Java and C++ – at Google I\u002FO in 2017. ",[689,690,694],"a",{"href":691,"rel":692},"https:\u002F\u002Ftechcrunch.com\u002F2019\u002F05\u002F07\u002Fkotlin-is-now-googles-preferred-language-for-android-app-development\u002F",[693],"nofollow","Google also announced Kotlin as its preferred language for Android development"," on May 7, 2019.",[682,697,698],{},"Rather than searching through your notes, codebase, and search history endlessly, you can use Pieces for Developers to organize useful code snippets along with useful links, tags, descriptions, anchors, and titles for each snippet, making it a lightning fast task to retrieve one whenever you need it.",[682,700,701],{},"In this article we will look at a curated list of the best Kotlin code snippets for beginners and advanced developers who want to enhance their productivity & skills with this powerful language.",[682,703,704],{},"Let’s get started!",[706,707,709],"h2",{"id":708},"_1-delegated-properties","1. Delegated Properties",[682,711,712],{},"Delegation is defined as granting authority or power to the person to carry out different tasks. Similarly, Kotlin provides the language support for delegation using Delegation properties.",[682,714,715],{},"This feature allows you to create and implement properties only once and then use them continuously to delegate other code work in the application.",[682,717,718],{},"Delegation is the design pattern where an object or property delegates the task to the other helper object instead of performing the task itself.",[682,720,721,722,726],{},"In the code below, a property name in our Demo class delegates the logic for getter and setter to ",[723,724,725],"code",{},"DelegateHelperClass()",", so anything after that keyword satisfies the conversion for the property delegates to act as a Delegate.",[682,728,729],{},"Let's dive into how delegated properties work with a code example:",[731,732,737],"pre",{"className":733,"code":735,"language":736},[734],"language-text","class Demo {var name: String by DelegateHelperClass()}\n","text",[723,738,735],{"__ignoreMap":739},"",[706,741,743],{"id":742},"_2-smart-casts","2. Smart casts",[682,745,746],{},"Other programming languages, including Java, require explicit type casting on variables before accessing their properties. However, there is a feature in Kotlin called smart casting that tracks conditions within the if expression.",[682,748,749,750,753,754,757],{},"If the Kotlin compiler discovers a variable that is not null and has a type equal to nullable, only then the compiler will allow access to that variable. The ",[723,751,752],{},"is"," or ",[723,755,756],{},"!is"," operator can be used to check the type of a variable, and the compiler will automatically cast the variable to the target type as shown in the code.",[731,759,762],{"className":760,"code":761,"language":736},[734],"fun main(args: Array\u003C String >) \n{val str1: String? = “Hello World”var str2: String? = null \n\u002F\u002F prints String is nullif(str1 is String) \n          {\u002F\u002F No Explicit type Casting needed.println(“length of String ${str1.length}”)}\nelse \n          {println(“String is null”)}}\n",[723,763,761],{"__ignoreMap":739},[682,765,766],{},[689,767,770],{"href":768,"rel":769},"https:\u002F\u002Fsophyia.pieces.cloud\u002F?p=3bbe4388ac",[693],"Save this code",[706,772,774],{"id":773},"_3-elvis-operator","3. Elvis Operator (?:)",[682,776,777,778,781],{},"The Elvis operator in Kotlin, represented as ",[723,779,780],{},"?:",", offers a concise way to handle nullability. It returns the expression on the left if it's not null, otherwise, it evaluates and returns the expression on the right. This snippet is handy when dealing with nullable types, preventing null pointer exceptions.",[731,783,786],{"className":784,"code":785,"language":736},[734],"val result = nullableValue ?: defaultValue\n",[723,787,785],{"__ignoreMap":739},[682,789,790],{},[689,791,770],{"href":792,"rel":793},"https:\u002F\u002Fsophyia.pieces.cloud\u002F?p=da3c4f803c",[693],[682,795,796],{},"Use Case: Use the Elvis operator to provide a default value when dealing with nullable variables, simplifying null checks.",[706,798,800],{"id":799},"_4-safe-call-operator","4. Safe Call Operator (?.)",[682,802,803,804,807,808,811],{},"The safe call operator, denoted by ",[723,805,806],{},"?."," in this Kotlin code snippet, allows accessing properties or invoking methods on nullable objects safely. It returns null if the object is null, preventing ",[723,809,810],{},"NullPointerExceptions",".",[731,813,816],{"className":814,"code":815,"language":736},[734],"val length = nullableString?.length\n",[723,817,815],{"__ignoreMap":739},[682,819,820],{},[689,821,770],{"href":822,"rel":823},"https:\u002F\u002Fsophyia.pieces.cloud\u002F?p=a75840a303",[693],[682,825,826],{},"Use Case: Employ the safe call operator Kotlin snippet when working with nullable objects to access their properties or methods without risking null pointer exceptions.",[706,828,830],{"id":829},"_5-string-interpolation","5. String Interpolation",[682,832,833,834,837],{},"Kotlin supports string interpolation, enabling the embedding of expressions directly into strings. Enclose the expression in curly braces preceded by a dollar sign (",[723,835,836],{},"${expression}",").",[731,839,842],{"className":840,"code":841,"language":736},[734],"val name = \"John\"val greeting = \"Hello, $name!\"\n",[723,843,841],{"__ignoreMap":739},[682,845,846],{},[689,847,770],{"href":848,"rel":849},"https:\u002F\u002Fsophyia.pieces.cloud\u002F?p=496042be9b",[693],[682,851,852],{},"Use Case: Utilize string interpolation for dynamic string construction, enhancing code readability and maintainability.",[706,854,856],{"id":855},"_6-extension-functions","6. Extension Functions",[682,858,859],{},"Extension functions allow adding new functionalities to existing classes without modifying their source code. They enhance code reusability and facilitate a more fluent API design.",[731,861,864],{"className":862,"code":863,"language":736},[734],"fun String.addExclamation(): String {\n                             return \"$this!\"\n                             }\n",[723,865,863],{"__ignoreMap":739},[682,867,868],{},[689,869,770],{"href":870,"rel":871},"https:\u002F\u002Fsophyia.pieces.cloud\u002F?p=d0c24c8572",[693],[682,873,874,875,880],{},"Use Case: Employ extension functions to extend the functionality of existing classes, promoting ",[689,876,879],{"href":877,"rel":878},"https:\u002F\u002Fpieces.app\u002Fblog\u002Fmodern-code-organization-techniques",[693],"code organization"," and maintainability.",[706,882,884],{"id":883},"_7-data-classes","7. Data Classes",[682,886,887,888,891,892,891,895,898,899,811],{},"In Kotlin, data classes are a special type of class that is primarily used to hold data. They are designed to reduce boilerplate code by automatically generating several standard methods such as ",[723,889,890],{},"equals()",", ",[723,893,894],{},"hashCode()",[723,896,897],{},"toString()",", and ",[723,900,901],{},"copy()",[682,903,904,905,908,909,891,911,891,913,898,915,917],{},"In this Kotlin code snippet below, we define a data class named User with two properties: name of type String and age of type ",[723,906,907],{},"Int",". By simply declaring the class with the data modifier, Kotlin automatically generates the ",[723,910,890],{},[723,912,894],{},[723,914,897],{},[723,916,901],{}," methods for us.",[682,919,920,921,924],{},"Using data classes simplifies working with immutable data. In the example, we create a User object named user with the name \"Alice\" and age 30. Since ",[723,922,923],{},"User"," is a data class, we can easily access its properties, compare objects for equality, generate hash codes, and create copies without writing additional boilerplate code.",[731,926,929],{"className":927,"code":928,"language":736},[734],"data class User(val name: String, val age: Int)val user = User(\"Alice\", 30)\n",[723,930,928],{"__ignoreMap":739},[682,932,933],{},[689,934,770],{"href":935,"rel":936},"https:\u002F\u002Fsophyia.pieces.cloud\u002F?p=2254438828",[693],[682,938,939],{},"Use Case: Use data classes to represent immutable data, reducing boilerplate code and enhancing readability.",[706,941,943],{"id":942},"_8-higher-order-functions","8. Higher-Order Functions",[682,945,946],{},"Higher-order functions accept other functions as parameters or return them. They enable concise and expressive code, promoting functional programming paradigms. They can take other functions as parameters or return functions as results. In Kotlin, functions are first-class citizens, meaning they can be treated like any other value, such as integers or strings. This allows for the creation of higher-order functions, which enable more concise and flexible code.",[731,948,951],{"className":949,"code":950,"language":736},[734],"fun operateOnNumber(number: Int, operation: (Int) -> Int): Int\n{\n return operation(number)\n}\nval squared = operateOnNumber(5) { it * it }\n",[723,952,950],{"__ignoreMap":739},[682,954,955],{},[689,956,770],{"href":957,"rel":958},"https:\u002F\u002Fsophyia.pieces.cloud\u002F?p=8a3240a0af",[693],[682,960,961,962,811],{},"Use Case: Leverage higher-order functions to encapsulate common behaviors and promote ",[689,963,966],{"href":964,"rel":965},"https:\u002F\u002Fpieces.app\u002Fblog\u002Fmaking-code-reuse-and-reference-seamless",[693],"code reuse",[706,968,970],{"id":969},"_9-null-safety-with-operator","9. Null Safety with !! Operator",[682,972,973,974,977,978,981],{},"Although not recommended, the double exclamation mark (",[723,975,976],{},"!!",") operator can be used to assert that an expression is not null. It throws a ",[723,979,980],{},"NullPointerException"," if the expression evaluates to null.",[731,983,986],{"className":984,"code":985,"language":736},[734],"val length = nullableString!!.length\n",[723,987,985],{"__ignoreMap":739},[682,989,990],{},[689,991,770],{"href":992,"rel":993},"https:\u002F\u002Fsophyia.pieces.cloud\u002F?p=2a06479494",[693],[682,995,996,997,999],{},"Use Case: Exercise caution when using the ",[723,998,976],{}," operator, as it bypasses null safety checks and can lead to runtime exceptions.",[706,1001,1003],{"id":1002},"_10-default-arguments","10. Default Arguments",[682,1005,1006],{},"Default arguments in Kotlin allow you to specify default values for function parameters. This means that when you call a function without providing values for certain parameters, those parameters will be initialized with their default values.",[682,1008,1009],{},"Default arguments, like this Kotlin snippet, provide a convenient way to define functions with a varying number of parameters while allowing callers to omit some of them if they're not necessary. Kotlin supports default arguments in function parameters, allowing the omission of arguments when calling functions.",[731,1011,1014],{"className":1012,"code":1013,"language":736},[734],"fun greet(name: String = \"World\") {\n println(\"Hello, $name!\")\n}\ngreet() \u002F\u002F Output: Hello, World!\n",[723,1015,1013],{"__ignoreMap":739},[682,1017,1018],{},[689,1019,770],{"href":1020,"rel":1021},"https:\u002F\u002Fsophyia.pieces.cloud\u002F?p=b1494295d7",[693],[682,1023,1024],{},"Use Case: Utilize default arguments to define flexible function interfaces and simplify function calls.",[706,1026,1028],{"id":1027},"bonus-snippet-inline-functions","Bonus Snippet: Inline Functions",[682,1030,1031,1032,1035],{},"Inline functions in Kotlin are marked with the ",[723,1033,1034],{},"inline"," keyword and are expanded at the call site, reducing the overhead of function calls.",[682,1037,1038],{},"inline fun performOperation(value: Int, operation: (Int) -> Int): Int { return operation(value) }val result = performOperation(5) { it * it }",[682,1040,1041],{},[689,1042,1045],{"href":1043,"rel":1044},"https:\u002F\u002Fsophyia.pieces.cloud\u002F?p=194747aaf4",[693],"Save this code snippet",[682,1047,1048],{},"Use Case: Use inline functions to improve performance by eliminating the overhead of function calls for small functions or lambdas.",[706,1050,1052],{"id":1051},"conclusion","Conclusion",[682,1054,1055],{},"Kotlin's powerful features empower developers to write concise, expressive, and safe code. By leveraging Kotlin snippets like the Elvis operator, extension functions, and higher-order functions, developers can enhance productivity and maintainability.",[682,1057,1058],{},"Understanding and mastering these features is key to unlocking the full potential of Kotlin and building robust applications efficiently. Experiment with these Kotlin code snippets in your projects, and witness firsthand the elegance and efficiency of Kotlin programming.",[682,1060,1061],{},"With this we conclude our curated selection of top-notch Kotlin boilerplate snippets — a valuable resource for both experienced Kotlin developers and beginners alike.",[682,1063,1064],{},"To streamline your coding journey and enhance your learning curve, the Pieces Web Extension offers a convenient feature. With just a few clicks, you can effortlessly copy and save any of these Kotlin boilerplate code snippets from our list, ensuring quick access whenever you require them.",[682,1066,1067,1068,811],{},"What's even more intriguing is that by saving a snippet in Pieces, you'll gain deeper insights into these boilerplate Kotlin snippets, including tags, context, and relevant links. Why not give it a try? Simply click one of the links above to save the code snippets, enriched with tags and all the context you need, saved into a personal, on-device repository. First you need to ",[689,1069,1072],{"href":1070,"rel":1071},"https:\u002F\u002Fdocs.pieces.app\u002Finstallation-getting-started\u002Fwhat-am-i-installing",[693],"install the Pieces Desktop App",[682,1074,1075,1076,811],{},"We trust that this article has provided you with a solid understanding of useful Kotlin boilerplate snippets and when to apply them in your projects. You can find more useful snippets for other languages with our ",[689,1077,1080],{"href":1078,"rel":1079},"https:\u002F\u002Fcode.pieces.app\u002Fcollections",[693],"snippet collections",{"title":739,"searchDepth":1082,"depth":1082,"links":1083},2,[1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095],{"id":708,"depth":1082,"text":709},{"id":742,"depth":1082,"text":743},{"id":773,"depth":1082,"text":774},{"id":799,"depth":1082,"text":800},{"id":829,"depth":1082,"text":830},{"id":855,"depth":1082,"text":856},{"id":883,"depth":1082,"text":884},{"id":942,"depth":1082,"text":943},{"id":969,"depth":1082,"text":970},{"id":1002,"depth":1082,"text":1003},{"id":1027,"depth":1082,"text":1028},{"id":1051,"depth":1082,"text":1052},null,"Software Development","2024-03-19T00:00:00.000Z","Explore essential Kotlin code snippets like the Elvis operator, extension functions, higher-order functions, and more.",false,"md","https:\u002F\u002Fstorage.googleapis.com\u002Fpieces-marketing-website\u002Fimages\u002Fblog\u002Ftop-10-kotlin-code-snippets-to-keep-handy\u002Fhero.jpeg","Kotlin logo.",{},"\u002Fblog\u002Ftop-10-kotlin-code-snippets-to-keep-handy",{"title":673,"description":1099},"blog\u002Ftop-10-kotlin-code-snippets-to-keep-handy","siV9aPpLdkM8Eo6c8Y6tr6Znzl-eY84zuEsqY7Wndvw",{"id":1110,"title":674,"body":1111,"description":739,"draft":1100,"extension":1101,"meta":1115,"navigation":32,"path":1116,"photo":1117,"photoAlt":1096,"seo":1118,"stem":1119,"__hash__":1120},"authors\u002Fauthors\u002Fanushka-gupta.md",{"type":679,"value":1112,"toc":1113},[],{"title":739,"searchDepth":1082,"depth":1082,"links":1114},[],{},"\u002Fauthors\u002Fanushka-gupta","https:\u002F\u002Fstorage.googleapis.com\u002Fpieces-marketing-website\u002Fimages\u002Fauthors\u002Fanushka-gupta.jpg",{"title":674,"description":739},"authors\u002Fanushka-gupta","UcF5flqZticXI-AuzPLD712Nundphrh1oBKLtw4NSa4",{"left":1122,"top":1122,"width":1123,"height":1123,"rotate":1122,"vFlip":1100,"hFlip":1100,"body":1124},0,24,"\u003Cpath fill=\"currentColor\" d=\"m7.825 13l4.9 4.9q.3.3.288.7t-.313.7q-.3.275-.7.288t-.7-.288l-6.6-6.6q-.15-.15-.213-.325T4.426 12t.063-.375t.212-.325l6.6-6.6q.275-.275.688-.275t.712.275q.3.3.3.713t-.3.712L7.825 11H19q.425 0 .713.288T20 12t-.288.713T19 13z\"\u002F>"]