Skip to content

Quick Start

Get Vectis Commerce running locally in under 5 minutes.

Prerequisites

  • Docker + Docker Compose v2
  • Python 3.12+
  • Node.js 22+
  • Access to both the core (vectis-commerce) and enterprise-extensions repos

1. Clone Both Repos

All extensions live in the separate enterprise-extensions repo. Clone it as a sibling of the core repo, in the same parent directorydocker-compose.yml bind-mounts ../enterprise-extensions read-only into the API container and dev-links it via VECTIS_DEV_EXTENSIONS:

git clone git@github.com:vectiscommerce/vectis-commerce.git vectis
git clone git@github.com:vectiscommerce/enterprise-extensions.git enterprise-extensions

Without the sibling checkout, starting the containers fails (the bind mount is missing) and no extensions are discovered.

2. Start Infrastructure

cd vectis
docker compose up -d

This starts PostgreSQL, Valkey, Redpanda, Temporal, Meilisearch, Typesense, RustFS, and their UIs.

3. Install Dependencies

make setup

Or manually:

cd backend && pip install -e ".[dev]"
cd ../admin && npm install
cd ../storefront && npm install

4. Initialize the Database

make migrate-init

This runs Alembic migrations and seeds the database with a default channel, sample products, exchange rates, and admin user. Then create the Temporal schedules (one-time, after the services are up):

make schedules

5. Start Dev Servers

Run each in a separate terminal:

make api              # FastAPI on :8000
make worker           # Temporal worker
make admin-dev        # Admin on :5173
make storefront-dev   # Storefront on :5174

6. Open the Apps

Most tool UIs are not published on host localhost ports — the containers only expose: their ports internally and are reached through the shared Caddy dev-proxy at *.vectis.eto (see the dev-proxy reference). Add the *.vectis.eto hosts to /etc/hosts (or run the proxy's setup) before opening these.

App URL Credentials
Admin Panel https://admin.vectis.eto admin@vectis.local / admin
Storefront https://vectis.eto Guest or create account
GraphQL IDE https://api.vectis.eto/graphql
Redpanda Console https://redpanda.vectis.eto
Temporal UI https://temporal.vectis.eto — (internal port 8080)
Grafana https://grafana.vectis.eto admin / admin
Prometheus https://prometheus.vectis.eto
Alertmanager https://alertmanager.vectis.eto
Mailpit (dev email UI) https://mail.vectis.eto

The following services are host-mapped and reachable directly on localhost (data/protocol endpoints, not web UIs):

Service Host port Notes
PostgreSQL localhost:5432 Database connection
Valkey localhost:6379 Cache / sessions
Redpanda (Kafka API) localhost:19092 Broker (schema-registry 18081, pandaproxy 18082)
Temporal (gRPC) localhost:7233 Workflow server
Meilisearch localhost:7700 Admin search — key vectis-dev-key
Typesense localhost:8108 Storefront search — key vectis-dev-key
Mailpit (SMTP) localhost:1025 SMTP only — the web UI is proxy-only (see above)
RustFS (S3 API) localhost:9000 S3-compatible object store — rustfsadmin / rustfsadmin

Environment Variables

Copy the example env file and adjust as needed:

cp .env.example .env

Key variables:

Variable Default Description
DATABASE_URL postgresql+asyncpg://vectis:vectis@localhost:5432/vectis PostgreSQL connection
REDIS_URL redis://localhost:6379/0 Redis for sessions and cache
REDPANDA_BROKER localhost:19092 Redpanda broker address
TEMPORAL_HOST localhost:7233 Temporal server
SECRET_KEY (required) JWT signing key — generate with python -c "import secrets; print(secrets.token_urlsafe(64))"
MEILISEARCH_URL http://localhost:7700 Admin search engine (Meilisearch)
MEILISEARCH_API_KEY vectis-dev-key Meilisearch admin key
TYPESENSE_URL http://localhost:8108 Storefront search engine (Typesense)
TYPESENSE_API_KEY vectis-dev-key Typesense admin key
TYPESENSE_SEARCH_ONLY_KEY vectis-search-key Typesense search-only key (for scoped key generation)
S3_ENDPOINT http://localhost:9000 S3-compatible endpoint — RustFS in dev (compose services use http://rustfs:9000)
S3_ACCESS_KEY / S3_SECRET_KEY rustfsadmin / rustfsadmin Object-store credentials
S3_BUCKET vectis-uploads Uploads bucket (created by rustfs-setup)
FILE_STORAGE_PROVIDER rustfs Active file-storage backend by provider name (rustfs, s3, minio, …)

Docker Compose Services

The full docker-compose.yml includes 21 app services (plus a one-shot rustfs-setup init job). The api service mounts the sibling ../enterprise-extensions checkout read-only and discovers it via VECTIS_DEV_EXTENSIONS:

Service Image Purpose
api Custom (backend/) FastAPI application server
admin Custom (admin/) SvelteKit admin dashboard
storefront Custom (storefront/) SvelteKit storefront
postgres postgres:18-alpine Primary database
redis valkey/valkey:9-alpine Session store + cache
redpanda redpandadata/redpanda Event streaming (Kafka-compatible)
redpanda-console redpandadata/console Redpanda management UI
temporal temporalio/auto-setup Workflow engine
temporal-worker Custom (backend/) Temporal activity worker
temporal-ui temporalio/ui Temporal management UI
meilisearch getmeili/meilisearch Admin full-text search
typesense typesense/typesense:27.1 Storefront product search
rustfs rustfs/rustfs S3-compatible object storage (default local-dev file store)
rustfs-setup minio/mc One-shot init job that creates the RustFS uploads bucket (mc is used purely as an S3 client)
mailpit axllent/mailpit Dev SMTP (localhost:1025) + webmail UI at mail.vectis.eto
event-consumer Custom (backend/) Redpanda event consumer
postgres-exporter prometheuscommunity/postgres-exporter Prometheus metrics for PostgreSQL
redis-exporter oliver006/redis_exporter Prometheus metrics for Redis
prometheus prom/prometheus Metrics scraper (proxy-only UI)
grafana grafana/grafana Dashboards (proxy-only UI)
alertmanager prom/alertmanager Prometheus alert routing
alertmanager-stub Custom (backend/) Local alert webhook sink for dev

Useful Make Commands

make help              # List all commands
make up / make down    # Start/stop Docker services
make test              # Run pytest suite
make lint              # Lint with Ruff
make typecheck         # Type check with mypy
make check             # All quality checks (single source of truth)

make check is the gate. It runs Ruff, mypy, the resolver-duplicate AST guard, the zero-extension-imports AST guard, the extension→core import ratchet, the extension-migration-ownership guard, the model-drift guard, the extensions.lock gate, the schema-drift guard, the extension-UI sync gate, and the ~2,260-test pytest suite. Run it from the repo root on the host — each sub-check docker execs into the API container itself. CI is currently disabled in favour of this local gate; push to main once make check passes:

make check

Prometheus + Grafana (Optional)

The monitoring services come up with the default docker-compose.yml. Their UIs are proxy-only (see the app table above):

Service URL Notes
Prometheus prometheus.vectis.eto Scrapes /metrics from the API every 15s
Grafana grafana.vectis.eto Login admin / admin; seeded dashboards (vectis_api, vectis_cache, vectis_postgres, vectis_redis, vectis_redpanda, vectis_temporal)