utf8proj Syntax Reference v0.16.0

Native DSL grammar for project scheduling. File extension: .proj

← Back to Playground | GitHub Repository

Project Declaration

Every project file must have exactly one project declaration.

project "Project Name" {
    start: 2026-01-15
    end: 2026-12-31          # optional
    currency: EUR              # optional, default: USD
    calendar: standard         # optional, reference to calendar
    status_date: 2026-03-01   # optional, for progress tracking
}
AttributeRequiredDescription
startYesProject start date (YYYY-MM-DD)
endNoProject end date constraint
currencyNoCurrency code for cost calculations
calendarNoReference to default working calendar
status_dateNoAs-of date for progress reporting

Calendar Declaration

Define working days, hours, and holidays.

calendar "standard" {
    working_days: mon-fri
    working_hours: 09:00-18:00
    holiday "Christmas" 2026-12-25
    holiday "New Year" 2026-12-31..2027-01-01
}
AttributeDescription
working_daysDays of the week: mon-fri, mon-sat, etc.
working_hoursDaily working hours: HH:MM-HH:MM
holidaySingle date or date range

Resource Declaration

Define team members with rates and capacity.

resource dev "Senior Developer" {
    rate: 500/day
    capacity: 0.8             # 80% availability
    efficiency: 1.2           # productivity factor
    email: "dev@company.com"
    role: "Backend Developer"
    leave: 2026-08-01..2026-08-15
}
AttributeRequiredDescription
rateNoCost per day or hour: 500/day, 60/hour
capacityNoAvailability factor (0.0-1.0), default: 1.0
efficiencyNoProductivity multiplier, default: 1.0
emailNoContact email
roleNoJob title or role description
leaveNoVacation/leave date range
calendarNoCustom working calendar

Task Declaration

Tasks can be nested to create a Work Breakdown Structure (WBS).

task impl "Implementation Phase" {
    duration: 10d              # fixed calendar duration
    effort: 40d               # person-days of work
    assign: dev, qa           # resource assignments
    depends: design           # dependencies
    priority: 800             # higher = scheduled first
    complete: 50%             # progress tracking
    remaining: 3d             # explicit remaining work
    regime: work              # temporal regime (work/event/deadline)
    summary: "Impl"           # short display name
    note: "Detailed notes"
    tag: backend, critical
    cost: 5000                # fixed cost
    payment: 25000            # milestone payment

    # Nested child task
    task api "API Development" {
        effort: 20d
        assign: dev
    }
}

Duration vs Effort

Duration = calendar time (how many days the task spans)
Effort = person-time (total work required)

PMI Formula: Duration = Effort / Total_Resource_Units

Assignment Syntax

assign: dev                    # 100% allocation
assign: dev@50%                # 50% allocation
assign: dev, qa@75%           # multiple resources
assign: developer * 2         # 2 instances of profile

Dependencies

Four dependency types with optional lag/lead time.

depends: task_a               # Finish-to-Start (default)
depends: task_a SS             # Start-to-Start
depends: task_a FF             # Finish-to-Finish
depends: task_a SF             # Start-to-Finish
depends: task_a +5d            # FS with 5-day lag
depends: task_a SS +2d        # SS with 2-day lag
depends: task_a -1d            # FS with 1-day lead
depends: task_a, task_b        # multiple dependencies
depends: parent.child          # hierarchical reference
TypeSyntaxMeaning
Finish-to-StartFS (default)B starts when A finishes
Start-to-StartSSB starts when A starts
Finish-to-FinishFFB finishes when A finishes
Start-to-FinishSFB finishes when A starts

Milestone Declaration

Zero-duration markers for key dates.

milestone go_live "Go-Live Date" {
    depends: testing, documentation
    regime: event                      # can be scheduled on any day
    start_no_earlier_than: 2026-06-01  # date constraint
    payment: 50000
    note: "Production deployment"
}

Alternatively, set milestone: true on any task.

AttributeDescription
dependsDependencies on tasks or milestones
regimeTemporal regime: work, event, or deadline
start_no_earlier_thanEarliest date the milestone can occur
finish_no_later_thanLatest date the milestone can occur
paymentPayment amount triggered by milestone
noteDescription or notes

Task Constraints

Constrain when tasks can be scheduled.

task deploy "Deployment" {
    effort: 2d
    start_no_earlier_than: 2026-03-01
    finish_no_later_than: 2026-03-15
}
ConstraintMeaning
must_start_onTask must start on exact date
must_finish_onTask must finish on exact date
start_no_earlier_thanTask cannot start before date
start_no_later_thanTask must start by date
finish_no_earlier_thanTask cannot finish before date
finish_no_later_thanTask must finish by date

Temporal Regimes

Control how tasks interact with calendars (RFC-0012).

# Effort-bearing task: respects working days
task develop "Development" {
    regime: work
    effort: 10d
    assign: dev
}

# Event: can occur on any calendar day (including weekends)
milestone release "Product Release" {
    regime: event
    depends: develop
    start_no_earlier_than: 2026-06-15
}

# Deadline: contractual/regulatory date
milestone compliance "Compliance Deadline" {
    regime: deadline
    finish_no_later_than: 2026-06-30
}
RegimeCalendar BehaviorUse Case
workRespects working daysEffort-bearing tasks (default)
eventAny calendar dayReleases, launches, go-lives
deadlineExact date requiredContractual, regulatory dates
Default: All tasks and milestones use regime: work unless specified.
Event regime allows scheduling on weekends/holidays when constraints require it.

Duration & Date Formats

Duration Units

5d     # 5 days
2w     # 2 weeks (10 working days)
8h     # 8 hours (1 day)
1m     # 1 month (~20 working days)

Date Format

2026-01-15    # ISO 8601 format (YYYY-MM-DD)

Date Ranges

2026-01-01..2026-01-15    # inclusive range