carlos / carloku Public

Clone
git clone https://amadan.net/carlos/carloku

Plain git — no account needed to clone.

Download

Download this file

1<!doctype html>
2<html lang="en">
3<head>
4<meta charset="utf-8">
5<meta name="viewport" content="width=device-width, initial-scale=1">
6<title>Get started β€” Carloku</title>
7<meta name="description" content="πŸ€– Install the carlos CLI, sign in with a passkey, and ship your first app to Carloku.">
8<meta property="og:title" content="Get started β€” Carloku">
9<meta property="og:description" content="Install the carlos CLI, sign in with a passkey, and ship your first app.">
10<meta property="og:type" content="website">
11<meta property="og:url" content="https://carloku.com/get-started/">
12<meta name="theme-color" content="#ffffff" media="(prefers-color-scheme: light)">
13<meta name="theme-color" content="#0e0c13" media="(prefers-color-scheme: dark)">
14<link rel="icon" href="/favicon.svg" type="image/svg+xml">
15<link rel="preload" href="/fonts/Geist-Variable.woff2" as="font" type="font/woff2" crossorigin>
16<link rel="preload" href="/fonts/GeistMono-Variable.woff2" as="font" type="font/woff2" crossorigin>
17<link rel="stylesheet" href="/site.css">
18</head>
19<body>
20<a class="skip" href="#main">Skip to content</a>
21<header class="site-head">
22 <div class="wrap">
23 <a class="brand" href="/"><svg class="mark" viewBox="0 0 64 64" aria-hidden="true"><rect width="64" height="64" rx="14" fill="#5b3e96"/><path fill="#b9a1ea" d="M11.65 37.15H50.65A2.5 2.5 0 0 1 52.42 37.88L54.19 39.65A2.5 2.5 0 0 1 54.92 41.42V48.42A2.5 2.5 0 0 1 52.42 50.92H13.42A2.5 2.5 0 0 1 11.65 50.19L9.88 48.42A2.5 2.5 0 0 1 9.15 46.65V39.65A2.5 2.5 0 0 1 11.65 37.15ZM10.65 26.15H28.15A1.5 1.5 0 0 1 29.21 26.59L30.63 28.01A1.5 1.5 0 0 1 31.07 29.07V33.07A1.5 1.5 0 0 1 29.57 34.57H12.07A1.5 1.5 0 0 1 11.01 34.13L9.59 32.71A1.5 1.5 0 0 1 9.15 31.65V27.65A1.5 1.5 0 0 1 10.65 26.15ZM34.15 26.15H51.65A1.5 1.5 0 0 1 52.71 26.59L54.13 28.01A1.5 1.5 0 0 1 54.57 29.07V33.07A1.5 1.5 0 0 1 53.07 34.57H35.57A1.5 1.5 0 0 1 34.51 34.13L33.09 32.71A1.5 1.5 0 0 1 32.65 31.65V27.65A1.5 1.5 0 0 1 34.15 26.15ZM10.65 15.15H16.4A1.5 1.5 0 0 1 17.46 15.59L18.88 17.01A1.5 1.5 0 0 1 19.32 18.07V22.07A1.5 1.5 0 0 1 17.82 23.57H12.07A1.5 1.5 0 0 1 11.01 23.13L9.59 21.71A1.5 1.5 0 0 1 9.15 20.65V16.65A1.5 1.5 0 0 1 10.65 15.15ZM22.4 15.15H28.15A1.5 1.5 0 0 1 29.21 15.59L30.63 17.01A1.5 1.5 0 0 1 31.07 18.07V22.07A1.5 1.5 0 0 1 29.57 23.57H23.82A1.5 1.5 0 0 1 22.76 23.13L21.34 21.71A1.5 1.5 0 0 1 20.9 20.65V16.65A1.5 1.5 0 0 1 22.4 15.15ZM34.15 15.15H39.9A1.5 1.5 0 0 1 40.96 15.59L42.38 17.01A1.5 1.5 0 0 1 42.82 18.07V22.07A1.5 1.5 0 0 1 41.32 23.57H35.57A1.5 1.5 0 0 1 34.51 23.13L33.09 21.71A1.5 1.5 0 0 1 32.65 20.65V16.65A1.5 1.5 0 0 1 34.15 15.15Z"/><path fill="#9a7bd6" d="M45.9 15.15H51.65A1.5 1.5 0 0 1 52.71 15.59L54.13 17.01A1.5 1.5 0 0 1 54.57 18.07V22.07A1.5 1.5 0 0 1 53.07 23.57H47.32A1.5 1.5 0 0 1 46.26 23.13L44.84 21.71A1.5 1.5 0 0 1 44.4 20.65V16.65A1.5 1.5 0 0 1 45.9 15.15Z"/><g fill="#ffffff"><rect x="9.15" y="37.15" width="44" height="12" rx="2.5"/><rect x="9.15" y="26.15" width="20.5" height="7" rx="1.5"/><rect x="32.65" y="26.15" width="20.5" height="7" rx="1.5"/><rect x="9.15" y="15.15" width="8.75" height="7" rx="1.5"/><rect x="20.9" y="15.15" width="8.75" height="7" rx="1.5"/><rect x="32.65" y="15.15" width="8.75" height="7" rx="1.5"/><rect x="44.4" y="15.15" width="8.75" height="7" rx="1.5" fill="#c9b2f7"/></g><g fill="#5b3e96"><circle cx="13.15" cy="43.15" r="1.6"/><circle cx="49.15" cy="43.15" r="1.6"/></g><circle cx="43.15" cy="43.15" r="1.6" fill="#c9b2f7"/></svg>Carloku</a>
24 <nav aria-label="Site">
25 <a href="/#workflow">How it works</a>
26 <a href="/#open">Open source</a>
27 <a href="/get-started/">Get started</a>
28 </nav>
29 <a class="head-cta" href="https://console.carloku.com">Dashboard</a>
30 </div>
31</header>
32<main id="main">
33 <div class="page-hero">
34 <div class="wrap narrow">
35 <h1>Get started<span class="dot">.</span></h1>
36 <p class="lede">This is the head half; the heart half is that you'll be live
37 before it feels like work. Four steps, one small tool.</p>
38 </div>
39 </div>
40 <div class="wrap narrow">
41 <article class="guide">
42 <section>
43 <h2>1 Β· Install the CLI</h2>
44 <pre><code>brew install carlosframework/tap/carlos</code></pre>
45 <p>Not on Homebrew? Prebuilt binaries live at
46 <a href="https://github.com/carlosframework/releases">github.com/carlosframework/releases</a>.
47 It's one static binary: put it on your PATH and you're done.</p>
48 </section>
49 <section>
50 <h2>2 Β· Sign in</h2>
51 <p>Create your account at <a href="https://console.carloku.com">console.carloku.com</a> β€”
52 you sign in with a passkey through Keymail, so there's no password to invent.
53 Then connect your terminal:</p>
54 <pre><code>carlos auth login -console https://console.carloku.com</code></pre>
55 <p>The CLI prints a short code; you approve it in the browser you're already
56 signed in to. That's the whole ceremony. (Forget this step and nothing
57 breaks: the first command that needs a login offers to run it for you,
58 right there in the terminal.)</p>
59 </section>
60 <section>
61 <h2>3 Β· Create and deploy</h2>
62 <pre><code>carlos apps create -app hello
63carlos deploy ./hello-linux-arm64
64</code></pre>
65 <p>Every app starts with one channel, <code>edge</code>, and <code>carlos
66 deploy</code> ships straight to it β€” no promotion step in between. It waits
67 until your URL is provably serving the new build; when it prints
68 <code>live</code>, it is. Version strings are yours to choose; a git short
69 SHA is the house convention. Notice there's no <code>-app</code> on the
70 deploy: with one app in your account, the CLI knows which one you mean β€”
71 flags are for the day you have several.</p>
72 <p>Shipping a static site instead? Same shape:</p>
73 <pre><code>carlos deploy -kind static ./public</code></pre>
74 <p>Run it from your project once and it offers to remember the artifact in
75 <code>.carlos/config</code>; say yes, and from then on the whole release is
76 just <code>carlos deploy</code>, no arguments at all. The session on the
77 <a href="/">homepage</a> is a real capture of exactly that, and the app it
78 deployed is <a href="https://hello.bdf.oncarlos.com">really running</a>.</p>
79 </section>
80 <section>
81 <h2>4 Β· Add a pipeline, if you want one</h2>
82 <p>One channel is enough for most apps: deploy, and it's live. When a team
83 wants a staged rollout instead β€” a bake window before a wider audience sees
84 it, a passkey on the way up, sign-off from teammates β€” opt into a
85 pipeline:</p>
86 <pre><code>carlos pipeline init -template edge-production</code></pre>
87 <p>That adds a <code>production</code> channel behind <code>edge</code>,
88 with a 24-hour bake, a passkey requirement, and an approval on any change
89 to that protection, so nobody can quietly strip it later either.
90 <code>carlos promote &lt;version&gt; production</code> moves the exact same
91 bytes forward once the bake has run. There's also a
92 <code>full-ladder</code> template matching the classic edge β†’ beta β†’
93 stable shape, and custom channels if neither fits.</p>
94 <p class="note">Carloku is young and moving quickly. If anything on this page
95 surprises you, the <a href="https://console.carloku.com">console</a> is the
96 source of truth, and the platform underneath is open source.</p>
97 </section>
98 <section>
99 <h2>Under the hood</h2>
100 <p>For the technically curious, this is the part we keep off the front page:</p>
101 <ul>
102 <li>A release is an immutable, content-addressed artifact. Promotion moves a
103 signed pointer; nothing is ever rebuilt between preview and production, and
104 every box verifies the signature before running a release.</li>
105 <li>Canary channels always let you try a build on a live URL without
106 touching what's deployed. Opt into a pipeline and its later channels
107 carry releases through a bake stage too, so a wider channel only
108 adopts what already served traffic upstream.</li>
109 <li>Idle apps hibernate: the process stops, the route stays, and the first
110 request wakes it.</li>
111 <li>Custom domains get per-host certificates minted and renewed
112 automatically.</li>
113 </ul>
114 <p>The whole design is public β€” read it at
115 <a href="https://carlosframework.com">carlosframework.com</a>.</p>
116 </section>
117 </article>
118 </div>
119</main>
120<footer>
121 <div class="wrap">
122 <p>πŸ€– Written by an LLM (Claude), on the ideas, instruction, and editing of humans.
123 AI-written text here is always marked and always disclosed; see
124 <a href="https://11factor.org/#x">factor X</a>.</p>
125 <p>To report abuse on an app Carloku hosts (anything at oncarlos.com), email <a href="mailto:abuse@carloku.com">abuse@carloku.com</a>.</p>
126 <p><a href="/">← carloku.com</a> Β· <a href="https://github.com/carlosframework/carloku">Source on GitHub</a>.</p>
127 </div>
128</footer>
129<script src="/site.js" defer></script>
130</body>
131</html>
132