Unstract starts where document parsing stops
Unstract asks users to define the fields they need in natural language, then turns varied documents into JSON. Prompt Studio is the authoring surface, and a finished workflow can become a REST deployment or ETL pipeline. The project accepts PDFs, office documents, spreadsheets, presentations, images, and plain data files. Model adapters include hosted providers and Ollama, while extractor and vector-store integrations cover separate parts of the document path.
The platform is broad because extraction in production is rarely one function call. Its architecture shows 4 application layers: a React frontend, Django backend, Celery worker, and FastAPI platform service. Redis supplies caching, RabbitMQ carries work, and PostgreSQL stores state. Optional systems add object stores, cloud drives, warehouses, text-extraction APIs, and vector databases. If you only need a parser output, that service graph is needless. If documents must enter queues and leave as governed records, it may save integration work.
The five-minute quickstart assumes an 8 GB Docker host
The README's fast path is ./run-platform.sh, followed by a browser at frontend.unstract.localhost. It supports Linux and macOS, requires Docker and Docker Compose, and sets an 8 GB RAM minimum. The initial username and password are both unstract, so any shared deployment must change them before access leaves one developer's machine. The script can pull tagged images, build locally, update an installation, prepare environment files, or start containers in detached mode.
A useful extraction also needs at least one LLM adapter. Depending on the flow, operators may add credentials for LLMWhisperer or another parser, Qdrant or another vector store, a source such as S3 or Google Drive, and a warehouse destination. Our 36 MB Python install does not include the weight, images, databases, queues, or remote services behind that path. Model calls and document movement also create data-governance and cost questions outside repository setup.
What happened when we ran it
Our sandbox installed commit fe9c3ff in 63 seconds, adding 33 Python packages and using 36 MB on disk. The build completed successfully in 14 seconds. The checkout contained 2,546 files, roughly 309,172 lines of source, and 79.9 MB before installed dependencies. Those numbers describe the Python project our harness found, not the complete Docker Compose deployment presented in the quickstart.
Pytest exited with status 1 after 16 seconds. It reported 0 passed, 0 failed, and 2 collection or setup errors out of 2. Both tests/e2e and tests/rig/tests stopped while importing tests/rig/critical_paths.py, where Python raised ModuleNotFoundError: No module named 'yaml'. The log proves the dependency was unavailable in our measured environment; it does not establish why. Pip-audit found 0 known vulnerabilities among the 33 installed packages.
The missing yaml import blocks the available suite
A test failure after assertions is different from a suite that never reaches them. Here, 2 collection errors mean our run learned nothing about extraction correctness, API behavior, workers, or the web interface. The repository did have a tests directory and 7 CI workflow files, but no Dockerfile was present in the scan summarized by our harness. A team evaluating Unstract should reproduce the documented container path and run the project's intended checks with the dependency set used in CI.
The practical acceptance test needs real documents. Build a small corpus with the field variations, scans, tables, handwriting, and bad files that matter to the business. Compare returned JSON with labeled truth, inspect failure outputs, and record provider cost. Our 14-second build is evidence that the selected package compiles, not that prompts generalize or that one provider reads sensitive documents accurately. Unstract supplies the workflow; the buyer still owns extraction quality.
OSS Prompt Studio has a reported format mismatch
The README lists 19 file extensions across documents, spreadsheets, presentations, and images. Open issue 1973 says the open-source Prompt Studio rejects JPG, PNG, TIFF, BMP, WEBP, and other non-direct types with an Only PDF files are allowed message because a plugin component is absent. The report says the backend processes those formats when called through the API. Until fixed and verified, teams should distinguish backend format support from what the OSS browser upload can accept.
That difference is material for reviewers who expect a visual document workflow. An API workaround may suit developers, but it removes the no-code path for the affected inputs. Other open reports describe local Compose UI problems, custom hostnames redirecting to frontend.unstract.localhost, and Ollama running on host localhost while containers receive connection refusals. These are normal container-network and product-boundary concerns, yet they undercut the idea that one startup script settles deployment.
Credentials survive only while the encryption key does
Unstract creates an ENCRYPTION_KEY in backend or platform-service environment files and warns users to copy it somewhere safe. The key protects adapter credentials, and losing it makes existing adapters inaccessible. Backups therefore need both database state and the matching key, stored separately with restricted access. PostHog usage analytics can be disabled by setting REACT_APP_ENABLE_POSTHOG=false in the frontend environment. These details belong in the runbook before real provider keys are entered.
GitHub showed 7,172 stars, 94 open issues and pull requests combined, and a last push on August 26, 2026. Release v0.186.2 arrived August 20 with fixes to startup ordering, prompt-output validation, model display, and provider parameters. That pace shows active work but also a platform still moving through frequent v0 releases. Unstract can justify its service count for document APIs and ETL. For a one-process parser, Docling, MinerU, or Unstructured is easier to own.

