Skip to Content
Quick Start

Quick Start

Get Endee running and make your first vector search in minutes.


Run Endee

Prerequisite: Install Docker Desktop  for your OS (Mac, or Linux). That’s the only thing you need.

Once installed, verify it works:

docker --version

Then run Endee with a single command:

docker run \ -p 8080:8080 \ -v ./endee-data:/data \ --name endee-server \ endeeio/endee-server:latest

Docker pulls the image automatically if not already present, and Endee starts.

What each flag means:

FlagMeaning
-p 8080:8080Port mapping (your_machine:container). Makes the server reachable at localhost:8080
-v ./endee-data:/dataStores Endee’s database files in an endee-data/ folder in your current directory
--name endee-serverNames the container so you can reference it easily (e.g. docker stop endee-server)
e NDD_AUTH_TOKEN=your_tokenOptional. Protects the server with a token — every client request must include it. Omit to run with no authentication.
endeeio/endee-server:latestThe official pre-built Endee image from Docker Hub

Want to store data in a different folder? Replace ./endee-data with any path — only change the left side of the :, the right side (/data) is fixed:

-v ~/path/to/your/data/directory:/data # stores in your home directory -v C:/Users/YourName/endee-data:/data # Windows local drive -v /Volumes/MyDrive/endee-data:/data # macOS external drive

Verify it’s running

Open http://localhost:8080  in your browser — you should see the Endee dashboard.

Stop the server

docker stop endee-server

Your data stays safe in the folder you configured.


Install the SDK

pip install endee

Requirements: Python 3.8+


Initialize the Client

The client connects to localhost:8080 by default.

from endee import Endee client = Endee()

Using Authentication?

Local server: If your server has NDD_AUTH_TOKEN set, pass the same token when initializing:

client = Endee("ndd-auth-token") client.set_base_url("http://0.0.0.0:8080/api/v1")

See Authentication for details.

Endee Serverless: Go to app.endee.io , create a token, then pass it here:

client = Endee("your-serverless-token")

Create an Index

from endee import Endee, Precision client.create_index( name="my_index", dimension=384, space_type="cosine", precision=Precision.INT8 )

Parameters:

ParameterDescriptionDefault
NameUnique index name (alphanumeric + underscore, max 48 chars)Required
DimensionDense vector dimensionality (max 10,000)Required
Space TypeDistance metric: cosine, l2, or ipRequired
MHNSW graph connectivity16
EF ConstructionHNSW construction parameter128
PrecisionVector quantization level (see Precision)INT8

Other index operations — list, get, describe, delete — are covered in Concepts → Indexes.


Upsert Vectors

Maximum 1,000 vectors per upsert call. Vector dimension must match the index dimension.

index = client.get_index(name="my_index") index.upsert([ { "id": "doc1", "vector": [...], # 384-dim float list "meta": {"title": "First Document"}, "filter": {"category": "tech"} }, { "id": "doc2", "vector": [...], "meta": {"title": "Second Document"}, "filter": {"category": "science"} } ])

Vector fields:

FieldRequiredDescription
IDYesUnique string identifier
VectorYesDense embedding array — must match index dimension
MetaNoArbitrary metadata returned in query results
FilterNoKey-value pairs used for filtered queries

results = index.query( vector=[...], # query embedding top_k=5, ef=128, include_vectors=False ) for item in results: print(f"ID: {item['id']}, Similarity: {item['similarity']:.3f}")

Query parameters:

ParameterDescriptionDefaultMax
VectorQuery embedding — must match index dimensionRequired
Top KNumber of results to return10512
EFSearch quality — higher explores more candidates1281024
Include VectorsInclude stored vector data in resultsfalse
FilterFilter conditionsNone

Filtered Query

results = index.query( vector=[...], top_k=5, filter=[ {"category": {"$eq": "tech"}}, {"score": {"$range": [80, 100]}} ] )

Filter operators:

OperatorDescriptionExample
$eqExact match{“status”: {“$eq”: “published”}}
$inMatch any value in list{“tags”: {“$in”: [“ai”, “ml”]}}
$rangeNumeric range (inclusive, values 0–999){“score”: {“$range”: [70, 95]}}

Next Steps