- Create Railway Account: https://railway.app
- New Project → Provision PostgreSQL
- Add Service → Empty Service
- Connect GitHub repo:
https://github.com/Sandeeprdy1729/timps - Root Directory:
packages/server - Start Command:
npm start - Add Environment Variables:
NODE_ENV=productionPORT=3000DATABASE_URL(from Railway PostgreSQL)QDRANT_URL=http://qdrant:6333(or use in-memory embeddings)
# Install Railway CLI
npm i -g @railway/cli
# Login
railway login
# Link project
cd /path/to/timps
railway init
railway link <project-id>
# Deploy
railway up- Create Render Account: https://render.com
- New → Web Service
- Connect GitHub:
https://github.com/Sandeeprdy1729/timps - Root Directory:
packages/server - Build Command:
npm install && npm run build - Start Command:
npm start - Add Environment Variables:
NODE_ENV=productionPORT=3000DATABASE_URL(from Render PostgreSQL)QDRANT_URL=http://qdrant:6333
# Build locally
cd /path/to/timps
docker build -t timps-backend -f packages/server/Dockerfile .
# Push to Docker Hub
docker tag timps-backend sandeeprdy1729/timps-backend
docker push sandeeprdy1729/timps-backend
# Deploy anywhere (AWS, GCP, Azure, etc.)- Create DigitalOcean account
- Apps → Create App → GitHub
- Select
packages/serverdirectory - Configure with Dockerfile or buildpack
- Add PostgreSQL database
The modern TIMPS memory architecture. Agents write to and read from a shared,
horizontally-scalable MemoryServer (HTTP 4100 / gRPC 4101) instead of a
per-project file store. Data lives in Postgres (primary + 2 true streaming
replicas) behind PgBouncer, Redis powers cache + pub/sub + CRDT conflict
sync, and Qdrant does hybrid vector search. Prometheus + Grafana + OTel ship in
the same stack.
Agents (timps-mcp)
│ TIMPS_URL + TIMPS_MEMORY_URL
▼
MemoryServer ×N (stateless, scale with --scale memory=3)
│ │ │
▼ ▼ ▼
Postgres(primary PgBouncer Redis (cache+pub/sub) Qdrant (vectors)
+ 2 replicas) ▲
└── Prometheus → Grafana (port 3000)
cd packages/memory-core
# Generate secrets (never commit these)
echo "POSTGRES_PASSWORD=$(openssl rand -base64 18)" > .env
echo "REDIS_PASSWORD=$(openssl rand -base64 18)" >> .env
docker compose up -d
docker compose pscurl http://localhost:4100/health # liveness
curl http://localhost:4100/health/readiness # probes Postgres/Redis/EventBus/Cache
curl http://localhost:4100/memory/stats # memory stats- Grafana dashboards:
http://localhost:3000(admin /$GRAFANA_ADMIN_PASSWORD) - Prometheus:
http://localhost:9090
timps setup --server http://localhost:4100This registers timps (MCP) with every installed agent in server mode. For the
memory tools to hit the shared server, also export TIMPS_MEMORY_URL into the
agent's environment (use the setup command's escape hatch):
TIMPS_SETUP_ENV=TIMPS_MEMORY_URL=http://localhost:4100 timps setup --server http://localhost:4100Verify with timps setup --list, then restart your agents.
docker compose up -d --scale memory=3Replicas auto-register with the shared Postgres/Redis/Qdrant — no per-instance state. Prometheus discovers every replica individually.
For a small team or a laptop, run the server directly with the file backend:
MEMORY_PORT=4100 node packages/memory-core/dist/server/start.jsKustomize manifests live in packages/memory-core/deploy/k8s/
(kustomize build … | kubectl apply -f -) with an HPA scaling 2–10 pods at 70%
CPU. Swap docker-compose.yml Postgres/Redis/Qdrant for managed equivalents and
re-point the POSTGRES_*, REDIS_URL, QDRANT_URL env vars.
Update your VS Code extension:
{
"timps.serverUrl": "https://your-timps-app.railway.app"
}cd /path/to/timps
# Start with Docker (full stack)
docker compose up -d
# Or start individual services
docker compose up -d postgres qdrant
# Then run API locally
cd packages/server
npm install
npm run devYour API will be at http://localhost:3000