o- 0.4.1

Multi-Engine JavaScript Runtime
Documentation
import Link from 'next/link';

const engines = [
  { name: 'SpiderMonkey', note: 'fast bootstrap, unstable teardown' },
  { name: 'JavaScriptCore', note: 'clean host callbacks, shared jstd surface' },
  { name: 'V8', note: 'stable default runner, fresh isolate per run' },
];

const features = [
  'One script, multiple engines',
  'Shared jstd bootstrap',
  'Color-formatted runtime errors',
  'Docs-first developer flow',
];

export default function HomePage() {
  return (
    <main className="relative overflow-hidden">
      <div className="absolute inset-0 pointer-events-none">
        <div className="hero-spin absolute left-[-8rem] top-20 h-72 w-72 rounded-full border border-[var(--line)] opacity-60" />
        <div className="absolute right-[-5rem] top-32 h-56 w-56 rounded-full bg-[radial-gradient(circle,_rgba(255,179,107,0.55),_transparent_70%)] blur-2xl" />
        <div className="absolute bottom-0 left-1/2 h-64 w-[42rem] -translate-x-1/2 bg-[radial-gradient(circle,_rgba(215,79,42,0.16),_transparent_68%)] blur-3xl" />
      </div>

      <section className="relative mx-auto flex min-h-[calc(100vh-4rem)] max-w-7xl flex-col justify-center px-6 py-16 sm:px-10 lg:px-16">
        <div className="grid items-center gap-14 lg:grid-cols-[1.2fr_0.8fr]">
          <div className="hero-float">
            <div className="mb-5 inline-flex items-center gap-3 rounded-full border border-[var(--line)] bg-[var(--panel)] px-4 py-2 text-xs uppercase tracking-[0.28em] text-[var(--muted)] backdrop-blur">
              <span className="h-2 w-2 rounded-full bg-[var(--accent)]" />
              experimental javascript runner
            </div>

            <h1 className="max-w-4xl text-5xl font-semibold leading-[0.94] tracking-[-0.06em] text-[var(--text)] sm:text-6xl lg:text-8xl">
              Run the same script on wildly different engines.
            </h1>

            <p className="mt-6 max-w-2xl text-base leading-8 text-[var(--muted)] sm:text-lg">
              <span className="font-medium text-[var(--text)]">o-</span> is a
              tiny multi-engine JavaScript runner with a shared bootstrap
              layer. It lets you compare SpiderMonkey, JavaScriptCore, and V8
              behind one interface without flattening everything into the same
              boring developer experience.
            </p>

            <div className="hero-float-delay mt-10 flex flex-wrap items-center gap-4">
              <Link
                href="/docs/getting-started"
                className="rounded-full bg-[var(--text)] px-6 py-3 text-sm font-medium text-white transition-transform hover:-translate-y-0.5"
              >
                Open the docs
              </Link>
              <Link
                href="/docs/engines"
                className="rounded-full border border-[var(--line)] bg-[var(--panel)] px-6 py-3 text-sm font-medium text-[var(--text)] backdrop-blur transition-transform hover:-translate-y-0.5"
              >
                Compare engines
              </Link>
            </div>

            <div className="mt-12 flex flex-wrap gap-3">
              {features.map((feature) => (
                <span
                  key={feature}
                  className="rounded-full border border-[var(--line)] bg-white/55 px-4 py-2 text-sm text-[var(--muted)] backdrop-blur"
                >
                  {feature}
                </span>
              ))}
            </div>
          </div>

          <div className="hero-float-delay relative">
            <div className="rounded-[2rem] border border-[var(--line)] bg-[var(--panel)] p-5 shadow-[0_24px_90px_rgba(62,39,20,0.08)] backdrop-blur-xl">
              <div className="rounded-[1.5rem] border border-[var(--line)] bg-[#1f1712] p-5 text-left text-sm text-[#f5e8d6] shadow-inner">
                <div className="mb-4 flex items-center gap-2">
                  <span className="h-3 w-3 rounded-full bg-[#ff845b]" />
                  <span className="h-3 w-3 rounded-full bg-[#ffc163]" />
                  <span className="h-3 w-3 rounded-full bg-[#65d48d]" />
                </div>
                <pre className="overflow-x-auto text-xs leading-7 sm:text-sm">
                  <code>{`$ o- run index.js
12586269025

$ cat ~/.config/o-/toolchain
v8

$ o- toolchain add spidermonkey
$ o- toolchain add javascriptcore

Execution Error: JavaScript exception is pending
--> index.js
 | console.log(fib(50))`}</code>
                </pre>
              </div>

              <div className="mt-5 grid gap-3">
                {engines.map((engine) => (
                  <div
                    key={engine.name}
                    className="rounded-2xl border border-[var(--line)] bg-white/60 px-4 py-4 backdrop-blur"
                  >
                    <div className="flex items-center justify-between gap-4">
                      <h2 className="text-lg font-medium text-[var(--text)]">
                        {engine.name}
                      </h2>
                      <span className="rounded-full bg-[var(--accent)]/10 px-3 py-1 text-[11px] uppercase tracking-[0.2em] text-[var(--accent)]">
                        backend
                      </span>
                    </div>
                    <p className="mt-2 text-sm leading-6 text-[var(--muted)]">
                      {engine.note}
                    </p>
                  </div>
                ))}
              </div>
            </div>
          </div>
        </div>
      </section>
    </main>
  );
}