Two-way task synchronization between Obsidian (Tasks plugin) and Singularity β a cross-platform task manager with habits, kanban, and time tracking.
| Feature | Description |
|---|---|
| π Bidirectional sync | Keep tasks in sync between Obsidian and Singularity β changes in either app are reflected in both |
| π Sidebar panel | View and manage Singularity tasks directly inside Obsidian β grouped by project, with checkboxes and filters |
| β Habits (3 states) | Configurable habit tracker with 3 states (not done / half / full), colors from Singularity |
| π Inline habits panel | Embed an interactive habits tracker inside any note via ```singularity-habits code block |
| π Smart notifications | #notify/30, #notify/1h, #notify/1d β time-based reminders |
| π Per-project files | Tasks are stored in project files (/project/*.md) β file location IS the project membership |
| π Project descriptions | Description from Singularity projects is synced to #### π Notes section in project files |
| π Project template | Customizable template for new project files with {{title}}, {{singularity-id}}, {{date}}, {{emoji}}, {{note}} |
| ποΈ Soft-delete | Removing tasks or project files in Obsidian soft-deletes them in Singularity |
| β‘ Priority mapping | πΊβ«πΌπ½β¬ β 0 / 1 / 2 |
| ποΈ Conflict resolution | 4 strategies: Latest Wins / Obsidian Wins / Singularity Wins / Manual |
| π SecretStorage | API key stored securely in Obsidian's protected storage, never in plain text |
| β±οΈ Status bar | Last sync time displayed in the status bar |
| π± Mobile support | Works on desktop and mobile |
- Obsidian Tasks plugin must be installed and enabled. Singularity Sync relies on the Tasks plugin's task format β emoji dates (
βπ«β³π β β) and priority markers (πΊβ«πΌπ½β¬) are parsed using the Tasks plugin standard.
- Install BRAT from Community Plugins
- Add
https://github.com/nodeus/obsidian-singularity-syncto BRAT - Enable Singularity Sync in Community Plugins
Copy main.js, manifest.json, styles.css to .obsidian/plugins/singularity-sync/.
- Get an API key from your Singularity account
- Open Settings β Singularity Sync in Obsidian
- Enter your API key and base URL (default:
https://api.singularity-app.com/v2) - Run Singularity Sync: Sync now from the command palette (or click the ribbon icon)
- Open the Singularity Panel via ribbon icon or command palette
Only tasks with the #todo tag are synced. The expected format:
- [ ] #todo Task title #tags β« β 2026-05-11 π« 2026-05-12 β³ 2026-05-12 15:30 π
2026-05-14 #notify/30
Projects: Project membership is determined by file location, not by tags.
- Tasks in
/project/My Project.mdβ belong to "My Project" - Tasks in
/tasks/tasks.mdβ inbox (no project) - No
#project-nametag needed in the task line
Each project file (/project/<name>.md) contains a singularity-id in its frontmatter that links it to the Singularity project:
---
singularity-id: 550e8400-e29b-41d4-a716-446655440000
---
This is set automatically when the file is created. Do not remove or modify it manually.
| Position | Emoji | Meaning | Format |
|---|---|---|---|
| 1 | β |
Created date | YYYY-MM-DD |
| 2 | π« |
Start date | YYYY-MM-DD |
| 3 | β³ |
Scheduled date | YYYY-MM-DD HH:mm |
| 4 | π
|
Due date | YYYY-MM-DD |
| 5 | β
|
Done date | auto |
| 6 | β |
Cancelled date | auto |
Priority emoji (πΊβ«πΌπ½β¬) goes after date emoji, before notify tags.
| Obsidian | Singularity |
|---|---|
πΊ β« |
0 (high) |
πΌ |
1 (medium) |
π½ β¬ |
2 (low) |
| Tag | Singularity notifies |
|---|---|
#notify or #notify/0 |
[0] (immediately) |
#notify/30 |
[30] (30 min before) |
#notify/1h |
[60] (1 hour before) |
#notify/5h |
[300] (5 hours before) |
#notify/1d |
[1440] (1 day before) |
Notification tags are always placed at the end of the task line.
| Obsidian | Singularity | Rule |
|---|---|---|
β |
createdDate + start (fallback) |
Used as start if no π« |
π« |
start (date only) |
Overrides β for start |
β³ |
start (date + time) |
Overrides π« for start |
π
|
deadline (date) |
β |
β
|
checked: 1 + archive |
Completes task |
| Rule | Description |
|---|---|
| Task matching | Tasks are matched first by externalId (stored in local database), then by normalized title as fallback |
| Soft-delete | Removing the last synced #todo from a file soft-deletes the task in Singularity. Deleting a project file soft-deletes the entire project |
| Rename detection | Renaming a project in Singularity automatically renames the corresponding .md file in Obsidian |
| SG tags with spaces | Tags containing spaces from Singularity are converted: #my tag β #my_tag |
| Setting | Default | Description |
|---|---|---|
| Base URL | https://api.singularity-app.com/v2 |
Singularity API endpoint |
| Tasks file | /tasks/tasks.md |
File for inbox tasks (no project) |
| Projects folder | /project |
Folder with project task files β one .md per project |
| Tasks section marker | #### π Tasks |
Heading marker for the tasks section in project files |
| Notes section marker | #### π Notes |
Heading marker for project description (synced from Singularity) |
| Project template | (empty) | Template for new project files. Placeholders: {{title}}, {{singularity-id}}, {{date}}, {{emoji}}, {{note}} |
| Sync direction | both |
both, forward, or reverse |
| Conflict resolution | latest_wins |
How to resolve conflicting edits |
| Exclude tags | GC, nosync |
Comma-separated tags to skip |
| Habits days count | 14 |
Number of past days to show in sidebar habits tab (1β14) |
When a new project is created on Singularity, the plugin creates a corresponding .md file locally. You can customize its content via the projectTemplate setting.
| Placeholder | Replaced with |
|---|---|
{{title}} |
Project name |
{{singularity-id}} |
Singularity project UUID |
{{date}} |
Current date (YYYY-MM-DD HH:mm:ss) |
{{emoji}} |
Project emoji (Unicode hex) |
{{note}} |
Project description (synced from Singularity) |
Default (empty setting) produces:
---
singularity-id: {{singularityId}}
---
# {{title}}
#### π NotesOpens automatically on startup if it was open before. Two tabs:
- Grouped by Singularity project
- Filter by project dropdown
- Exclude tags (comma-separated input)
- Checkbox toggles task completion (updates both Singularity and Obsidian immediately)
- Shows due dates inline
- Configurable day range (1β14, set in Settings β β ΠΡΠΈΠ²ΡΡΠΊΠΈ)
- 3 states: not done (empty) β full β half β not done
- Click to cycle through states
- Cell colors match habit colors from Singularity
Embed an interactive habit tracker directly inside any note using the singularity-habits code block.
```singularity-habits
days: 14
- Π·Π°ΡΡΠ΄ΠΊΠ°
- all
```| Parameter | Description |
|---|---|
days: N |
Number of past days to show (default: 14) |
- all |
Show all habits from your Singularity account (default) |
- <name> |
Show only specific habits (filter by title) |
- The block renders a grid matching the sidebar habits tab
- Click a cell to cycle: empty β half (2) β full (1) β empty (0)
- Changes sync to Singularity API instantly and update both the sidebar panel and any other inline panels on the page
- Works in both Live Preview and Reading View
| Command | Description |
|---|---|
Singularity Sync: Sync now |
Run full bidirectional sync |
Singularity Sync: Check connection |
Validate API key and connection |
Singularity Sync: Open Singularity Panel |
Open the sidebar view |
| Resource | Limit | Notes |
|---|---|---|
| Tasks (sync) | 1000 | Automatically synced per run. API returns max 1000 tasks per request. |
| Tasks (panel) | 200 | Sidebar panel shows up to 200 recent tasks. |
| Projects | 100 | All projects are loaded. |
| Tags | 500 | All tags are loaded and cached. |
| Habits | 100 | All habits are loaded for the panel. |
If you have more than 1000 active tasks, sync will process the first 1000. Completed/archived tasks don't count towards this limit.
- API key is stored in Obsidian's
SecretStorage(not indata.json) - Key is never written to logs or settings files
- On save,
settingsanddata.jsonare scrubbed of any key traces
MIT