Deterministic user data API for vlist demos. Every request generates data on-the-fly using seeded hashing — same index always returns the same user. Supports 1M+ items with zero storage.
https://vlist.dev/api
| Name | Type | Default | Description |
|---|---|---|---|
offset |
number | 0 | Start index (0 – 10M) |
limit |
number | 50 | Page size (1 – 200) |
delay |
number | 0 | Simulated latency in ms (0 – 5000) |
total |
number | 1000000 | Dataset size (1 – 10M) |
{
"items": [
{
"id": 1,
"firstName": "Mary",
"lastName": "Baker",
"email": "mary.baker@gmail.com",
"avatar": "MB",
"avatarColor": "#5e35b1",
"role": "Senior PM",
"department": "Security",
"company": "Soylent Corp",
"city": "Portland",
"country": "United States",
"status": "active",
"joinedYear": 2023
},
// ... more items
],
"total": 1000000,
"hasMore": true
}
| Name | Type | Default | Description |
|---|---|---|---|
:id |
number | — | User ID (1-based) (path param) |
delay |
number | 0 | Simulated latency in ms (0 – 5000) |
total |
number | 1000000 | Dataset size for bounds checking (1 – 10M) |
{
"id": 42,
"firstName": "Ronald",
"lastName": "Hughes",
"email": "ronald.hughes1g@fastmail.com",
"avatar": "RH",
"avatarColor": "#fb8c00",
"role": "Mobile Developer",
"department": "Support",
"company": "Morley & Associates",
"city": "Philadelphia",
"country": "United States",
"status": "active",
"joinedYear": 2016
}
Returns API version, available endpoints, parameter definitions, and defaults. Machine-readable.
{
"name": "vlist.dev API",
"version": "0.1.0",
"description": "Deterministic user data API for vlist demos",
"endpoints": { ... },
"defaults": { "total": 1000000, "limit": 50, "maxLimit": 200 }
}
interface User { id: number // 1-based unique identifier firstName: string // From 200 common first names lastName: string // From 128 common last names email: string // first.last[suffix]@domain avatar: string // Two-letter initials ("MB") avatarColor: string // Hex color for avatar background role: string // Job title (32 roles) department: string // Team name (20 departments) company: string // Company name (47 companies) city: string // City name (40 cities) country: string // Country name (mapped from city) status: string // "active" | "inactive" | "pending" | "suspended" joinedYear: number // 2015 – 2025 }
import { createVList } from "vlist" const list = createVList({ container: document.getElementById("list"), item: { height: 56, template: (user) => { const el = document.createElement("div") el.textContent = `${user.firstName} ${user.lastName}` return el } }, adapter: { read: async ({ offset, limit }) => { const res = await fetch( `https://vlist.dev/api/users?offset=${offset}&limit=${limit}` ) return res.json() // { items, total, hasMore } } } })
// Add 500ms delay to simulate real network conditions const res = await fetch( `https://vlist.dev/api/users?offset=${offset}&limit=${limit}&delay=500` )
delay parameter adds server-side sleep to simulate real API latencytotal parameter controls dataset size — useful for testing edge cases (small lists, huge lists)AdapterResponse interface — plug it directly into the async adapter