
Ecosystem / Shared package · Shipped
A high-performance CSV import engine — load an entire product catalog in one streaming job, without freezing the register.
ESTINAD Importer is the CSV import engine for the ecosystem. Restaurants and retailers migrating from spreadsheets or another POS can load entire product catalogs in one streaming job — with validation, deduplication, and live progress — while the register keeps running.
Capabilities
Big catalogs, imported cleanly.
Built for the real migration moment — thousands of SKUs from a spreadsheet or a legacy POS, loaded without bringing the counter to a halt.
Streaming large files
Read CSV files of any size in chunked passes so memory stays bounded even on million-row catalogs.
Schema-driven validation
Declarative import schemas coerce types, validate fields, and deduplicate rows before anything hits your database.
Live import progress
Every job exposes a progress stream with rows read, throughput, and completion status — visible in the POS import screen.
Cancellable imports
Long-running jobs can be cancelled mid-stream without leaving the database in an inconsistent state.
PocketBase product sink
Validated rows write directly into the local product catalog — already wired into ESTINAD POS product import.
Native-accelerated parsing
When the native DLL is available, CSV parsing and hashing run on a fast native path; pure-Dart fallback keeps imports working everywhere.
Parallel validation (optional)
Multi-isolate validation can be enabled for heavy schemas — off by default for typical POS imports where serial mode is faster.
Import flow
From spreadsheet to live catalog in minutes.
A guided, streaming job — validate, deduplicate, write — with progress visible the whole way.
Prepare
- 01Export your catalog to CSV from a spreadsheet or legacy POS
- 02Map columns to the ESTINAD product schema
- 03Declarative schema coerces types and validates fields
- 04Duplicate rows are flagged before import
Import
- 01Streaming pass keeps memory bounded on large files
- 02Progress stream shows rows read and throughput
- 03Native parsing accelerates the job when available
- 04Cancel mid-stream without corrupting data
Go live
- 01Validated rows write to the local PocketBase catalog
- 02Products appear immediately in the POS
- 03Register keeps running throughout
- 04Review any rejected rows after the job
Integrations
Where it plugs in.
Ecosystem fit
The migration engine for the platform.
Wired into the POS
The product import screen in ESTINAD POS uses Importer directly — new stores and seasonal catalog drops are one job away.
Accelerated by Native
When the native DLL is present, parsing and hashing take the fast native path; otherwise a pure-Dart fallback keeps imports working.
Built on Core schemas
Declarative CSV import schemas and PocketBase/Supabase sinks come from ESTINAD Core, so import rules stay consistent across the ecosystem.
Tech highlightHundreds of thousands of rows per second.
Benchmarked at roughly 390,000 rows per second in serial mode on dev hardware for typical 5-field product schemas — large catalog migrations complete in seconds, not hours.
On the roadmap
Two Importer capabilities are planned but not yet shipped.
- Supabase bulk sink (SupabaseBulkSink, Phase 4)
- Guided ESTINAD Import Wizard UI in ESTINAD UI (Phase 3)
FAQ
Questions operators ask first.
Will importing freeze my register?
No. Importer streams in chunked passes with bounded memory, so the POS keeps serving while a large catalog loads.
Can I cancel a job partway through?
Yes. Long-running jobs can be cancelled mid-stream without leaving the database in an inconsistent state.
How does it handle bad rows?
A declarative schema validates types and deduplicates rows before anything is written, so fewer bad records need cleaning up later.
