Time Schedule Blocks

unlisted

by uniplanck

Create visual time schedule blocks in Obsidian with planned/actual comparison, child tasks, productivity totals, and reusable syncId sources.

Updated 2mo agoMIT
View on GitHub

Time Schedule Blocks

Visual time blocks for Obsidian notes, with planned/actual comparison, child tasks, and productivity totals.

Time Schedule Blocks turns fenced Markdown blocks into readable schedules. It is currently a public beta for BRAT installation and is not yet listed as an official Obsidian Community Plugin.

What It Does

  • Renders timeschedule code blocks as visual time schedules.
  • Supports planned and actual blocks, then compares them with timeschedule-diff.
  • Shows productivity totals for productive, half-productive, and unproductive time.
  • Supports nested child tasks, task count badges, priorities, and task sorting.
  • Reuses schedule blocks by @syncId, including read-only cross-file sources in daily compare.
  • Works on desktop and mobile Obsidian.

Screenshots

Screenshots will be added before official Community Plugin submission.

Install Via BRAT

  1. Install the BRAT plugin in Obsidian.
  2. Open BRAT settings and choose Add Beta plugin.
  3. Add this repository:
https://github.com/uniplanck/obsidian-time-schedule-blocks
  1. Enable Time Schedule Blocks in Obsidian's Community plugins list.

The current public beta baseline is 0.11.6.

Quick Start

Paste a timeschedule block into a note:

```timeschedule
@header=on
@title=Today
@syncId=plan-today
@planned=true
@relativeDate=true
2026-05-27-09:00|productive_2h_Deep work
  - [ ] Draft outline
  - [ ] Review notes
2026-05-27-11:30|halfProductive_30m_Admin
2026-05-27-13:00|unproductive_45m_Break
```

Line format:

YYYY-MM-DD-HH:mm|[priority_] [productive_|halfProductive_|unproductive_] duration_title

Examples:

2026-05-27-09:00|!!_productive_2h_Write proposal
2026-05-27-22:30|halfProductive_45m_Planning
2026-05-27-26:00|unproductive_30m_Late cleanup

Extended times such as 24:30 and 26:00 stay on the source logical day for daily comparison.

Daily Planned/Actual Compare

Use @planned=true for planned blocks. Blocks without @planned, or with @planned=false, are treated as actual blocks.

```timeschedule-diff
view=daily
date=2026-05-27
scope=file
```

Daily compare shows planned and actual columns on desktop, and stacks them on mobile. Each column includes productive, half-productive, and unproductive totals.

You can also create a normal productive/unproductive difference box:

```timeschedule-diff
date=2026-05-27
scope=file
```

syncId And Cross-File Sources

Give source blocks a stable @syncId:

```timeschedule
@title=Plan
@syncId=plan-20260527
@planned=true
2026-05-27-09:00|productive_2h_Deep work
```

Then select those sources in a daily compare block:

```timeschedule-diff
view=daily
date=2026-05-27
scope=file
leftSyncId=plan-20260527
rightSyncId=actual-20260527
leftTitle=Plan
rightTitle=Actual
```

For cross-file sources, include the source note path:

```timeschedule-diff
view=daily
date=2026-05-27
scope=file
leftSyncId=plan-20260527
leftSourcePath=Plans/2026-05-27.md
rightSyncId=actual-20260527
rightSourcePath=Logs/2026-05-27.md
leftTitle=Plan
rightTitle=Actual
```

Cross-file syncId source support is read-only in v0.11.6. Direct cross-file editing is not supported yet; the edit action opens the source note instead of changing it from the compare view.

You can also render a read-only sync block:

```timeschedule-sync
path: Plans/2026-05-27.md
id: plan-20260527
```

Tasks, Child Tasks, And Badges

Add tasks under a schedule row with normal Markdown task syntax:

```timeschedule
2026-05-27-09:00|productive_2h_Project work
  - [ ] Main task
    - [ ] Child task
      - [ ] Nested child task
  - [x] Completed task
```
  • Child tasks can nest up to 3 levels.
  • The rendered task badge counts incomplete child tasks recursively.
  • Completed tasks are not included in the incomplete task count.
  • Task priorities use !, !!, or !!!.

Productivity Totals

Use these row markers:

  • productive_ for productive time.
  • halfProductive_, semiProductive_, half-productive_, or semi-productive_ for half-productive time.
  • unproductive_ for unproductive time.

Rendered schedules and daily compare show productive, half-productive, and unproductive totals. All-day rows are displayed but do not contribute to time totals.

Safety Notes And Limitations

  • Inline editing in rendered schedule blocks is not supported yet; use the command palette/editor modal or edit the Markdown source.
  • Direct cross-file editing from daily compare is not supported yet.
  • Cross-file syncId sources are read-only in v0.11.6.
  • Duplicate syncId values are not auto-picked; daily compare shows a warning instead.
  • This plugin is currently installable via BRAT/public beta, not through the official Community Plugins directory.
  • Keep @syncId values stable if other notes reference them.

Development Status

Public beta baseline: 0.11.6.

See CHANGELOG.md for release notes.

For plugin developers

Search results and similarity scores are powered by semantic analysis of your plugin's README. If your plugin isn't appearing for searches you'd expect, try updating your README to clearly describe your plugin's purpose, features, and use cases.