Every variant, every device

Playground

Switch props and scroll the preview — on a phone, tablet, or desktop frame. The code below always matches what you’re looking at.

Open fullscreen
9:41
Header · behavior
Header · theme
Animation · speed

Header · rows

Search · style
Header · row order
Sidebar
Footer · variant
Footer · behavior
app.tsx — generated
import { AppShell, Header, Content, SearchField, Footer, FooterItem, MotionProvider } from "appshell-react";
import { framerMotionAdapter } from "appshell-react/motion-framer";

export default function App() {
  return (
    <MotionProvider adapter={framerMotionAdapter}>
      <AppShell safeArea>
        <Header
          behavior="reveal-all"
          logo={<span className="font-bold">Fieldnotes</span>}
          title="Today"
          subtitle="Six new notes from your circle"
          searchContent={<SearchField placeholder="Search notes" />}
        />

        {/* Center the app column so desktop doesn't stretch like a phone */}
        <Content className="mx-auto w-full max-w-2xl sm:border-x">
          {/* … */}
        </Content>

        <Footer variant="tab-bar" behavior="auto-hide">
          <FooterItem icon={<Home />} label="Home" active />
          <FooterItem icon={<Compass />} label="Explore" />
          <FooterItem icon={<Bookmark />} label="Saved" badge={2} />
          <FooterItem icon={<User />} label="Profile" />
        </Footer>
      </AppShell>
    </MotionProvider>
  );
}