My journey to creating my first obsidian plugin.
The problem of a writing challenge
Every November, I used to sit down daily for a writing challenge called NaNoWriMo (National Novel Writing Month) where the challenge was to write 50,000 words (the average length of a novel) in the month of November. Due to some shinnanigans (and not AI shinnanigans like some would believe) they had to fire a lot of their moderation staff and board in 2024 and by 2025 they were done. NaNoWriMo is no more. My yearly tradition of trying to get me to write is gone.
Due to recent baby and the lack of NaNoWriMo, 2025 was the first year in quite some time that I hadn't at least attempted the NaNoWriMo challenge of 50,000 words in 30 days. And I missed it, despite the chaos of a baby.
My partner keeps saying I should come up with a solution. I'm an engineer, I should be able to do it, but coming up with a replacement with a community, tracker, and the organization felt daunting. Until last night when I realized I could at least handle the tracker part.
Obsidian
If you haven't heard of it, Obsidian is a neat note taking app that primarily allows you to use markdown to write. I use markdown quite a bit in my day job -- I'm even using markdown here to write this blog. It's quite ideal at simple text, pefect, IMO for writing. They have a free tier as it is at heart an Open source project. So I highly encourage you to try it. And you can put your vault in whatever cloud storage you want if you want some sort of syncing.
Combining the fact that I do actually write most of my stories in Obsidian these days (and used to use a NaNoWriMo plugin), I decided that obsidian might be a great place to make plugin for my writing tracker.
The plan and vision
- Users can create projects and set goals for those projects
- Users can optionally set a time goal (30 days default) in days
- Users can optionally set a word count goal (50,000 words default)
- User can set a starting word count (for projects that are already started)
- User can alter current word count (allows users to write elsewhere), but maybe have users also enter start/stop time optionally for that (basically they are creating a session to update word count)
- Users can start/stop session
- Ideally start/stop should happen in a side panel next to where users are writing notes
- Session data should include start time, end time, and calculate the length (in time) of the session. The session should also update the project word count total.
- Would love to explore if we can auto-stop a session due to app inactivity (for more than 30 min?)
Technical considerations
- May want to record the session data to a local file or sql lite db.
- May want to use Svelt for the UI
- Can we keep track of word count across all notes? Or do we need to have users define which files to watch?
- What framework should I use to write tests? vitest?
Plugin
Obsidian with all it's open-source love, also highly encourages community and even self-plugins. They have GREAT docs for how to pull down a sample plugin and how it works.
Things to note as you practice:
- Create a test vault (it doesn't need to be a synced vault) to work against so that you don't ruin your main vault.
- Copy sample project into your plugins directory
- Use the hot-reload plugin and have it active next to yours.
- Get your dev server running
npm run dev
Once all those are done, you can start to work... or get your AI vibe coding setup started.
I'm going to wrap this up for now, I'll have final thoughts once my project is released!
