Coming to macOS
Stop paying three subscriptions to run your agency.
nokko is a native Mac app for projects, time tracking and invoices — and your data is plain Markdown files on your own disk, working offline. When there's more than one of you, sharing runs through your own GitHub — not through us.
macOS 26 · Apple silicon · Windows in development · Built by a two-person agency, for itself first — not for a corporation.

順 — jun · order · sequence · flow
No account. No telemetry. No service in the middle. No seats. No lock-in.
The mark is the kanji 順 — jun: order, sequence, things proceeding smoothly. We read its two components as the product. 川, a river: workflow lanes, movement. 頁, a page: structured rows on a leaf of paper. Ordered flow, drawn as one character.
- 1
- Markdown file per project
- 0
- accounts required
- 11
- surfaces over the same files
- 100%
- of your bytes preserved
Everything in one
Three subscriptions. One app.
Projects, timeline, calendar, time tracking and invoices in one place. No paying for ClickUp, then Toggl on top, then copying hours into an invoice by hand. Track the time, draft the invoice from it. One app.
What you probably pay for now
- A project tool, per seat, per month
- A separate time tracker, per month
- Something else again for invoices
- And the copying between all three
What nokko is
- Projects, boards, calendar and Gantt
- A timer and Pomodoro, logged into your files
- Invoices drafted from the hours you tracked
- One app, on your Mac, offline
8h30m
Your files, your disk
It only ever changes the characters you changed.
Every project is one Markdown file on your Mac. Not a database, not a cloud, not a locked format. Move a due date in the app and it rewrites that date — not the file. Your line endings, your indentation, your blank lines, your own notes, even the emoji it doesn't recognise: all of it survives, byte for byte.
---type: projectstatus: activeclient: Halden Coffeestart: 2026-07-20due: 2026-09-04color: "#5A82D6"columns: - "Budget: number"tags: [web, nextjs]--- # Storefront Freeform notes. nokko never rewrites this prose. ## Milestones - [ ] Design sign-off with Halden 🎯 📅 2026-08-12- [ ] Staging deploy 🎯 📅 2026-09-01 ## Build - [/] Homepage hero and the bag grid [Budget:: 900] [est:: 3h] ⏫ 🛫 2026-08-03 📅 2026-08-14 #frontend - Client wants the oven photo above the fold. - [x] Pick the type scale - [ ] Cut the mobile breakpoint - ⏱ 2026-08-11 09:20–10:55 (1h35m) — hero layout- [ ] Wire the newsletter signup [est:: 2h] 📅 2026-08-10 #backend- [>] Copy review from Halden [Assignee:: Ema] 📅 2026-08-07- [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
One file, eleven surfaces
Every view. The same file underneath.
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.
Eight of the eleven, here. Time gets its own band below; Completed and Invoices are the rest — every one reading the same files.








The morning screen
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.

Overdue you can act on
Waiting is not late
Capture from anywhere
Send the stationery proof #print !high >Lantern fri
⏎- #tag
- a tag, anywhere in the line
- !high
- priority
- >project
- which file it lands in
- fri · 3d · 2w
- a date, in words
Hours become invoices
Track the time. Draft the invoice from it.
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.

## Build - [/] Homepage hero and the bag grid [Budget:: 900] [est:: 3h] ⏫ 🛫 2026-08-03 📅 2026-08-14 #frontend - ⏱ 2026-08-11 09:20–10:55 (1h35m) — hero layout - ⏱ 2026-08-12 14:05–15:20 (1h15m) Logged where the work is
Totals that can't lie
Time by client
Invoice
INV-2026-031
Issued 2026-08-12
Due 2026-08-26
To
Halden Coffee
| Description | Hours | Rate | Amount |
|---|---|---|---|
| Homepage hero and the bag grid | 2.83 | €75.00 | €212.25 |
| Product detail template | 5.00 | €75.00 | €375.00 |
| Roastery photography edit | 0.67 | €75.00 | €50.25 |
Native Mac
Not a web app in a window.
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.



Widgets on the desktop
The whole thing from the keyboard
Light, dark, or whatever the Mac is doing
- ⌥Space
- ⌘1 … ⌘7
- ⌘N / ⇧⌘N
- J / K
- S
- ⌘Z
Sharing
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
A conflict keeps both
Invited by username
Deleted isn't gone
Or your own server
The same sharing, over SFTP.
Any host with SFTP
A VPS, a NAS, ordinary shared hosting. Nothing new to rent.
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.
The record
The history answers for itself.
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
Read, not kept
The audit trail you didn't set up
Client Work/Meridian Health/App Onboarding.md
Client Work/Halden Coffee/Storefront.md
Notices
It speaks up only when asked.
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.
Overdue, once
Double-claimed minutes
Teammate activity
Switching
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.
tasks.csv — 4 spaces, 11 boards, 213 tasks
Client Work/
Halden Coffee/Storefront.md · 38 tasks
Meridian Health/App Onboarding.md · 64 tasks
…
ClickUp
Todoist
Anything else
The rest of it
Everything else it does.
Workspaces
Spaces & folders
People & team
Clients
Custom columns
Docs
Dependencies
Templates
Recurring tasks
Reminders
Task types
Undo everything
Interoperable by construction
Opens in Obsidian. Opens in TextEdit. Opens 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.
the same vault
diff it, version it
sync over SFTP
now or in ten years
Honestly
Why nokko, and not the stack you already pay for?
| Capability | nokko | NotePlan | ClickUp + Toggl |
|---|---|---|---|
| Your files, on your disk | Yes | Yes | No |
| Works fully offline | Yes | Yes | No |
| Project management | Yes | Basic | Yes |
| Timeline / Gantt | Yes | No | Yes |
| Time tracking | Yes | No | Separate tool |
| Invoices from tracked hours | Yes | No | In their cloud |
| Native Mac app | Yes | Yes | No |
| Sync without a service in the middle | Yes | No | No |
| Share through your own GitHub | Yes | No | Their cloud |
| Per-person change history | Yes | No | Partial |
Swipe sideways for the other columns.
Every screen
The whole app, in one place.
Fourteen captures of the shipped app — the same ones used throughout this page, plus the surfaces there was no room to argue for. Nothing is drawn, retouched or composited.
Pick any one to see it full size.
Questions
The things people ask first.
What is nokko?
Do I need Obsidian to use nokko?
Does it work offline?
Where is my data kept?
Can I sync between multiple Macs?
Can it sync through GitHub?
Do I need a GitHub account?
Is my data on GitHub private?
Do my teammates pay GitHub?
Is this for a big team?
What about Windows?
Next
Windows, natively.
Not a port of a web app, and not Electron — the same argument as the Mac build, made again properly. The format doesn't change, so a vault written on one opens on the other. It's in development; there's no date, and you'll hear it here first.
First to ship
In development
Waitlist
Be there when it ships.
One email when it's ready. Nothing else — no drip sequence, no newsletter, no sharing it with anyone.