Time Tracker and Invoicing

approved

by saiken

Track billable time against notes and projects, aggregate by client, and generate invoices in markdown. Free time tracking plus license-gated invoicing. Fully local. - This plugin has not been manually reviewed by Obsidian staff.

221 downloadsUpdated 1mo ago

Time Tracker & Invoicing

Stop leaking billable hours — clock time on the notes you're already working in, then turn it into client-ready invoices without leaving Obsidian.

Track billable time against your notes and projects, aggregate it by client, and generate invoices — built for freelancers and consultants who live in Obsidian. Fully local: no external API, no account, your data stays in your vault.

Open-core / one-time purchase. Time tracking is free forever in the Lite tier. Invoicing & PDF export unlock with a one-time license — $29 one-timebuy here.


Lite vs. Premium

FeatureLite (free)Premium ($29 one-time)
Start/stop tracking on the active note
Live timer in the status bar
Client/project tagging via frontmatter
Totals by client (command)
Invoice generation (markdown)
PDF export✅ (stub today)

All time tracking is free — no trial, no expiry. Invoicing and PDF export are the only paid features, gated behind the license check (LicenseManager.isPremium()).

Purchase: Buy Me a Coffee — Time Tracker & Invoicing Premium. License keys are verified offline (Ed25519) — no account, server, or subscription.

Activate in three steps:

  1. Buy the one-time Premium license from the link above.
  2. Your license key is emailed to you automatically, within seconds — delivery is fully automated, no waiting.
  3. Paste it into the plugin's License setting — Premium unlocks instantly, verified offline.

How it works

Tracking time

  • Start tracking active note — begins a timer against the currently open note. The note's client and project frontmatter (configurable) tag the entry; if absent, a default client is used and the note name becomes the project.
  • Stop tracking — closes the timer and records a time entry.
  • A status bar item shows the running timer (⏺ 0:12:34 · Acme Co); click it to start/stop.
  • Entries are stored locally in the plugin's data.json (alongside settings) — fully in your vault.

Aggregation

  • Show tracked time totals — summarizes hours by client.
  • Aggregation also powers invoicing (totals broken down by project → invoice line items).

Invoicing (premium)

  • Generate invoice (Premium) — pick a client; the plugin builds a markdown invoice (one line item per project, configurable rounding) and saves it to your invoice folder, with business details and totals.
  • PDF export is stubbed today (exportPdfStub) — it saves the markdown and points you to Obsidian's built-in Export to PDF. A real local PDF generator is left as a clean TODO(pdf).

Commands

  • Start tracking active note (Lite)
  • Stop tracking (Lite)
  • Toggle tracking (start/stop) (Lite)
  • Show tracked time totals (Lite)
  • Generate invoice (Premium)
  • Verify license key

Plus a ribbon clock icon to toggle tracking.

Settings

Default hourly rate, currency, hours rounding, client/project frontmatter property names, and default client (all free). Business name/address/email and invoice folder are premium (invoice-only) and locked until licensed. License key lives under License.

Keys are verified offline with Ed25519 signatures (tweetnacl) — no account, server, or network call, keeping the plugin 100% local. A key is base64url(payload).base64url(signature), verified against the public key in src/license/publicKey.ts.

Selling keys (author workflow):

node scripts/keygen.mjs                 # one-time: create keypair
npm run license:generate -- buyer@email.com   # after a sale: mint a key

Feedback and support

Bug reports, feature requests, and questions all go to the GitHub issue tracker. It is the only place I track them, so an issue will always get further than a review comment.

  • Report a bug — please include your Obsidian version, your operating system, and the steps that reproduce it.
  • Request a feature — describe the workflow you are trying to make faster; that is more useful than a proposed solution.
  • Browse open issues — worth a look first, in case it is already tracked.

More plugins by the same author

Small, local-first Obsidian plugins that each do one job and keep your data in your vault. All of them are in the community directory — search the name under Settings → Community plugins.

Search and views

  • Vault Spotlight — keyboard-first command center — fuzzy search, saved workflows, and result actions.
  • Bases Power Pack — kanban, calendar, Gantt, and outline views over your notes or a .base file.

Vault health

  • Vault Triage — find stale, orphaned, unfinished, and metadata-broken notes, then work through them.
  • Attachment Audit — find orphaned, duplicate, oversized, and misplaced attachments, then clean them up safely.
  • Patina — score every note's staleness from edits, opens, and inbound links.
  • Vault Router — move new notes out of Inbox with fast local routing rules.
  • FlowKit Health Dashboard — find which add-on is breaking your vault, and score every one installed.

Writing and research

  • Prose Lens — live writing feedback — passive voice, adverbs, hedges, cliches, and a reading grade.
  • Prior Art — show similar existing notes while you write, and merge duplicates without losing links.
  • Standing Questions — track the open questions in your vault and surface new notes that may answer them.
  • Unwritten — report the notes you never wrote — unexplained link pairs, stub hubs, unreasoned decisions.
  • Effort Index — measure the editing time behind every note and resurface the expensive ones.

Time and billing

  • Task Calendar Bridge — export dated Markdown tasks to standards-based ICS calendar files.
  • Invoice Forge — turn #billable notes into numbered invoices, so nothing is missed or billed twice.

Build

npm install
npm run build      # bundles to main.js
npm run dev        # watch mode
npm run typecheck  # tsc --noEmit
npm test           # offline license verification tests

npm run build produces main.js next to manifest.json and styles.css.

Install

Community plugins (recommended): open Settings → Community plugins, search Time Tracker and Invoicing, and install it — one click, auto-updates.

Manual install — copy main.js, manifest.json, and styles.css into:

<your-vault>/.obsidian/plugins/time-tracker-invoicing/

Then enable Time Tracker & Invoicing in Settings → Community plugins.


Project layout

time-tracker-invoicing/
├── manifest.json
├── versions.json
├── package.json
├── tsconfig.json
├── esbuild.config.mjs
├── styles.css
├── .github/workflows/
│   └── release.yml        # tag-driven GitHub release (build + attach assets)
├── scripts/
│   ├── keygen.mjs         # one-time Ed25519 keypair generator (author)
│   ├── generate-license.mjs   # mint a customer key (author)
│   └── customer-license-template.txt
├── tests/
│   └── license.test.mjs   # offline license sign/verify round-trip
└── src/
    ├── main.ts            # entry, commands, status bar, persistence
    ├── settings.ts        # settings tab
    ├── license/
    │   ├── LicenseManager.ts  # offline Ed25519 verification
    │   └── publicKey.ts       # embedded public key
    ├── types/tweetnacl.d.ts   # minimal tweetnacl type shim
    ├── timeStore.ts       # entries, active timer, aggregation
    ├── invoice.ts         # invoice markdown generation + PDF stub (premium)
    └── types.ts           # shared interfaces & defaults

Reference: the licensing approach, settings-tab patterns, build/test setup, and project layout are adapted from the Vault Spotlight plugin — see "Borrowed from Vault Spotlight" notes in the repo.

License

MIT (plugin source). Premium feature access is governed by a signed license key.

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.