Ciaren

Scheduler included · no broker

Automate data pipelines with schedules, webhooks, and Python

Ciaren lets you automate data pipelines on your own machine or server. A built-in cron scheduler runs flows on a timer. A secret-protected webhook lets CI, Airflow, or a script start a run. Every run is recorded, and a failure webhook can alert you when one fails.

Ways to start a run

Schedule
Cron, in-process
Webhook
HTTP POST + secret
Python
ciaren-client SDK
REST API
POST /api/flows/{id}/runs
Editor
Run button

What it is

Run flows on a timer or on demand

Automating a data pipeline means two things. The pipeline runs without someone clicking Run, and you find out when it fails. Ciaren covers both for flows that run on one machine.

The scheduler runs inside the ciaren serve process. There is no broker and no extra service to set up. Schedules are stored in the database, so they survive restarts.

Other systems start runs over HTTP. The webhook trigger needs one request and a shared secret. The Python SDK wraps the same API for scripts, notebooks, Airflow, and Prefect. Every run is recorded the same way, whoever started it.

How it works

Schedule, watch, and inspect runs

Schedule

Pick a frequency or write a cron expression

Click Schedule in the flow editor. Choose a frequency, a time of day, a timezone, and an engine. The builder shows the cron expression and a plain summary as you change it.

  • Every N minutes, hourly, daily, weekly, monthly, or custom cron
  • Parameter values per schedule, so one flow can back several schedules
Create a schedule
New schedule
Ciaren New schedule dialog with a frequency picker for minutes, hourly, daily, weekly, monthly, or custom cron, plus time of day, timezone, engine, and an Enabled toggle

Watch

See which schedules are failing

The Schedules page lists each schedule with its cron expression, next run time, and status. The Recent runs column shows the last five runs as icons, oldest to newest.

  • Set max_retries and failed runs retry with exponential backoff (off by default)
  • A schedule disables itself after 5 failures in a row by default
Reliability behaviors
Schedules
Ciaren Schedules page listing saved schedules with cron expressions, next run times, recent run history icons, and status

Inspect

Open any run to find the failing step

A run's detail page shows the flow as a read-only graph. Each node reports its status, row and column counts, a small sample, and how long it took.

  • If a node fails, later nodes are skipped and no output files are written
  • Cancel a running run from its detail page or the API
Runs and run history
Run detail
Ciaren run detail page: the flow as a read-only graph with per-node success status and row counts, and a summary panel on the right

Triggers and alerts

Connect Ciaren to the rest of your stack

Webhook trigger

POST to /api/flows/{id}/trigger with the X-Ciaren-Secret header. The request waits for the run to finish and returns the run.

Safe retries

Send an Idempotency-Key header. A repeated request with the same key returns the original run instead of starting a new one.

Python SDK

ciaren-client has sync and async clients and depends only on httpx. Trigger runs, stream logs, and manage schedules.

CLI for CI jobs

ciaren check validates the setup and exits non-zero on failure. ciaren flow validate checks .flow files before import.

Failure alerts

Set CIAREN_NOTIFY_WEBHOOK_URL and Ciaren posts a JSON alert when a run fails or a schedule disables itself.

Catch-up and overlap

A schedule skips a slot while its previous run is still going. Catch-up for slots missed during downtime is off by default.

Example

Trigger a flow from GitHub Actions

This workflow step starts a Ciaren run and fails the job if the request fails. Store the server URL and flow ID as Actions variables and the secret as an Actions secret.

From the Webhook Trigger guide
yaml
- name: Trigger Ciaren pipeline
  run: |
    curl -f -X POST ${{ vars.CIAREN_URL }}/api/flows/${{ vars.FLOW_ID }}/trigger \
      -H "X-Ciaren-Secret: ${{ secrets.CIAREN_WEBHOOK_SECRET }}" \
      -H "Content-Type: application/json"

Limits

Where the scheduler stops

  • One schedule runs one flow. There are no cross-flow dependencies or DAGs of flows.
  • The scheduler runs in a single process. For high availability, export the flow's Python and run it under your own orchestrator.
  • Scheduled runs run one at a time by default. The limit is a setting.
  • The API has no login by default. Set CIAREN_API_TOKEN when the server is reachable beyond localhost.

Project status: pre-1.0 alpha

Ciaren is pre-1.0 alpha software for small and medium datasets on one machine. It is not built for distributed or streaming pipelines, datasets of 100 GB or more, or multi-user collaboration.

FAQ

Common questions

Does Ciaren replace Airflow?

No. Airflow orchestrates DAGs across infrastructure. Ciaren schedules single flows on one machine. You can start a Ciaren run from Airflow with the webhook trigger or the SDK, or export a flow's Python and run it as an Airflow task.

What happens if the server is down at a scheduled time?

The catch_up setting decides. It is off by default, so missed slots are skipped and you do not get a burst of stale runs. Runs a crash left in the running state are marked failed on startup.

How is the webhook protected?

The trigger returns 404 until you set CIAREN_WEBHOOK_SECRET. Callers must send the secret in the X-Ciaren-Secret header, and Ciaren compares it in constant time. Use HTTPS so the secret is never sent in plain text.

How do I get told when a run fails?

Set CIAREN_NOTIFY_WEBHOOK_URL, and optionally CIAREN_NOTIFY_WEBHOOK_SECRET so the receiver can verify the sender. Both are environment-only by design. They cannot be changed from the UI or the REST API.

Can one flow run with different inputs on different schedules?

Yes. Declare flow parameters, then set parameter values on each schedule. Blank values fall back to the parameter's default.

Read next

Docs and related pages

  • Scheduling

    Cron schedules, retries, catch-up, and auto-disable.

  • Webhook trigger

    Start runs from CI/CD, GitHub Actions, or Airflow.

  • Python SDK

    The ciaren-client package, sync and async.

  • CLI reference

    serve, check, flow validate, and every environment variable.

  • Integrations

    The databases, storage, and APIs a pipeline can read.

  • Source on GitHub

    Code, releases, issues, and discussions. Core AGPL-3.0.

Schedule your first flow

Install Ciaren, build a flow, and click Schedule in the editor toolbar.