|
|
@@ -3,6 +3,7 @@ import { Title, Meta, Link } from "@solidjs/meta"
|
|
|
// import { HttpHeader } from "@solidjs/start"
|
|
|
import video from "../asset/lander/opencode-min.mp4"
|
|
|
import videoPoster from "../asset/lander/opencode-poster.png"
|
|
|
+import desktopAppIcon from "../asset/lander/desktop-app-icon.png"
|
|
|
import { IconCopy, IconCheck } from "../component/icon"
|
|
|
import { A, createAsync } from "@solidjs/router"
|
|
|
import { EmailSignup } from "~/component/email-signup"
|
|
|
@@ -14,6 +15,7 @@ import { Legal } from "~/component/legal"
|
|
|
import { github } from "~/lib/github"
|
|
|
import { createMemo } from "solid-js"
|
|
|
import { config } from "~/config"
|
|
|
+import avatarDavid from "~/asset/lander/avatar-david.png"
|
|
|
|
|
|
function CopyStatus() {
|
|
|
return (
|
|
|
@@ -52,100 +54,117 @@ export default function Home() {
|
|
|
|
|
|
<div data-component="content">
|
|
|
<section data-component="hero">
|
|
|
+ <div data-component="desktop-app-available">
|
|
|
+ <div data-slot="desktop-icon">
|
|
|
+ <img src={desktopAppIcon} alt="" />
|
|
|
+ <div data-slot="dot"></div>
|
|
|
+ </div>
|
|
|
+ <div data-slot="desktop-copy">
|
|
|
+ <span>Now available on desktop for macOS, Windows, and Linux.</span> <a href="/download">Learn more</a>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
<div data-slot="hero-copy">
|
|
|
- <a data-slot="releases" href={release()?.url ?? `${config.github.repoUrl}/releases`} target="_blank">
|
|
|
- What’s new in {release()?.name ?? "the latest release"}
|
|
|
- </a>
|
|
|
- <h1>The open source coding agent</h1>
|
|
|
+ {/*<a data-slot="releases"*/}
|
|
|
+ {/* href={release()?.url ?? `${config.github.repoUrl}/releases`}*/}
|
|
|
+ {/* target="_blank">*/}
|
|
|
+ {/* What’s new in {release()?.name ?? "the latest release"}*/}
|
|
|
+ {/*</a>*/}
|
|
|
+ <h1>The open source AI coding agent</h1>
|
|
|
<p>
|
|
|
- OpenCode includes free models or connect from any provider to <br />
|
|
|
- use other models, including Claude, GPT, Gemini and more.
|
|
|
+ Free models by default or connect any model from any provider, <span data-slot="br"></span>including
|
|
|
+ Claude, GPT, Gemini and more.
|
|
|
</p>
|
|
|
+ <a href="/download">
|
|
|
+ <span>Get started for free</span>
|
|
|
+ <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
|
+ <path
|
|
|
+ d="M6.5 12L17 12M13 16.5L17.5 12L13 7.5"
|
|
|
+ stroke="currentColor"
|
|
|
+ stroke-width="1.5"
|
|
|
+ stroke-linecap="square"
|
|
|
+ />
|
|
|
+ </svg>
|
|
|
+ </a>
|
|
|
</div>
|
|
|
- <p data-slot="installation-instructions">Install and use. No account, no email, and no credit card.</p>
|
|
|
- <div data-slot="installation">
|
|
|
- <Tabs
|
|
|
- as="section"
|
|
|
- aria-label="Install options"
|
|
|
- class="tabs"
|
|
|
- data-component="tabs"
|
|
|
- data-active="curl"
|
|
|
- defaultValue="curl"
|
|
|
- >
|
|
|
- <Tabs.List data-slot="tablist">
|
|
|
- <Tabs.Trigger value="curl" data-slot="tab">
|
|
|
- curl
|
|
|
- </Tabs.Trigger>
|
|
|
- <Tabs.Trigger value="npm" data-slot="tab">
|
|
|
- npm
|
|
|
- </Tabs.Trigger>
|
|
|
- <Tabs.Trigger value="bun" data-slot="tab">
|
|
|
- bun
|
|
|
- </Tabs.Trigger>
|
|
|
- <Tabs.Trigger value="brew" data-slot="tab">
|
|
|
- brew
|
|
|
- </Tabs.Trigger>
|
|
|
- <Tabs.Trigger value="paru" data-slot="tab">
|
|
|
- paru
|
|
|
- </Tabs.Trigger>
|
|
|
- <Tabs.Indicator />
|
|
|
- </Tabs.List>
|
|
|
- <div data-slot="panels">
|
|
|
- <Tabs.Content as="pre" data-slot="panel" value="curl">
|
|
|
- <button data-copy data-slot="command" onClick={handleCopyClick}>
|
|
|
- <span data-slot="command-script">
|
|
|
- <span>curl -fsSL </span>
|
|
|
- <span data-slot="protocol">https://</span>
|
|
|
- <span data-slot="highlight">opencode.ai/install</span>
|
|
|
- <span> | bash</span>
|
|
|
- </span>
|
|
|
- <CopyStatus />
|
|
|
- </button>
|
|
|
- </Tabs.Content>
|
|
|
- <Tabs.Content as="pre" data-slot="panel" value="npm">
|
|
|
- <button data-copy data-slot="command" onClick={handleCopyClick}>
|
|
|
- <span>
|
|
|
- <span data-slot="protocol">npm i -g </span>
|
|
|
- <span data-slot="highlight">opencode-ai</span>
|
|
|
- </span>
|
|
|
- <CopyStatus />
|
|
|
- </button>
|
|
|
- </Tabs.Content>
|
|
|
- <Tabs.Content as="pre" data-slot="panel" value="bun">
|
|
|
- <button data-copy data-slot="command" onClick={handleCopyClick}>
|
|
|
- <span>
|
|
|
- <span data-slot="protocol">bun add -g </span>
|
|
|
- <span data-slot="highlight">opencode-ai</span>
|
|
|
- </span>
|
|
|
- <CopyStatus />
|
|
|
- </button>
|
|
|
- </Tabs.Content>
|
|
|
- <Tabs.Content as="pre" data-slot="panel" value="brew">
|
|
|
- <button data-copy data-slot="command" onClick={handleCopyClick}>
|
|
|
- <span>
|
|
|
- <span data-slot="protocol">brew install </span>
|
|
|
- <span data-slot="highlight">opencode</span>
|
|
|
- </span>
|
|
|
- <CopyStatus />
|
|
|
- </button>
|
|
|
- </Tabs.Content>
|
|
|
- <Tabs.Content as="pre" data-slot="panel" value="paru">
|
|
|
- <button data-copy data-slot="command" onClick={handleCopyClick}>
|
|
|
- <span>
|
|
|
- <span data-slot="protocol">paru -S </span>
|
|
|
- <span data-slot="highlight">opencode</span>
|
|
|
- </span>
|
|
|
- <CopyStatus />
|
|
|
- </button>
|
|
|
- </Tabs.Content>
|
|
|
- </div>
|
|
|
- </Tabs>
|
|
|
- </div>
|
|
|
- <p data-slot="installation-options">
|
|
|
- Available in terminal, web, and desktop (coming soon).
|
|
|
- <br />
|
|
|
- Extensions for VS Code, Cursor, Windsurf, and more.
|
|
|
- </p>
|
|
|
+ {/*<div data-slot="installation">*/}
|
|
|
+ {/* <Tabs*/}
|
|
|
+ {/* as="section"*/}
|
|
|
+ {/* aria-label="Install options"*/}
|
|
|
+ {/* class="tabs"*/}
|
|
|
+ {/* data-component="tabs"*/}
|
|
|
+ {/* data-active="curl"*/}
|
|
|
+ {/* defaultValue="curl"*/}
|
|
|
+ {/* >*/}
|
|
|
+ {/* <Tabs.List data-slot="tablist">*/}
|
|
|
+ {/* <Tabs.Trigger value="curl" data-slot="tab">*/}
|
|
|
+ {/* curl*/}
|
|
|
+ {/* </Tabs.Trigger>*/}
|
|
|
+ {/* <Tabs.Trigger value="npm" data-slot="tab">*/}
|
|
|
+ {/* npm*/}
|
|
|
+ {/* </Tabs.Trigger>*/}
|
|
|
+ {/* <Tabs.Trigger value="bun" data-slot="tab">*/}
|
|
|
+ {/* bun*/}
|
|
|
+ {/* </Tabs.Trigger>*/}
|
|
|
+ {/* <Tabs.Trigger value="brew" data-slot="tab">*/}
|
|
|
+ {/* brew*/}
|
|
|
+ {/* </Tabs.Trigger>*/}
|
|
|
+ {/* <Tabs.Trigger value="paru" data-slot="tab">*/}
|
|
|
+ {/* paru*/}
|
|
|
+ {/* </Tabs.Trigger>*/}
|
|
|
+ {/* <Tabs.Indicator />*/}
|
|
|
+ {/* </Tabs.List>*/}
|
|
|
+ {/* <div data-slot="panels">*/}
|
|
|
+ {/* <Tabs.Content as="pre" data-slot="panel" value="curl">*/}
|
|
|
+ {/* <button data-copy data-slot="command" onClick={handleCopyClick}>*/}
|
|
|
+ {/* <span data-slot="command-script">*/}
|
|
|
+ {/* <span>curl -fsSL </span>*/}
|
|
|
+ {/* <span data-slot="protocol">https://</span>*/}
|
|
|
+ {/* <span data-slot="highlight">opencode.ai/install</span>*/}
|
|
|
+ {/* <span> | bash</span>*/}
|
|
|
+ {/* </span>*/}
|
|
|
+ {/* <CopyStatus />*/}
|
|
|
+ {/* </button>*/}
|
|
|
+ {/* </Tabs.Content>*/}
|
|
|
+ {/* <Tabs.Content as="pre" data-slot="panel" value="npm">*/}
|
|
|
+ {/* <button data-copy data-slot="command" onClick={handleCopyClick}>*/}
|
|
|
+ {/* <span>*/}
|
|
|
+ {/* <span data-slot="protocol">npm i -g </span>*/}
|
|
|
+ {/* <span data-slot="highlight">opencode-ai</span>*/}
|
|
|
+ {/* </span>*/}
|
|
|
+ {/* <CopyStatus />*/}
|
|
|
+ {/* </button>*/}
|
|
|
+ {/* </Tabs.Content>*/}
|
|
|
+ {/* <Tabs.Content as="pre" data-slot="panel" value="bun">*/}
|
|
|
+ {/* <button data-copy data-slot="command" onClick={handleCopyClick}>*/}
|
|
|
+ {/* <span>*/}
|
|
|
+ {/* <span data-slot="protocol">bun add -g </span>*/}
|
|
|
+ {/* <span data-slot="highlight">opencode-ai</span>*/}
|
|
|
+ {/* </span>*/}
|
|
|
+ {/* <CopyStatus />*/}
|
|
|
+ {/* </button>*/}
|
|
|
+ {/* </Tabs.Content>*/}
|
|
|
+ {/* <Tabs.Content as="pre" data-slot="panel" value="brew">*/}
|
|
|
+ {/* <button data-copy data-slot="command" onClick={handleCopyClick}>*/}
|
|
|
+ {/* <span>*/}
|
|
|
+ {/* <span data-slot="protocol">brew install </span>*/}
|
|
|
+ {/* <span data-slot="highlight">opencode</span>*/}
|
|
|
+ {/* </span>*/}
|
|
|
+ {/* <CopyStatus />*/}
|
|
|
+ {/* </button>*/}
|
|
|
+ {/* </Tabs.Content>*/}
|
|
|
+ {/* <Tabs.Content as="pre" data-slot="panel" value="paru">*/}
|
|
|
+ {/* <button data-copy data-slot="command" onClick={handleCopyClick}>*/}
|
|
|
+ {/* <span>*/}
|
|
|
+ {/* <span data-slot="protocol">paru -S </span>*/}
|
|
|
+ {/* <span data-slot="highlight">opencode</span>*/}
|
|
|
+ {/* </span>*/}
|
|
|
+ {/* <CopyStatus />*/}
|
|
|
+ {/* </button>*/}
|
|
|
+ {/* </Tabs.Content>*/}
|
|
|
+ {/* </div>*/}
|
|
|
+ {/* </Tabs>*/}
|
|
|
+ {/*</div>*/}
|
|
|
</section>
|
|
|
|
|
|
<section data-component="video">
|