← Back to blog

explainx / blog

Files.md: the local-first, LLM-friendly note-taking app that lives in .md files (2026)

Files.md is a private, quiet note-taking app built on plain .md files—local-first, offline-capable, LLM-friendly, with optional sync, Telegram bot, and a 5-year philosophy of simplicity over templates. By Artem Zakirullin.

·16 min read·Yash Thakker
Note-takingLocal-firstPrivacyPKMSecond BrainKnowledge ManagementMarkdown
Files.md: the local-first, LLM-friendly note-taking app that lives in .md files (2026)

Files.md is the note-taking app that answers a quiet question: what if the tool disappeared and only the files remained? Built by Artem Zakirullin over 5 years, Files.md is a local-first, privacy-first, browser-based app that stores your notes, journal, tasks, and checklists as plain .md files in a local folder. No data leaves your device unless you opt into sync. No plugins, no templates, no graph view—just a predefined structure that works, and a philosophy that restrictions foster creativity. The repository has 2.3k+ stars, a 50-fork ecosystem, and a Telegram bot for on-the-go note capture. It's a direct challenge to the "Second Brain" movement, arguing that your first brain should improve, not your system.

This article is a field guide: what problem it solves, the core philosophy, feature overview, sync options, file structure, and when to choose Files.md over Obsidian, Notion, or Roam.

TL;DR

QuestionShort answer
What is it?A browser-based, local-first note-taking app that stores everything as plain .md files—works offline, optionally syncs, includes Telegram bot.
Primary sourcegithub.com/zakirullin/files.md (MIT).
CreatorArtem Zakirullin—5 years of development.
Try itapp.files.md (Beta). Main site: files.md.
PrivacyBy default, no data leaves your device. All storage is local (OPFS or Local File System API).
Sync options(1) Local-only. (2) Cloud folder (iCloud/Dropbox/Google Drive). (3) Self-hosted sync server (one Go binary). (4) Hosted sync server (api.files.md).
File formatPlain .md files in a predefined structure: Chat.md, brain/*.md, journal/YYYY.MM Month.md, Later.md, habits/*.md, etc.
LLM-friendlyYes—file structure is documented at files.md/llms.txt for copy-paste into CLAUDE.md or AGENTS.md.
PhilosophyUse your brain to think, not to build systems. Notes prevent understanding if they become a substitute for experience.
Related ecosystemPairs with agent skills, MCP servers, and LLM agents that respect local file structures.
Live Bootcamp6 weeks

Complete AI Builder Bootcamp

Claude, Python automation & full-stack — 12 live sessions with Yash Thakker.

View bootcamp

The Complete AI Builder Bootcamp is the best AI development course for learning Claude AI, prompt engineering, Python automation, and full-stack web development. This intensive 6-week live bootcamp teaches you how to build AI-powered applications using Claude Projects, Claude Artifacts, Claude Code, and the complete Claude ecosystem. You'll master prompt engineering techniques, learn to create custom Claude connectors and MCP integrations, build Python automation workflows, develop full-stack websites with AI assistance, and create AI marketing agents.

The bootcamp includes 12 live Zoom sessions with Yash Thakker, founder of AISOLO Technologies and instructor to 350,000+ students. You'll build 8+ portfolio projects including AI playbooks, full-stack note-taking applications, Python automation scripts, marketing agents, and personal portfolio websites. The curriculum covers AI fundamentals, Claude Projects and Artifacts, Claude Co-work, Claude plugins and skills, Claude Code for Python development, full-stack development, AI marketing, and capstone projects.

Students receive 1-year access to all recordings, permanent Discord community access, a certificate of completion, and personalized career guidance. All enrollments include a 7-day money-back guarantee. This is the most comprehensive Claude AI bootcamp available, taking students from zero AI knowledge to expert AI builder in 6 weeks.

The official site provides installation, philosophy, and sync setup.


The problem: when note-taking becomes procrastination

The README quotes I Deleted My Second Brain:

Obsidian is a brilliant piece of software. I love it, dearly. But like anything, without restraint, it can also be a trap. Markdown files in nested folders. Plugins that track your productivity. Graph views that suggest omniscience. There's an illusion of mastery in watching your notes web into constellations. But constellations are projections. They tell stories. They do not guarantee understanding.

When I first started using PKM tools, I believed I was solving a problem of forgetting. Later, I believed I was solving a problem of integration.

Eventually, I realized I had created a new problem: deferral. The more my system grew, the more I deferred the work of thought to some future self who would sort, tag, distill, and extract the gold.

That self never arrived.

The Second Brain trap:

  1. Advanced templates, plugins, AI workflows create dopamine from system-building, not thinking.
  2. The first brain doesn't improve while the second brain grows.
  3. Reading and taking notes fool us into believing we understand—we know, but we don't do.
  4. Knowledge barrier: We refuse new experiences because "we already know" from our notes.
  5. Self-help through notes doesn't work—harm at the emotional level must be healed at the emotional level (therapy, meditation, feeling), not intellectual work.

Files.md's answer:

  • Predefined structure (no endless folder debates)
  • No plugins (no system-building dopamine)
  • No templates (no deferral to future self)
  • One idea per note (forces clarity)
  • Apply knowledge immediately (don't save for later)
  • Think through, don't collect (your brain improves, not your archive)

Core philosophy: own your data, own the software, use your brain

The README opens with a manifesto:

Own your data as plain local files. Own the software that opens those files. Grow your knowledge with files and your own brain. Grow the software around it with an LLM. Plain files and self-owned software can last through the ages.

Translation:

  • Plain .md files survive tool churn—if Files.md disappears, your notes remain readable.
  • Local-first means you control the storage, backups, and privacy.
  • LLM-friendly structure means AI agents can read, write, and organize your notes without vendor lock-in.
  • 5 years of refinement proves the approach works—not a trendy hack.

Feature 01: Chat interface for dumping thoughts

Problem: Holding things in your head drains energy. You're in flow, a colleague asks for a report—where do you drop it?

Solution: The Chat.md interface. Send a message, then decide where it goes:

  • To Journal (or add jj / жж at the end)
  • To Later (task)
  • To a specific file (note, checklist)

Example flow:

  1. You're in a meeting. Someone mentions a book.
  2. Open the chat, type "Read 'Deep Work' by Cal Newport".
  3. Click "To Read" → saved to Read.md checklist.
  4. Later, open Read.md, check it off when done.

Philosophy: The chat is a write-only entrance to your knowledge base. No friction, no decisions in the moment—just dump it.


Feature 02: Journal with timestamps

Problem: Journaling apps are too heavy. You just want to record "Felt good about the presentation."

Solution: Send a message in chat, click "To Journal" (or add jj / жж). It's saved to journal/YYYY.MM Month.md with a timestamp.

Example:

## 2026.05.21 Tuesday

14:23 Felt good about the presentation. Team appreciated the clarity.

16:45 Realized I need to follow up with the client by Friday.

Automatic structure: One file per month. Entries are appended with timestamps. No manual file creation.


Feature 03: Tasks with zero guilt

Problem: Task lists become guilt-inducing backlogs.

Solution: Files.md pushes you to add only small, actionable items. Not "Plan a vacation" (too vague), but "Book flight to Berlin" (first tiny step).

Rule: Add what should be done anyway, not what you wish to be done but lack motivation for.

Example:

  1. A colleague asks for the Q4 report.
  2. You're in flow. Drop a message: "Send Q4 report to Sarah."
  3. Click "To Later" → saved to Later.md.
  4. Later, open Later.md, complete it, check it off.

Task file location: Later.md


Feature 04: Checklists (groceries, reading, watching)

Problem: You need butter. A friend recommends a book. Holding these in your head is taxing.

Solution: Drop them in chat, move to the matching checklist:

  • Shop.md — groceries, household items
  • Read.md — books, articles
  • Watch.md — movies, shows
  • MyChecklist_.md — custom checklists (any filename ending with _)

Example:

## Shop.md

- [ ] Butter
- [ ] Buns
- [ ] Coffee

## Read.md

- [ ] "Deep Work" by Cal Newport
- [x] "Atomic Habits" by James Clear

Feature 05: Notes with one idea per file

Problem: Notes become dumping grounds for unrelated thoughts.

Solution: Files.md enforces one idea per note. Each note should be understood without context.

Structure:

  • brain/Note.md — default category
  • <category>/*.md — custom categories (e.g., dev/React Hooks.md, health/Sleep Hygiene.md)

Linking: Type [ to insert a link to another file. Standard Markdown links: [Note Name](/path/to/note.md).

Philosophy:

  1. Start with no structure (0 folders).
  2. Add a note when you learn something new.
  3. Apply knowledge immediately—don't save for future self.
  4. Link related notes (type [).
  5. Revisit and think through—this is where the work happens.

Anti-pattern: Don't create a "Second Brain" system that grows while your first brain stays static. Use your brain to think through the notes.


Feature 06: Habits tracking

Problem: Habit trackers are too complex. You just want to mark "Ate consciously today."

Solution: Habit files in habits/*.md. Each habit is a file. Each day you complete it, add a checkmark.

Example (habits/Ate consciously.md):

- [x] 2026.05.21
- [x] 2026.05.20
- [ ] 2026.05.19

Feature 07: LaTeX support (added May 20, 2026)

Why: LaTeX is text-based and LLM-friendly. Text + Math covers almost everything.

Usage: Write LaTeX inline or as blocks in any .md file.

Example:

The quadratic formula is $x = \frac{-b \pm \sqrt{b^2 - 4ac}}{2a}$.

$$
E = mc^2
$$

Tradeoff: Adds ~20 font files, but the creator decided it's worth it for LLM-friendly math notation.


Feature 08: Telegram bot for on-the-go access

Problem: You're away from your computer. You want to dump a thought without opening the app.

Solution: Telegram bot. Send a message, it's saved to Chat.md. Later, open the app and move it to the right place.

Setup: Follow instructions at files.md (bot link in repo).

Other messengers: "Will follow" (Discord, Slack, etc. not yet available as of 2026-05-21).


Feature 09: Hotkeys for power users

HotkeyAction
[Insert a link to a file
Cmd+K / Ctrl+KOpen file search modal
Cmd+N / Ctrl+NNew file
Cmd+M / Ctrl+MMove file
Cmd+D / Ctrl+DDelete file
Cmd+Enter / Ctrl+EnterOpen chat
Cmd+Shift+Enter / Ctrl+Shift+EnterToggle chat dialog
Cmd+[ / Ctrl+[Go to previous file
Cmd+] / Ctrl+]Go to next file
Cmd+~ / Ctrl+~Toggle sidebar
Cmd+B / Ctrl+BToggle bold
Cmd+I / Ctrl+IToggle italic
Cmd+Y / Ctrl+YInsert checkbox
Cmd/Ctrl + ClickCopy inline text / open link
Ctrl+Cmd+Space (macOS)Insert emoji

Feature 10: Four sync options

SetupWhere files liveSync across devicesServer neededBest for
Local-firstA folder on your deviceNoNoneMaximum privacy—data doesn't leave your device
Cloud folder syncYour existing cloud folder (iCloud/Dropbox/Google Drive)YesNone (cloud provider)Sync across devices without running a server
Self-hosted sync serverYour own (or local) serverYesOne Go binarySync inside your network
Hosted sync serverCreator's managed serverYesapi.files.mdTry it instantly, no setup

How to use cloud folder sync:

  1. Open app.files.md.
  2. Click "Open a local folder" → choose your iCloud/Dropbox/Google Drive folder.
  3. On other devices, open the same folder.
  4. Files sync via the cloud provider.

How to self-host:

  1. Clone the repo: git clone https://github.com/zakirullin/files.md.git
  2. Run the server: cd files.md && make server (requires Go)
  3. Point the app to your server URL in config.

File structure: predefined, LLM-friendly

Files.md uses a predefined structure to eliminate decision paralysis:

Chat.md                       # Chat/inbox for quick thoughts
brain/Note.md                 # Notes (default category)
<category>/*.md               # Notes in custom categories
journal/2024.08 August.md     # Journal entries (one file per month)
Later.md                      # Tasks
habits/Ate consciously.md     # Habit tracking
habits/*.md                   # Other habits
Read.md                       # Books/articles checklist
Watch.md                      # Movies/shows checklist
Shop.md                       # Groceries/items checklist
MyChecklist_.md               # Custom checklists (any filename ending with _)
media/*                       # Images (png, jpg, webp, gif)
archive/*.md                  # Archived notes
config.json                   # App configuration

LLM-friendly: Copy-paste the structure from files.md/llms.txt into your CLAUDE.md or AGENTS.md so AI agents understand the layout.

Example for AI agents:

# Files.md structure

- Chat: Chat.md
- Notes: brain/*.md, <category>/*.md
- Journal: journal/YYYY.MM Month.md
- Tasks: Later.md
- Habits: habits/*.md
- Checklists: Read.md, Watch.md, Shop.md, MyChecklist_.md

How to use Files.md for deep thinking (not collecting)

The README provides a 5-year-tested workflow:

  1. Start with no structure (0 folders). Add folders only when needed.
  2. One idea per note. Each note should be understood without context.
  3. Apply new knowledge immediately. Don't save for future self.
  4. Link related notes. Type [ to insert a link.
  5. Revisit and think through. This is where understanding happens.

Example (from the creator):

I used app.files.md to grow my knowledge about brain and software development:

  • I added new notes to either brain or dev folders. One idea per note.
  • I made connections between relevant notes (type [).
  • Everything is connected, just as in our brain.
  • I spent time traveling through the notes and thinking it through.
  • At one point, some brain and dev notes appeared very related.
  • This connection between two different domains produced an insight.
  • I wrote an article based on that insight: Cognitive Load in Software Development.

Key takeaway: The tool is not important. Your thinking is.


When to take notes (and when not to)

Take notes when:

  • Your goal is to develop a deeper, structured understanding of something.
  • You're doing research.
  • You're writing an article or book.

Don't take notes when:

  • You're reading for entertainment or procrastination.
  • You're trying to heal emotional wounds (therapy and meditation work; notes don't).
  • You're accumulating knowledge without applying it (knowledge barrier—you refuse new experiences because "you already know").

Quote from the README:

Reading without action is entertainment. A form of procrastination. No amount of self-help books can heal emotional wounds. What can help is psychotherapy, rescripting and chair work. Meditation. Healing happens by feeling.


Files.md vs Obsidian / Notion / Roam

FactorFiles.mdObsidianNotionRoam Research
PhilosophyUse your brain, not systems. Simplicity over features.Extensibility, plugins, graph view.Team collaboration, databases, all-in-one workspace.Networked thought, daily notes, bidirectional links.
StoragePlain .md files, local-first.Plain .md files, local-first.Proprietary cloud database.Proprietary cloud database.
PrivacyBy default, no data leaves device.Local-first, no cloud required.Cloud-based, data on Notion servers.Cloud-based, data on Roam servers.
PluginsNone.1000+ community plugins.Limited integrations.Limited integrations.
ComplexityMinimal. Predefined structure.High. Customizable to the extreme.Medium. Blocks and databases.Medium. Daily notes and graph.
LLM-friendlyYes. Documented at llms.txt.Depends on setup.No (proprietary format).No (proprietary format).
OfflineYes (PWA).Yes (desktop app).Partial (some features require internet).No (web-only).
MobileYes (PWA + Telegram bot).Yes (iOS/Android apps).Yes (iOS/Android apps).Yes (iOS/Android apps).
Sync4 options: local-only, cloud folder, self-hosted, hosted.Obsidian Sync (paid) or cloud folder.Built-in (cloud).Built-in (cloud).
Best forFocus on thinking, not building systems. Maximum privacy.Power users who love customization and plugins.Teams needing collaboration and databases.Networked thought, daily journaling.

Bottom line: Use Obsidian if you want extensibility and plugins. Use Notion if you need team collaboration and databases. Use Roam if you want daily notes and graph view. Use Files.md if you want simplicity, privacy, and to focus on thinking over system-building.


Architecture: Go backend + vanilla JS frontend

Backend (Go):

  • cmd/server — sync API server
  • server/bot.go — Telegram bot
  • server/sync/ — sync logic
  • Tests — E2E tests for both web app and server

Frontend (vanilla JS):

  • web/index.html — entrypoint (no build system required)
  • web/lib — frontend libraries (vendored for portability)
  • PWA — Progressive Web App (offline-capable, installable)

Philosophy:

  • No build systems. In 10 years, open web/index.html and it should just work.
  • Junior developers should understand the code.
  • All dependencies are our code and responsibility. Avoid external deps.
  • Portable. Everything is vendored (vendor/ and web/lib/ in repo).

Performance:

  • Blazing fast. Mutex lock/unlock = 25 ns, Read 4K from SSD = 150,000 ns.
  • Granular locks (per-user, per-resource) to avoid bottlenecks.

Useful scripts for your files (Go utilities)

All scripts are in cmd/ and can be run inside your files directory. Install Go first.

ScriptWhat it does
whoopAdd Whoop metrics to journal
tomdlinksConvert [[wikilinks]] to standard [Name](/path.md) (supports --dry-run)
backlinkInsert backlinks (adds links back to referencing files; supports --dry-run)
shifttimeShift timestamps in journal files by N hours (useful after timezone change)

Example (convert wikilinks):

go run /abs/path/to/files.md/cmd/tomdlinks/tomdlinks.go .

Installation and setup

PlatformSteps
Web (PWA)
  1. Visit app.files.md in Chrome (recommended).
  2. Click "Install files.md" on the right side of the address bar.
  3. Open a local folder to persist changes.
  4. Occasionally hit force-refresh (Cmd+Shift+R) to get updates.
Self-hosted
  1. Clone the repo: git clone https://github.com/zakirullin/files.md.git
  2. Run the server: cd files.md && make server (requires Go).
  3. Point the web app to your server URL.

Configuration:

  • Open the app, click settings (⚙️), configure sync, Telegram bot, etc.
  • config.json is stored in your files folder.

Contribution guidelines

From the README:

  • Junior developers should be able to understand the code.
  • Ideally, every PR should remove or simplify code, not add it.
  • The less code we have, the more flexible we are.
  • All dependencies are our code and responsibility. Avoid dependencies if possible.
  • Code should be self-sufficient, so vendor/ and web/lib/ are included in the repository.
  • Do we really need this feature? Will it help us do the real job, or does it just give dopamine?

Backend guidelines:

  • We write tests.
  • No get* prefix for methods.
  • No panics; errors are part of business logic.
  • Wrap errors with context.
  • We prefer real implementations or fakes over mocks.

Frontend guidelines:

  • Use PATCHED keyword if you modify web/lib/ in-place.
  • No build systems—in 10 years, /web/index.html should just work.
  • Avoid flaky E2E tests.
  • Most bugs are caused by race conditions (async flows interrupted mid-through).

ADRs (Architecture Decision Records): 5 years of design choices

Selected highlights from the repo's ADR section:

DateDecision
2026-05-20Added LaTeX support (+20 font files). LaTeX is text-based and LLM-friendly.
2026-05-06Moved from Today.md to Chat.md. "Chat" is clearer than "today" concept.
2026-05-02Merged Inbox.md and Today.md to Chat.md. Simplicity and calmness over GTD abstraction.
2026-04-22Inbox entries identified by stable content hash (not positional index) for reliable bot buttons.
2026-04-11Markdown links (not wikilinks) for cross-platform compatibility. Works in GitHub.
2025-09-21Removed WASM. Too much complexity (JS ↔ Go bridge). Reimplemented in JS for simplicity.
2025-07-11Root folder is /, not ''. All files identified by path, not dir + filename.
2025-07-08Migrated to mtime for sync (content-based), ctime for append-only log (renames/deletes).
2025-06-29All incoming messages go to Chat.md by default. Simple dump, organize later.
2025-06-14Added WASM for bot-like functionality in browser (later removed in 2025-09-21).
2024-10-26Updates processed sequentially per-user to avoid race conditions.
2024-10-06Removed fyne.io (desktop toolkit). Web stack is more practical for markdown/html.
2024-09-09Vendoring dependencies for self-sufficiency. Repo is source of truth.
2024-08-20Read userconfig on every access to avoid stale data from async flows.
2024-07-13gofumpt for stricter formatting. Less choice = better.
2024-07-08Gave up on AST parsing. Markdown isn't that hard—3x less code, less mental load.
2024-06-13Markdown to HTML conversion for Telegram (TG API fails on invalid Markdown).

Full ADR log: See README.md in the repo.


Related on ExplainX


Sources


Repository stats, feature additions, and sync options change over time. Treat this as May 21, 2026 context—verify installation steps and sync setup before committing to a workflow. Files.md is MIT-licensed; contributions welcome. The creator accepts sponsorship on GitHub.

Related posts