List
A searchable, scrollable list of items with optional detail panels, accessories, and filters.

Basic List
import { Action, ActionPanel, List } from "@vicinae/api";
export default function Command() {
return (
<List>
<List.Item
title="Apple"
icon="π"
actions={
<ActionPanel>
<Action.CopyToClipboard title="Copy" content="π" />
</ActionPanel>
}
/>
<List.Item title="Banana" icon="π" />
<List.Item title="Cherry" icon="π" />
</List>
);
}
Detail Panel
Set isShowingDetail to show a side panel with markdown and metadata.
import { Color, List } from "@vicinae/api";
export default function Command() {
return (
<List isShowingDetail>
<List.Item
title="Apple"
icon="π"
detail={
<List.Item.Detail
markdown="# Apple\n\nA crisp, sweet fruit."
metadata={
<List.Item.Detail.Metadata>
<List.Item.Detail.Metadata.Label title="Color" text="Red" />
<List.Item.Detail.Metadata.TagList title="Season">
<List.Item.Detail.Metadata.TagList.Item text="Autumn" color={Color.Orange} />
</List.Item.Detail.Metadata.TagList>
</List.Item.Detail.Metadata>
}
/>
}
/>
{/* ... */}
</List>
);
}
Accessories
Right-side metadata supporting text, colored tags, and icons.
import { Color, List } from "@vicinae/api";
export default function Command() {
return (
<List>
<List.Item
title="Apple"
icon="π"
accessories={[
{ text: "95 kcal" },
{ tag: { value: "fruit", color: Color.Red } },
]}
/>
{/* ... */}
</List>
);
}
Empty View
Placeholder when the list has no items.
import { Color, List } from "@vicinae/api";
export default function Command() {
return (
<List>
<List.EmptyView
title="No Fruits Found"
description="Try a different search."
icon={{ source: "π", tintColor: Color.SecondaryText }}
/>
</List>
);
}
Dropdown Filter
Filter items via a dropdown in the search bar.
import { useState } from "react";
import { List } from "@vicinae/api";
export default function Command() {
const [type, setType] = useState("all");
return (
<List
searchBarAccessory={
<List.Dropdown tooltip="Type" value={type} onChange={setType}>
<List.Dropdown.Item title="All" value="all" />
<List.Dropdown.Item title="Berries" value="berry" />
<List.Dropdown.Item title="Citrus" value="citrus" />
</List.Dropdown>
}
>
{/* filtered items */}
</List>
);
}
Controlled Search
Handle search yourself by controlling searchText. This automatically disables built-in filtering.
import { useState } from "react";
import { List } from "@vicinae/api";
export default function Command() {
const [query, setQuery] = useState("");
return (
<List searchText={query} onSearchTextChange={setQuery}>
{/* manually filtered items */}
</List>
);
}