Skip to content

Features

Everything nokko does, in full.

The front page makes the case; this page is the detail behind it. Jump to any part, or read it top to bottom.

It only ever changes the characters you changed.

Every project is one Markdown file on your Mac, in a folder you choose. Move a due date in the app and it rewrites that date and leaves the rest of the file alone. Your line endings, indentation, blank lines, your own notes and even emoji it doesn't recognise survive byte for byte.

Client Work/Halden Coffee/Storefront.md
---
type: project
status: active
client: Halden Coffee
start: 2026-09-21
due: 2026-11-06
color: "#5A82D6"
columns:
- "Budget: number"
tags: [web, nextjs]
---
 
# Storefront
 
Freeform notes. nokko never rewrites this prose.
 
## Milestones
 
- [ ] Design sign-off with Halden 🎯 📅 2026-10-14
- [ ] Staging deploy 🎯 📅 2026-11-03
 
## Build
 
- [/] Homepage hero and the bag grid [Budget:: 900] [est:: 3h] ⏫ 🛫 2026-10-05 📅 2026-10-16 #frontend
- Client wants the oven photo above the fold.
- [x] Pick the type scale
- [ ] Cut the mobile breakpoint
- ⏱ 2026-10-13 09:20–10:55 (1h35m) — hero layout
- [ ] Wire the newsletter signup [est:: 2h] 📅 2026-10-12 #backend
- [>] Copy review from Halden [Assignee:: Ema] 📅 2026-10-09
- [x] Audit the old Shopify storefront #ops
 

The file as it sits on disk. Pick a date above and only the highlighted characters will move.

Homepage hero and the bag grid

Storefront

Due
Fri
Start
2026-10-05
Priority
High
Estimate
3h
Budget
900
Logged
2h50m
Subtasks
1 of 2

Change the due date and watch what moves.

If you ever stop using nokko, nothing happens to your work. It was never anywhere else.

The same files open in Obsidian, in any text editor, and in ten years

The task format is the Obsidian Tasks convention, and custom fields are Dataview's. Point nokko at a vault you already have and both apps read the same files. You do not need Obsidian to use nokko — but nothing stops you having both open at once.

  • Obsidian

    the same vault

  • Git

    diff it, version it

  • Your server

    sync over SFTP

  • Any text editor

    now or in ten years

- [ ]
open · [/] in progress · [>] waiting · [x] done · [-] cancelled
📅
due date — the only date that can make a task overdue
🛫 ⏳
start · scheduled
✅ / ❌
completed / cancelled on this date
🔁
repeat rule
⏫ 🔼 🔽
priority
🎯
milestone
⏱
a logged session, as a sub-bullet under its task
[Budget:: 900]
a custom column's value, Dataview style
#tag
tags, anywhere in the description

Eleven views over the same files

Headings in the file are the groups you see. An indented task is a subtask. Nothing here is app state — change a view and you have changed the text on disk.

One lane per state. Drag a card between lanes — the file's checkbox character changes, nothing else.

Nine of the eleven are here. Time has its own section below, and Completed is the eleventh. Every one reads the same files.

The Storefront board for Halden Coffee — To Do 7, In Progress 2, Waiting 1 and Done 4 — under a header reading 6 of 17 tasks done, 35%, with 17h25m logged.

Time tracked on the task, invoiced from the same file

A timer on any task, a Pomodoro if you want one, and every session logged as a line in the same Markdown file the task lives in. When the month ends, the invoice is drafted from those hours — rates, VAT, totals — as another file you own.

The Time view: 34h30m logged across October, grouped by client — Halden Coffee 13h10m, Meridian Health 9h10m, Lantern Books 5h, and 7h10m against no client at all.
Client Work/Halden Coffee/Storefront.md
## Build
 
- [/] Homepage hero and the bag grid [Budget:: 900] [est:: 3h] ⏫ 🛫 2026-10-05 📅 2026-10-16 #frontend
- ⏱ 2026-10-13 09:20–10:55 (1h35m) — hero layout
- ⏱ 2026-10-14 14:05–15:20 (1h15m)
 

Logged where the work is

A session becomes a ⏱ line under its task. Open the file in a text editor in ten years and it still reads.

Totals that can't lie

An invoice recomputes its numbers on every read rather than trusting what's written. A hand-edited figure can drift; a total can't.

Time by client

Where the hours went, grouped by client and project, exportable. Hours stay hours — money appears only inside an invoice.

Invoice

INV-2026-031

Issued 2026-10-14

Due 2026-10-28

To

Halden Coffee

DescriptionHoursRateAmount
Homepage hero and the bag grid2.83€75.00€212.25
Product detail template5.00€75.00€375.00
Roastery photography edit0.67€75.00€50.25
Net€637.50
VAT 21%€133.88
Total€771.38

A plan, in the order you decided.

The day's sequence is arranged by hand, because the order to tackle things in is a decision. A list that re-sorts itself under the hand that arranged it is not a plan. Drag it once and it stays; a task that arrives at eleven joins the end rather than jumping the queue.

The Today screen: four tasks in the order they were arranged by hand, 2h30m spent against 4h45m planned, 45 minutes free, with Overdue, Next 7 Days and Waiting beneath.

Overdue you can act on

Anything more than a fortnight past due drops out of the count and goes grey. Nothing here escalates on its own — a task that survived two weeks has proven it wasn't urgent.

Waiting is not late

Tasks handed to someone else sit in their own place and are never counted as overdue while they wait.

Capture from anywhere

⌥Space opens a capture box over whatever you were doing. Type a tag, a priority, a project and a date in one line; it files itself and gets out of the way.

Send the stationery proof #print !high >Lantern fri

⏎
→Client Work/Lantern Books/Storefront.md — - [ ] Send the stationery proof ⏫ 📅 2026-10-16 #print
#tag
a tag, anywhere in the line
!high
priority
>project
which file it lands in
fri · 3d · 2w
a date, in words

A native Mac app, with widgets, a menu bar and a global hotkey

A real Mac app — SwiftUI, built against macOS 26, with desktop widgets, a menu bar popover, a global hotkey and full keyboard control. It works with no internet at all. Your work doesn't stop when the connection does.

The same Today screen in the light appearance, following whatever the Mac itself is set to.The Today screen: four tasks in the order they were arranged by hand, 2h30m spent against 4h45m planned, 45 minutes free, with Overdue, Next 7 Days and Waiting beneath.
The same screen, the same morning, in both appearances. Neither is a re-skin of the other.
The menu bar popover: a timer running on “Homepage hero and the bag grid”, today's entries beneath it, and the next tasks.

Widgets on the desktop

The glanceable half: what's next, the month, the shape of the quarter. Always there, never asking for anything.

The whole thing from the keyboard

Every action is reachable without the mouse, and ⌘/ shows the map.

Light, dark, or whatever the Mac is doing

Themes apply before the first window draws, so a chosen appearance never flashes the other one at you.

⌥Space
capture from anywhere on the Mac
⌘1 … ⌘7
Today · Calendar · Timeline · All Tasks · Time · Invoices · Clients
⌘N / ⇧⌘N
new task · new project
J / K
select the next · previous task
S
start or stop the timer on the selected task
⌘Z
undo — every edit is exactly one step

Share through your own GitHub.

A private repository on your own GitHub account holds the workspace. Every change syncs as a commit in the person's own name — and there is no git anywhere: none on your Mac, none inside the app. nokko speaks to GitHub directly, and the commits happen on their own, one per change.

Your Mac

Studio iMac

Your GitHub

Private repo

Ema's Mac

Laptop

Nothing of ours sits between them. The one account in the path is yours, with GitHub.

A code, not a password

Sign in by typing a short code on github.com. No password or token ever passes through the app, and there is nothing that expires.

A conflict keeps both

If two people change the same file at once, both versions survive on every machine — a marked pair, not a merge to untangle. Nothing is ever resolved by discarding work.

Invited by username

Invite a teammate from inside the app; the invitation is waiting in their own join sheet. A free GitHub account is all they need.

Deleted isn't gone

A file you delete stays in the repository's history, recoverable — never one slip from nowhere.

Or your own server

The same sharing, over SFTP.

Multiple Macs, one folder on a server you control. No GitHub account, no third party in the path — your files move across your own infrastructure.

Any host with SFTP

A VPS, a NAS, a storage box or a spare Mac. Web hosting often forbids file storage, so check the terms first.

Keys in the Keychain

The first connection shows the server's fingerprint and asks. Keys are kept in your macOS Keychain, not in your files.

Deletes go to a trash

To the server's own 30-day trash and this Mac's Trash — never straight to nowhere.

The same conflict rule

Two edits to one file keep both versions, marked. Nothing discarded here either.

A workspace with no sharing set up opens zero network sockets — a number the app's own tests assert. Sharing is something you switch on, not something that is on; and forgetting a connection always leaves a fully working local folder.

Who changed what, read from your own repository

Because every synced change is a commit in someone's name, the workspace carries its own record. The clock button in the sidebar opens it: who changed what, when — file by file, down to the minute — and every line clicks through to the document it describes.

In each person's name

Changes are recorded as the person who made them — Ema's edit says Ema, not "sync" or "server". Nobody writes a log entry; the log is what syncing is.

Read, not kept

The feed is read from the repository's own history, not from a second database — so it cannot disagree with the files, and it reaches back as far as the repository does.

The audit trail you didn't set up

When a client asks what happened on Tuesday, the answer is already written. Nobody kept minutes; the history kept itself.

ActivityWed 14 Oct

Client Work/Meridian Health/App Onboarding.md

YYou logged 40m on “Search and filters”14:10

Client Work/Halden Coffee/Storefront.md

EEma completed “Pick the type scale”14:02›
YYou logged 1h15m on “Homepage hero and the bag grid”13:47
EEma completed “Audit the old Shopify storefront”11:31
YYou added “Cut the mobile breakpoint”09:14

Notices that arrive once

One notice log per Mac, behind a bell in the toolbar. The unread count clears the moment you open it — a record you consult, not a score you owe. Three kinds of notice exist, and each one reaches macOS notifications only if you switch it on.

Notices3
Overlap17m claimed twice: Homepage hero and the bag grid and Search and filters (13:30–13:47)14:10
TeamEma completed 2 tasks in Storefront14:02
OverdueOverdue this morning: Wire the newsletter signup · Send the stationery to print09:00
Notification settings…

Overdue, once

The digest announces each overdue task exactly once, ever. No daily drumbeat, no re-escalation — a task you have been told about is a task you know about.

Double-claimed minutes

If two timers claim the same minutes, a notice names the span. The Time view carries the same annotation — the overlap is computed, not smoothed over.

Teammate activity

When a sync brings changes, one line says what arrived: "Ema completed 2 tasks in Storefront." A note when something happened; silence when nothing did.

Bring what you already have.

Export from ClickUp or Todoist and import the CSV; or copy tasks out of Things, Notion or Apple Notes and paste them straight in. Anything that can't be mapped is listed rather than quietly dropped.

Import
ClickUpTodoistClipboard

tasks.csv — 4 spaces, 11 boards, 213 tasks

Client Work/

Halden Coffee/Storefront.md · 38 tasks

Meridian Health/App Onboarding.md · 64 tasks

…

3 warnings — every unmapped field is listed, never silently dropped.
  • ClickUp

    CSV export — spaces, folders and lists arrive as they were

  • Todoist

    CSV export — sections become headings, indentation becomes subtasks

  • Anything else

    Copy bulleted text and paste. Things, Notion, Apple Notes, a plain list

The rest of what it does

Workspaces

A separate root folder per client, switched from the top bar.

Spaces & folders

Derived from the folders on disk. Make one in Finder and it appears.

People

A record per teammate — role, colour, email — and a name on the task line. No accounts, no passwords inside nokko.

Clients

First-class records that invoices and reports both read from.

Custom columns

Declared in frontmatter, stored on the task line, readable by Dataview.

Docs

Any Markdown file without tasks is a doc, and nokko reads and writes it.

Dependencies

Blocked-by links drawn on the timeline, in Obsidian's own notation.

Templates

Save a project as a template; new ones are byte copies with a new title.

Recurring tasks

Write 🔁 every week on the task, and completing it writes the next one.

Reminders

A field on the task line. macOS shows it once, at the minute you wrote.

Task types

Bug, feature, idea, meeting. A name and a glyph — no sprints, no points.

Undo everything

Every edit is exactly one ⌘Z, including the drags.

nokko next to the tools it replaces

nokko compared with NotePlan and with ClickUp + Toggl
CapabilitynokkoNotePlanClickUp + Toggl
Free to useRead everything, foreverTrial onlyFree plans, limited
One-time purchase availableYesNoNo
Your files, on your diskYesYesNo
Works fully offlineYesYesNo
Project managementYesBasicYes
Timeline / GanttYesNoYes
Time trackingYesNoSeparate tool
Invoices from tracked hoursYesNoIn their cloud
Native Mac appYesYesNo
Sync without a service in the middleYesNoNo
Share through your own GitHubYesNoTheir cloud
Per-person change historyYesNoPartial

Swipe sideways for the other columns.

NotePlan has the same plain-text comfort, and it is a good app — but it doesn't track time or draft invoices. ClickUp and Toggl do both, between them, in someone else's database.

Questions people ask first

What is nokko?

nokko is a native Mac app for project management, time tracking and invoicing, made for freelancers and small studios, with an iPhone app beside it. Every project is a plain Markdown file on your own disk; it works offline and has no account. The download is free on the App Store; reading is free and editing is a subscription or a one-time purchase covering both apps. It is not related to Noko, the time-tracking service.

What happens to my files if I stop using nokko?

Nothing. They are plain Markdown files in a folder you chose, and they stay there. If a subscription ends, the app goes back to reading mode and still opens, exports and prints everything. If nokko stopped existing, Obsidian or any text editor would still read every project, task and time entry.

Is there a Windows, Android or iPad version?

Not for Windows or Android. nokko is a Mac app with an iPhone app beside it, and an iPad version is planned for version 1.2, around 23 November 2026. The Mac app needs macOS 26 on Apple silicon, and the iPhone app needs iOS 26. Because the data is plain Markdown, the same files can be read on any system with a text editor.

Is there an iPhone app?

Yes. nokko for iPhone is on the App Store (iOS 26), free to download, and one subscription covers both apps. It shows Today, each project's standing and your hours; it checks off, reschedules and adds tasks, and runs the timer on the Lock Screen. It syncs with the Mac through your own GitHub, server or iCloud. Invoices, reports and the board, calendar and timeline stay on the Mac; there is no iPad version yet.

Do I need Obsidian to use nokko?

No. nokko is a complete Mac app that reads and writes the Markdown files itself. Because tasks use the Obsidian Tasks convention and custom fields use Dataview notation, the same files also open in Obsidian or any text editor, if you want them to. There is nothing else to install.

Does it work offline?

Yes, entirely. nokko's projects, time entries and invoices are Markdown files on your Mac, and there is no nokko server or account to reach. The only network use is sharing you switch on yourself, to your own GitHub repository, SFTP server or iCloud. On a plane or on bad hotel wifi it behaves identically.

Where is my data kept?

On your Mac, as plain Markdown files in a folder you choose. The app has no servers and no account — there is nowhere else for it to go. You can open, copy, move, back up or edit those files with anything, at any time, including when nokko isn't running.

How much does nokko cost?

nokko is free to download and read on Mac and iPhone. Editing is €6.99 a month or €49.99 a year after a 14-day free trial, or €129 once for Lifetime; the US store shows $5.99, $44.99 and $119. One purchase covers both apps and is billed through the App Store, so you manage or cancel it in your Apple Account.

What is reading mode?

The free state of the app. Every view, report, export and PDF works: you can open any folder of Markdown files and browse every project, task, time entry and invoice in it. What reading mode does not do is write. Creating and editing tasks, projects, time entries, invoices and shared workspaces needs a subscription or the Lifetime purchase.

What happens if I cancel?

nokko goes back to reading mode at the end of the period you paid for. Your files stay exactly where they were, as plain Markdown, and you can keep reading, exporting and printing them for as long as you like. Subscribe again and editing picks up where it left off.

Can I sync between multiple Macs?

Yes — two ways. Through a private repository on your own GitHub account, or through your own server over SFTP: a VPS, a NAS, a storage box or a spare Mac. Either way there is no nokko cloud and no nokko account — your files move between your machines and infrastructure you chose. If two machines edit the same file at once, both versions are kept.

Can it sync through GitHub?

Yes, GitHub is the primary way to share. A private repository on your own account holds the workspace, and every synced change becomes a commit in the person's name, so the history shows who changed what and when. There is no git on your Mac or in the app; sign-in is a short code typed on github.com, and no password or token passes through nokko.

Do I need a GitHub account?

Only for GitHub sharing, and the free tier is enough. Working locally needs no account of any kind, and sharing over SFTP needs only your server. nokko itself still has no accounts at all.

Is my data on GitHub private?

Repositories are created private, visible only to the people you invite. If you point nokko at a public repository instead, it warns you loudly and names exactly what would be exposed.

Do my teammates pay GitHub?

No. A free GitHub account is all a teammate needs — GitHub's free tier covers private repositories and the collaborators you invite to them.

Is this for a big team?

No, and that is deliberate: nokko has no roles, permissions or admin console and is not growing into them. A small studio sharing one workspace through its own GitHub repository or server works well, with everyone seeing every project and each person mostly driving their own files. A team that needs access control and approval chains has outgrown it.

Free to read, on your Mac and your iPhone.

Download it, open a folder, and read everything your studio has planned. Subscribe when you are ready to edit; the first 14 days are free, and one subscription covers both.

Download on the Mac App Store
Download on the App Store

macOS 26 · Apple silicon · iOS 26