diff --git a/sphinx-generator-wallet/.gitignore b/sphinx-generator-wallet/.gitignore
new file mode 100644
index 0000000000..d4022367b4
--- /dev/null
+++ b/sphinx-generator-wallet/.gitignore
@@ -0,0 +1,49 @@
+# Sphinx build outputs
+build/
+_build/
+
+# Python virtual environments
+sphinx_venv/
+venv/
+env/
+ENV/
+.venv
+
+# Python cache files
+__pycache__/
+*.py[cod]
+*$py.class
+*.so
+.mypy_cache/
+.ruff_cache/
+.pytest_cache/
+
+# Distribution / packaging
+.Python
+*.egg-info/
+dist/
+downloads/
+*.egg
+
+# IDE files
+.vscode/
+.idea/
+*.swp
+*.swo
+*~
+.DS_Store
+
+# Sphinx doctrees (intermediate build files)
+.doctrees/
+
+# Environment variables
+.env
+.env.local
+
+# Log files
+*.log
+
+# Temporary files
+*.tmp
+.cache/
+
diff --git a/sphinx-generator-wallet/Makefile b/sphinx-generator-wallet/Makefile
new file mode 100644
index 0000000000..d0c3cbf102
--- /dev/null
+++ b/sphinx-generator-wallet/Makefile
@@ -0,0 +1,20 @@
+# Minimal makefile for Sphinx documentation
+#
+
+# You can set these variables from the command line, and also
+# from the environment for the first two.
+SPHINXOPTS ?=
+SPHINXBUILD ?= sphinx-build
+SOURCEDIR = source
+BUILDDIR = build
+
+# Put it first so that "make" without argument is like "make help".
+help:
+ @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
+
+.PHONY: help Makefile
+
+# Catch-all target: route all unknown targets to Sphinx using the new
+# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
+%: Makefile
+ @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
diff --git a/sphinx-generator-wallet/make.bat b/sphinx-generator-wallet/make.bat
new file mode 100644
index 0000000000..747ffb7b30
--- /dev/null
+++ b/sphinx-generator-wallet/make.bat
@@ -0,0 +1,35 @@
+@ECHO OFF
+
+pushd %~dp0
+
+REM Command file for Sphinx documentation
+
+if "%SPHINXBUILD%" == "" (
+ set SPHINXBUILD=sphinx-build
+)
+set SOURCEDIR=source
+set BUILDDIR=build
+
+%SPHINXBUILD% >NUL 2>NUL
+if errorlevel 9009 (
+ echo.
+ echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
+ echo.installed, then set the SPHINXBUILD environment variable to point
+ echo.to the full path of the 'sphinx-build' executable. Alternatively you
+ echo.may add the Sphinx directory to PATH.
+ echo.
+ echo.If you don't have Sphinx installed, grab it from
+ echo.https://www.sphinx-doc.org/
+ exit /b 1
+)
+
+if "%1" == "" goto help
+
+%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
+goto end
+
+:help
+%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
+
+:end
+popd
diff --git a/sphinx-generator-wallet/readme.md b/sphinx-generator-wallet/readme.md
new file mode 100644
index 0000000000..9fe99fa7e9
--- /dev/null
+++ b/sphinx-generator-wallet/readme.md
@@ -0,0 +1,98 @@
+# Generating Bittensor Wallet Python SDK Documentation with Sphinx
+
+This folder contains the Sphinx configuration for generating documentation for the `bittensor_wallet` SDK. It imports the installed `bittensor_wallet` package (built via `pip install -e "$BTWALLET_ROOT"`) so docstrings coming from the Rust bindings can be rendered. The `BTWALLET_ROOT` environment variable must be configured to point to your local `btwallet` repository.
+
+## Prerequisites
+
+- Python 3.9+
+- Rust toolchain (needed when building the PyO3 extension during `pip install -e "$BTWALLET_ROOT"`)
+- Access to the [`developer-docs`](https://github.com/opentensor/developer-docs) repo for publishing
+
+## Quick Start
+
+1. **Create/activate the virtualenv**
+
+ ```bash
+ cd sphinx-generator-wallet
+ python3 -m venv sphinx_venv
+ source sphinx_venv/bin/activate
+ ```
+
+2. **Install Sphinx dependencies**
+
+ ```bash
+ pip install -r requirements.txt
+ ```
+
+3. **Configure Paths**
+
+ Set the `BTWALLET_ROOT` environment variable to point to your local `btwallet` repository:
+
+ ```bash
+ export BTWALLET_ROOT=/path/to/btwallet
+ ```
+
+ **Important:** Replace `/path/to/btwallet` with the actual path to your `btwallet` repository on your system.
+
+4. **Install the wallet package into the env**
+
+ Install the `bittensor_wallet` package from the configured path:
+
+ ```bash
+ pip install -e "$BTWALLET_ROOT"
+ ```
+
+ This will build the PyO3 extension from the Rust sources and install it in editable mode.
+
+5. **Build docs**
+
+ ```bash
+ make html
+ ```
+
+6. **Open locally**
+ ```bash
+ open build/html/index.html
+ ```
+
+## Publishing Workflow
+
+1. (Optional) remove previous build `rm -rf build/html/`
+
+2. Copy output into `developer-docs`. The generated docs must be copied to the `static/btwallet-api/html` folder within your `develoer docs` directory e.g.
+
+ ```bash
+ rm -rf /path/to/developer-docs/static/btwallet-api/html
+ cp -r build/html /path/to/developer-docs/static/btwallet-api/html
+ ```
+
+3. Commit/push from the developer-docs repo.
+ ```bash
+ git add static/wallet-api/html
+ git commit -m "Update Wallet SDK API docs"
+ git push
+ ```
+
+Link to the published docs using `[Wallet SDK API Reference](pathname:///wallet-api/html/index.html)`.
+
+## Troubleshooting
+
+- **`ModuleNotFoundError: bittensor_wallet`** – ensure step 4 (package installation) succeeded and the venv is activated when running `make html`. Verify that `BTWALLET_ROOT` is set correctly.
+
+- **`BTWALLET_ROOT path does not exist`** – ensure the `BTWALLET_ROOT` environment variable points to a valid `btwallet` repository directory that contains `src/wallet.rs`.
+
+- **`pip install -e` fails with "pyproject.toml not found"** – verify that `BTWALLET_ROOT` is set to the root of the `btwallet` repository (where `pyproject.toml` is located), not a subdirectory.
+
+- **Rust build failures** – verify the Rust toolchain is installed and PyO3 prerequisites are met. You may need to install `maturin` first: `pip install maturin`.
+
+- **Missing docstrings** – confirm `pip install -e "$BTWALLET_ROOT"` ran after any Rust edits; the doc fallback only applies when the package is installed in the venv. Also verify `BTWALLET_ROOT` is set correctly.
+
+- **Start fresh** – `rm -rf build && make html`.
+
+- **Virtual environment symlink errors** – If you see "Unable to symlink" errors when creating the venv, this is often a Homebrew Python issue on macOS. Solutions:
+ - Use `python3 -m venv --copies sphinx_venv` to copy files instead of symlinking
+ - Ensure you have write permissions: `chmod -R u+w sphinx_venv` (if venv already exists)
+ - Try removing the existing venv and recreating: `rm -rf sphinx_venv && python3 -m venv --copies sphinx_venv`
+ - If using Homebrew Python, ensure it's properly linked: `brew link python@3.14` (or your Python version)
+
+For everything else, refer to the original `sphinx-generator/readme.md` guidance or contact the docs team.
diff --git a/sphinx-generator-wallet/requirements.txt b/sphinx-generator-wallet/requirements.txt
new file mode 100644
index 0000000000..ebe0321673
--- /dev/null
+++ b/sphinx-generator-wallet/requirements.txt
@@ -0,0 +1,9 @@
+# Main Sphinx documentation generator
+sphinx>=7.1.0
+
+# Theme that we use for Python reference
+sphinx-book-theme>=1.0.1
+
+# Required extensions
+sphinx-autoapi>=3.0.0 # For autoapi.extension
+myst-parser>=2.0.0 # For MyST Markdown support
diff --git a/sphinx-generator-wallet/source/_static/bittensor-custom.css b/sphinx-generator-wallet/source/_static/bittensor-custom.css
new file mode 100644
index 0000000000..71e3492e85
--- /dev/null
+++ b/sphinx-generator-wallet/source/_static/bittensor-custom.css
@@ -0,0 +1,157 @@
+/* CSS customized by Raj Karamchedu on 29 January 2024 */
+
+@font-face {
+ font-family: "Haffer";
+ src: url(./fonts/Haffer-Light.ttf);
+ font-weight: 200;
+ font-style: normal;
+}
+
+@font-face {
+ font-family: "Haffer";
+ src: url(./fonts/Haffer-Medium.ttf);
+ font-weight: 400;
+ font-style: normal;
+}
+
+@font-face {
+ font-family: "Haffer";
+ src: url(./fonts/Haffer-Regular.ttf);
+ font-weight: normal;
+ font-style: normal;
+}
+
+@font-face {
+ font-family: "Haffer";
+ src: url(./fonts/Haffer-SemiBold.ttf);
+ font-weight: bold;
+ font-style: normal;
+}
+
+@font-face {
+ font-family: "HafferSQ";
+ src: url(./fonts/HafferSQ-Light.ttf);
+ font-weight: 200;
+ font-style: normal;
+}
+
+@font-face {
+ font-family: "HafferSQ";
+ src: url(./fonts/HafferSQ-Medium.ttf);
+ font-weight: 400;
+ font-style: normal;
+}
+
+@font-face {
+ font-family: "HafferSQ";
+ src: url(./fonts/HafferSQ-Regular.ttf);
+ font-weight: normal;
+ font-style: normal;
+}
+
+@font-face {
+ font-family: "HafferSQ";
+ src: url(./fonts/HafferSQ-SemiBold.ttf);
+ font-weight: bold;
+ font-style: normal;
+}
+
+@font-face {
+ font-family: "TTCommonsPro";
+ src: url(./fonts/TTCommonsProMonoMedium.ttf);
+ font-weight: 200;
+ font-style: normal;
+}
+
+@font-face {
+ font-family: "TTCommonsPro";
+ src: url(./fonts/TTCommonsProMonoRegular.ttf);
+ font-weight: 100;
+ font-style: normal;
+}
+
+@font-face {
+ font-family: "FiraCode";
+ src: url(./fonts/FiraCode_VariableFont_wght.ttf);
+}
+
+
+
+html {
+ --pst-font-family-base-system: 'Haffer', -apple-system, BlinkMacSystemFont, Segoe UI, "Helvetica Neue", Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol;
+ --pst-font-family-monospace-system: "TTCommonsPro", Menlo, Consolas, Monaco,
+ Liberation Mono, Lucida Console, monospace;
+ --pst-sidebar-font-size: 1.0rem;
+ --pst-font-family-base: var(--pst-font-family-base-system);
+ --pst-font-family-heading: var(--pst-font-family-base-system);
+ --pst-font-family-monospace: var(--pst-font-family-monospace-system);
+ --pst-color-inline-code-links: #0c0c0c;
+
+}
+
+html[data-theme=dark]{
+ --pst-color-surface: none;
+ --pst-color-inline-code-links: #fff;
+ --pst-color-target: #545454;
+ --pst-color-inline-code: #1fd01f;
+ --pst-color-table-row-hover-bg: #003200;
+}
+
+
+html[data-theme=light]{
+ --pst-color-surface: none;
+ --pst-color-inline-code-links: #000;
+ --pst-color-target: #eaebed;
+ --pst-color-inline-code: #0fa50f;
+ --pst-color-table-row-hover-bg: #ffffc0;
+}
+
+html[data-theme=dark], html[data-theme=light] {
+ --pst-color-primary: #838793;
+}
+
+p {
+ font-size: 16px !important;
+}
+
+code.xref, a code {
+ font-weight: normal;
+}
+
+code.literal {
+ background-color: none;
+ border: none;
+}
+
+.dropdown, .dropdown-center, .dropend, .dropstart, .dropup, .dropup-center {
+ position: relative;
+ display: none;
+}
+
+/* .search-button {
+ display: none;
+} */
+
+.btn-fullscreen-button {
+ display: none;
+}
+
+.bd-sidebar-secondary .onthispage {
+ display: none;
+}
+
+@media (min-width: 992px){
+.bd-sidebar-primary {
+ flex-basis: 25%;
+}
+}
+
+.bd-sidebar-secondary{
+ max-height: calc(100vh - var(--pst-header-height));
+}
+
+@media (min-width: 960px){
+.bd-page-width {
+ max-width: 98rem;
+}
+}
\ No newline at end of file
diff --git a/sphinx-generator-wallet/source/_static/custom-css-for-sphinx-book-theme.css b/sphinx-generator-wallet/source/_static/custom-css-for-sphinx-book-theme.css
new file mode 100644
index 0000000000..143a284db8
--- /dev/null
+++ b/sphinx-generator-wallet/source/_static/custom-css-for-sphinx-book-theme.css
@@ -0,0 +1,174 @@
+@import url('https://fonts.googleapis.com/css2?family=Open+Sans:wght@400;600;700&family=Poppins:wght@400;500;600&family=JetBrains+Mono&display=swap');
+
+body {
+ color: #221f1f;
+ font-family: 'Open Sans', sans-serif;
+}
+
+h1 {
+ font-size: 2.2em;
+}
+
+h2 {
+ font-size: 1.5em;
+}
+
+h3 {
+ font-size: 1.2em;
+}
+
+h4 {
+ font-size: 1.0em;
+}
+
+.nav {
+ font-family: 'Poppins', sans-serif;
+}
+
+.header-style, h1, h2, h3, h4, h5, h6 {
+ font-family: 'Poppins', sans-serif;
+ font-weight: 500;
+}
+
+.bd-toc .tocsection {
+ padding: 4.0rem 0 .5rem 1rem !important; /* Right-side bar top padding to align with the main content title. */
+}
+
+
+#main-content {
+ margin-top: 1rem !important; /* Main content pushed down to align with the site title below logo on the left-side bar. If you change this you must change the .bd-toc .tocsection padding from 7.8rem. */
+}
+
+
+.admonition.note .admonition-title {
+ background-color: #fff0ec;
+ letter-spacing: 0.045rem;
+}
+
+.admonition .admonition-title {
+ font-family: 'Poppins', sans-serif;
+}
+
+
+nav.bd-links li.toctree-l1 {
+ line-height: 1.45;
+}
+
+.card {
+ box-shadow: 0 .5rem 1rem rgba(0,0,0,.15)!important;
+ transition: all 0.3s ease-in-out!important;
+}
+
+@media (min-width: 576px) {
+ .card-deck .card {
+ margin-bottom: 15px;
+ transition: all 0.3s ease-in-out!important;
+ }
+}
+
+@media (min-width: 1200px) {
+ .container, .container-lg, .container-md, .container sm, .container-xl {
+ max-width: 1400px;
+ }
+}
+
+nav.bd-links p.caption {
+ letter-spacing: 0.1em;
+ font-family: 'Poppins', sans-serif;
+}
+
+.caption-text {
+ letter-spacing: 0.1em;
+ font-family: 'Poppins', sans-serif;
+ font-size: 0.9em;
+ text-transform: uppercase;
+ font-weight: bold;
+ position: relative;
+ margin-top: 1.25em;
+ margin-bottom: 0;
+}
+
+toc-h1, .toc-h2, .toc-h3, .toc-h4 {
+ line-height: 1.45;
+ margin-bottom: 0.5em;
+}
+
+@media only screen and (min-width: 768px) {
+ #navbar-toggler {
+ display: none;
+ }
+}
+
+div.navbar_extra_footer {
+ display: none;
+}
+
+div.dropdown-buttons-trigger {
+ display: none;
+}
+
+a.full-screen-button {
+ display: none;
+}
+
+pre {
+ line-height: 150%;
+ background-color: #f1f3f4; /* #ffc1070d; */
+ padding: 22px;
+ color: #37474f;
+ font-size: 95%;
+ border: none;
+ box-shadow: none;
+ /* font-family: 'JetBrains Mono', sans-serif; Avoid this here or else glyphs in code snippets. */
+}
+
+.header-style, h1, h2, h3, h4, h5, h6 {
+ line-height: 1.35;
+}
+
+nav.bd-links li.toctree-l1, nav.bd-links li.toctree-l2, nav.bd-links li.toctree-l3, nav.bd-links li.toctree-l4, nav.bd-links li.toctree-l5 {
+ margin-bottom: 0.35em;
+}
+
+.bd-sidebar nav ul.nav a:hover, .bd-sidebar nav ul.nav li.active>a, .bd-sidebar nav ul.nav li.active>a:hover {
+ color: #221f1f;
+}
+.bd-sidebar-secondary .onthispage {
+ height: 3rem;
+ min-height: 3rem;
+ display: none;
+}
+
+.prev-next-bottom {
+ height: 3em;
+ font-family: 'Poppins', sans-serif;
+ font-weight: 500;
+}
+
+blockquote {
+ margin: 1rem 0 1rem;
+ border-left: 0px solid #ccc;
+ padding: .1em .1em;
+}
+
+main.bd-content #main-content div.section ul p, main.bd-content #main-content div.section ol p {
+ margin-bottom: .5rem;
+}
+
+table td, .table th {
+ padding: .75rem;
+ vertical-align: top;
+ border-top: 1px solid #dee2e6;
+ border-bottom: 1px solid #dee2e6;
+ border-right: 1px solid #dee2e6;
+ border-left: 1px solid #dee2e6;
+}
+
+.footer {
+ font-size: .8em;
+}
+
+.bd-header-article .article-header-buttons {
+ /* display: flex; */
+ display: none;
+}
diff --git a/sphinx-generator-wallet/source/_static/fonts/FiraCode_VariableFont_wght.ttf b/sphinx-generator-wallet/source/_static/fonts/FiraCode_VariableFont_wght.ttf
new file mode 100644
index 0000000000..0013e0ad05
Binary files /dev/null and b/sphinx-generator-wallet/source/_static/fonts/FiraCode_VariableFont_wght.ttf differ
diff --git a/sphinx-generator-wallet/source/_static/fonts/Haffer-Light.ttf b/sphinx-generator-wallet/source/_static/fonts/Haffer-Light.ttf
new file mode 100644
index 0000000000..4823831012
Binary files /dev/null and b/sphinx-generator-wallet/source/_static/fonts/Haffer-Light.ttf differ
diff --git a/sphinx-generator-wallet/source/_static/fonts/Haffer-Medium.ttf b/sphinx-generator-wallet/source/_static/fonts/Haffer-Medium.ttf
new file mode 100644
index 0000000000..1977e1df34
Binary files /dev/null and b/sphinx-generator-wallet/source/_static/fonts/Haffer-Medium.ttf differ
diff --git a/sphinx-generator-wallet/source/_static/fonts/Haffer-Regular.ttf b/sphinx-generator-wallet/source/_static/fonts/Haffer-Regular.ttf
new file mode 100644
index 0000000000..fb2b457ab1
Binary files /dev/null and b/sphinx-generator-wallet/source/_static/fonts/Haffer-Regular.ttf differ
diff --git a/sphinx-generator-wallet/source/_static/fonts/Haffer-SemiBold.ttf b/sphinx-generator-wallet/source/_static/fonts/Haffer-SemiBold.ttf
new file mode 100644
index 0000000000..ef01086009
Binary files /dev/null and b/sphinx-generator-wallet/source/_static/fonts/Haffer-SemiBold.ttf differ
diff --git a/sphinx-generator-wallet/source/_static/fonts/HafferSQ-Light.ttf b/sphinx-generator-wallet/source/_static/fonts/HafferSQ-Light.ttf
new file mode 100644
index 0000000000..1abd355828
Binary files /dev/null and b/sphinx-generator-wallet/source/_static/fonts/HafferSQ-Light.ttf differ
diff --git a/sphinx-generator-wallet/source/_static/fonts/HafferSQ-Medium.ttf b/sphinx-generator-wallet/source/_static/fonts/HafferSQ-Medium.ttf
new file mode 100644
index 0000000000..a27000db2c
Binary files /dev/null and b/sphinx-generator-wallet/source/_static/fonts/HafferSQ-Medium.ttf differ
diff --git a/sphinx-generator-wallet/source/_static/fonts/HafferSQ-Regular.ttf b/sphinx-generator-wallet/source/_static/fonts/HafferSQ-Regular.ttf
new file mode 100644
index 0000000000..df3a2190d5
Binary files /dev/null and b/sphinx-generator-wallet/source/_static/fonts/HafferSQ-Regular.ttf differ
diff --git a/sphinx-generator-wallet/source/_static/fonts/HafferSQ-SemiBold.ttf b/sphinx-generator-wallet/source/_static/fonts/HafferSQ-SemiBold.ttf
new file mode 100644
index 0000000000..f2d0584595
Binary files /dev/null and b/sphinx-generator-wallet/source/_static/fonts/HafferSQ-SemiBold.ttf differ
diff --git a/sphinx-generator-wallet/source/_static/fonts/TTCommonsProMonoMedium.ttf b/sphinx-generator-wallet/source/_static/fonts/TTCommonsProMonoMedium.ttf
new file mode 100644
index 0000000000..987ee9fded
Binary files /dev/null and b/sphinx-generator-wallet/source/_static/fonts/TTCommonsProMonoMedium.ttf differ
diff --git a/sphinx-generator-wallet/source/_static/fonts/TTCommonsProMonoRegular.ttf b/sphinx-generator-wallet/source/_static/fonts/TTCommonsProMonoRegular.ttf
new file mode 100644
index 0000000000..c2bf574c06
Binary files /dev/null and b/sphinx-generator-wallet/source/_static/fonts/TTCommonsProMonoRegular.ttf differ
diff --git a/sphinx-generator-wallet/source/_static/logo-dark-mode.svg b/sphinx-generator-wallet/source/_static/logo-dark-mode.svg
new file mode 100644
index 0000000000..a56a46c7c0
--- /dev/null
+++ b/sphinx-generator-wallet/source/_static/logo-dark-mode.svg
@@ -0,0 +1 @@
+
diff --git a/sphinx-generator-wallet/source/_static/logo.svg b/sphinx-generator-wallet/source/_static/logo.svg
new file mode 100644
index 0000000000..337ffe2d33
--- /dev/null
+++ b/sphinx-generator-wallet/source/_static/logo.svg
@@ -0,0 +1 @@
+
diff --git a/sphinx-generator-wallet/source/autoapi/bittensor_wallet/config/index.rst b/sphinx-generator-wallet/source/autoapi/bittensor_wallet/config/index.rst
new file mode 100644
index 0000000000..c4f794749a
--- /dev/null
+++ b/sphinx-generator-wallet/source/autoapi/bittensor_wallet/config/index.rst
@@ -0,0 +1,19 @@
+bittensor\_wallet.config
+========================
+
+.. automodule:: bittensor_wallet.config
+
+
+ .. autosummary::
+
+ ~bittensor_wallet.config.Config
+
+ Module Contents
+ ---------------
+
+ .. rubric:: Classes Details
+
+ .. autoclass:: bittensor_wallet.config.Config
+ :show-inheritance:
+ :special-members: __init__
+
diff --git a/sphinx-generator-wallet/source/autoapi/bittensor_wallet/errors/index.rst b/sphinx-generator-wallet/source/autoapi/bittensor_wallet/errors/index.rst
new file mode 100644
index 0000000000..32a91f1ca0
--- /dev/null
+++ b/sphinx-generator-wallet/source/autoapi/bittensor_wallet/errors/index.rst
@@ -0,0 +1,23 @@
+bittensor\_wallet.errors
+========================
+
+.. automodule:: bittensor_wallet.errors
+
+
+ .. autosummary::
+
+ ~bittensor_wallet.errors.ConfigurationError
+ ~bittensor_wallet.errors.KeyFileError
+ ~bittensor_wallet.errors.PasswordError
+ ~bittensor_wallet.errors.WalletError
+
+ Module Contents
+ ---------------
+
+ .. rubric:: Exceptions Details
+
+ .. automodule:: bittensor_wallet.errors
+ :members:
+ :undoc-members:
+ :imported-members:
+
diff --git a/sphinx-generator-wallet/source/autoapi/bittensor_wallet/index.rst b/sphinx-generator-wallet/source/autoapi/bittensor_wallet/index.rst
new file mode 100644
index 0000000000..2e3a02ab83
--- /dev/null
+++ b/sphinx-generator-wallet/source/autoapi/bittensor_wallet/index.rst
@@ -0,0 +1,18 @@
+bittensor\_wallet
+=================
+
+.. automodule:: bittensor_wallet
+
+Submodules
+----------
+
+.. toctree::
+ :maxdepth: 1
+
+ wallet/index
+ keyfile/index
+ keypair/index
+ config/index
+ errors/index
+ utils/index
+
diff --git a/sphinx-generator-wallet/source/autoapi/bittensor_wallet/keyfile/index.rst b/sphinx-generator-wallet/source/autoapi/bittensor_wallet/keyfile/index.rst
new file mode 100644
index 0000000000..ce795113e6
--- /dev/null
+++ b/sphinx-generator-wallet/source/autoapi/bittensor_wallet/keyfile/index.rst
@@ -0,0 +1,58 @@
+bittensor\_wallet.keyfile
+=========================
+
+.. automodule:: bittensor_wallet.keyfile
+
+
+ .. autosummary::
+
+ ~bittensor_wallet.keyfile.ask_password
+ ~bittensor_wallet.keyfile.decrypt_keyfile_data
+ ~bittensor_wallet.keyfile.deserialize_keypair_from_keyfile_data
+ ~bittensor_wallet.keyfile.encrypt_keyfile_data
+ ~bittensor_wallet.keyfile.get_coldkey_password_from_environment
+ ~bittensor_wallet.keyfile.get_password_from_environment
+ ~bittensor_wallet.keyfile.keyfile_data_encryption_method
+ ~bittensor_wallet.keyfile.keyfile_data_is_encrypted
+ ~bittensor_wallet.keyfile.keyfile_data_is_encrypted_ansible
+ ~bittensor_wallet.keyfile.keyfile_data_is_encrypted_legacy
+ ~bittensor_wallet.keyfile.keyfile_data_is_encrypted_nacl
+ ~bittensor_wallet.keyfile.legacy_encrypt_keyfile_data
+ ~bittensor_wallet.keyfile.serialized_keypair_to_keyfile_data
+ ~bittensor_wallet.keyfile.validate_password
+ ~bittensor_wallet.keyfile.Keyfile
+
+ Module Contents
+ ---------------
+
+ .. rubric:: Functions Details
+
+ .. automodule:: bittensor_wallet.keyfile
+ :members:
+ :undoc-members:
+ :imported-members:
+ :exclude-members: ask_password_to_encrypt
+ :show-inheritance:
+
+ .. rubric:: Classes Details
+
+ .. autoclass:: bittensor_wallet.keyfile.Keyfile
+ :show-inheritance:
+ :special-members: __init__
+
+ .. automethod:: check_and_update_encryption
+ .. automethod:: decrypt
+ .. automethod:: encrypt
+ .. automethod:: env_var_name
+ .. automethod:: exists_on_device
+ .. automethod:: get_keypair
+ .. automethod:: is_encrypted
+ .. automethod:: is_readable
+ .. automethod:: is_writable
+ .. automethod:: make_dirs
+ .. automethod:: set_keypair
+ .. autoattribute:: data
+ .. autoattribute:: keyfile_data
+ .. autoattribute:: get_name
+ .. autoattribute:: get_path
+
diff --git a/sphinx-generator-wallet/source/autoapi/bittensor_wallet/keypair/index.rst b/sphinx-generator-wallet/source/autoapi/bittensor_wallet/keypair/index.rst
new file mode 100644
index 0000000000..7d0c28bfa5
--- /dev/null
+++ b/sphinx-generator-wallet/source/autoapi/bittensor_wallet/keypair/index.rst
@@ -0,0 +1,21 @@
+bittensor\_wallet.keypair
+=========================
+
+.. automodule:: bittensor_wallet.keypair
+
+
+ .. autosummary::
+
+ ~bittensor_wallet.keypair.Keypair
+
+ Module Contents
+ ---------------
+
+ .. rubric:: Classes Details
+
+ .. autoclass:: bittensor_wallet.keypair.Keypair
+ :members:
+ :undoc-members:
+ :show-inheritance:
+ :special-members: __init__
+
diff --git a/sphinx-generator-wallet/source/autoapi/bittensor_wallet/utils/index.rst b/sphinx-generator-wallet/source/autoapi/bittensor_wallet/utils/index.rst
new file mode 100644
index 0000000000..5a16e57841
--- /dev/null
+++ b/sphinx-generator-wallet/source/autoapi/bittensor_wallet/utils/index.rst
@@ -0,0 +1,23 @@
+bittensor\_wallet.utils
+=======================
+
+.. automodule:: bittensor_wallet.utils
+
+
+ .. autosummary::
+
+ ~bittensor_wallet.utils.get_ss58_format
+ ~bittensor_wallet.utils.is_valid_bittensor_address_or_public_key
+ ~bittensor_wallet.utils.is_valid_ed25519_pubkey
+ ~bittensor_wallet.utils.is_valid_ss58_address
+
+ Module Contents
+ ---------------
+
+ .. rubric:: Functions Details
+
+ .. automodule:: bittensor_wallet.utils
+ :members:
+ :undoc-members:
+ :imported-members:
+
diff --git a/sphinx-generator-wallet/source/autoapi/bittensor_wallet/wallet/index.rst b/sphinx-generator-wallet/source/autoapi/bittensor_wallet/wallet/index.rst
new file mode 100644
index 0000000000..d330cda5c9
--- /dev/null
+++ b/sphinx-generator-wallet/source/autoapi/bittensor_wallet/wallet/index.rst
@@ -0,0 +1,30 @@
+bittensor\_wallet.wallet
+========================
+
+.. automodule:: bittensor_wallet.wallet
+
+
+ .. autosummary::
+
+ ~bittensor_wallet.wallet.display_mnemonic_msg
+ ~bittensor_wallet.wallet.Wallet
+
+ Module Contents
+ ---------------
+
+ .. rubric:: Functions Details
+
+ .. automodule:: bittensor_wallet.wallet
+ :members:
+ :undoc-members:
+ :imported-members:
+ :exclude-members: Wallet
+
+ .. rubric:: Classes Details
+
+ .. autoclass:: bittensor_wallet.wallet.Wallet
+ :members:
+ :undoc-members:
+ :show-inheritance:
+ :special-members: __init__
+
diff --git a/sphinx-generator-wallet/source/conf.py b/sphinx-generator-wallet/source/conf.py
new file mode 100644
index 0000000000..4d23a44fa2
--- /dev/null
+++ b/sphinx-generator-wallet/source/conf.py
@@ -0,0 +1,137 @@
+# 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
+
+# project = 'BTCLI Docs'
+project = "Bittensor Wallet SDK Docs"
+copyright = "2025, Opentensor Foundation"
+author = "Opentensor Foundation"
+# release = '1.0'
+
+# -- General configuration ---------------------------------------------------
+# https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration
+
+
+import os
+import site
+import sys
+
+# Add current directory and parent directories to path for local imports
+sys.path.insert(0, os.path.abspath("."))
+sys.path.insert(0, os.path.abspath(".."))
+
+# Add site-packages to path (where bittensor_wallet will be installed)
+for site_path in site.getsitepackages():
+ if site_path not in sys.path:
+ sys.path.append(site_path)
+
+html_theme = "sphinx_book_theme"
+html_theme_options = {
+ "show_navbar_depth": 4,
+ "logo": {
+ "image_light": "_static/logo.svg",
+ "image_dark": "_static/logo-dark-mode.svg",
+ },
+ "repository_url": "https://github.com/opentensor/btwallet",
+ "use_source_button": True,
+ "use_repository_button": True,
+ "use_issues_button": True,
+}
+extensions = [
+ "sphinx.ext.autodoc",
+ "sphinx.ext.autosummary",
+ "sphinx.ext.napoleon",
+ "sphinx.ext.viewcode",
+ "myst_parser",
+ "sphinx.ext.intersphinx",
+]
+
+myst_enable_extensions = ["dollarmath", "amsmath"]
+
+# Napoleon settings
+napoleon_google_docstring = True
+napoleon_numpy_docstring = False
+napoleon_include_init_with_doc = True
+napoleon_include_private_with_doc = True
+napoleon_include_special_with_doc = True
+napoleon_use_admonition_for_examples = True
+napoleon_use_admonition_for_notes = True
+napoleon_use_admonition_for_references = True
+napoleon_use_ivar = True
+
+intersphinx_mapping = {
+ "python": ("https://docs.python.org/3", None),
+ "numpy": ("https://numpy.org/doc/stable/", None),
+ "torch": ("https://pytorch.org/docs/stable/", None),
+ "pydantic": ("https://docs.pydantic.dev/latest/", None),
+}
+
+autosummary_generate = True
+autosummary_imported_members = True # Include imported members to get class methods
+autosummary_ignore_module_all = False
+# Mock the mock module so autosummary can handle it without importing
+autodoc_mock_imports = ["bittensor_wallet.mock", "Crypto"]
+autodoc_typehints = "description"
+autodoc_default_options = {
+ "members": True,
+ "undoc-members": True,
+ "show-inheritance": True,
+ "special-members": "__init__",
+ "no-index": True,
+}
+templates_path = []
+# Exclude mock module from being documented
+exclude_patterns = ["generated/bittensor_wallet.mock.rst"]
+
+# Make Sphinx more tolerant of formatting issues
+suppress_warnings = [
+ "autosectionlabel.*",
+ "autosummary.*mock", # Suppress warnings about mock module (test-only, not needed for docs)
+ "autosummary:failed to import mock", # Suppress specific mock import warnings
+]
+nitpicky = False
+
+# -- Options for HTML output -------------------------------------------------
+# https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output
+
+html_static_path = ["_static"]
+html_css_files = ["bittensor-custom.css"]
+
+from docstring_utils import format_docstring, load_rust_docstrings, needs_reformatting
+
+DOC_OVERRIDES = load_rust_docstrings()
+
+
+def _short_name(fullname: str) -> str:
+ return fullname.split(".")[-1]
+
+
+def handle_autodoc(app, what, name, obj, options, lines):
+ existing = "\n".join(lines).strip()
+ source_text = existing
+ key = _short_name(name)
+
+ # Try to get docstring from overrides if missing or needs reformatting
+ if not source_text:
+ source_text = DOC_OVERRIDES.get(key, "")
+ elif needs_reformatting(source_text):
+ # If existing docstring needs reformatting, use it
+ pass
+ else:
+ # If docstring exists and doesn't need reformatting, return early
+ return
+
+ if not source_text:
+ return
+
+ formatted = format_docstring(source_text)
+ if formatted:
+ lines[:] = formatted
+
+
+def setup(app):
+ app.connect("autodoc-process-docstring", handle_autodoc)
diff --git a/sphinx-generator-wallet/source/docstring_utils.py b/sphinx-generator-wallet/source/docstring_utils.py
new file mode 100644
index 0000000000..03cde1ac47
--- /dev/null
+++ b/sphinx-generator-wallet/source/docstring_utils.py
@@ -0,0 +1,225 @@
+"""Docstring helpers for wallet SDK documentation."""
+from __future__ import annotations
+
+from pathlib import Path
+import re
+from typing import Dict, List
+
+# Get the btwallet repo root from environment variable or default to relative path
+import os
+_BTWALLET_ROOT = os.environ.get("BTWALLET_ROOT")
+if _BTWALLET_ROOT:
+ _REPO_ROOT = Path(_BTWALLET_ROOT).resolve()
+ if not _REPO_ROOT.exists():
+ raise RuntimeError(f"BTWALLET_ROOT path does not exist: {_BTWALLET_ROOT}")
+else:
+ # Default: assume sphinx-generator-wallet-enhanced is inside btwallet repo
+ _REPO_ROOT = Path(__file__).resolve().parents[2]
+
+# Verify the repo root exists and has src/wallet.rs
+_wallet_rs = _REPO_ROOT / "src" / "wallet.rs"
+if not _wallet_rs.exists():
+ raise RuntimeError(
+ f"Could not find btwallet repo root at {_REPO_ROOT}.\n"
+ f"Expected to find: {_wallet_rs}\n"
+ f"Set BTWALLET_ROOT environment variable to the path of the btwallet repo.\n"
+ f"Example: export BTWALLET_ROOT=/path/to/btwallet"
+ )
+
+RUST_SOURCES = [
+ _REPO_ROOT / "src" / "wallet.rs",
+ _REPO_ROOT / "src" / "keyfile.rs",
+ _REPO_ROOT / "src" / "keypair.rs",
+ _REPO_ROOT / "src" / "config.rs",
+ _REPO_ROOT / "src" / "utils.rs",
+]
+
+DOCBLOCK_RE = re.compile(
+ r"(?P(?:^\s*///.*\n)+)(?:^\s*(?:#\[[^\n]+\]|//).*\n)*\s*pub\s+(?:fn|struct)\s+(?P[a-zA-Z0-9_]+)",
+ re.MULTILINE,
+)
+
+PARAM_RE = re.compile(
+ r"^`?(?P[a-zA-Z0-9_\.]+)`?\s*(?:\((?P[^)]+)\))?\s*[:\-]\s*(?P.+)$"
+)
+
+IGNORED_HEADERS = {
+ "arguments:", "args:", "# arguments", "# args", "# arguments:", "# args:",
+ "returns:", "# returns", "# returns:", "# returns",
+ "arguments", "args", "returns",
+ "raises:", "raised:", "# raises", "# raised", "# raises:", "# raised:",
+ "raises", "raised"
+}
+
+
+def load_rust_docstrings() -> Dict[str, str]:
+ docs: Dict[str, str] = {}
+ for path in RUST_SOURCES:
+ if not path.exists():
+ continue
+ text = path.read_text()
+ for match in DOCBLOCK_RE.finditer(text):
+ raw_lines = match.group("block").splitlines()
+ cleaned = []
+ for line in raw_lines:
+ if "///" in line:
+ cleaned.append(line.split("///", 1)[1].lstrip())
+ doc = "\n".join(cleaned).strip()
+ if doc:
+ docs.setdefault(match.group("name"), doc)
+ return docs
+
+
+def needs_reformatting(text: str) -> bool:
+ lowered = text.lower()
+ return any(header in lowered for header in IGNORED_HEADERS)
+
+
+def _parse_param_line(line: str) -> List[str]:
+ stripped = line.strip().lstrip("*- ")
+
+ # Handle markdown-style: `* `param_name` - description`
+ if stripped.startswith("`") and "`" in stripped[1:]:
+ # Format: `* `param_name` - description`
+ parts = stripped.split("`", 2)
+ if len(parts) >= 3:
+ name = parts[1].strip()
+ desc = parts[2].lstrip("- ").strip()
+ return [f":param {name}: {desc}"]
+
+ # Handle format: `* keyfile_data (): The bytes to decrypt.` or `* param_name (type): description`
+ # Remove leading `*` and whitespace if present
+ if stripped.startswith("*"):
+ stripped = stripped[1:].strip()
+
+ match = PARAM_RE.match(stripped)
+ if not match:
+ # If no match, try to extract name and description manually
+ # Handle cases like "keyfile_data (): The bytes to decrypt."
+ if "(" in stripped and ")" in stripped:
+ paren_match = re.match(r"^([a-zA-Z0-9_\.]+)\s*\([^)]*\)\s*[:\-]?\s*(.+)$", stripped)
+ if paren_match:
+ name = paren_match.group(1)
+ desc = paren_match.group(2).strip()
+ return [f":param {name}: {desc}"]
+ return [stripped] if stripped else []
+ name = match.group("name")
+ desc = match.group("desc").strip()
+ type_hint = (match.group("type") or "").strip()
+ parts = [f":param {name}: {desc}"]
+ if type_hint:
+ parts.append(f":type {name}: {type_hint}")
+ return parts
+
+
+def _parse_raises_line(line: str) -> List[str]:
+ """Parse a raises/exceptions line into Sphinx format."""
+ stripped = line.strip().lstrip("*- ")
+
+ # Handle markdown-style: `* `ExceptionName` - description`
+ if stripped.startswith("`") and "`" in stripped[1:]:
+ parts = stripped.split("`", 2)
+ if len(parts) >= 3:
+ exc_name = parts[1].strip()
+ desc = parts[2].lstrip("- ").strip()
+ return [f":raises {exc_name}: {desc}"]
+
+ # Handle format: `* ExceptionName: description` or `ExceptionName - description`
+ if ":" in stripped or "-" in stripped:
+ # Split on first : or -
+ sep = ":" if ":" in stripped else "-"
+ parts = stripped.split(sep, 1)
+ if len(parts) == 2:
+ exc_name = parts[0].strip()
+ desc = parts[1].strip()
+ # Remove "Raised if" prefix from description if present
+ if desc.lower().startswith("raised if"):
+ desc = desc[9:].strip().capitalize()
+ return [f":raises {exc_name}: {desc}"]
+
+ # Default: treat the whole line as a raises entry
+ return [f":raises: {stripped}"] if stripped else []
+
+
+def format_docstring(text: str) -> List[str]:
+ lines = text.strip().splitlines()
+ result: List[str] = []
+ buffer: List[str] = []
+ state: str | None = None
+
+ def flush():
+ nonlocal buffer, state
+ if not buffer:
+ return
+ if state == "params":
+ if result and result[-1] != "":
+ result.append("")
+ for entry in buffer:
+ result.extend(_parse_param_line(entry))
+ elif state == "returns":
+ # Ensure there's a blank line before returns field
+ if result and result[-1] != "":
+ result.append("")
+ # Clean up returns content - remove markdown bullets and extract description
+ content_parts = []
+ for entry in buffer:
+ cleaned = entry.strip().lstrip("*- ")
+ # If it's in format "decrypted_data (bytes): description", extract just description
+ if "(" in cleaned and ")" in cleaned and ":" in cleaned:
+ match = re.match(r"^[^:]*\([^)]*\)\s*:\s*(.+)$", cleaned)
+ if match:
+ content_parts.append(match.group(1).strip())
+ else:
+ content_parts.append(cleaned)
+ else:
+ content_parts.append(cleaned)
+ content = " ".join(s for s in content_parts if s.strip())
+ if content:
+ result.append(f":returns: {content}")
+ elif state == "raises":
+ # Ensure there's a blank line before raises field
+ if result and result[-1] != "":
+ result.append("")
+ # Parse raises entries similar to params
+ for entry in buffer:
+ result.extend(_parse_raises_line(entry))
+ else:
+ result.extend(buffer)
+ buffer = []
+
+ for line in lines:
+ stripped = line.rstrip()
+ lower = stripped.strip().lower()
+ # Check if this line is a header (with or without # prefix, with or without colon)
+ header_match = False
+ for header in IGNORED_HEADERS:
+ header_clean = header.lstrip("#").strip().rstrip(":")
+ if (lower == header or
+ lower == header_clean or
+ lower == header_clean + ":" or
+ lower.endswith(":") and lower.rstrip(":").strip() == header_clean or
+ (lower.startswith("#") and header_clean in lower)):
+ flush()
+ if result and result[-1] != "":
+ result.append("")
+ # Determine state based on header type
+ if "arguments" in lower or "args" in lower:
+ state = "params"
+ elif "raises" in lower or "raised" in lower:
+ state = "raises"
+ else:
+ state = "returns"
+ header_match = True
+ break
+ if header_match:
+ continue
+ if not stripped.strip():
+ flush()
+ if result and result[-1] != "":
+ result.append("")
+ state = None
+ continue
+ buffer.append(stripped.strip())
+
+ flush()
+ return result
diff --git a/sphinx-generator-wallet/source/images/logo-dark-mode.svg b/sphinx-generator-wallet/source/images/logo-dark-mode.svg
new file mode 100644
index 0000000000..a56a46c7c0
--- /dev/null
+++ b/sphinx-generator-wallet/source/images/logo-dark-mode.svg
@@ -0,0 +1 @@
+
diff --git a/sphinx-generator-wallet/source/images/logo.svg b/sphinx-generator-wallet/source/images/logo.svg
new file mode 100644
index 0000000000..337ffe2d33
--- /dev/null
+++ b/sphinx-generator-wallet/source/images/logo.svg
@@ -0,0 +1 @@
+
diff --git a/sphinx-generator-wallet/source/index.rst b/sphinx-generator-wallet/source/index.rst
new file mode 100644
index 0000000000..7fea67c643
--- /dev/null
+++ b/sphinx-generator-wallet/source/index.rst
@@ -0,0 +1,8 @@
+Bittensor Wallet SDK Documentation
+==================================
+
+.. toctree::
+ :maxdepth: 2
+ :caption: API Reference
+
+ modules
\ No newline at end of file
diff --git a/sphinx-generator-wallet/source/modules.rst b/sphinx-generator-wallet/source/modules.rst
new file mode 100644
index 0000000000..1accd9d3d1
--- /dev/null
+++ b/sphinx-generator-wallet/source/modules.rst
@@ -0,0 +1,7 @@
+Bittensor Wallet Modules
+========================
+
+.. toctree::
+ :maxdepth: 2
+
+ autoapi/bittensor_wallet/index
diff --git a/sphinx-generator/.gitignore b/sphinx-generator/.gitignore
new file mode 100644
index 0000000000..86822144b4
--- /dev/null
+++ b/sphinx-generator/.gitignore
@@ -0,0 +1,52 @@
+# Sphinx build outputs
+build/
+_build/
+
+# AutoAPI generated files
+source/autoapi/
+
+# Python virtual environments
+sphinx_venv/
+venv/
+env/
+ENV/
+.venv
+
+# Python cache files
+__pycache__/
+*.py[cod]
+*$py.class
+*.so
+.mypy_cache/
+.ruff_cache/
+.pytest_cache/
+
+# Distribution / packaging
+.Python
+*.egg-info/
+dist/
+downloads/
+*.egg
+
+# IDE files
+.vscode/
+.idea/
+*.swp
+*.swo
+*~
+.DS_Store
+
+# Sphinx doctrees (intermediate build files)
+.doctrees/
+
+# Environment variables
+.env
+.env.local
+
+# Log files
+*.log
+
+# Temporary files
+*.tmp
+.cache/
+
diff --git a/sphinx-generator/Makefile b/sphinx-generator/Makefile
new file mode 100644
index 0000000000..d0c3cbf102
--- /dev/null
+++ b/sphinx-generator/Makefile
@@ -0,0 +1,20 @@
+# Minimal makefile for Sphinx documentation
+#
+
+# You can set these variables from the command line, and also
+# from the environment for the first two.
+SPHINXOPTS ?=
+SPHINXBUILD ?= sphinx-build
+SOURCEDIR = source
+BUILDDIR = build
+
+# Put it first so that "make" without argument is like "make help".
+help:
+ @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
+
+.PHONY: help Makefile
+
+# Catch-all target: route all unknown targets to Sphinx using the new
+# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
+%: Makefile
+ @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
diff --git a/sphinx-generator/make.bat b/sphinx-generator/make.bat
new file mode 100644
index 0000000000..747ffb7b30
--- /dev/null
+++ b/sphinx-generator/make.bat
@@ -0,0 +1,35 @@
+@ECHO OFF
+
+pushd %~dp0
+
+REM Command file for Sphinx documentation
+
+if "%SPHINXBUILD%" == "" (
+ set SPHINXBUILD=sphinx-build
+)
+set SOURCEDIR=source
+set BUILDDIR=build
+
+%SPHINXBUILD% >NUL 2>NUL
+if errorlevel 9009 (
+ echo.
+ echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
+ echo.installed, then set the SPHINXBUILD environment variable to point
+ echo.to the full path of the 'sphinx-build' executable. Alternatively you
+ echo.may add the Sphinx directory to PATH.
+ echo.
+ echo.If you don't have Sphinx installed, grab it from
+ echo.https://www.sphinx-doc.org/
+ exit /b 1
+)
+
+if "%1" == "" goto help
+
+%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
+goto end
+
+:help
+%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
+
+:end
+popd
diff --git a/sphinx-generator/readme.md b/sphinx-generator/readme.md
new file mode 100644
index 0000000000..8b9a6fb61c
--- /dev/null
+++ b/sphinx-generator/readme.md
@@ -0,0 +1,423 @@
+# Generating Bittensor Python SDK Documentation with Sphinx
+
+This guide explains how to build and publish the Bittensor Python API reference documentation using Sphinx and AutoAPI.
+
+## Prerequisites
+
+- Python 3.9 or higher
+- Access to the Bittensor repository
+- Write access to the [developer-docs repository](https://github.com/opentensor/developer-docs) (for publishing)
+
+## Quick Start
+
+### 1. Set Up Virtual Environment
+
+Run the following command from the root of the developer-docs directory:
+
+```bash
+cd sphinx-generator
+python3 -m venv sphinx_venv
+source sphinx_venv/bin/activate
+```
+
+### 2. Install Dependencies
+
+The `sphinx-generator` directory contains a pre-configured setup. Install required packages:
+
+```bash
+pip install -r requirements.txt
+```
+
+This installs:
+
+- Sphinx (documentation generator)
+- sphinx-autoapi (automatic API documentation from docstrings)
+- sphinx-book-theme (theme with custom CSS)
+- myst-parser (Markdown support)
+
+### 3. Configure Paths
+
+Edit `source/conf.py` and update these paths:
+
+**Line 72** - Point to your Bittensor repository:
+
+```python
+autoapi_dirs = ["/path/to/your/bittensor"]
+```
+
+**Line 28** - Point to your Python site-packages (if needed):
+
+```python
+sys.path.append("/path/to/your/python/site-packages/")
+```
+
+### 4. Build Documentation
+
+```bash
+make html
+```
+
+The generated HTML will be in `build/html/`.
+
+### 5. View Documentation Locally
+
+```bash
+open build/html/index.html
+```
+
+## Configuration Details
+
+### Index Files
+
+The `source/` directory contains different index files for different documentation types:
+
+- `index.rst` - Main index (currently configured for Bittensor SDK)
+- `index.rst.btsdk` - For Bittensor SDK documentation
+- `index.rst.legacy` - For legacy documentation
+
+To switch documentation types, copy the appropriate index file:
+
+```bash
+cp source/index.rst.btwallet source/index.rst
+```
+
+### AutoAPI Configuration
+
+Key settings in `source/conf.py`:
+
+```python
+# Don't keep stale generated files
+autoapi_keep_files = False
+
+# Ignore test files and internal modules
+autoapi_ignore = [
+ "*e2e*",
+ "*setup*",
+ "*test*",
+ "*mock*",
+ "*/site-packages/*",
+ "*post*",
+ "*cli*",
+ "chain_interactions",
+ "*/mock/*",
+ "*/tests/*",
+]
+```
+
+### Custom Styling
+
+Custom CSS is located in `source/_static/bittensor-custom.css` and automatically applied via the Sphinx Book Theme.
+
+## Publishing Documentation
+
+### 1. Clean Build Directory
+
+Before publishing, remove the `_sources` directory (contains reStructuredText source files we don't want to version control):
+
+```bash
+rm -r build/html/_sources
+```
+
+### 2. Push to Developer Docs Repository
+
+The documentation is published at `docs.bittensor.com` through the developer-docs repository:
+
+1. Clone/navigate to the developer-docs repo:
+
+ ```bash
+ cd /path/to/developer-docs
+ ```
+
+2. Replace the entire `static/python-api/html` directory:
+
+ ```bash
+ rm -rf static/python-api/html
+ cp -r /path/to/sphinx-generator/build/html static/python-api/html
+ ```
+
+3. Commit and push:
+ ```bash
+ git add static/python-api/html
+ git commit -m "Update Python API documentation"
+ git push
+ ```
+
+### 3. Linking to Documentation
+
+In Markdown files within developer-docs, link to the Python reference docs using:
+
+```markdown
+[API Reference](pathname:///python-api/html/index.html)
+```
+
+See the `docs/sdk/bt-api-ref.md` file for examples.
+
+## Troubleshooting
+
+### Common Build Errors
+
+#### 1. Unexpected Indentation Errors
+
+**Error:**
+
+```
+ERROR: Unexpected indentation.
+WARNING: Block quote ends without a blank line; unexpected unindent.
+```
+
+**Cause:** Improper formatting in Google-style docstrings, typically:
+
+- Missing blank lines before `Note:`, `Example:`, or `Warning:` sections
+- Inconsistent indentation in example code blocks
+- Text continuing on the next line without proper indentation
+
+**Solution:**
+Ensure proper formatting in docstrings:
+
+```python
+def my_function():
+ """Function description.
+
+ Parameters:
+ param1: Description.
+
+ Returns:
+ Return value description.
+
+ Note:
+ Important note here with proper blank line above.
+
+ Example:
+ # Example code here
+ result = my_function()
+ """
+```
+
+For literal blocks (code examples), use `::` directive:
+
+```python
+ Example::
+ {
+ "key": "value"
+ }
+```
+
+#### 2. KeyError for Missing Symbols
+
+**Error:**
+
+```
+KeyError: 'bittensor.core.extrinsics.asyncex.commit_reveal.commit_reveal_v3_extrinsic'
+```
+
+**Cause:** Stale AutoAPI files referencing functions that no longer exist or have been moved.
+
+**Solution:**
+Clean the AutoAPI directory before rebuilding:
+
+```bash
+rm -rf source/autoapi build
+make html
+```
+
+Set `autoapi_keep_files = False` in `conf.py` to prevent this issue.
+
+#### 3. Definition List Formatting
+
+**Error:**
+
+```
+WARNING: Definition list ends without a blank line; unexpected unindent.
+```
+
+**Cause:** Missing blank line after parameter descriptions or before section headers.
+
+**Solution:**
+Add blank lines between sections:
+
+```python
+ Parameters:
+ param1: Description.
+ param2: Description.
+ Returns:
+ Description of return value.
+```
+
+#### 4. Inline Literal Errors
+
+**Error:**
+
+```
+WARNING: Inline literal start-string without end-string.
+```
+
+**Cause:** Mismatched backticks in docstrings.
+
+**Solution:**
+Check for:
+
+- Unclosed backticks: \`\`text vs \`\`text\`\`
+- Proper escaping of special characters in code
+
+#### 5. Build Warnings About Unknown Types
+
+**Warning:**
+
+```
+WARNING: Unknown type: placeholder
+```
+
+**Cause:** Type hints that Sphinx cannot resolve.
+
+**Solution:**
+This is usually harmless. To suppress, add to `conf.py`:
+
+```python
+suppress_warnings = ["autoapi", "autosectionlabel.*"]
+nitpicky = False
+```
+
+### Docstring Formatting Best Practices
+
+Follow Google-style docstrings with these requirements:
+
+1. **Always add blank lines before section headers:**
+
+ ```python
+ """
+ Description here.
+
+ Parameters:
+ param1: Description.
+
+ Returns:
+ Return description.
+
+ Note:
+ Note content here.
+ """
+ ```
+
+2. **Use proper indentation for multi-line content:**
+
+ ```python
+ Note:
+ First line of note.
+ Second line must be indented consistently.
+ ```
+
+3. **For code blocks in examples, use proper formatting:**
+
+ ```python
+ Example:
+ # Comment
+ code_here = True
+ more_code()
+ ```
+
+4. **For literal blocks (JSON, dicts), use `::`:**
+
+ ```python
+ Example::
+
+ {
+ "key": "value"
+ }
+ ```
+
+5. **Avoid inline `Note:` - always make it a section:**
+
+ ```python
+ # ❌ Bad
+ Note: This is important.
+
+ # ✅ Good
+ Note:
+ This is important.
+ ```
+
+### Rebuilding from Scratch
+
+If you encounter persistent issues:
+
+```bash
+# Clean everything
+rm -rf build source/autoapi
+
+# Rebuild
+make html
+```
+
+### Python Environment Issues
+
+If imports fail during build:
+
+1. Ensure all Bittensor dependencies are installed in your virtual environment
+2. Check that the `autoapi_dirs` path is correct
+3. Verify Python can import bittensor:
+ ```bash
+ python -c "import bittensor; print(bittensor.__version__)"
+ ```
+
+## Documentation Standards
+
+### Docstring Style Guide
+
+Follow the [Bittensor Writing Style Guide](https://github.com/opentensor/developer-docs/blob/main/WRITING-STYLE-GUIDE.md#python-docstrings).
+
+Key points:
+
+- Use Google-style docstrings
+- Include type hints in function signatures when possible
+- Provide examples for complex functions
+- Document all parameters and return values
+- Add notes for important behaviors or limitations
+
+### Testing Changes
+
+Before publishing:
+
+1. Build locally and check for warnings/errors
+2. Verify all pages render correctly
+3. Test navigation and links
+4. Check code examples for accuracy
+5. Review styling and formatting
+
+## Useful Resources
+
+- [Sphinx Documentation](https://www.sphinx-doc.org/en/master/index.html)
+- [Sphinx AutoAPI](https://sphinx-autoapi.readthedocs.io/en/latest/reference/config.html)
+- [Sphinx Book Theme](https://sphinx-book-theme.readthedocs.io/en/stable/tutorials/get-started.html)
+- [Google Style Python Docstrings](https://sphinxcontrib-napoleon.readthedocs.io/en/latest/example_google.html)
+- [Bittensor Writing Style Guide](https://github.com/opentensor/developer-docs/blob/main/WRITING-STYLE-GUIDE.md)
+
+## Quick Reference Commands
+
+```bash
+# Activate virtual environment
+source sphinx_venv/bin/activate
+
+# Clean build
+rm -rf build && make html
+
+# Clean everything including generated API files
+rm -rf build source/autoapi && make html
+
+# View docs
+open build/html/index.html
+
+# Deactivate virtual environment
+deactivate
+```
+
+## Getting Help
+
+If you encounter issues:
+
+1. Check build output for specific error messages
+2. Review the troubleshooting section above
+3. Ensure docstrings follow Google style conventions
+4. Verify all paths in `conf.py` are correct
+5. Try a clean rebuild: `rm -rf build source/autoapi && make html`
+
+For questions or issues, contact the Bittensor documentation team or open an issue in the developer-docs repository.
diff --git a/sphinx-generator/requirements.txt b/sphinx-generator/requirements.txt
new file mode 100644
index 0000000000..ebe0321673
--- /dev/null
+++ b/sphinx-generator/requirements.txt
@@ -0,0 +1,9 @@
+# Main Sphinx documentation generator
+sphinx>=7.1.0
+
+# Theme that we use for Python reference
+sphinx-book-theme>=1.0.1
+
+# Required extensions
+sphinx-autoapi>=3.0.0 # For autoapi.extension
+myst-parser>=2.0.0 # For MyST Markdown support
diff --git a/sphinx-generator/source/_static/bittensor-custom.css b/sphinx-generator/source/_static/bittensor-custom.css
new file mode 100644
index 0000000000..71e3492e85
--- /dev/null
+++ b/sphinx-generator/source/_static/bittensor-custom.css
@@ -0,0 +1,157 @@
+/* CSS customized by Raj Karamchedu on 29 January 2024 */
+
+@font-face {
+ font-family: "Haffer";
+ src: url(./fonts/Haffer-Light.ttf);
+ font-weight: 200;
+ font-style: normal;
+}
+
+@font-face {
+ font-family: "Haffer";
+ src: url(./fonts/Haffer-Medium.ttf);
+ font-weight: 400;
+ font-style: normal;
+}
+
+@font-face {
+ font-family: "Haffer";
+ src: url(./fonts/Haffer-Regular.ttf);
+ font-weight: normal;
+ font-style: normal;
+}
+
+@font-face {
+ font-family: "Haffer";
+ src: url(./fonts/Haffer-SemiBold.ttf);
+ font-weight: bold;
+ font-style: normal;
+}
+
+@font-face {
+ font-family: "HafferSQ";
+ src: url(./fonts/HafferSQ-Light.ttf);
+ font-weight: 200;
+ font-style: normal;
+}
+
+@font-face {
+ font-family: "HafferSQ";
+ src: url(./fonts/HafferSQ-Medium.ttf);
+ font-weight: 400;
+ font-style: normal;
+}
+
+@font-face {
+ font-family: "HafferSQ";
+ src: url(./fonts/HafferSQ-Regular.ttf);
+ font-weight: normal;
+ font-style: normal;
+}
+
+@font-face {
+ font-family: "HafferSQ";
+ src: url(./fonts/HafferSQ-SemiBold.ttf);
+ font-weight: bold;
+ font-style: normal;
+}
+
+@font-face {
+ font-family: "TTCommonsPro";
+ src: url(./fonts/TTCommonsProMonoMedium.ttf);
+ font-weight: 200;
+ font-style: normal;
+}
+
+@font-face {
+ font-family: "TTCommonsPro";
+ src: url(./fonts/TTCommonsProMonoRegular.ttf);
+ font-weight: 100;
+ font-style: normal;
+}
+
+@font-face {
+ font-family: "FiraCode";
+ src: url(./fonts/FiraCode_VariableFont_wght.ttf);
+}
+
+
+
+html {
+ --pst-font-family-base-system: 'Haffer', -apple-system, BlinkMacSystemFont, Segoe UI, "Helvetica Neue", Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol;
+ --pst-font-family-monospace-system: "TTCommonsPro", Menlo, Consolas, Monaco,
+ Liberation Mono, Lucida Console, monospace;
+ --pst-sidebar-font-size: 1.0rem;
+ --pst-font-family-base: var(--pst-font-family-base-system);
+ --pst-font-family-heading: var(--pst-font-family-base-system);
+ --pst-font-family-monospace: var(--pst-font-family-monospace-system);
+ --pst-color-inline-code-links: #0c0c0c;
+
+}
+
+html[data-theme=dark]{
+ --pst-color-surface: none;
+ --pst-color-inline-code-links: #fff;
+ --pst-color-target: #545454;
+ --pst-color-inline-code: #1fd01f;
+ --pst-color-table-row-hover-bg: #003200;
+}
+
+
+html[data-theme=light]{
+ --pst-color-surface: none;
+ --pst-color-inline-code-links: #000;
+ --pst-color-target: #eaebed;
+ --pst-color-inline-code: #0fa50f;
+ --pst-color-table-row-hover-bg: #ffffc0;
+}
+
+html[data-theme=dark], html[data-theme=light] {
+ --pst-color-primary: #838793;
+}
+
+p {
+ font-size: 16px !important;
+}
+
+code.xref, a code {
+ font-weight: normal;
+}
+
+code.literal {
+ background-color: none;
+ border: none;
+}
+
+.dropdown, .dropdown-center, .dropend, .dropstart, .dropup, .dropup-center {
+ position: relative;
+ display: none;
+}
+
+/* .search-button {
+ display: none;
+} */
+
+.btn-fullscreen-button {
+ display: none;
+}
+
+.bd-sidebar-secondary .onthispage {
+ display: none;
+}
+
+@media (min-width: 992px){
+.bd-sidebar-primary {
+ flex-basis: 25%;
+}
+}
+
+.bd-sidebar-secondary{
+ max-height: calc(100vh - var(--pst-header-height));
+}
+
+@media (min-width: 960px){
+.bd-page-width {
+ max-width: 98rem;
+}
+}
\ No newline at end of file
diff --git a/sphinx-generator/source/_static/custom-css-for-sphinx-book-theme.css b/sphinx-generator/source/_static/custom-css-for-sphinx-book-theme.css
new file mode 100644
index 0000000000..143a284db8
--- /dev/null
+++ b/sphinx-generator/source/_static/custom-css-for-sphinx-book-theme.css
@@ -0,0 +1,174 @@
+@import url('https://fonts.googleapis.com/css2?family=Open+Sans:wght@400;600;700&family=Poppins:wght@400;500;600&family=JetBrains+Mono&display=swap');
+
+body {
+ color: #221f1f;
+ font-family: 'Open Sans', sans-serif;
+}
+
+h1 {
+ font-size: 2.2em;
+}
+
+h2 {
+ font-size: 1.5em;
+}
+
+h3 {
+ font-size: 1.2em;
+}
+
+h4 {
+ font-size: 1.0em;
+}
+
+.nav {
+ font-family: 'Poppins', sans-serif;
+}
+
+.header-style, h1, h2, h3, h4, h5, h6 {
+ font-family: 'Poppins', sans-serif;
+ font-weight: 500;
+}
+
+.bd-toc .tocsection {
+ padding: 4.0rem 0 .5rem 1rem !important; /* Right-side bar top padding to align with the main content title. */
+}
+
+
+#main-content {
+ margin-top: 1rem !important; /* Main content pushed down to align with the site title below logo on the left-side bar. If you change this you must change the .bd-toc .tocsection padding from 7.8rem. */
+}
+
+
+.admonition.note .admonition-title {
+ background-color: #fff0ec;
+ letter-spacing: 0.045rem;
+}
+
+.admonition .admonition-title {
+ font-family: 'Poppins', sans-serif;
+}
+
+
+nav.bd-links li.toctree-l1 {
+ line-height: 1.45;
+}
+
+.card {
+ box-shadow: 0 .5rem 1rem rgba(0,0,0,.15)!important;
+ transition: all 0.3s ease-in-out!important;
+}
+
+@media (min-width: 576px) {
+ .card-deck .card {
+ margin-bottom: 15px;
+ transition: all 0.3s ease-in-out!important;
+ }
+}
+
+@media (min-width: 1200px) {
+ .container, .container-lg, .container-md, .container sm, .container-xl {
+ max-width: 1400px;
+ }
+}
+
+nav.bd-links p.caption {
+ letter-spacing: 0.1em;
+ font-family: 'Poppins', sans-serif;
+}
+
+.caption-text {
+ letter-spacing: 0.1em;
+ font-family: 'Poppins', sans-serif;
+ font-size: 0.9em;
+ text-transform: uppercase;
+ font-weight: bold;
+ position: relative;
+ margin-top: 1.25em;
+ margin-bottom: 0;
+}
+
+toc-h1, .toc-h2, .toc-h3, .toc-h4 {
+ line-height: 1.45;
+ margin-bottom: 0.5em;
+}
+
+@media only screen and (min-width: 768px) {
+ #navbar-toggler {
+ display: none;
+ }
+}
+
+div.navbar_extra_footer {
+ display: none;
+}
+
+div.dropdown-buttons-trigger {
+ display: none;
+}
+
+a.full-screen-button {
+ display: none;
+}
+
+pre {
+ line-height: 150%;
+ background-color: #f1f3f4; /* #ffc1070d; */
+ padding: 22px;
+ color: #37474f;
+ font-size: 95%;
+ border: none;
+ box-shadow: none;
+ /* font-family: 'JetBrains Mono', sans-serif; Avoid this here or else glyphs in code snippets. */
+}
+
+.header-style, h1, h2, h3, h4, h5, h6 {
+ line-height: 1.35;
+}
+
+nav.bd-links li.toctree-l1, nav.bd-links li.toctree-l2, nav.bd-links li.toctree-l3, nav.bd-links li.toctree-l4, nav.bd-links li.toctree-l5 {
+ margin-bottom: 0.35em;
+}
+
+.bd-sidebar nav ul.nav a:hover, .bd-sidebar nav ul.nav li.active>a, .bd-sidebar nav ul.nav li.active>a:hover {
+ color: #221f1f;
+}
+.bd-sidebar-secondary .onthispage {
+ height: 3rem;
+ min-height: 3rem;
+ display: none;
+}
+
+.prev-next-bottom {
+ height: 3em;
+ font-family: 'Poppins', sans-serif;
+ font-weight: 500;
+}
+
+blockquote {
+ margin: 1rem 0 1rem;
+ border-left: 0px solid #ccc;
+ padding: .1em .1em;
+}
+
+main.bd-content #main-content div.section ul p, main.bd-content #main-content div.section ol p {
+ margin-bottom: .5rem;
+}
+
+table td, .table th {
+ padding: .75rem;
+ vertical-align: top;
+ border-top: 1px solid #dee2e6;
+ border-bottom: 1px solid #dee2e6;
+ border-right: 1px solid #dee2e6;
+ border-left: 1px solid #dee2e6;
+}
+
+.footer {
+ font-size: .8em;
+}
+
+.bd-header-article .article-header-buttons {
+ /* display: flex; */
+ display: none;
+}
diff --git a/sphinx-generator/source/_static/fonts/FiraCode_VariableFont_wght.ttf b/sphinx-generator/source/_static/fonts/FiraCode_VariableFont_wght.ttf
new file mode 100644
index 0000000000..0013e0ad05
Binary files /dev/null and b/sphinx-generator/source/_static/fonts/FiraCode_VariableFont_wght.ttf differ
diff --git a/sphinx-generator/source/_static/fonts/Haffer-Light.ttf b/sphinx-generator/source/_static/fonts/Haffer-Light.ttf
new file mode 100644
index 0000000000..4823831012
Binary files /dev/null and b/sphinx-generator/source/_static/fonts/Haffer-Light.ttf differ
diff --git a/sphinx-generator/source/_static/fonts/Haffer-Medium.ttf b/sphinx-generator/source/_static/fonts/Haffer-Medium.ttf
new file mode 100644
index 0000000000..1977e1df34
Binary files /dev/null and b/sphinx-generator/source/_static/fonts/Haffer-Medium.ttf differ
diff --git a/sphinx-generator/source/_static/fonts/Haffer-Regular.ttf b/sphinx-generator/source/_static/fonts/Haffer-Regular.ttf
new file mode 100644
index 0000000000..fb2b457ab1
Binary files /dev/null and b/sphinx-generator/source/_static/fonts/Haffer-Regular.ttf differ
diff --git a/sphinx-generator/source/_static/fonts/Haffer-SemiBold.ttf b/sphinx-generator/source/_static/fonts/Haffer-SemiBold.ttf
new file mode 100644
index 0000000000..ef01086009
Binary files /dev/null and b/sphinx-generator/source/_static/fonts/Haffer-SemiBold.ttf differ
diff --git a/sphinx-generator/source/_static/fonts/HafferSQ-Light.ttf b/sphinx-generator/source/_static/fonts/HafferSQ-Light.ttf
new file mode 100644
index 0000000000..1abd355828
Binary files /dev/null and b/sphinx-generator/source/_static/fonts/HafferSQ-Light.ttf differ
diff --git a/sphinx-generator/source/_static/fonts/HafferSQ-Medium.ttf b/sphinx-generator/source/_static/fonts/HafferSQ-Medium.ttf
new file mode 100644
index 0000000000..a27000db2c
Binary files /dev/null and b/sphinx-generator/source/_static/fonts/HafferSQ-Medium.ttf differ
diff --git a/sphinx-generator/source/_static/fonts/HafferSQ-Regular.ttf b/sphinx-generator/source/_static/fonts/HafferSQ-Regular.ttf
new file mode 100644
index 0000000000..df3a2190d5
Binary files /dev/null and b/sphinx-generator/source/_static/fonts/HafferSQ-Regular.ttf differ
diff --git a/sphinx-generator/source/_static/fonts/HafferSQ-SemiBold.ttf b/sphinx-generator/source/_static/fonts/HafferSQ-SemiBold.ttf
new file mode 100644
index 0000000000..f2d0584595
Binary files /dev/null and b/sphinx-generator/source/_static/fonts/HafferSQ-SemiBold.ttf differ
diff --git a/sphinx-generator/source/_static/fonts/TTCommonsProMonoMedium.ttf b/sphinx-generator/source/_static/fonts/TTCommonsProMonoMedium.ttf
new file mode 100644
index 0000000000..987ee9fded
Binary files /dev/null and b/sphinx-generator/source/_static/fonts/TTCommonsProMonoMedium.ttf differ
diff --git a/sphinx-generator/source/_static/fonts/TTCommonsProMonoRegular.ttf b/sphinx-generator/source/_static/fonts/TTCommonsProMonoRegular.ttf
new file mode 100644
index 0000000000..c2bf574c06
Binary files /dev/null and b/sphinx-generator/source/_static/fonts/TTCommonsProMonoRegular.ttf differ
diff --git a/sphinx-generator/source/_static/logo-dark-mode.svg b/sphinx-generator/source/_static/logo-dark-mode.svg
new file mode 100644
index 0000000000..a56a46c7c0
--- /dev/null
+++ b/sphinx-generator/source/_static/logo-dark-mode.svg
@@ -0,0 +1 @@
+
diff --git a/sphinx-generator/source/_static/logo.svg b/sphinx-generator/source/_static/logo.svg
new file mode 100644
index 0000000000..337ffe2d33
--- /dev/null
+++ b/sphinx-generator/source/_static/logo.svg
@@ -0,0 +1 @@
+
diff --git a/sphinx-generator/source/conf.py b/sphinx-generator/source/conf.py
new file mode 100644
index 0000000000..d2daf5cecd
--- /dev/null
+++ b/sphinx-generator/source/conf.py
@@ -0,0 +1,113 @@
+# 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
+
+# project = 'BTCLI Docs'
+project = "Bittensor SDK Docs"
+copyright = "2025, Opentensor Foundation"
+author = "Opentensor Foundation"
+# release = '1.0'
+
+# -- General configuration ---------------------------------------------------
+# https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration
+
+
+import os
+import sys
+
+sys.path.insert(0, os.path.abspath(".."))
+sys.path.insert(0, os.path.abspath("../.."))
+
+# This below path insert is needed for the source link to work for all
+sys.path.insert(0, os.path.abspath("../bittensor"))
+# sys.path.insert(0, os.path.abspath('../../btwallet'))
+sys.path.append("/Users/michaeltrestman/Library/Python/3.9/lib/python/site-packages/")
+
+html_theme = "sphinx_book_theme"
+html_theme_options = {
+ "show_navbar_depth": 4,
+ "logo": {
+ "image_light": "_static/logo.svg",
+ "image_dark": "_static/logo-dark-mode.svg",
+ },
+ "repository_url": "https://github.com/opentensor/btcli",
+ "use_source_button": True,
+ "use_repository_button": True,
+ "use_issues_button": True,
+}
+extensions = [
+ "sphinx.ext.autodoc",
+ "sphinx.ext.napoleon",
+ "autoapi.extension",
+ "sphinx.ext.viewcode",
+ "myst_parser",
+ "sphinx.ext.intersphinx",
+]
+
+myst_enable_extensions = ["dollarmath", "amsmath"]
+
+# Napoleon settings
+napoleon_google_docstring = True
+napoleon_numpy_docstring = False
+napoleon_include_init_with_doc = True
+napoleon_include_private_with_doc = True
+napoleon_include_special_with_doc = True
+napoleon_use_admonition_for_examples = True
+napoleon_use_admonition_for_notes = True
+napoleon_use_admonition_for_references = True
+napoleon_use_ivar = True
+
+intersphinx_mapping = {
+ "python": ("https://docs.python.org/3", None),
+ "numpy": ("https://numpy.org/doc/stable/", None),
+ "torch": ("https://pytorch.org/docs/stable/", None),
+ "pydantic": ("https://docs.pydantic.dev/latest/", None),
+}
+
+# Source directory and ignore patterns for Bittensor SDK
+autoapi_dirs = ["/Users/michaeltrestman/bittensor_workspace/latents/bittensor"]
+autoapi_ignore = [
+ "*e2e*",
+ "*setup*",
+ "*test*",
+ "*mock*",
+ "*/site-packages/*",
+ "*post*",
+ "*cli*",
+ "chain_interactions",
+ "*/mock/*",
+ "*/tests/*",
+]
+autoapi_python_class_content = "both"
+autodoc_typehints = "description"
+autodoc_default_options = {
+ "special-members": "__init__",
+}
+autoapi_options = [
+ "members",
+ "undoc-members",
+ "show-inheritance",
+ "show-module-summary",
+]
+autoapi_keep_files = False
+
+# Legacy stuff
+# autoapi_ignore = ["*axon*", "*btlogging*", "*chain_data*", "*cli*", "*config*", "*dendrite*", "*errors*", "*keyfile*", "metagraph*", "*stream*", "*subtensor*", "*synapse*", "*tensor*", "*threadpool*", "*types*", "*wallet*", "*mock*", "*utils*", "*setup*"]
+
+autoapi_member_order = "alphabetical"
+templates_path = ["_templates"]
+exclude_patterns = []
+
+# Make Sphinx more tolerant of formatting issues
+suppress_warnings = ["autoapi", "autosectionlabel.*"]
+nitpicky = False
+
+# -- Options for HTML output -------------------------------------------------
+# https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output
+
+html_static_path = ["_static"]
+html_css_files = ["bittensor-custom.css"]
diff --git a/sphinx-generator/source/images/logo copy.svg b/sphinx-generator/source/images/logo copy.svg
new file mode 100644
index 0000000000..337ffe2d33
--- /dev/null
+++ b/sphinx-generator/source/images/logo copy.svg
@@ -0,0 +1 @@
+
diff --git a/sphinx-generator/source/images/logo-dark-mode.svg b/sphinx-generator/source/images/logo-dark-mode.svg
new file mode 100644
index 0000000000..a56a46c7c0
--- /dev/null
+++ b/sphinx-generator/source/images/logo-dark-mode.svg
@@ -0,0 +1 @@
+
diff --git a/sphinx-generator/source/images/logo.svg b/sphinx-generator/source/images/logo.svg
new file mode 100644
index 0000000000..337ffe2d33
--- /dev/null
+++ b/sphinx-generator/source/images/logo.svg
@@ -0,0 +1 @@
+
diff --git a/sphinx-generator/source/index.rst b/sphinx-generator/source/index.rst
new file mode 100644
index 0000000000..b5a4198675
--- /dev/null
+++ b/sphinx-generator/source/index.rst
@@ -0,0 +1,9 @@
+Bittensor SDK Documentation
+===========================
+
+This is the developer documentation for the Bittensor SDK.
+
+.. toctree::
+ :maxdepth: 2
+ :caption: Table of Contents
+
diff --git a/sphinx-generator/source/index.rst.btsdk b/sphinx-generator/source/index.rst.btsdk
new file mode 100644
index 0000000000..8ee6095760
--- /dev/null
+++ b/sphinx-generator/source/index.rst.btsdk
@@ -0,0 +1,8 @@
+Bittensor SDK Documentation
+===========================
+
+This is the developer documentation for the Bittensor SDK.
+
+.. toctree::
+ :maxdepth: 2
+ :caption: Table of Contents
diff --git a/sphinx-generator/source/index.rst.btwallet b/sphinx-generator/source/index.rst.btwallet
new file mode 100644
index 0000000000..cf7d62e51f
--- /dev/null
+++ b/sphinx-generator/source/index.rst.btwallet
@@ -0,0 +1,8 @@
+Bittensor Wallet Python SDK Reference
+=====================================
+
+Table of Contents
+-----------------
+
+.. toctree::
+ :maxdepth: 2
diff --git a/sphinx-generator/source/index.rst.legacy b/sphinx-generator/source/index.rst.legacy
new file mode 100644
index 0000000000..c7919bf8dc
--- /dev/null
+++ b/sphinx-generator/source/index.rst.legacy
@@ -0,0 +1,13 @@
+Legacy Bittensor 7.4.0 Documentation
+====================================
+
+Table of Contents
+-----------------
+
+.. toctree::
+ :maxdepth: 2
+
+
+.. admonition:: STOP, READ THIS FIRST
+
+ This is the developer documentation for the legacy Bittensor 7.4.0. For the latest Bittensor SDK documentation, see `Bittensor SDK Docs `_.
\ No newline at end of file
diff --git a/static/btwallet-api/html/.buildinfo b/static/btwallet-api/html/.buildinfo
index 51d0fb66a7..990e733377 100644
--- a/static/btwallet-api/html/.buildinfo
+++ b/static/btwallet-api/html/.buildinfo
@@ -1,4 +1,4 @@
# Sphinx build info version 1
-# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
-config: 790454dd4a137ddea3d2d266795e841b
+# This file records the configuration used when building these files. When it is not found, a full rebuild will be done.
+config: d4739118bd871b707c971337125cb60f
tags: 645f666f9bcd5a90fca523b33c5a78b7
diff --git a/static/btwallet-api/html/autoapi/index.html b/static/btwallet-api/html/_modules/index.html
similarity index 58%
rename from static/btwallet-api/html/autoapi/index.html
rename to static/btwallet-api/html/_modules/index.html
index f62d6c2881..505a6cc0fa 100644
--- a/static/btwallet-api/html/autoapi/index.html
+++ b/static/btwallet-api/html/_modules/index.html
@@ -6,9 +6,8 @@
-
-
- API Reference — BTCLI Docs 1.0 documentation
+
+ Overview: module code — Bittensor Wallet SDK Docs documentation
@@ -28,9 +27,8 @@
-
-
-
+
+
@@ -38,15 +36,13 @@
-
-
+
+
-
+
-
-
@@ -109,6 +105,8 @@
+
+
@@ -156,21 +154,16 @@