Dagster models your data as assets with lineage, and does it well. When the output is a decision, a message or a deck, a Task is a program with typed inputs and a schedule.
deals = aisle.integrations.hubspot.list_deals(limit=100) summary = aisle.ai.run_prompt(slug="qbr-summary", variables={"deals": deals}) template = aisle.files.read(aisle.inputs.get("template"), encoding="bytes") deck = aisle.files.write( aisle.powerpoint.fill(template, summary), "qbr.pptx", content_type=PPTX, ) aisle.output(aisle.files.download_url(deck))
Model and provider agnostic.
Different jobs, so read this as scoping. Dagster is a data platform organised around assets. A task runs a business process. The rows below decide which one you have.
| Feature | Aisle | Dagster |
|---|---|---|
| The job | A business process with AI steps | Asset-oriented data orchestration |
| Core abstraction | A task: a script with typed inputs | An asset |
| Language | Python | Python |
| What you operate | Nothing. It is managed. | Self-host, or Dagster+ |
| Deploying a change | Saving puts the revision live | Build and ship a code location |
| Model calls | aisle.ai.run_prompt, with structured output | Bring your own SDK and keys |
| Prompts | Versioned in a prompt platform, called by slug | You build it |
| Integration credentials | Brokered server-side, OAuth refresh handled | Resources you configure |
| Lineage and catalogue | Not included | Yes, and it is the core strength |
| Data quality checks | Not included | Asset checks |
| Partitions and backfills | Not a first-class concept | Yes |
| Tests | A tests.py rides with the task, in the same revision | Your own suite in the repo |
| Local development | Editor with the SDK in scope, draft runs | Strong, with a full local loop |
| Run surface for non-developers | Typed inputs render a form | Launchpad with run config |
| Self-hosting | Not available. The runtime is proprietary. | Yes, it is open source |
A weekly summary or a triage routine modelled as an asset buys lineage and materialisation semantics for something that produces no table.
A developer builds it once, and anyone runs it from a form with their own parameters, without touching a launchpad or a config file. Results land in Slack, as an API response, or as a chat the team asks follow-up questions in.
quarter = aisle.inputs.get("quarter") account = aisle.inputs.get("account")
A model-agnostic prompt platform. The model is a field on the prompt, and so is the output schema, which constrains the answer to JSON matching it, so the next step reads fields instead of parsing prose.
summary = aisle.ai.run_prompt( slug="qbr-summary", variables={"deals": deals}, )
Read, write, and convert doc, xlsx, and pptx. Split and recombine PDFs, fill a PowerPoint template, zip outputs, and get a presigned download URL back.
filled = aisle.powerpoint.fill(template, summary) deck = aisle.files.write(filled, "qbr.pptx", content_type=PPTX) url = aisle.files.download_url(deck)
Keep Dagster for the asset graph. Move the jobs that were never assets.
Dagster is a strong data platform and none of the above competes with that.
Not for data orchestration. There is no asset lineage, no partitions and no asset checks. It replaces Dagster only where a job was modelled as an asset because Dagster was already in the building, while what it actually does is call APIs and models on a schedule.
Yes. A task can be triggered by webhook and return its result synchronously, so an asset calls it and uses the output. Lineage and materialisation stay in Dagster.
A tests.py rides with the task, versioned in the same revision as the code, so a diff shows whether the tests moved with the change. Tests run in a sandbox where any unmocked integration or model call raises, so a test cannot post to a real channel or bill a real model call.
If the pipeline produces data assets that other assets depend on, Dagster. If it produces a decision, a message, a document or a summary someone reads, a task fits better, because the prompts, credentials, structured output and the team-facing result surface are already there.
Competitor details reviewed . Vendors change plans and features without notice, so check theirs before deciding.
A managed Python runtime with versioned prompts, structured model output and nothing to operate.