The virtual list pattern for large data display
ExpertUse the virtual list pattern to display thousands of rows in a portal without loading all related records into memory.
What you'll learn
- The concept behind the virtual list pattern
- How to populate a global array and display rows through a utility portal
- When the virtual list pattern is worth its complexity
A standard FileMaker portal loads every related record it needs to display. For lists of thousands of items, this is slow and memory-intensive. The virtual list pattern uses a fixed-row portal backed by a utility table (or a global array) that is populated on demand, showing only the visible rows at any time.
The core concept
Instead of a portal that loads real related records, create a small utility table (e.g., "VirtualList") with one row per visible portal row (typically 20–50). Populate these rows with data from your real records whenever the user scrolls, filters, or loads. The portal always shows the same small set of utility records.
// VirtualList table: // id (number, serial) // RowData (text — JSON payload for this visible row) // RowIndex (number — position in the full dataset) // Portal on layout: based on VirtualList TO // Shows only rows 1–30 (or however many fit) // Refreshed by script when user loads data or scrolls
Sign in to track your progress and pick up where you left off.
Sign in to FM Dojo