diff --git a/docs/_static/css/my_theme.css b/docs/_static/css/my_theme.css
deleted file mode 100644
index 7dcd97c9b..000000000
--- a/docs/_static/css/my_theme.css
+++ /dev/null
@@ -1,136 +0,0 @@
-@import url("theme.css");
-
-/* Horizontal Navigation Bar */
-.horizontal-nav {
- background-color: #ffffff;
- border-bottom: 1px solid #e5e5e5;
- padding: 0;
- position: fixed;
- top: 0;
- left: 0;
- right: 0;
- z-index: 1050;
- height: 50px;
- box-shadow: 0 2px 4px rgba(0,0,0,0.1);
-}
-
-[data-theme="dark"] .horizontal-nav {
- background-color: #1a1a1a;
- border-bottom: 1px solid #333;
-}
-
-.horizontal-nav .nav-container {
- max-width: 1200px;
- margin: 0 auto;
- display: flex;
- align-items: center;
- justify-content: space-between;
- padding: 0 20px;
- height: 100%;
-}
-
-.horizontal-nav .nav-brand {
- font-size: 18px;
- font-weight: 600;
- color: #333;
- text-decoration: none;
-}
-
-[data-theme="dark"] .horizontal-nav .nav-brand {
- color: #fff;
-}
-
-.horizontal-nav .nav-links {
- display: flex;
- align-items: center;
- gap: 30px;
- list-style: none;
- margin: 0;
- padding: 0;
-}
-
-.horizontal-nav .nav-links a {
- color: #666;
- text-decoration: none;
- font-size: 14px;
- font-weight: 500;
- padding: 8px 12px;
- border-radius: 6px;
- transition: all 0.2s ease;
-}
-
-.horizontal-nav .nav-links a:hover,
-.horizontal-nav .nav-links a.active {
- color: #333;
- background-color: #f5f5f5;
-}
-
-.horizontal-nav .nav-links a.active {
- font-weight: 600;
-}
-
-[data-theme="dark"] .horizontal-nav .nav-links a {
- color: #ccc;
-}
-
-[data-theme="dark"] .horizontal-nav .nav-links a:hover,
-[data-theme="dark"] .horizontal-nav .nav-links a.active {
- color: #fff;
- background-color: #333;
-}
-
-.horizontal-nav .nav-links .github-link {
- display: flex;
- align-items: center;
- gap: 6px;
-}
-
-.horizontal-nav .nav-links .github-icon {
- width: 16px;
- height: 16px;
- fill: currentColor;
-}
-
-/* Adjust main content to account for fixed nav */
-.wy-nav-side {
- top: 50px;
- height: calc(100vh - 50px);
-}
-
-.wy-nav-content-wrap {
- margin-top: 50px;
-}
-
-.wy-nav-content {
- max-width: 90%;
-}
-
-.wy-nav-side {
- /* background: linear-gradient(45deg, #2980B9, #16A085); */
- background: linear-gradient(90deg, #332735, #1b263c);
-}
-
-.wy-side-nav-search {
- background-color: transparent !important;
-}
-
-.hide-title h1 {
- display: none;
-}
-
-h2, h3, h4 {
- font-weight: normal;
-}
-html[data-theme="dark"] .rst-content div[class^="highlight"] {
- background-color: #0b0b0b;
-}
-pre {
- white-space: pre-wrap !important;
- word-break: break-all;
-}
-
-[data-theme="dark"] .mermaid {
- background-color: #f4f4f6 !important;
- border-radius: 6px;
- padding: 0.5em;
- }
diff --git a/docs/_static/js/detect_theme.js b/docs/_static/js/detect_theme.js
deleted file mode 100644
index 712565ef7..000000000
--- a/docs/_static/js/detect_theme.js
+++ /dev/null
@@ -1,32 +0,0 @@
-document.addEventListener("DOMContentLoaded", function () {
- const prefersDark = window.matchMedia("(prefers-color-scheme: dark)").matches;
- const htmlElement = document.documentElement;
-
- // Check if theme is saved in localStorage
- const savedTheme = localStorage.getItem("sphinx-rtd-theme");
-
- if (savedTheme) {
- // Use the saved theme preference
- htmlElement.setAttribute("data-theme", savedTheme);
- document.body.classList.toggle("dark", savedTheme === "dark");
- } else {
- // Fall back to system preference
- const theme = prefersDark ? "dark" : "light";
- htmlElement.setAttribute("data-theme", theme);
- document.body.classList.toggle("dark", theme === "dark");
- // Save initial preference
- localStorage.setItem("sphinx-rtd-theme", theme);
- }
-
- // Listen for theme changes from the existing toggle
- const observer = new MutationObserver(function(mutations) {
- mutations.forEach(function(mutation) {
- if (mutation.attributeName === "data-theme") {
- const currentTheme = htmlElement.getAttribute("data-theme");
- localStorage.setItem("sphinx-rtd-theme", currentTheme);
- }
- });
- });
-
- observer.observe(htmlElement, { attributes: true });
-});
diff --git a/docs/_static/js/horizontal_nav.js b/docs/_static/js/horizontal_nav.js
deleted file mode 100644
index c2384f9d5..000000000
--- a/docs/_static/js/horizontal_nav.js
+++ /dev/null
@@ -1,44 +0,0 @@
-// Horizontal Navigation Bar for Llama Stack Documentation
-document.addEventListener('DOMContentLoaded', function() {
- // Create the horizontal navigation HTML
- const navHTML = `
-
- `;
-
- // Insert the navigation at the beginning of the body
- document.body.insertAdjacentHTML('afterbegin', navHTML);
-
- // Update navigation links based on current page
- updateActiveNav();
-});
-
-function updateActiveNav() {
- const currentPath = window.location.pathname;
- const navLinks = document.querySelectorAll('.horizontal-nav .nav-links a');
-
- navLinks.forEach(link => {
- // Remove any existing active classes
- link.classList.remove('active');
-
- // Add active class based on current path
- if (currentPath === '/' && link.getAttribute('href') === '/') {
- link.classList.add('active');
- } else if (currentPath.includes('/references/api_reference/') && link.getAttribute('href').includes('api_reference')) {
- link.classList.add('active');
- }
- });
-}
diff --git a/docs/_static/js/keyboard_shortcuts.js b/docs/_static/js/keyboard_shortcuts.js
deleted file mode 100644
index 81d0b7c65..000000000
--- a/docs/_static/js/keyboard_shortcuts.js
+++ /dev/null
@@ -1,14 +0,0 @@
-document.addEventListener('keydown', function(event) {
- // command+K or ctrl+K
- if ((event.metaKey || event.ctrlKey) && event.key === 'k') {
- event.preventDefault();
- document.querySelector('.search-input, .search-field, input[name="q"]').focus();
- }
-
- // forward slash
- if (event.key === '/' &&
- !event.target.matches('input, textarea, select')) {
- event.preventDefault();
- document.querySelector('.search-input, .search-field, input[name="q"]').focus();
- }
-});
diff --git a/docs/source/conf.py b/docs/source/conf.py
deleted file mode 100644
index 0cbddef31..000000000
--- a/docs/source/conf.py
+++ /dev/null
@@ -1,156 +0,0 @@
-# Copyright (c) Meta Platforms, Inc. and affiliates.
-# All rights reserved.
-#
-# This source code is licensed under the terms described in the LICENSE file in
-# the root directory of this source tree.
-
-# Configuration file for the Sphinx documentation builder.
-#
-# For the full list of built-in configuration values, see the documentation:
-# https://www.sphinx-doc.org/en/master/usage/configuration.html
-
-# -- Project information -----------------------------------------------------
-# https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information
-
-import json
-from datetime import datetime
-from pathlib import Path
-
-import requests
-from docutils import nodes
-
-# Read version from pyproject.toml
-with Path(__file__).parent.parent.parent.joinpath("pyproject.toml").open("rb") as f:
- pypi_url = "https://pypi.org/pypi/llama-stack/json"
- headers = {
- 'User-Agent': 'pip/23.0.1 (python 3.11)', # Mimic pip's user agent
- 'Accept': 'application/json'
- }
- version_tag = json.loads(requests.get(pypi_url, headers=headers).text)["info"]["version"]
- print(f"{version_tag=}")
-
- # generate the full link including text and url here
- llama_stack_version_url = (
- f"https://github.com/meta-llama/llama-stack/releases/tag/v{version_tag}"
- )
- llama_stack_version_link = f"release notes"
-
-project = "llama-stack"
-copyright = f"{datetime.now().year}, Meta"
-author = "Meta"
-
-# -- General configuration ---------------------------------------------------
-# https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration
-
-extensions = [
- "myst_parser",
- "sphinx_copybutton",
- "sphinx_design",
- "sphinx_rtd_theme",
- "sphinx_rtd_dark_mode",
- "sphinx_tabs.tabs",
- "sphinxcontrib.redoc",
- "sphinxcontrib.mermaid",
- "sphinxcontrib.video",
- "sphinx_reredirects"
-]
-
-redirects = {
- "providers/post_training/index": "../../advanced_apis/post_training/index.html",
- "providers/eval/index": "../../advanced_apis/eval/index.html",
- "providers/scoring/index": "../../advanced_apis/scoring/index.html",
- "playground/index": "../../building_applications/playground/index.html",
- "openai/index": "../../providers/index.html#openai-api-compatibility",
- "introduction/index": "../concepts/index.html#llama-stack-architecture"
-}
-
-myst_enable_extensions = ["colon_fence"]
-
-html_theme = "sphinx_rtd_theme"
-html_use_relative_paths = True
-templates_path = ["_templates"]
-exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"]
-
-myst_enable_extensions = [
- "amsmath",
- "attrs_inline",
- "attrs_block",
- "colon_fence",
- "deflist",
- "dollarmath",
- "fieldlist",
- "html_admonition",
- "html_image",
- # "linkify",
- "replacements",
- "smartquotes",
- "strikethrough",
- "substitution",
- "tasklist",
-]
-
-myst_substitutions = {
- "docker_hub": "https://hub.docker.com/repository/docker/llamastack",
- "llama_stack_version": version_tag,
- "llama_stack_version_link": llama_stack_version_link,
-}
-
-suppress_warnings = ["myst.header"]
-
-# Copy button settings
-copybutton_prompt_text = "$ " # for bash prompts
-copybutton_prompt_is_regexp = True
-copybutton_remove_prompts = True
-copybutton_line_continuation_character = "\\"
-
-# Source suffix
-source_suffix = {
- ".rst": "restructuredtext",
- ".md": "markdown",
-}
-
-# -- Options for HTML output -------------------------------------------------
-# https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output
-
-# html_theme = "alabaster"
-html_theme_options = {
- "canonical_url": "https://github.com/meta-llama/llama-stack",
- "collapse_navigation": False,
- # "style_nav_header_background": "#c3c9d4",
- 'display_version': True,
- 'version_selector': True,
-}
-
-default_dark_mode = False
-
-html_static_path = ["../_static"]
-# html_logo = "../_static/llama-stack-logo.png"
-# html_style = "../_static/css/my_theme.css"
-
-
-def setup(app):
- app.add_css_file("css/my_theme.css")
- app.add_js_file("js/detect_theme.js")
- app.add_js_file("js/horizontal_nav.js")
- app.add_js_file("js/keyboard_shortcuts.js")
-
- def dockerhub_role(name, rawtext, text, lineno, inliner, options={}, content=[]):
- url = f"https://hub.docker.com/r/llamastack/{text}"
- node = nodes.reference(rawtext, text, refuri=url, **options)
- return [node], []
-
- def repopath_role(name, rawtext, text, lineno, inliner, options={}, content=[]):
- parts = text.split("::")
- if len(parts) == 2:
- link_text = parts[0]
- url_path = parts[1]
- else:
- link_text = text
- url_path = text
-
- url = f"https://github.com/meta-llama/llama-stack/tree/main/{url_path}"
- node = nodes.reference(rawtext, link_text, refuri=url, **options)
- return [node], []
-
- app.add_role("dockerhub", dockerhub_role)
- app.add_role("repopath", repopath_role)
diff --git a/docs/_static/llama-stack-logo.png b/docs/static/llama-stack-logo.png
similarity index 100%
rename from docs/_static/llama-stack-logo.png
rename to docs/static/llama-stack-logo.png
diff --git a/docs/_static/llama-stack.png b/docs/static/llama-stack.png
similarity index 100%
rename from docs/_static/llama-stack.png
rename to docs/static/llama-stack.png
diff --git a/docs/_static/providers/vector_io/read_time_comparison_sqlite-vec-faiss.png b/docs/static/providers/vector_io/read_time_comparison_sqlite-vec-faiss.png
similarity index 100%
rename from docs/_static/providers/vector_io/read_time_comparison_sqlite-vec-faiss.png
rename to docs/static/providers/vector_io/read_time_comparison_sqlite-vec-faiss.png
diff --git a/docs/_static/providers/vector_io/write_time_comparison_sqlite-vec-faiss.png b/docs/static/providers/vector_io/write_time_comparison_sqlite-vec-faiss.png
similarity index 100%
rename from docs/_static/providers/vector_io/write_time_comparison_sqlite-vec-faiss.png
rename to docs/static/providers/vector_io/write_time_comparison_sqlite-vec-faiss.png
diff --git a/docs/_static/providers/vector_io/write_time_sequence_sqlite-vec-faiss.png b/docs/static/providers/vector_io/write_time_sequence_sqlite-vec-faiss.png
similarity index 100%
rename from docs/_static/providers/vector_io/write_time_sequence_sqlite-vec-faiss.png
rename to docs/static/providers/vector_io/write_time_sequence_sqlite-vec-faiss.png
diff --git a/docs/_static/remote_or_local.gif b/docs/static/remote_or_local.gif
similarity index 100%
rename from docs/_static/remote_or_local.gif
rename to docs/static/remote_or_local.gif
diff --git a/docs/_static/safety_system.webp b/docs/static/safety_system.webp
similarity index 100%
rename from docs/_static/safety_system.webp
rename to docs/static/safety_system.webp
diff --git a/docs/static/src/components/HomepageFeatures/index.js b/docs/static/src/components/HomepageFeatures/index.js
new file mode 100644
index 000000000..78f410ba6
--- /dev/null
+++ b/docs/static/src/components/HomepageFeatures/index.js
@@ -0,0 +1,64 @@
+import React from 'react';
+import clsx from 'clsx';
+import styles from './styles.module.css';
+
+const FeatureList = [
+ {
+ title: 'Easy to Use',
+ Svg: require('@site/static/img/undraw_docusaurus_mountain.svg').default,
+ description: (
+ <>
+ Docusaurus was designed from the ground up to be easily installed and
+ used to get your website up and running quickly.
+ >
+ ),
+ },
+ {
+ title: 'Focus on What Matters',
+ Svg: require('@site/static/img/undraw_docusaurus_tree.svg').default,
+ description: (
+ <>
+ Docusaurus lets you focus on your docs, and we'll do the chores. Go
+ ahead and move your docs into the docs
directory.
+ >
+ ),
+ },
+ {
+ title: 'Powered by React',
+ Svg: require('@site/static/img/undraw_docusaurus_react.svg').default,
+ description: (
+ <>
+ Extend or customize your website layout by reusing React. Docusaurus can
+ be extended while reusing the same header and footer.
+ >
+ ),
+ },
+];
+
+function Feature({Svg, title, description}) {
+ return (
+
{description}
++ Unified APIs for Inference, RAG, Agents, Tools, Safety, and Telemetry +
++ Get up and running with Llama Stack in just a few commands. Build your first RAG application locally. +
+{`# Install uv and start Ollama
+ollama run llama3.2:3b --keepalive 60m
+
+# Run Llama Stack server
+OLLAMA_URL=http://localhost:11434 \\
+ uv run --with llama-stack \\
+ llama stack build --distro starter \\
+ --image-type venv --run
+
+# Try the Python SDK
+from llama_stack_client import LlamaStackClient
+
+client = LlamaStackClient(
+ base_url="http://localhost:8321"
+)
+
+response = client.inference.chat_completion(
+ model="Llama3.2-3B-Instruct",
+ messages=[{
+ "role": "user",
+ "content": "What is machine learning?"
+ }]
+)`}
+ One consistent interface for all your AI needs - inference, safety, agents, and more.
+Swap between providers without code changes. Start local, deploy anywhere.
+Built-in safety, monitoring, and evaluation tools for enterprise applications.
+SDKs for Python, Node.js, iOS, Android, and REST APIs for any language.
++ Connect with developers building the future of AI applications +
+ +