0 to 100: ELEMNT v0.0.2
Long jobs stopped being a black box. Every import, tile build, and export now reports one percentage from start to finish, and job events reach your workspace as they happen. There is also one behavior change you should check before you upgrade.
The twenty-minute silence
Here is a shape most data platforms have, and most of them hide.
You start a large import. The status flips to "running". Then nothing. Ten minutes pass, then twenty, and the interface tells you exactly as much at minute twenty as it did at minute one. Eventually the row flips to "done", or it flips to "failed", and either way you learned nothing along the way about which it was going to be.
The usual fix is a progress bar, and the usual progress bar lies. It measures the one step that happens to be easy to count, normally the middle of the pipeline, and it reports that step as though it were the whole job. So the bar sprints to 100 percent while the job is still unpacking, or it parks at 100 percent while something finalizes out of sight. Nobody trusts it, which means nobody uses it, which means you are back to refreshing the page and guessing.
v0.0.2 fixes the thing under the bar, not the bar.
One number, start to finish
Every process in ELEMNT now reports a single percentage that covers the whole job: preparation, the run itself, and finalizing. Not the middle step wearing a costume. If an import spends its opening stretch preparing, before a single feature lands, that work is inside the number. If a tile build spends its closing stretch finalizing, that is inside the number too.
The number is honest in the other direction as well. Some jobs cannot know their own progress: the work is not countable ahead of time, so any percentage would be a guess. Those jobs now say so. They report that progress is unknown instead of showing a figure we invented to make the interface feel better. A made-up 40 percent is worse than no number, because you will plan around it.
That is the whole design rule for this release, and it is worth stating plainly: report what is true, including "I do not know".
Events, as they happen
The second half of the same problem is delivery. A correct number that only arrives when you hit refresh is still a black box, just a shorter one.
Job and workspace events now reach the console over a live stream. A job's status changes in place, while you watch, without a reload. Each notification also carries more detail than before: what happened, and which resource it belongs to, so a workspace with several jobs running does not collapse into a row of identical "something finished" messages.
The practical version: you can start a long import and keep working. The status changes under you when it changes, instead of waiting for you to come back and ask.
A schema is a contract, and v0.0.2 enforces it
This is the change that can affect an existing pipeline, so it goes near the top rather than in a footnote.
When you declare a field in a collection schema, that declaration is now enforced end to end, in both directions.
A field declared datetime is stored as a real datetime in the datastore, not as text that happens to look like a date. A field declared as text stays text, and is not helpfully promoted to a datetime behind your back because a few values looked parseable. A value that does not match its declared type is rejected with a validation error at the boundary, before anything is written.
Both directions matter. One-way coercion is the reason a date range filter silently returns the wrong rows, or a sort on a timestamp orders lexically instead of chronologically, and those are miserable bugs to chase, because the data looks correct when you read it.
What to check before you upgrade. A payload that used to pass with a mismatched field type (for example, a string in a datetime field) is now rejected with a validation error instead of being quietly converted. Make the payload and the collection schema agree: either send the declared type, or change the field's declared type to match what you actually send.
Nothing else in v0.0.2 changes an API contract. No endpoint was removed or renamed, import and export format coverage is unchanged from v0.0.1, and there is no migration on stored data.
Collections, in a list
Smaller, and overdue. Projects now have a dedicated list view for their collections, so browsing and managing a large project does not depend on remembering where a layer was filed. Once a project holds a hundred layers, a list is not a convenience feature.
Fixes
- Links behind a proxy. API and console links now honor
X-Forwarded-Proto, sohttpsURLs are composed correctly when ELEMNT runs behind a reverse proxy or ingress. If you self-host, this is the one to read. - Tile uploads behind an ingress. Storage transfers for import and tile jobs moved to an internal path, which removes a URL scheme error that could fail a tile upload.
- Event stream noise. The realtime stream no longer raises a spurious error when a client disconnects part way through.
What is not in this release
We would rather tell you now than let you find out.
Git-style data versioning (branch, tag, diff, merge, rollback for spatial data) is on the public roadmap for later this year, and it is not in any build you can use today. Feature-level audit trail and real-time collaborative editing are further out. Bring your own datastore, pointing ELEMNT at a datastore you already run, is on the roadmap. More serving surfaces (OGC API Tiles among them), broader query standards (CRS and CQL2), and browser-based editing are queued behind those.
Two more, not shipped and not promised on a date, but named so you can plan: a more direct path to export a dataset straight from the workspace (export in open formats already works, this is about making it fewer steps), and ingest and retrieval performance for large imports. When they land, they land in a post like this one.
Start now
ELEMNT is free during early access at app.elemnt.earth. Import one real dataset, start a job that takes a while, and watch what the number does.
Then tell us the first thing that annoys you. Reply to any of our emails or ping @elemnt_earth. A person reads every message, and the replies decide what we fix first.
The full record of what has shipped lives on the releases page.