download.html
199 lines1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
{{template "main.html" .}}
{{define "title"}}Download — Congo{{end}}
{{define "description"}}Download Congo for macOS, Linux, or Windows. Single binary, no dependencies.{{end}}
{{define "content"}}
<div class="max-w-3xl mx-auto px-6 py-16">
<h1 class="text-3xl md:text-4xl font-bold tracking-tight mb-3">Get Congo</h1>
<p class="text-body text-base mb-12">
Download a prebuilt binary or build from source. No package manager needed.
</p>
<div class="space-y-0">
<!-- Download Binaries -->
<section class="pb-16">
<h2 class="text-xl font-bold tracking-tight mb-6">Download Binary</h2>
<div class="grid grid-cols-1 sm:grid-cols-2 gap-3" id="download-grid">
{{range downloads.Platforms}}
<a href="/download/{{.Filename}}" id="dl-{{.OS}}-{{.Arch}}" data-os="{{.OS}}"
class="glow-card p-4 flex items-center gap-4 no-underline">
<div class="flex-1">
<div class="text-bright text-sm font-semibold">{{.Label}}</div>
<div class="text-muted text-xs font-mono mt-1">{{.Filename}}</div>
</div>
<svg class="w-5 h-5 text-muted shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24" stroke-width="1.5">
<path stroke-linecap="round" stroke-linejoin="round" d="M3 16.5v2.25A2.25 2.25 0 005.25 21h13.5A2.25 2.25 0 0021 18.75V16.5M16.5 12L12 16.5m0 0L7.5 12m4.5 4.5V3"/>
</svg>
</a>
{{end}}
</div>
<p class="text-muted text-xs mt-5">Requires <a href="https://go.dev/dl/" class="text-accent hover:text-bright transition-colors" target="_blank" rel="noopener">Go 1.25+</a> to build projects. The binary itself has no dependencies.</p>
<div class="code-block mt-4">
<pre><code class="language-bash"># macOS / Linux
tar -xzf congo-*.tar.gz
mv congo /usr/local/bin/
congo version</code></pre>
</div>
</section>
<!-- Create a Project -->
<section class="section-divide py-16">
<h2 class="text-xl font-bold tracking-tight mb-4">Create a Project</h2>
<div class="code-block mb-5">
<pre><code class="language-bash">congo init myapp
cd myapp
congo dev</code></pre>
</div>
<p class="text-body leading-relaxed">
This vendors the entire framework into your project as <code class="text-accent">internal/</code>.
Your app depends on Go's standard library, a SQLite driver, and a handful of small libraries.
See the <a href="/guide" class="text-accent hover:text-bright transition-colors" hx-boost="true">guide</a> for a full walkthrough.
</p>
</section>
<!-- Extract from Binary -->
<section class="section-divide py-16">
<h2 class="text-xl font-bold tracking-tight mb-4">Extract from an Existing Binary</h2>
<p class="text-body leading-relaxed mb-5">
If you already have Congo (or someone sent you the binary), it can reproduce itself:
</p>
<div class="code-block mb-5">
<pre><code class="language-bash">congo source ./congo-src
cd congo-src
go build -o congo .
./congo version</code></pre>
</div>
<p class="text-body leading-relaxed">
<code class="text-accent">congo source</code> extracts the complete source tree from
inside the binary — the CLI, the framework packages, the scaffold templates, everything.
You can rebuild Congo from Congo.
</p>
</section>
<!-- Build from Source -->
<section class="section-divide py-16">
<h2 class="text-xl font-bold tracking-tight mb-4">Build from Source</h2>
<p class="text-body leading-relaxed mb-5">
Every file that makes up Congo is available at <a href="/source" class="text-accent hover:text-bright transition-colors" hx-boost="true">/source</a>.
Browse, read, and copy the source directly from this website.
</p>
<p class="text-muted text-sm">Requires Go 1.25+ and nothing else.</p>
</section>
<!-- CLI Commands -->
<section class="section-divide py-16">
<h2 class="text-xl font-bold tracking-tight mb-5">CLI Commands</h2>
<div class="space-y-0">
<div class="table-row flex items-center gap-6 py-3 px-2">
<span class="font-mono text-accent text-sm w-40 sm:w-48 shrink-0">congo init <name></span>
<span class="text-body text-sm">Create a new project with vendored framework</span>
</div>
<div class="table-row flex items-center gap-6 py-3 px-2">
<span class="font-mono text-accent text-sm w-40 sm:w-48 shrink-0">congo new <name></span>
<span class="text-body text-sm">Add an app to an existing project</span>
</div>
<div class="table-row flex items-center gap-6 py-3 px-2">
<span class="font-mono text-accent text-sm w-40 sm:w-48 shrink-0">congo dev</span>
<span class="text-body text-sm">Run development server</span>
</div>
<div class="table-row flex items-center gap-6 py-3 px-2">
<span class="font-mono text-accent text-sm w-40 sm:w-48 shrink-0">congo build</span>
<span class="text-body text-sm">Build for production</span>
</div>
<div class="table-row flex items-center gap-6 py-3 px-2">
<span class="font-mono text-accent text-sm w-40 sm:w-48 shrink-0">congo launch</span>
<span class="text-body text-sm">Deploy infrastructure from infra.json</span>
</div>
<div class="table-row flex items-center gap-6 py-3 px-2">
<span class="font-mono text-accent text-sm w-40 sm:w-48 shrink-0">congo connect</span>
<span class="text-body text-sm">SSH into a deployed server</span>
</div>
<div class="table-row flex items-center gap-6 py-3 px-2">
<span class="font-mono text-accent text-sm w-40 sm:w-48 shrink-0">congo claude</span>
<span class="text-body text-sm">Launch Claude Code with framework context</span>
</div>
<div class="table-row flex items-center gap-6 py-3 px-2">
<span class="font-mono text-accent text-sm w-40 sm:w-48 shrink-0">congo source</span>
<span class="text-body text-sm">Extract Congo source code from the binary</span>
</div>
</div>
</section>
<!-- Flags -->
<section class="section-divide py-16">
<h2 class="text-xl font-bold tracking-tight mb-3">Flags for <code class="text-accent">congo init</code></h2>
<p class="text-body text-sm leading-relaxed mb-5">
Each flag excludes a <a href="/guide#packages" class="text-accent hover:text-bright transition-colors" hx-boost="true">framework package</a>. Use them to keep your project minimal.
</p>
<div class="space-y-0">
<div class="table-row flex items-center gap-6 py-3 px-2">
<span class="font-mono text-muted text-sm w-40 sm:w-48 shrink-0">--module <path></span>
<span class="text-body text-sm">Go module path (default: project name)</span>
</div>
<div class="table-row flex items-center gap-6 py-3 px-2">
<span class="font-mono text-muted text-sm w-40 sm:w-48 shrink-0">--dir <name></span>
<span class="text-body text-sm">App directory name (default: web)</span>
</div>
<div class="table-row flex items-center gap-6 py-3 px-2">
<span class="font-mono text-muted text-sm w-40 sm:w-48 shrink-0">--no-frontend</span>
<span class="text-body text-sm">Exclude React islands (<a href="/source/pkg/frontend" class="text-accent hover:text-bright transition-colors" hx-boost="true">frontend</a>)</span>
</div>
<div class="table-row flex items-center gap-6 py-3 px-2">
<span class="font-mono text-muted text-sm w-40 sm:w-48 shrink-0">--no-assistant</span>
<span class="text-body text-sm">Exclude AI package (<a href="/source/pkg/assistant" class="text-accent hover:text-bright transition-colors" hx-boost="true">assistant</a>)</span>
</div>
<div class="table-row flex items-center gap-6 py-3 px-2">
<span class="font-mono text-muted text-sm w-40 sm:w-48 shrink-0">--no-platform</span>
<span class="text-body text-sm">Exclude cloud deployment (<a href="/source/pkg/platform" class="text-accent hover:text-bright transition-colors" hx-boost="true">platform</a>)</span>
</div>
<div class="table-row flex items-center gap-6 py-3 px-2">
<span class="font-mono text-muted text-sm w-40 sm:w-48 shrink-0">--no-database</span>
<span class="text-body text-sm">Exclude ORM (<a href="/source/pkg/database" class="text-accent hover:text-bright transition-colors" hx-boost="true">database</a>)</span>
</div>
<div class="table-row flex items-center gap-6 py-3 px-2">
<span class="font-mono text-muted text-sm w-40 sm:w-48 shrink-0">--application-only</span>
<span class="text-body text-sm">Only include <a href="/source/pkg/application" class="text-accent hover:text-bright transition-colors" hx-boost="true">application</a></span>
</div>
</div>
</section>
</div>
<div class="mt-8 max-w-md mx-auto">
{{template "mailing-list.html" .}}
</div>
</div>
<script nonce="{{nonce}}">
(function() {
var ua = navigator.userAgent.toLowerCase();
var os = '';
if (ua.indexOf('mac') !== -1) os = 'darwin';
else if (ua.indexOf('win') !== -1) os = 'windows';
else if (ua.indexOf('linux') !== -1) os = 'linux';
var arch = 'amd64';
if (navigator.userAgentData && navigator.userAgentData.getHighEntropyValues) {
navigator.userAgentData.getHighEntropyValues(['architecture']).then(function(v) {
if (v.architecture === 'arm') arch = 'arm64';
highlight(os, arch);
});
} else {
highlight(os, arch);
}
function highlight(os, arch) {
if (!os) return;
var el = document.getElementById('dl-' + os + '-' + arch);
if (!el) return;
el.style.borderColor = 'rgba(120,119,198,0.4)';
el.style.background = 'rgba(120,119,198,0.08)';
var badge = document.createElement('span');
badge.className = 'text-accent text-xs font-mono';
badge.textContent = 'detected';
el.querySelector('div').appendChild(badge);
}
})();
</script>
{{end}}