Changelog
v1.18.0 (2025-07-29)
New Features
- Step-level Environment Variables: Added support for environment variables at the step level (#1148) - Thanks to @admerzeau for reporting
- Enhanced Repeat Policy: Added explicit
until
andwhile
modes for clearer repeat logic (#1050) - Thanks to @thefishhat - Live Log Loading: Added real-time log streaming in the Web UI with reload button (#1085) - Thanks to @tapir for reporting
- Exponential Backoff for RetryPolicy: Added support for exponential backoff in retry policies (#1096, #1093) - Thanks to @Sarvesh-11
- OpenID Connect (OIDC) Authentication: Added OIDC support for Web UI authentication (#1107) - Thanks to @Arvintian
- Partial Success Status: Added step-level partial success status for sub-DAG executions (#1115) - Thanks to @ghansham for the feature request
- Distributed Workflow Execution: Implemented distributed task execution via worker processes (#1116, #1145)
- Multiple Email Recipients: Added support for multiple recipients in email notifications (#1125)
- High Availability Support: Added redundant scheduler support for high availability (#1147)
- TLS/mTLS Support: Added TLS/mTLS support for coordinator service
- Scheduler Health Check: Added health check endpoint for scheduler monitoring (#1129) - Thanks to @jonasban for the feature request
- Default DAG Sorting Configuration: Added configuration for default DAG list sorting (#1135)
- GitHub Repository Link: Added GitHub repository link to sidebar
- npm Installation Support: Added global npm package for easy cross-platform installation via
npm install -g dagu
Improvements
- Output Capture: Fixed maximum size setting for output capture
- Web UI Sidebar: Replaced automatic hover with manual toggle control, added persistence (#1121) - Thanks to @ghansham for feedback
- DAG Sorting: Moved sorting logic from frontend to backend for proper pagination (#1123, #1134) - Thanks to @ghansham for reporting
- Dependency Upgrades: Updated multiple dependencies (#1127) - Thanks to @reneleonhardt
- Duration Display: Fixed invalid date display in duration fields (#1137)
- Orphaned DAG Handling: Fixed handling of orphaned running DAGs after unexpected restarts (#1122)
- Log File Migration: Fixed log file path migration from legacy format (#1124)
- Pagination: Fixed hardcoded pagination limit (#1126)
- DAG State Preservation: Preserve previous DAG state when dequeuing (#1118)
Bug Fixes
- Installation Script: Fixed installer script issues (#1091) - Thanks to @Sarvesh-11
- DAG List Sorting: Fixed sort key issue in DAG list (#1134) - Thanks to @ghansham for reporting
- Next Run Display: Fixed next run display for timezones (#1138)
Documentation
- OIDC Documentation: Added comprehensive OIDC authentication documentation
- Heartbeat Interval: Documented heartbeat interval behavior
Contributors
Thanks to our contributors for this release:
Contribution | Author |
---|---|
Installation script fixes, exponential backoff for retry policies | @Sarvesh-11 |
Dependency upgrades | @reneleonhardt |
Enhanced repeat policy with while/until modes | @thefishhat |
OIDC authentication implementation | @Arvintian |
Step-level environment variables feature request | @admerzeau |
Live log loading feature request | @tapir |
Partial success status request, DAG sorting issue, sidebar improvements | @ghansham |
Scheduler health check feature request | @jonasban |
New Contributors
- @Sarvesh-11 made their first contribution in #1091
- @reneleonhardt made their first contribution in #1127
Full Changelog: v1.17.4...v1.18.0
v1.17.4 (2025-06-30)
New Features
- Interactive DAG Selection: Run
dagu start
without arguments to select DAGs interactively (#1074) - Bubble Tea Progress Display: Replaced ANSI progress display with Bubble Tea TUI framework
- OpenTelemetry Support: Added distributed tracing with W3C trace context propagation (#1068)
- Windows Support: Initial Windows compatibility with PowerShell and cmd.exe (#1066)
Improvements
- Scheduler Refactoring: Cleaned up scheduler code for better maintainability (#1062)
- Error Handling: Handle corrupted status files in scheduler queue processing
Bug Fixes
- UI: Fixed 'f' key triggering fullscreen mode while editing DAGs (#1075)
- SSH Executor: Fixed handling of
||
and&&
operators in command parsing (#1067) - JSON Schema: Corrected DAG JSON schema for schedule field (#1071)
- Scheduler: Fixed scheduler discarding queued items when scheduled by
enqueue
(#1070) - Base DAG: Fixed parameter parsing issue in base DAG loading
Documentation
- Updated CLI documentation for interactive DAG selection
- Added OpenTelemetry configuration examples
- Fixed configuration documentation to match implementation
- Added missing feature pages to sidebar
Contributors
Thanks to our contributors for this release:
Contribution | Author |
---|---|
Initial Windows support - PowerShell/cmd.exe compatibility | @pdoronila |
Scheduler refactoring for improved maintainability | @thefishhat |
Interactive DAG selection feature request | @yottahmd |
OpenTelemetry distributed tracing feature request | @jeremydelattre59 |
SSH executor double pipe operator bug report | @NebulaCoding1029 |
'f' key interference in DAG editor bug report | @NebulaCoding1029 |
Log cleanup feature request | @NebulaCoding1029 |
Scheduler queue bug report | Jochen |
v1.17.3 (2025-06-25)
New Features
- HTTP Executor: Added
skipTLSVerify
option to support self-signed certificates (#1046)
Bug Fixes
- Configuration: Fixed DAGU_DAGS_DIR environment variable not being recognized (#1060)
- SSH Executor: Fixed stdout and stderr streams being incorrectly merged (#1057)
- Repeat Policy: Fixed nodes being marked as failed when using repeat policy with non-zero exit codes (#1052)
- UI: Fixed retry individual step functionality for remote nodes (#1049)
- Environment Variables: Fixed environment variable evaluation and working directory handling (#1045)
- Dashboard: Prevented full page reload on date change and fixed invalid date handling (commit 58ad8e44)
Documentation
- Repeat Policy: Corrected documentation and examples to accurately describe behavior (#1056)
Contributors
Thanks to our contributors for this release:
Contribution | Author |
---|---|
HTTP executor skipTLSVerify feature | @mnmercer (report), @nightly-brew (feedback) |
DAGU_DAGS_DIR environment variable fix | @Daffdi (report) |
SSH executor stdout/stderr separation | @NebulaCoding1029 (report) |
Repeat policy bug fixes and documentation | @jeremydelattre59 (reports) |
Retry individual step UI fix | @jeremydelattre59 (report), @thefishhat (implementation) |
Environment variable evaluation fixes | @jhuang732 (report) |
v1.17.2 (2025-06-20)
Bug Fixes
- HTTP Executor: Fixed output not being written to stdout (#1042) - Thanks to @nightly-brew for reporting
Contributors
Thanks to our contributors for this release:
Contribution | Author |
---|---|
HTTP executor output capture fix | @nightly-brew (report) |
v1.17.1 (2025-06-20)
New Features
- One-click Step Re-run: Retry an individual step without touching the rest of the DAG (#1030)
- Nested-DAG Log Viewer: See logs for every repeated child run instead of only the last execution (#1029)
Bug Fixes
- Docker: Fixed asset serving with base path and corrected storage volume locations (#1037)
- Docker: Updated Docker storage paths from
/dagu
to/var/lib/dagu
- Steps: Support camel case for step exit code field (#1031)
Contributors
Thanks to our contributors for this release:
Contribution | Author |
---|---|
One-click Step Re-run – retry an individual step without touching the rest of the DAG | 🛠️ @thefishhat |
Nested-DAG Log Viewer – see logs for every repeated child run | 💡 @jeremydelattre59 |
Docker image polish – fixes for asset paths & storage volumes | 🐳 @jhuang732 (report) |
v1.17.0 (2025-06-18)
Major Features
Improved Performance
- Refactored execution history data for more performant history lookup
- Optimized internal data structures for better scalability
Hierarchical DAG Execution
Execute nested DAGs with full parameter passing and output bubbling:
steps:
- name: run_sub-dag
run: sub-dag
output: OUT
params: "INPUT=${DATA_PATH}"
- name: use output
command: echo ${OUT.outputs.RESULT}
Multiple DAGs in Single File
Define multiple DAGs in one YAML file using ---
separator:
name: main-workflow
steps:
- name: process
run: sub-workflow # Defined below
---
name: sub-workflow
steps:
- name: task
command: echo "Hello from sub-workflow"
Parallel Execution with Parameters
Execute commands or sub-DAGs in parallel with different parameters for batch processing:
steps:
- name: get files
command: find /data -name "*.csv"
output: FILES
- name: process files
run: process-file
parallel: ${FILES}
params:
- FILE_NAME: ${ITEM}
Enhanced Web UI
- Overall UI improvements with better user experience
- Cleaner design and more intuitive navigation
- Better performance for large DAG visualizations
Advanced History Search
New execution history page with:
- Date-range filtering
- Status filtering (success, failure, running, etc.)
- Improved search performance
- Better timeline visualization
Better Debugging
- Precondition Results: Display actual results of precondition evaluations in the UI
- Output Variables: Show output variable values in the UI for easier debugging
- Separate Logs: stdout and stderr are now separated by default for clearer log analysis
Queue Management
Added enqueue functionality for both API and UI:
# Queue a DAG for later execution
dagu enqueue --run-id=custom-id my-dag.yaml
# Dequeue
dagu dequeue my-dag.yaml
Partial Success Status
New "partial success" status for workflows where some steps succeed and others fail, providing better visibility into complex workflow states.
API v2
- New
/api/v2
endpoints with refactored schema - Better abstractions and cleaner interfaces
- Improved error handling and response formats
- See OpenAPI spec for details
Docker Improvements
Optimized Images
Thanks to @jerry-yuan:
- Significantly reduced Docker image size
- Split into three baseline images for different use cases
- Better layer caching for faster builds
Container Enhancements
Thanks to @vnghia:
- Allow specifying container name
- Support for image platform selection
- Better container management options
Enhanced Features
Advanced Repeat Policy
Thanks to @thefishhat:
- Enhanced in v1.17.5: Explicit 'while' and 'until' modes for clear repeat logic
- Conditions for repeat execution
- Expected output matching
- Exit code-based repeats
steps:
- name: wait for service
command: check_service.sh
repeatPolicy:
repeat: until # NEW: Explicit mode (while/until)
condition: "${STATUS}"
expected: "ready" # Repeat UNTIL status is ready
intervalSec: 30
limit: 60 # Maximum attempts
- name: monitor process
command: pgrep myapp
repeatPolicy:
repeat: while # Repeat WHILE process exists
exitCode: [0] # Exit code 0 means found
intervalSec: 10
Bug Fixes & Improvements
- Fixed history data migration issues
- Improved error messages and logging
- Better handling of edge cases in DAG execution
- Performance improvements for large workflows
- Various UI/UX enhancements: #925, #898, #895, #868, #903, #911, #913, #921, #923, #887, #922, #932, #962
Breaking Changes
DAG Type Field (v1.17.0-beta.13+)
Starting from v1.17.0-beta.13, DAGs now have a type
field that controls step execution behavior:
type: chain
(new default): Steps are automatically connected in sequence, even if no dependencies are specifiedtype: graph
(previous behavior): Steps only depend on explicitly defined dependencies
To maintain the previous behavior, add type: graph
to your DAG configuration:
type: graph
steps:
- name: task1
command: echo "runs in parallel"
- name: task2
command: echo "runs in parallel"
Alternatively, you can explicitly set empty dependencies for parallel steps:
steps:
- name: task1
command: echo "runs in parallel"
depends: []
- name: task2
command: echo "runs in parallel"
depends: []
Migration Required
History Data Migration: Due to internal improvements, history data from 1.16.x requires migration:
# Migrate history data
dagu migrate history
After successful migration, legacy history directories are moved to <DAGU_DATA_DIR>/history_migrated_<timestamp>
for safekeeping.
Contributors
Huge thanks to our contributors for this release:
Contribution | Author |
---|---|
Optimized Docker image size and split into baseline images | @jerry-yuan |
Container name & image platform support | @vnghia |
Enhanced repeat-policy conditions | @thefishhat |
Queue functionality implementation | @kriyanshii |
Partial success status | @thefishhat |
Countless reviews & feedback | @ghansham |
Installation
Try the beta version:
# Docker
docker run --rm -p 8080:8080 ghcr.io/dagu-org/dagu:latest dagu start-all
# Or download specific version
curl -L https://raw.githubusercontent.com/dagu-org/dagu/main/scripts/installer.sh | bash -s -- --version v1.17.0-beta
v1.16.0 (2025-01-09)
New Features
Enhanced Docker Image
- Base image updated to
ubuntu:24.04
- Pre-installed common tools:
sudo
,git
,curl
,jq
,python3
, and more - Ready for production use with essential utilities
Dotenv File Support
Load environment variables from .env
files:
dotenv: /path/to/.env
# or multiple files
dotenv:
- .env
- .env.production
🔗 JSON Reference Expansion
Access nested JSON values with path syntax:
steps:
- name: sub workflow
run: sub_workflow
output: SUB_RESULT
- name: use output
command: echo "The result is ${SUB_RESULT.outputs.finalValue}"
If SUB_RESULT
contains:
{
"outputs": {
"finalValue": "success"
}
}
Then ${SUB_RESULT.outputs.finalValue}
expands to success
.
Advanced Preconditions
Regex Support: Use re:
prefix for pattern matching:
steps:
- name: some_step
command: some_command
preconditions:
- condition: "`date '+%d'`"
expected: "re:0[1-9]" # Run only on days 01-09
Command Preconditions: Test conditions with commands:
steps:
- name: some_step
command: some_command
preconditions:
- command: "test -f /tmp/some_file"
Enhanced Parameter Support
List Format: Define parameters as key-value pairs:
params:
- PARAM1: value1
- PARAM2: value2
CLI Flexibility: Support both named and positional parameters:
# Positional
dagu start my_dag -- param1 param2
# Named
dagu start my_dag -- PARAM1=value1 PARAM2=value2
# Mixed
dagu start my_dag -- param1 param2 --param3 value3
Enhanced Continue On Conditions
Exit Code Matching:
steps:
- name: some_step
command: some_command
continueOn:
exitCode: [1, 2] # Continue if exit code is 1 or 2
Mark as Success:
steps:
- name: some_step
command: some_command
continueOn:
exitCode: 1
markSuccess: true # Mark successful even if failed
Output Matching:
steps:
- name: some_step
command: some_command
continueOn:
output: "WARNING" # Continue if output contains "WARNING"
# With regex
- name: another_step
command: another_command
continueOn:
output: "re:^ERROR: [0-9]+" # Regex pattern matching
🐚 Shell Features
Piping Support:
steps:
- name: pipe_example
command: "cat file.txt | grep pattern | wc -l"
Custom Shell Selection:
steps:
- name: bash_specific
command: "echo ${BASH_VERSION}"
shell: bash
- name: python_shell
command: "print('Hello from Python')"
shell: python3
Sub-workflow Output
Parent workflows now receive structured output from sub-workflows:
{
"name": "some_subworkflow",
"params": "PARAM1=param1 PARAM2=param2",
"outputs": {
"RESULT1": "Some output",
"RESULT2": "Another output"
}
}
🔗 Simplified Dependencies
String format now supported:
steps:
- name: first
command: echo "First"
- name: second
command: echo "Second"
depends: first # Simple string instead of array
Improvements
- Environment Variable Expansion: Now supported in most DAG fields
- UI Enhancements: Improved DAG visualization for better readability
- Storage Optimization: Reduced state file sizes by removing redundant data
Bug Fixes
- Fixed: DAGs with dots (
.
) in names can now be edited in the Web UI
Contributors
Thanks to our contributor for this release:
Contribution | Author |
---|---|
Improved parameter handling for CLI - support for both named and positional parameters | @kriyanshii |
Previous Versions
For older versions, please refer to the GitHub releases page.
Version Support
- Current: v1.16.x (latest features and bug fixes)
- Previous: v1.15.x (bug fixes only)
- Older: Best effort support
Migration Guides
Upgrading to v1.16.0
Most changes are backward compatible. Key considerations:
- Docker Users: The new Ubuntu base image includes more tools but is slightly larger
- Parameter Format: Both old and new formats are supported
- State Files: Old state files are automatically compatible
Breaking Changes
None in v1.16.0
See Also
- Installation Guide - Upgrade instructions
- Configuration Reference - New configuration options
- Examples - New feature examples