This is an automated email from the ASF dual-hosted git repository.

jiayu pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/sedona-db.git


The following commit(s) were added to refs/heads/main by this push:
     new f47bb75  adding docs and navigation for second bug bash (#43)
f47bb75 is described below

commit f47bb75f3eef0e2eb0906ff11ae014f7215da56b
Author: Kelly-Ann Dolor <[email protected]>
AuthorDate: Tue Sep 9 13:06:34 2025 -0700

    adding docs and navigation for second bug bash (#43)
---
 README.md                            |   2 -
 docs/index.md                        |  31 +-
 docs/reference/read-parquet-files.md |  61 ++++
 docs/reference/sql-joins.md          |  54 ++++
 docs/reference/sql.md                | 560 ++++++++++++++++++++++++++++++++++-
 docs/stylesheets/extra.css           |  57 ++++
 mkdocs.yml                           |  88 +++---
 7 files changed, 791 insertions(+), 62 deletions(-)

diff --git a/README.md b/README.md
index 6bbb430..c61d0bc 100644
--- a/README.md
+++ b/README.md
@@ -29,8 +29,6 @@ SedonaDB only runs on a single machine, so it’s perfect for 
processing smaller
 
 You can install Python SedonaDB with `pip install apache-sedona`.
 
-You can also install Rust SedonaDB with `cargo add apache-sedona`.
-
 ## Overture buildings example
 
 This section shows how to query the Overture buildings data.
diff --git a/docs/index.md b/docs/index.md
index 1395c6b..3a398a7 100644
--- a/docs/index.md
+++ b/docs/index.md
@@ -1,3 +1,8 @@
+---
+hide:
+  - navigation
+---
+
 <!---
   Licensed to the Apache Software Foundation (ASF) under one
   or more contributor license agreements.  See the NOTICE file
@@ -21,6 +26,10 @@
 
 SedonaDB is a high-performance, dependency-free geospatial compute engine.
 
+You can easily run SedonaDB locally or in the cloud.  The first release 
supports a core set of vector operations, but the full-suite of common vector 
and raster computations will be supported soon.
+
+SedonaDB only runs on a single machine, so it’s perfect for processing smaller 
datasets.  You can use SedonaSpark, SedonaFlink, or SedonaSnow for operations 
on larger datasets.
+
 === "SQL"
 
        ```sql
@@ -60,13 +69,15 @@ SedonaDB is a high-performance, dependency-free geospatial 
compute engine.
 
 ## Key features
 
-* **Blazing fast**: SedonaDB runs on a single machine, optimized for 
geospatial workflows.
-* SedonaDB is a **dependency-free**, **small binary** that is only XX KB.
-* Supports **various file formats**, including GeoJSON, Shapefile, GeoParquet, 
CSV, and PostGIS.
-* Exposes **several language APIs,** including SQL, Python, Rust, and R.
-* **Portable**: Easy to run on the command line, locally or in the cloud with 
AWS Sagemaker, AWS Lambda, Azure Functions, Azure Machine Learning, or Google 
Colab.
-* **Extensible**: You can extend SedonaDB to build your own geospatial compute 
engine custom for your needs.
-* **Open source**: Apache Sedona is an open-source project managed according 
to the Apache Software Foundation's guidelines.
+SedonaDB has several advantages:
+
+* **Blazing-Fast Performance:** Built in Rust to process massive geospatial 
datasets with exceptional speed.
+* **Unified Geospatial Toolkit:** Access a comprehensive suite of functions 
for both vector and raster data in a single, powerful library.
+* **Seamless Ecosystem Integration:** Built on Apache Arrow for smooth 
interoperability with popular data science libraries like GeoPandas, DuckDB, 
and Polars.
+* **Flexible APIs:** Effortlessly switch between Python and SQL interfaces to 
match your preferred workflow and skillset.
+* **Guaranteed CRS Propagation:** Automatically manages coordinate reference 
systems (CRS) to ensure spatial accuracy and prevent common errors.
+* **Broad File Format Support:** Work with a wide range of both modern and 
legacy geospatial file formats like geoparquet.
+* **Highly Extensible:** Easily customize and extend the library's 
functionality to meet your project's unique requirements.
 
 ## Installation
 
@@ -78,12 +89,6 @@ Here’s how to install SedonaDB with various build tools:
        pip install "apache-sedona[db]"
        ```
 
-=== "Rust"
-
-       ```rust
-       cargo add sedona
-       ```
-
 === "R"
 
        ```bash
diff --git a/docs/reference/read-parquet-files.md 
b/docs/reference/read-parquet-files.md
new file mode 100644
index 0000000..927598d
--- /dev/null
+++ b/docs/reference/read-parquet-files.md
@@ -0,0 +1,61 @@
+
+<!---
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+
+# Reading Parquet Files
+
+To read a Parquet file, you must use the dedicated `sd.read_parquet()` method. 
You cannot query a file path directly within the `sd.sql()` `FROM` clause.
+
+The `sd.sql()` function is designed to query tables that have already been 
registered in the session. When you pass a path like `'s3://...'` to `FROM`, 
the SQL engine searches for a registered table with that literal name and fails 
when it's not found, producing a `table not found` error.
+
+## Usage
+
+The correct process is a two-step approach:
+
+1. **Load** the Parquet file into a DataFrame using `sd.read_parquet()`.
+1. **Register** the DataFrame as a temporary view using 
`.createOrReplaceTempView()`.
+1. **Query** the view using `sd.sql()`.
+
+```python
+# 1. Load the Parquet file from a URL into a DataFrame
+df = 
sd.read_parquet('s3://wherobots-benchmark-prod/SpatialBench_sf=1_format=parquet/building/building.parquet')
+
+# 2. Register the DataFrame as a temporary view named 'buildings'
+df.createOrReplaceTempView('buildings')
+
+# 3. Now, query the view using SQL
+sd.sql("SELECT * FROM buildings LIMIT 10").show()
+```
+
+### Common Errors
+
+Directly using a file path within `sd.sql()` is a common mistake that will 
result in an error.
+
+**Incorrect Code:**
+
+```python
+# This will fail because the SQL engine looks for a table named 's3://...'
+sd.sql("SELECT * FROM 
's3://wherobots-benchmark-prod/SpatialBench_sf=1_format=parquet/building/building.parquet'")
+```
+
+**Resulting Error:**
+
+```
+sedonadb._lib.SedonaError: Error during planning: table '...s3://...' not found
+```
diff --git a/docs/reference/sql-joins.md b/docs/reference/sql-joins.md
new file mode 100644
index 0000000..1752ba2
--- /dev/null
+++ b/docs/reference/sql-joins.md
@@ -0,0 +1,54 @@
+<!---
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+
+# Spatial Joins
+
+You can perform spatial joins using standard SQL `INNER JOIN` syntax. The join 
condition is defined in the `ON` clause using a spatial function that specifies 
the relationship between the geometries of the two tables.
+
+## General Spatial Join
+
+Use functions like `ST_Contains`, `ST_Intersects`, or `ST_Within` to join 
tables based on their spatial relationship.
+
+### Example
+
+Assign a country to each city by checking which country polygon contains each 
city point.
+
+```sql
+SELECT
+    cities.name as city,
+    countries.name as country
+FROM cities
+INNER JOIN countries
+ON ST_Contains(countries.geometry, cities.geometry)
+```
+
+## K-Nearest Neighbor (KNN) Join
+
+Use the specialized `ST_KNN` function to find the *k* nearest neighbors from 
one table for each geometry in another. This is useful for proximity analysis.
+
+### Example For each city, find the 5 other closest cities.
+
+```sql
+SELECT
+    cities_l.name AS city,
+    cities_r.name AS nearest_neighbor
+FROM cities AS cities_l
+INNER JOIN cities AS cities_r
+ON ST_KNN(cities_l.geometry, cities_r.geometry, 5, false)
+```
diff --git a/docs/reference/sql.md b/docs/reference/sql.md
index 0b221b0..9364aa6 100644
--- a/docs/reference/sql.md
+++ b/docs/reference/sql.md
@@ -19,13 +19,16 @@
 
 # SQL API Reference
 
-SedonaDB SQL is a derivative of [DataFusion 
SQL](https://datafusion.apache.org/user-guide/sql/index.html)
-with support for additional functions, data types, and file formats built in 
to SQL syntax.
+The following SQL functions are available for SedonaDB.
 
-See the [Apache Sedona SQL 
documentation](https://sedona.apache.org/latest/api/sql/Overview/) for
-additional function documentation and examples.
+You can query data directly from files and URLs by treating them like database 
tables. This feature supports formats like **Parquet**, **CSV**, and **JSON**.
 
-Here are the markdown files for each SQL function found in the provided `.rs` 
files.
+To query a file, place its path or URL in single quotes within the `FROM` 
clause.
+
+```python
+# Query a remote Parquet file directly
+"SELECT * FROM 
'https://raw.githubusercontent.com/geoarrow/geoarrow-data/v0.2.0/natural-earth/files/natural-earth_cities_geo.parquet'").show()
+```
 
 ## ST_Analyze_Aggr
 
@@ -608,3 +611,550 @@ Computes the symmetric difference between geomA and geomB.
 ```sql
 SELECT ST_SymDifference(ST_GeomFromText('POLYGON ((1 1, 11 1, 1 11, 0 0))'), 
ST_GeomFromText('POLYGON ((0 0, 10 0, 0 10, 0 0))')) AS val
 ```
+
+## ST_Area
+
+### Description
+
+Return the area of a geometry.
+
+### Format
+
+`ST_Area (A: Geometry)`
+
+### Arguments
+
+  * **geom**: Input geometry.
+
+### SQL Example
+
+```sql
+SELECT ST_Area(ST_GeomFromWKT('POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))'));
+```
+
+## ST_Centroid
+
+### Description
+
+Returns the centroid of geom.
+
+### Format
+
+`ST_Centroid (A: Geometry)`
+
+### Arguments
+
+  * **geom**: Input geometry.
+
+### SQL Example
+
+```sql
+SELECT ST_AsText(ST_Centroid(ST_GeomFromWKT('POLYGON ((0 0, 10 0, 10 10, 0 10, 
0 0))')));
+```
+
+## ST_Dimension
+
+### Description
+
+Return the dimension of the geometry.
+
+### Format
+
+`ST_Dimension (A: Geometry)`
+
+### Arguments
+
+  * **geom**: Input geometry.
+
+### SQL Example
+
+```sql
+SELECT ST_Dimension(ST_GeomFromWKT('POLYGON ((0 0, 1 0, 0 1, 0 0))'));
+```
+
+## ST_GeomFromWKB
+
+### Description
+
+Construct a Geometry from WKB.
+
+### Format
+
+`ST_GeomFromWKB (Wkb: Binary)`
+
+### Arguments
+
+  * **WKB**: binary: Well-known binary representation of the geometry.
+
+### SQL Example
+
+```sql
+-- Creates a POINT(1 2) geometry from its WKB representation
+SELECT 
ST_AsText(ST_GeomFromWKB(FROM_HEX('0101000000000000000000F03F0000000000000040')));
+```
+
+## ST_GeomFromWKT
+
+### Description
+
+Construct a Geometry from WKT. This function also has the alias 
**ST_GeomFromText**.
+
+### Format
+
+`ST_GeomFromWKT (Wkt: String)`
+
+### Arguments
+
+  * **WKT**: string: Well-known text representation of the geometry.
+
+### SQL Example
+
+```sql
+SELECT ST_AsText(ST_GeomFromWKT('POINT (30 10)'));
+```
+
+## ST_IsEmpty
+
+### Description
+
+Return true if the geometry is empty.
+
+### Format
+
+`ST_IsEmpty (A: Geometry)`
+
+### Arguments
+
+  * **geom**: Input geometry.
+
+### SQL Example
+
+```sql
+SELECT ST_IsEmpty(ST_GeomFromWKT('POLYGON EMPTY'));
+```
+
+## ST_Length
+
+### Description
+
+Returns the length of geom. This function only supports LineString, 
MultiLineString, and GeometryCollections containing linear geometries. Use 
ST_Perimeter for polygons.
+
+### Format
+
+`ST_Length (A: Geometry)`
+
+### Arguments
+
+  * **geom**: geometry: Input geometry.
+
+### SQL Example
+
+```sql
+SELECT ST_Length(ST_GeomFromWKT('LINESTRING(0 0, 10 0)'));
+```
+
+## ST_Perimeter
+
+### Description
+
+This function calculates the 2D perimeter of a given geometry. It supports 
Polygon, MultiPolygon, and GeometryCollection geometries (as long as the 
GeometryCollection contains polygonal geometries). For other types, it returns 
0. To measure lines, use ST_Length.
+
+To get the perimeter in meters, set **use_spheroid** to true. This calculates 
the geodesic perimeter using the WGS84 spheroid. When using use_spheroid, the 
**lenient** parameter defaults to true, assuming the geometry uses EPSG:4326. 
To throw an exception instead, set lenient to false.
+
+### Format
+
+`ST_Perimeter(geom: Geometry)`
+`ST_Perimeter(geom: Geometry, use_spheroid: Boolean)`
+`ST_Perimeter(geom: Geometry, use_spheroid: Boolean, lenient: Boolean = True)`
+
+### Arguments
+
+  * **geom**: Input geometry.
+  * **use_spheroid**: If true, calculates the geodesic perimeter using the 
WGS84 spheroid. Defaults to false.
+  * **lenient**: If true, assumes the geometry uses EPSG:4326 when 
use_spheroid is true. Defaults to true.
+
+### SQL Example
+
+```sql
+SELECT ST_Perimeter(ST_GeomFromWKT('POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))'));
+```
+
+## ST_Point
+
+### Description
+
+Construct a Point Geometry from X and Y.
+
+### Format
+
+`ST_Point (x: Double, y: Double)`
+
+### Arguments
+
+  * **x**: X value.
+  * **y**: Y value.
+
+### SQL Example
+
+```sql
+SELECT ST_AsText(ST_Point(-74.0060, 40.7128));
+```
+
+Of course. Here is the documentation separated into individual functions.
+
+## ST_XMin
+
+### Description
+
+Returns the minimum **X-coordinate** of a geometry's bounding box.
+
+### Format
+
+`ST_XMin (A: Geometry)`
+
+### Arguments
+
+  * **geom**: Input geometry.
+
+### SQL Example
+
+```sql
+SELECT ST_XMin(ST_GeomFromWKT('LINESTRING(1 5, 10 15)'));
+-- Returns: 1
+```
+
+## ST_XMax
+
+### Description
+
+Returns the maximum **X-coordinate** of a geometry's bounding box.
+
+### Format
+
+`ST_XMax (A: Geometry)`
+
+### Arguments
+
+  * **geom**: Input geometry.
+
+### SQL Example
+
+```sql
+SELECT ST_XMax(ST_GeomFromWKT('LINESTRING(1 5, 10 15)'));
+-- Returns: 10
+```
+
+## ST_YMin
+
+### Description
+
+Returns the minimum **Y-coordinate** of a geometry's bounding box.
+
+### Format
+
+`ST_YMin (A: Geometry)`
+
+### Arguments
+
+  * **geom**: Input geometry.
+
+### SQL Example
+
+```sql
+SELECT ST_YMin(ST_GeomFromWKT('LINESTRING(1 5, 10 15)'));
+-- Returns: 5
+```
+
+## ST_YMax
+
+### Description
+
+Returns the maximum **Y-coordinate** of a geometry's bounding box.
+
+### Format
+
+`ST_YMax (A: Geometry)`
+
+### Arguments
+
+  * **geom**: Input geometry.
+
+### SQL Example
+
+```sql
+SELECT ST_YMax(ST_GeomFromWKT('LINESTRING(1 5, 10 15)'));
+-- Returns: 15
+```
+
+## ST_ZMin
+
+### Description
+
+Returns the minimum **Z-coordinate** of a geometry's bounding box.
+
+### Format
+
+`ST_ZMin (A: Geometry)`
+
+### Arguments
+
+  * **geom**: Input geometry.
+
+### SQL Example
+
+```sql
+SELECT ST_ZMin(ST_GeomFromWKT('LINESTRING ZM (1 2 3 4, 5 6 7 8)'));
+-- Returns: 3
+```
+
+## ST_ZMax
+
+### Description
+
+Returns the maximum **Z-coordinate** of a geometry's bounding box.
+
+### Format
+
+`ST_ZMax (A: Geometry)`
+
+### Arguments
+
+  * **geom**: Input geometry.
+
+### SQL Example
+
+```sql
+SELECT ST_ZMax(ST_GeomFromWKT('LINESTRING ZM (1 2 3 4, 5 6 7 8)'));
+-- Returns: 7
+```
+
+## ST_MMin
+
+### Description
+
+Returns the minimum **M-coordinate** (measure) of a geometry's bounding box.
+
+### Format
+
+`ST_MMin (A: Geometry)`
+
+### Arguments
+
+  * **geom**: Input geometry.
+
+### SQL Example
+
+```sql
+SELECT ST_MMin(ST_GeomFromWKT('LINESTRING ZM (1 2 3 4, 5 6 7 8)'));
+-- Returns: 4
+```
+
+## ST_MMax
+
+### Description
+
+Returns the maximum **M-coordinate** (measure) of a geometry's bounding box.
+
+### Format
+
+`ST_MMax (A: Geometry)`
+
+### Arguments
+
+  * **geom**: Input geometry.
+
+### SQL Example
+
+```sql
+SELECT ST_MMax(ST_GeomFromWKT('LINESTRING ZM (1 2 3 4, 5 6 7 8)'));
+-- Returns: 8
+```
+
+## ST_AsBinary
+
+### Description
+
+Return the Well-Known Binary representation of a geometry or geography. This 
function also has the alias **ST_AsWKB**.
+
+### Format
+
+`ST_AsBinary (A: Geometry)`
+
+### Arguments
+
+  * **geom**: Input geometry or geography.
+
+### SQL Example
+
+```sql
+SELECT ST_AsBinary(ST_Point(1.0, 2.0));
+```
+
+## ST_Buffer
+
+### Description
+
+Returns a geometry that represents all points whose distance from the input 
geometry is less than or equal to a specified distance.
+
+### Format
+
+`ST_Buffer (A: Geometry, distance: Double)`
+
+### Arguments
+
+  * **geom**: Input geometry.
+  * **distance**: Radius of the buffer.
+
+### SQL Example
+
+```sql
+SELECT ST_Buffer(ST_GeomFromText('POLYGON ((10 10, 11 10, 10 11, 10 10))'), 
1.0);
+```
+
+## ST_DWithin
+
+### Description
+
+Returns true if two geometries are within a specified distance of each other.
+
+### Format
+
+`ST_DWithin (A: Geometry, B: Geometry, distance: Double)`
+
+### Arguments
+
+  * **geomA**: Input geometry or geography.
+  * **geomB**: Input geometry or geography.
+  * **distance**: Distance in units of the geometry's coordinate system.
+
+### SQL Example
+
+```sql
+SELECT ST_DWithin(ST_Point(0.25, 0.25), ST_GeomFromText('POLYGON ((0 0, 1 0, 0 
1, 0 0))'), 0.5);
+```
+
+## ST_Envelope_Aggr
+
+### Description
+
+An aggregate function that returns the collective bounding box (envelope) of a 
set of geometries.
+
+### Format
+
+`ST_Envelope_Aggr (geom: Geometry)`
+
+### Arguments
+
+  * **geom**: A column of geometries to be aggregated.
+
+### SQL Example
+
+```sql
+-- Create a table with geometries and calculate the aggregate envelope
+WITH shapes(geom) AS (
+    VALUES (ST_GeomFromWKT('POINT (0 1)')),
+           (ST_GeomFromWKT('POINT (10 11)'))
+)
+SELECT ST_AsText(ST_Envelope_Aggr(geom)) FROM shapes;
+-- Returns: POLYGON ((0 1, 0 11, 10 11, 10 1, 0 1))
+```
+
+## ST_Intersection_Aggr
+
+### Description
+
+An aggregate function that returns the geometric intersection of all 
geometries in a set.
+
+### Format
+
+`ST_Intersection_Aggr (geom: Geometry)`
+
+### Arguments
+
+  * **geom**: A column of geometries to be aggregated.
+
+### SQL Example
+
+```sql
+-- Create a table with overlapping polygons and find their common intersection
+WITH shapes(geom) AS (
+    VALUES (ST_GeomFromWKT('POLYGON((0 0, 2 0, 2 2, 0 2, 0 0))')),
+           (ST_GeomFromWKT('POLYGON((1 1, 3 1, 3 3, 1 3, 1 1))'))
+)
+SELECT ST_AsText(ST_Intersection_Aggr(geom)) FROM shapes;
+-- Returns: POLYGON ((1 1, 1 2, 2 2, 2 1, 1 1))
+```
+
+## ST_SetSRID
+
+### Description
+
+Sets the spatial reference system identifier (SRID) of a geometry. This only 
changes the metadata; it does not transform the coordinates.
+
+### Format
+
+`ST_SetSRID (geom: Geometry, srid: Integer)`
+
+### Arguments
+
+  * **geom**: Input geometry or geography.
+  * **srid**: EPSG code to set (e.g., 4326).
+
+### SQL Example
+
+```sql
+SELECT ST_SetSRID(ST_GeomFromWKT('POINT (-64.363049 45.091501)'), 4326);
+```
+
+## ST_Transform
+
+### Description
+
+Transforms the coordinates of a geometry from a source Coordinate Reference 
System (CRS) to a target CRS.
+
+If the source CRS is not specified, it will be read from the geometry's 
metadata. Sedona ensures that coordinates are handled in longitude/latitude 
order for geographic CRS transformations.
+
+### Format
+
+`ST_Transform (A: Geometry, TargetCRS: String)`
+`ST_Transform (A: Geometry, SourceCRS: String, TargetCRS: String)`
+
+### Arguments
+
+  * **geom**: Input geometry or geography.
+  * **source_crs**: The source CRS code (e.g., 'EPSG:4326').
+  * **target_crs**: The target CRS code to transform into.
+  * **lenient**: A boolean that, if true, assumes the source is EPSG:4326 if 
not specified. Defaults to true.
+
+### SQL Example
+
+```sql
+-- Transform a WGS84 polygon to UTM zone 49N
+SELECT ST_Transform(ST_SetSRID(ST_GeomFromWkt('POLYGON((170 50,170 72,-130 
72,-130 50,170 50))'), 4326), 'EPSG:32649');
+```
+
+## ST_Union_Aggr
+
+### Description
+
+An aggregate function that returns the geometric union of all geometries in a 
set.
+
+### Format
+
+`ST_Union_Aggr (geom: Geometry)`
+
+### Arguments
+
+  * **geom**: A column of geometries to be aggregated.
+
+### SQL Example
+
+```sql
+-- Create a table with two separate polygons and unite them into a single 
multipolygon
+WITH shapes(geom) AS (
+    VALUES (ST_GeomFromWKT('POLYGON ((0 0, 1 0, 1 1, 0 1, 0 0))')),
+           (ST_GeomFromWKT('POLYGON ((2 2, 3 2, 3 3, 2 3, 2 2))'))
+)
+SELECT ST_AsText(ST_Union_Aggr(geom)) FROM shapes;
+-- Returns: MULTIPOLYGON (((2 2, 3 2, 3 3, 2 3, 2 2)), ((0 0, 1 0, 1 1, 0 1, 0 
0)))
+```
diff --git a/docs/stylesheets/extra.css b/docs/stylesheets/extra.css
new file mode 100644
index 0000000..b197694
--- /dev/null
+++ b/docs/stylesheets/extra.css
@@ -0,0 +1,57 @@
+/* ==========================================================================
+   Global Color and Font Variables
+   ========================================================================== 
*/
+:root {
+  --color-red: #CA463A;
+  --color-white: #fff;
+  --color-dark: #1C1C1C;
+  --font-inter: "Inter",
+  sans-serif;
+}
+
+/* ==========================================================================
+   Header Styles
+   ========================================================================== 
*/
+
+/* Main header container (the top black bar) */
+.md-header {
+  box-shadow: none;
+  background-color: var(--color-dark);
+}
+
+/* Inner content of the header */
+.md-header .md-header__inner {
+  background-color: var(--color-dark);
+  min-height: 80px;
+}
+
+/* Styles for the logo image */
+.md-header .md-header__inner .header-logo img,
+.md-header .md-header__inner .header-logo svg {
+  height: 42px;
+  width: auto;
+}
+
+/* ==========================================================================
+   Navigation Tabs Styles
+   ========================================================================== 
*/
+
+/* The main navigation bar container (the red bar) */
+.md-tabs {
+  background-color: var(--color-red);
+}
+
+/* This ensures the navigation links are centered */
+.md-tabs .md-tabs__list {
+  justify-content: center;
+}
+
+/* Styles for each link in the navigation bar */
+.md-tabs__link {
+  font-family: var(--font-inter);
+  color: var(--color-white);
+
+  /* You can adjust the padding here to control spacing */
+  /* The first value is top/bottom, the second is left/right. */
+  padding: .5rem .6rem;
+}
diff --git a/mkdocs.yml b/mkdocs.yml
index b2ddc93..7cc1cc8 100644
--- a/mkdocs.yml
+++ b/mkdocs.yml
@@ -1,29 +1,21 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
 site_name: SedonaDB
 site_description: "Documentation for Apache SedonaDB"
 nav:
    - Home: index.md
-   - CLI Quickstart: quickstart-cli.md
-   - Python Quickstart: quickstart-python.ipynb
-   - Development: development.md
-   - API Reference:
-      - Python: reference/python.md
-      - SQL: reference/sql.md
+   - SedonaDB Guides:
+     - CLI Quickstart: quickstart-cli.md
+     - Python Quickstart: quickstart-python.ipynb
+     - Development: development.md
+   - SedonaDB Reference:
+      - Python:
+          - Python Functions: reference/python.md
+      - SQL:
+          - SQL Functions: reference/sql.md
+          - Spatial Joins: reference/sql-joins.md
+          - Read Parquet Files: reference/read-parquet-files.md
+   - Blog: "https://sedona.apache.org/latest/blog/";
+   - Apache Software Foundation: "https://sedona.apache.org/latest/asf/asf/";
+   - Return to Sedona Homepage: "https://sedona.apache.org/latest/";
 repo_url: https://github.com/apache/sedona-db
 repo_name: apache/sedona-db
 theme:
@@ -32,7 +24,7 @@ theme:
     font: false
     name: 'material'
   palette:
-    primary: 'deep orange'
+    primary: custom
     accent: 'green'
   favicon: image/sedona_logo_symbol.png
   logo: image/sedona_logo_symbol_white.svg
@@ -47,9 +39,19 @@ theme:
     - search.suggest
     - navigation.footer
     - navigation.instant
+    - navigation.top
+    - navigation.sections
     - navigation.tabs
     - navigation.tabs.sticky
-    - navigation.top
+extra:
+  version:
+    provider: mike
+    default:
+       - 0.1
+
+
+extra_css:
+  - stylesheets/extra.css
 
 copyright: Copyright © 2025 The Apache Software Foundation. Apache Sedona, 
Sedona, Apache, the Apache feather logo, and the Apache Sedona project logo are 
either registered trademarks or trademarks of The Apache Software Foundation in 
the United States and other countries. All other marks mentioned may be 
trademarks or registered trademarks of their respective owners. Please visit <a 
href="https://www.apache.org/";>Apache Software Foundation</a> for more 
details.<img referrerpolicy="no-re [...]
 
@@ -114,21 +116,23 @@ plugins:
         manual: false
    - tags
    - mkdocstrings:
-        enable_inventory: true
-        handlers:
-          python:
-            paths: [python/sedonadb]
-            inventories:
-              - https://docs.python.org/3/objects.inv
-              - https://geopandas.org/en/stable/objects.inv
-              - https://pandas.pydata.org/docs/objects.inv
-            options:
-              docstring_section_style: list
-              docstring_style: google
-              line_length: 80
-              separate_signature: true
-              show_root_heading: true
-              show_signature_annotations: true
-              show_source: false
-              show_symbol_type_toc: true
-              signature_crossrefs: true
+          handlers:
+               python:
+          # 'inventories' is a direct setting for the Python handler
+                    inventories:
+                         - https://docs.python.org/3/objects.inv
+                         - https://geopandas.org/en/stable/objects.inv
+                         - https://pandas.pydata.org/docs/objects.inv
+     # All display and path options go under a SINGLE 'options' block
+                    options:
+                         docstring_section_style: list
+                         docstring_style: google
+                         line_length: 80
+                         separate_signature: true
+                         show_root_heading: true
+                         show_signature_annotations: true
+                         show_source: false
+                         show_symbol_type_toc: true
+                         signature_crossrefs: true
+                         extra:
+                              paths: ['python']

Reply via email to