Beautiful coding dashboard for Neovim
Zero config. 100% private. Auto-adapts to your colorscheme.
- Local-only, privacy-first SQLite storage
- Heatmaps, streaks, achievements, and daily goals
- Automatic session tracking with idle detection and theme support
codeme.nvim requires the codeme binary (the backend) to be installed on your system. The plugin does not install it automatically, you need to set it up once before first use.
Easiest way — download a prebuilt binary (no Go or compiler needed):
Pick the one for your platform, extract it, and put it somewhere on your PATH.
Or install with Go (requires Go 1.25+ and a C compiler):
go install github.com/tduyng/codeme@latestSee the codeme backend repo for full install options and details.
After install, verify it works:
codeme stats{
"tduyng/codeme.nvim",
cmd = { "CodeMe", "CodeMeToggle" },
config = function()
require("codeme").setup()
end,
}vim.pack.add("https://github.com/tduyng/codeme.nvim")
require("codeme").setup():CodeMe " Open dashboard
:CodeMeToggle " Toggle visibility
:CodeMeToday " Today's stats notificationKeybinding example:
vim.keymap.set("n", "<leader>cm", "<cmd>CodeMe<cr>")Navigate:
Tab/L→ Next tabShift-Tab/H→ Previous tab1-5→ Jump to tabq/Esc→ Close
Tabs:
| Tab | Content |
|---|---|
| 📊 Dashboard | Goals, streaks, performance overview |
| ⏰ Activity | Today's sessions, languages, files |
| 📅 Weekly | Daily breakdown, weekly trends |
| 📁 Work | Projects and languages breakdown |
| 🏆 Records | Personal bests, achievements, milestones |
Unlock achievements as you code:
| Icon | Name | Unlock |
|---|---|---|
| 🔥 | 5-Day Fire | 5-day streak |
| 🧨 | 30-Day Streak | 30-day streak |
| 💥 | 90-Day Inferno | 90-day streak |
| 🌋 | 180-Day Blaze | 180-day streak |
| 🌞 | Eternal Flame | 365-day streak |
| 🌧️ | 1K Line Wave | 1,000 lines |
| ⚡ | 10K Line Surge | 10,000 lines |
| ⛈️ | 50K Line Flood | 50,000 lines |
| 🌊 | 100K Line Ocean | 100,000 lines |
| ⚡ | 50h Spark | 50 hours total |
| 🌩️ | 1K h Lightning | 1,000 hours |
| ⛈️ | 5K h Thunder | 5,000 hours |
| 🌀 | 10K h Mastery | 10,000 hours |
| 💡 | 20K h Grandmaster | 20,000 hours |
| 🚀 | Bilingual | 2 languages |
| 🌍 | Polyglot | 5 languages |
| 🧠 | Polyglot Master | 10 languages |
| 🎓 | Code Polymath | 15 languages |
| 🌅 | Dawn Coder | Code before 6 AM |
| 🌌 | Night Coder | Code after midnight |
| ☕ | 2h Warm Up | 2+ hour session |
| 🎯 | 4h Focus | 4+ hour session |
| 🌊 | 6h Flow State | 6+ hour session |
| 🧠 | 8h Deep Work | 8+ hour session |
| 🧘♂️ | 10h Monk Mode | 10+ hour session |
| 👑 | 12h Legendary | 12+ hour session |
Here are the default configs:
require("codeme").setup({
-- Binary
codeme_bin = "codeme", -- Auto-detected
-- Tracking
auto_track = true, -- Track on save
verbose = false, -- Show notifications
-- Goals (0 to disable)
goals = {
daily_hours = 4, -- Hours per day
daily_lines = 500, -- Lines per day
},
})The plugin searches for the codeme binary in this order:
CODEME_BINenvironment variable- System
PATH(i.e. the defaultcodemecommand) ~/.local/share/nvim/codeme/codeme(local data directory)
If none is found, the plugin will show an error when you open the dashboard. Install the backend using the instructions in Prerequisites.
MIT
Made with ❤️ for Neovim



