Files
2026-06-25 19:32:06 +02:00

375 lines
27 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="en-us" dir="ltr" itemscope itemtype="http://schema.org/Article" data-r-output-format="html">
<head>
<meta charset="utf-8">
<meta name="viewport" content="height=device-height, width=device-width, initial-scale=1.0, minimum-scale=1.0">
<meta name="generator" content="Hugo 0.161.1">
<meta name="generator" content="Relearn 8.2.0+220806ce3ced8264fbdd693f77f28216a8a1b6ae">
<meta name="description" content="Prep: pick a supported device Currently, the Raspberry Pi 5 or Pi 4 B are the recommended platform for using gokrazy, but you can find other supported and upcoming platforms.
Prep: Install Go If you dont already have Go installed, install the latest Go version.">
<meta name="author" content="">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="Quickstart :: gokrazy">
<meta name="twitter:description" content="Prep: pick a supported device Currently, the Raspberry Pi 5 or Pi 4 B are the recommended platform for using gokrazy, but you can find other supported and upcoming platforms.
Prep: Install Go If you dont already have Go installed, install the latest Go version.">
<meta property="og:url" content="https://gokrazy.org/quickstart/index.html">
<meta property="og:site_name" content="gokrazy">
<meta property="og:title" content="Quickstart :: gokrazy">
<meta property="og:description" content="Prep: pick a supported device Currently, the Raspberry Pi 5 or Pi 4 B are the recommended platform for using gokrazy, but you can find other supported and upcoming platforms.
Prep: Install Go If you dont already have Go installed, install the latest Go version.">
<meta property="og:locale" content="en_us">
<meta property="og:type" content="website">
<meta itemprop="name" content="Quickstart :: gokrazy">
<meta itemprop="description" content="Prep: pick a supported device Currently, the Raspberry Pi 5 or Pi 4 B are the recommended platform for using gokrazy, but you can find other supported and upcoming platforms.
Prep: Install Go If you dont already have Go installed, install the latest Go version.">
<meta itemprop="wordCount" content="731">
<title>Quickstart :: gokrazy</title>
<link href="/images/favicon.png?1782408721" rel="icon" type="image/png">
<link href="/css/auto-complete/auto-complete.min.css?1782408721" rel="stylesheet">
<script src="/js/auto-complete/auto-complete.min.js?1782408721" defer></script>
<script src="/js/search-lunr.min.js?1782408721" defer></script>
<script src="/js/search.min.js?1782408721" defer></script>
<script>
window.relearn = window.relearn || {};
window.relearn.index_js_url="/searchindex.en.js?1782408721";
</script>
<script src="/js/lunr/lunr.min.js?1782408721" defer></script>
<script src="/js/lunr/lunr.stemmer.support.min.js?1782408721" defer></script>
<script src="/js/lunr/lunr.multi.min.js?1782408721" defer></script>
<script src="/js/lunr/lunr.en.min.js?1782408721" defer></script>
<script>
window.relearn = window.relearn || {};
window.relearn.contentLangs=['en'];
</script>
<link href="/fonts/fontawesome/css/fontawesome-all.min.css?1782408721" rel="stylesheet" media="print" onload="this.media='all';this.onload=null;"><noscript><link href="/fonts/fontawesome/css/fontawesome-all.min.css?1782408721" rel="stylesheet"></noscript>
<link href="/css/perfect-scrollbar/perfect-scrollbar.min.css?1782408721" rel="stylesheet">
<link href="/css/theme.min.css?1782408721" rel="stylesheet">
<link href="/css/format-html.min.css?1782408721" rel="stylesheet" id="R-format-style">
<script>
window.relearn = window.relearn || {};
// configuration
window.relearn.min = `.min`;
window.relearn.path='\/quickstart\/index.html';
window.relearn.relBasePath='..';
window.relearn.relBaseUri='..';
window.relearn.absBaseUri='https:\/\/gokrazy.org';
window.relearn.disableInlineCopyToClipboard=true;
window.relearn.enableBlockCodeWrap=true;
// legal
window.relearn.getItem = (s,n) => {return s.getItem(n)};
window.relearn.setItem = (s,n,v) => {return s.setItem(n,v)};
window.relearn.removeItem = (s,n) => {return s.removeItem(n)};
// translations
window.T_Copy_to_clipboard = `Copy text to clipboard`;
window.T_Copied_to_clipboard = `Text copied to clipboard!`;
window.T_Link_copied_to_clipboard = `Link copied to clipboard!`;
window.T_Reset_view = `Reset view`;
window.T_View_reset = `View reset!`;
window.T_No_results_found = `No results found for "{0}"`;
window.T_N_results_found = `{1} results found for "{0}"`;
window.T_Browser_unsupported_feature = `This browser doesn't support this feature`;
// variant stuff
window.relearn.themevariants = [ 'auto' ];
window.relearn.customvariantname = "my-custom-variant";
window.relearn.changeVariant = function(variant) {
var oldVariant = document.documentElement.dataset.rThemeVariant;
window.relearn.setItem(window.localStorage, window.relearn.absBaseUri + "/variant", variant);
document.documentElement.dataset.rThemeVariant = variant;
if (oldVariant != variant) {
document.dispatchEvent( new CustomEvent('themeVariantLoaded', { detail: { variant, oldVariant } }) );
window.relearn.markVariant();
}
}
window.relearn.markVariant = function() {
var variant = window.relearn.getItem(window.localStorage, window.relearn.absBaseUri + "/variant");
document.querySelectorAll(".R-variantswitcher select").forEach((select) => {select.value = variant;});
}
window.relearn.initVariant = function() {
var variant = window.relearn.getItem(window.localStorage, window.relearn.absBaseUri + "/variant") ?? "";
if( variant == window.relearn.customvariantname ){
}else if( !variant || !window.relearn.themevariants.includes(variant) ){
variant = window.relearn.themevariants[0];
window.relearn.setItem(window.localStorage, window.relearn.absBaseUri + "/variant", variant);
}
document.documentElement.dataset.rThemeVariant = variant;
}
window.relearn.initVariant();
window.relearn.markVariant();
</script>
</head>
<body class="mobile-support html" data-url="/quickstart/index.html">
<div id="R-body" class="default-animation">
<div id="R-body-overlay"></div>
<nav id="R-topbar">
<div class="topbar-wrapper">
<div class="topbar-sidebar-divider"></div>
<div class="topbar-area topbar-area-start" data-area="start">
<div class="topbar-button topbar-button-sidebar" data-content-empty="disable" data-width-s="show" data-width-m="hide" data-width-l="hide">
<span class="btn cstyle button link noborder notitle interactive"><button onclick="toggleNav()" type="button" title="Menu (CTRL&#43;ALT&#43;n)"><i class="fa-fw fas fa-bars"></i></button></span>
</div>
<div class="topbar-button topbar-button-toc" data-content-empty="hide" data-width-s="show" data-width-m="show" data-width-l="show">
<span class="btn cstyle button link noborder notitle interactive"><button onclick="toggleTopbarFlyout(this)" type="button" title="Table of Contents (CTRL&#43;ALT&#43;t)"><i class="fa-fw fas fa-list-alt"></i></button></span>
<div class="topbar-content">
<div class="topbar-content-wrapper">
<nav class="TableOfContents">
<ul>
<li><a href="#prep-pick-a-supported-device">Prep: pick a supported device</a></li>
<li><a href="#prep-install-go">Prep: Install Go</a></li>
<li><a href="#prep-install-the-gok-cli">Prep: Install the gok CLI</a></li>
<li><a href="#step-1-insert-an-sd-card">Step 1: Insert an SD card</a></li>
<li><a href="#step-2-create-a-gokrazy-instance-and-overwrite-an-sd-card-with-gokrazy">Step 2: Create a gokrazy instance and overwrite an SD card with gokrazy</a></li>
<li><a href="#step-3-boot-gokrazy">Step 3: Boot gokrazy</a></li>
<li><a href="#optional-using-the-serial-console">Optional: Using the serial console</a></li>
</ul>
</nav>
</div>
</div>
</div>
</div>
<ol class="topbar-breadcrumbs breadcrumbs highlightable" itemscope itemtype="http://schema.org/BreadcrumbList"><li itemscope itemtype="https://schema.org/ListItem" itemprop="itemListElement" class=""><a itemprop="item" href="/index.html"><span itemprop="name">gokrazy Go appliances</span></a><meta itemprop="position" content="1">&nbsp;>&nbsp;</li><li itemscope itemtype="https://schema.org/ListItem" itemprop="itemListElement" class=""><span itemprop="name">Quickstart</span><meta itemprop="position" content="2"></li>
</ol>
<div class="topbar-area topbar-area-end" data-area="end">
<div class="topbar-button topbar-button-edit" data-content-empty="disable" data-width-s="area-more" data-width-m="show" data-width-l="show">
<span class="btn cstyle button link noborder notitle interactive"><a href="https://github.com/gokrazy/gokrazy/tree/master/website/content/quickstart/_index.markdown" rel="external" title="Edit (CTRL+ALT+w)"><i class="fa-fw fas fa-pen"></i></a></span>
</div>
<div class="topbar-button topbar-button-more" data-content-empty="hide" data-width-s="show" data-width-m="show" data-width-l="show">
<span class="btn cstyle button link noborder notitle interactive"><button onclick="toggleTopbarFlyout(this)" type="button" title="More"><i class="fa-fw fas fa-ellipsis-v"></i></button></span>
<div class="topbar-content">
<div class="topbar-content-wrapper">
<div class="topbar-area topbar-area-more" data-area="more">
</div>
</div>
</div>
</div>
</div>
</div>
</nav>
<div id="R-main-overlay"></div>
<main id="R-body-inner" class="highlightable quickstart" tabindex="-1">
<div class="flex-block-wrapper">
<article class="default">
<header class="headline">
</header>
<h1 id="quickstart">Quickstart</h1>
<h2 id="prep-pick-a-supported-device">Prep: pick a supported device<span class="btn cstyle anchor copyanchor scrollanchor link noborder notitle interactive"><button type="button" title="Copy link to clipboard"><i class="fa-fw fas fa-link fa-lg"></i></button></span></h2>
<p>Currently, the Raspberry Pi 5 or Pi 4 B are the recommended platform for
using gokrazy, but you can find
other <a href="/platforms/">supported and upcoming platforms</a>.</p>
<h2 id="prep-install-go">Prep: Install Go<span class="btn cstyle anchor copyanchor scrollanchor link noborder notitle interactive"><button type="button" title="Copy link to clipboard"><i class="fa-fw fas fa-link fa-lg"></i></button></span></h2>
<p>If you dont already have Go installed, <a href="https://golang.org/dl/">install the latest Go version</a>.</p>
<h2 id="prep-install-the-gok-cli">Prep: Install the gok CLI<span class="btn cstyle anchor copyanchor scrollanchor link noborder notitle interactive"><button type="button" title="Copy link to clipboard"><i class="fa-fw fas fa-link fa-lg"></i></button></span></h2>
<p>Now that you have a working Go installation, install the <code>gok</code> command line tool (CLI):</p>
<div class="highlight actionbar-wrapper wrap-code" dir="auto"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>go install github.com/gokrazy/tools/cmd/gok@main</span></span></code></pre></div>
<h2 id="step-1-insert-an-sd-card">Step 1: Insert an SD card<span class="btn cstyle anchor copyanchor scrollanchor link noborder notitle interactive"><button type="button" title="Copy link to clipboard"><i class="fa-fw fas fa-link fa-lg"></i></button></span></h2>
<p>Run <code>watch -d1 ls -l '/dev/disk/by-id/*'</code> (see the <a href="/userguide/permanent-data/index.html#notes-about-macos">permanent data section</a> for macOS instructions)
and insert an SD card. Copy the highlighted device name:</p>
<script id="asciicast-G0PosAYGvUSnB3htMpLIz0p68" src="https://asciinema.org/a/G0PosAYGvUSnB3htMpLIz0p68.js" async></script>
<p>In this example, well assume the SD card is accessible as <code>/dev/sdx</code>.</p>
<h2 id="step-2-create-a-gokrazy-instance-and-overwrite-an-sd-card-with-gokrazy">Step 2: Create a gokrazy instance and overwrite an SD card with gokrazy<span class="btn cstyle anchor copyanchor scrollanchor link noborder notitle interactive"><button type="button" title="Copy link to clipboard"><i class="fa-fw fas fa-link fa-lg"></i></button></span></h2>
<p>Create a directory for this gokrazy instance:</p>
<div class="highlight actionbar-wrapper wrap-code" dir="auto"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>gok new
</span></span><span style="display:flex;"><span><span style="color:#75715e"># creates an instance named “hello” in --parent_dir default directory ~/gokrazy</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># alternatively, to use a different instance name: gok -i myname new</span></span></span></code></pre></div>
<p>The <code>--parent_dir</code> can also be changed permanently by setting the
<code>GOKRAZY_PARENT_DIR</code> environment variable.</p>
<p>If youre curious, you can run <code>gok edit</code> to open the generated <code>config.json</code> in
your editor.</p>
<p>To overwrite the entire SD card <code>/dev/sdx</code> with a build of this
gokrazy installation, use:</p>
<div class="highlight actionbar-wrapper wrap-code" dir="auto"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>gok overwrite --full /dev/sdx</span></span></code></pre></div>
<p>The following packages are included in newly created instances by default:</p>
<ul>
<li>github.com/gokrazy/fbstatus</li>
<li>github.com/gokrazy/hello</li>
<li>github.com/gokrazy/serial-busybox</li>
</ul>
<p>The gokrazy packer builds each specified Go program
(e.g. <code>github.com/gokrazy/hello</code>) in a separate build directory, each with its
own <code>go.mod</code> file. See <a href="/development/modules/index.html">Working with Go modules</a> for more
details.</p>
<p>This is what the above <code>gok</code> commands look like in action:</p>
<script id="asciicast-Va7hPXCP1BKCt4DX0wRup52Bl" src="https://asciinema.org/a/Va7hPXCP1BKCt4DX0wRup52Bl.js" async></script>
<details>
<summary style="display: list-item">
Click here to show the <code>gok</code> log output
</summary>
<div class="highlight actionbar-wrapper wrap-code" dir="auto"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>gokrazy gok ga84f00+ on GOARCH=amd64 GOOS=linux
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>Build target: CGO_ENABLED=0 GOARCH=arm64 GOOS=linux
</span></span><span style="display:flex;"><span>Build timestamp: 2023-01-12T23:36:34+01:00
</span></span><span style="display:flex;"><span>Loading system CA certificates from /etc/ssl/certs/ca-certificates.crt
</span></span><span style="display:flex;"><span>Building 4 Go packages:
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span> github.com/gokrazy/fbstatus
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span> github.com/gokrazy/hello
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span> github.com/gokrazy/serial-busybox
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span> github.com/gokrazy/breakglass
</span></span><span style="display:flex;"><span> will be started with command-line flags
</span></span><span style="display:flex;"><span> from /home/michael/gokrazy/hello/config.json
</span></span><span style="display:flex;"><span> last modified: 2023-01-12T23:36:23+01:00 (10s ago)
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>[done] in 1.40s
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>Including extra files for Go packages:
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span> github.com/gokrazy/breakglass
</span></span><span style="display:flex;"><span> will include extra files in the root file system
</span></span><span style="display:flex;"><span> from /home/michael/gokrazy/hello/breakglass.authorized_keys
</span></span><span style="display:flex;"><span> last modified: 2023-01-12T23:36:23+01:00 (12s ago)
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>Including loadable kernel modules from:
</span></span><span style="display:flex;"><span>/home/michael/go/pkg/mod/github.com/gokrazy/kernel@v0.0.0-20230111172439-0cd82b0bec82/lib/modules
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>Feature summary:
</span></span><span style="display:flex;"><span> use GPT: true
</span></span><span style="display:flex;"><span> use PARTUUID: true
</span></span><span style="display:flex;"><span> use GPT PARTUUID: true
</span></span><span style="display:flex;"><span>2023/01/12 23:36:36 partitioning /dev/disk/by-id/usb-TS-RDF5_SD_Transcend_000000000037-0:0 (GPT + Hybrid MBR)
</span></span><span style="display:flex;"><span>2023/01/12 23:36:36 device holds 15931539456 bytes
</span></span><span style="display:flex;"><span>2023/01/12 23:36:36 Re-reading partition table failed: permission denied. Remember to unplug and re-plug the SD card before creating a file system for persistent data, if desired.
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>Creating boot file system
</span></span><span style="display:flex;"><span>[creating boot file system]
</span></span><span style="display:flex;"><span>Kernel directory: /home/michael/go/pkg/mod/github.com/gokrazy/kernel@v0.0.0-20230111172439-0cd82b0bec82
</span></span><span style="display:flex;"><span>EEPROM update summary:
</span></span><span style="display:flex;"><span> pieeprom.upd (sig d1e44edf33)
</span></span><span style="display:flex;"><span> recovery.bin
</span></span><span style="display:flex;"><span> vl805.bin (sig 6246230ecd)
</span></span><span style="display:flex;"><span>[done] in 0.18s, 71 MiB
</span></span><span style="display:flex;"><span>MBR summary:
</span></span><span style="display:flex;"><span> LBAs: vmlinuz=51795 cmdline.txt=144875
</span></span><span style="display:flex;"><span> PARTUUID: 4f9f2cab
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>Creating root file system
</span></span><span style="display:flex;"><span>[done] in 0.33s
</span></span><span style="display:flex;"><span>If your applications need to store persistent data, unplug and re-plug the SD card, then create a file system using e.g.:
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span> mkfs.ext4 /dev/disk/by-partuuid/60c24cc1-f3f9-427a-8199-4f9f2cab0004
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>To boot gokrazy, plug the SD card into a supported device (see https://gokrazy.org/platforms/)
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>Build complete!
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>To interact with the device, gokrazy provides a web interface reachable at:
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span> http://gokrazy:&lt;automatically-generated-random-password&gt;@hello/
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>In addition, the following Linux consoles are set up:
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span> 1. foreground Linux framebuffer console on HDMI</span></span></code></pre></div>
</details>
<p>It is safe to unplug your SD card once <code>gok</code> returns.</p>
<h2 id="step-3-boot-gokrazy">Step 3: Boot gokrazy<span class="btn cstyle anchor copyanchor scrollanchor link noborder notitle interactive"><button type="button" title="Copy link to clipboard"><i class="fa-fw fas fa-link fa-lg"></i></button></span></h2>
<p>After booting from this SD card, your device will:</p>
<ul>
<li>display system status on the monitor connected via HDMI, if any</li>
<li>obtain an IP address for hostname “gokrazy” via DHCP (IPv4) and SLAAC (IPv6)</li>
<li>synchronize the clock using NTP</li>
<li>expose a password-authenticated web interface on private IP addresses<br>
(each instance gets its own password in the <code>Update</code><code>HTTPPassword</code> key of its <code>config.json</code>, see <code>gok edit</code>)</li>
<li>supervise all installed programs (only the hello world program in this example)</li>
</ul>
<p>To interact with your device, you can:</p>
<ol>
<li>Open the gokrazy web interface in your browser (easiest option)</li>
<li>Attach a serial console (see below)</li>
<li>Use the <a href="https://github.com/gokrazy/breakglass" rel="external">breakglass</a> package to start an interactive SSH session. <code>gok new</code> sets it up by default.</li>
</ol>
<p>Congratulations! 🎉 You now have a working gokrazy installation!</p>
<p>Next, see the <a href="/userguide/index.html">Configuration guide</a> for details on how to use other
programs.</p>
<h2 id="optional-using-the-serial-console">Optional: Using the serial console<span class="btn cstyle anchor copyanchor scrollanchor link noborder notitle interactive"><button type="button" title="Copy link to clipboard"><i class="fa-fw fas fa-link fa-lg"></i></button></span></h2>
<p>See also: <a href="/userguide/instance-config/index.html#serialconsole">Configuration → Instance Config Reference →
SerialConsole</a></p>
<p>If you prefer the serial console, you can optionally connect a serial adapter to
the Raspberry Pi and remove the <code>&quot;SerialConsole&quot;: &quot;disabled&quot;</code> line from your gokrazy
instances <code>config.json</code> to make the primary Linux console end up on the serial
console.</p>
<p>When pressing <code>Enter</code> on the serial console, gokrazy will
interactively start either:</p>
<ol>
<li><code>/tmp/serial-busybox/ash</code> (provided by the <a href="https://github.com/gokrazy/serial-busybox" rel="external">serial-busybox</a> package)</li>
<li><code>/perm/sh</code>, if present (supplied by you, the user)</li>
</ol>
<footer class="footline">
</footer>
</article>
</div>
</main>
</div>
<aside id="R-sidebar" class="default-animation">
<div id="R-header-topbar" class="default-animation"></div>
<div id="R-header-wrapper" class="default-animation">
<div id="R-header" class="default-animation">
<img src="/logo.svg" width="100%" alt="gokrazy logo" title="gokrazy logo">
</div>
<search><form action="/search/index.html" method="get">
<div class="searchbox default-animation">
<button class="search-detail" type="submit" title="Search (CTRL+ALT+f)"><i class="fas fa-search"></i></button>
<label class="a11y-only" for="R-search-by">Search</label>
<input data-search-input id="R-search-by" name="search-by" class="search-by" type="search" placeholder="Search...">
<button class="search-clear" type="button" data-search-clear="" title="Clear search"><i class="fas fa-times" title="Clear search"></i></button>
</div>
</form></search>
</div>
<div id="R-homelinks" class="default-animation homelinks">
<div class="R-menu-divider default-animation">
<hr class="padding">
</div>
<div class="R-sidebarmenu R-shortcutmenu-homelinks">
<ul class="space collapsible-menu">
<li class="" data-nav-url="/index.html"><a class="padding" href="/index.html"><i class="fa-fw fas fa-home"></i> Home</a></li>
</ul>
</div>
<div class="R-menu-divider default-animation">
<hr class="padding">
</div>
<div class="R-sidebarmenu R-shortcutmenu-headercontrols">
<ul class="">
</ul>
</div>
<div class="R-menu-divider default-animation">
<hr class="padding">
</div>
</div>
<div id="R-content-wrapper" class="highlightable">
<div class="R-sidebarmenu R-shortcutmenu-main">
<ul class="enlarge morespace collapsible-menu">
<li class="active " data-nav-url="/quickstart/index.html"><a class="padding" href="/quickstart/index.html"><b>1. </b>Quickstart</a></li>
<li class="" data-nav-url="/platforms/index.html"><a class="padding" href="/platforms/index.html"><b>2. </b>Supported platforms</a></li>
<li class="" data-nav-url="/userguide/index.html"><a class="padding" href="/userguide/index.html"><b>3. </b>Configuration</a><ul id="R-subsections-74b4df3a3d9365853f09e9f1dfe7bbba" class="collapsible-menu"></ul></li>
<li class="" data-nav-url="/packages/index.html"><a class="padding" href="/packages/index.html"><b>4. </b>Available packages</a><ul id="R-subsections-bdf1e8ce92aa8ff6883c617f10480430" class="collapsible-menu"></ul></li>
<li class="" data-nav-url="/development/index.html"><a class="padding" href="/development/index.html"><b>5. </b>Package development</a><ul id="R-subsections-54b0ce3c97b111c8cd4d107325fd580c" class="collapsible-menu"></ul></li>
</ul>
</div>
<div class="R-sidebarmenu R-shortcutmenu-shortcuts">
<div class="nav-title padding">More</div>
<ul class="space collapsible-menu">
<li class="" data-nav-url="https://github.com/gokrazy/gokrazy"><a class="padding" href="https://github.com/gokrazy/gokrazy" rel="external"><i class='fab fa-github'></i> GitHub repo</a></li>
</ul>
</div>
<div id="R-footer-margin"></div>
<div class="R-menu-divider default-animation">
<hr class="padding">
</div>
<div class="R-sidebarmenu R-shortcutmenu-footercontrols">
<ul class="">
</ul>
</div>
<div id="R-footer"><p>Built with <a href="https://github.com/McShelby/hugo-theme-relearn" title="love"><i class="fas fa-heart"></i></a> by <a href="https://gohugo.io/">Hugo</a></p></div>
</div>
</aside>
<script src="/js/perfect-scrollbar/perfect-scrollbar.min.js?1782408721" defer></script>
<script src="/js/theme.min.js?1782408721" defer></script>
<div id="toast-container" role="status" aria-live="polite" aria-atomic="false"></div>
</body>
</html>