[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-1427":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":15,"subscribersCount":15,"size":15,"stars1d":15,"stars7d":13,"stars30d":16,"stars90d":15,"forks30d":15,"starsTrendScore":15,"compositeScore":17,"rankGlobal":10,"rankLanguage":10,"license":18,"archived":19,"fork":19,"defaultBranch":20,"hasWiki":21,"hasPages":19,"topics":22,"createdAt":10,"pushedAt":10,"updatedAt":35,"readmeContent":36,"aiSummary":37,"trendingCount":15,"starSnapshotCount":15,"syncStatus":38,"lastSyncTime":39,"discoverSource":40},1427,"milli.nvim","Amansingh-afk\u002Fmilli.nvim","Amansingh-afk"," Animated ASCII splash screens for Neovim. 29 bundled splashes + bring your own via the   milli CLI \u002F web playground.","https:\u002F\u002Fgithub.com\u002FAmansingh-afk\u002Fmilli",null,"Lua",258,3,1,0,26,45.91,"MIT License",false,"main",true,[23,24,25,26,27,28,29,30,31,32,33,34],"alpha-nvim","ascii","ascii-art","dashboard-nvim","lua","mini-starter","neovim","neovim-plugin","nvim","nvim-plugin","snacks-nvim","startup-screen","2026-06-12 04:00:09","# milli.nvim\n\nAnimated ASCII splash screens for Neovim. Ships with 24 bundled splashes, and lets you drop in your own from any image or GIF. Works with dashboard-nvim, alpha-nvim, snacks.nvim, mini.starter, or raw `VimEnter`.\n\n![demo](demo.gif)\n\n## Contents\n\n- [Bundled splashes](#bundled-splashes)\n- [Install](#install)\n- [Quick start](#quick-start)\n- [Using your own splash](#using-your-own-splash) ← bring any image or GIF\n- [Dashboard integrations](#dashboard-integrations)\n  - [dashboard-nvim](#dashboard-nvim)\n  - [alpha-nvim](#alpha-nvim)\n  - [snacks.nvim](#snacksnvim)\n  - [mini.starter](#ministarter)\n  - [No plugin (raw VimEnter)](#no-plugin-raw-vimenter)\n- [Previewing](#previewing)\n- [API](#api)\n- [Requirements](#requirements)\n- [License](#license)\n\n## Bundled splashes\n\n\u003Ctable>\n\u003Ctr>\n\u003Ctd align=\"center\">\u003Cb>aiface\u003C\u002Fb>\u003Cbr>\u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Famansingh-afk\u002Fmilli.nvim\u002Fmedia\u002Fpreviews\u002Faiface.gif\" width=\"380\">\u003C\u002Ftd>\n\u003Ctd align=\"center\">\u003Cb>attackontitan\u003C\u002Fb>\u003Cbr>\u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Famansingh-afk\u002Fmilli.nvim\u002Fmedia\u002Fpreviews\u002Fattackontitan.gif\" width=\"380\">\u003C\u002Ftd>\n\u003Ctd align=\"center\">\u003Cb>aurora\u003C\u002Fb>\u003Cbr>\u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Famansingh-afk\u002Fmilli.nvim\u002Fmedia\u002Fpreviews\u002Faurora.gif\" width=\"380\">\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd align=\"center\">\u003Cb>badge\u003C\u002Fb>\u003Cbr>\u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Famansingh-afk\u002Fmilli.nvim\u002Fmedia\u002Fpreviews\u002Fbadge.gif\" width=\"380\">\u003C\u002Ftd>\n\u003Ctd align=\"center\">\u003Cb>blackhole\u003C\u002Fb>\u003Cbr>\u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Famansingh-afk\u002Fmilli.nvim\u002Fmedia\u002Fpreviews\u002Fblackhole.gif\" width=\"380\">\u003C\u002Ftd>\n\u003Ctd align=\"center\">\u003Cb>cactus\u003C\u002Fb>\u003Cbr>\u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Famansingh-afk\u002Fmilli.nvim\u002Fmedia\u002Fpreviews\u002Fcactus.gif\" width=\"380\">\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd align=\"center\">\u003Cb>catwoman\u003C\u002Fb>\u003Cbr>\u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Famansingh-afk\u002Fmilli.nvim\u002Fmedia\u002Fpreviews\u002Fcatwoman.gif\" width=\"380\">\u003C\u002Ftd>\n\u003Ctd align=\"center\">\u003Cb>chrome\u003C\u002Fb>\u003Cbr>\u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Famansingh-afk\u002Fmilli.nvim\u002Fmedia\u002Fpreviews\u002Fchrome.gif\" width=\"380\">\u003C\u002Ftd>\n\u003Ctd align=\"center\">\u003Cb>dancer\u003C\u002Fb>\u003Cbr>\u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Famansingh-afk\u002Fmilli.nvim\u002Fmedia\u002Fpreviews\u002Fdancer.gif\" width=\"380\">\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd align=\"center\">\u003Cb>dancerramp\u003C\u002Fb>\u003Cbr>\u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Famansingh-afk\u002Fmilli.nvim\u002Fmedia\u002Fpreviews\u002Fdancerramp.gif\" width=\"380\">\u003C\u002Ftd>\n\u003Ctd align=\"center\">\u003Cb>finger\u003C\u002Fb>\u003Cbr>\u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Famansingh-afk\u002Fmilli.nvim\u002Fmedia\u002Fpreviews\u002Ffinger.gif\" width=\"380\">\u003C\u002Ftd>\n\u003Ctd align=\"center\">\u003Cb>fire\u003C\u002Fb>\u003Cbr>\u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Famansingh-afk\u002Fmilli.nvim\u002Fmedia\u002Fpreviews\u002Ffire.gif\" width=\"380\">\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd align=\"center\">\u003Cb>flyingcat\u003C\u002Fb>\u003Cbr>\u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Famansingh-afk\u002Fmilli.nvim\u002Fmedia\u002Fpreviews\u002Fflyingcat.gif\" width=\"380\">\u003C\u002Ftd>\n\u003Ctd align=\"center\">\u003Cb>flyingdragon\u003C\u002Fb>\u003Cbr>\u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Famansingh-afk\u002Fmilli.nvim\u002Fmedia\u002Fpreviews\u002Fflyingdragon.gif\" width=\"380\">\u003C\u002Ftd>\n\u003Ctd align=\"center\">\u003Cb>ididnot\u003C\u002Fb>\u003Cbr>\u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Famansingh-afk\u002Fmilli.nvim\u002Fmedia\u002Fpreviews\u002Fididnot.gif\" width=\"380\">\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd align=\"center\">\u003Cb>lighningtornado\u003C\u002Fb>\u003Cbr>\u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Famansingh-afk\u002Fmilli.nvim\u002Fmedia\u002Fpreviews\u002Flighningtornado.gif\" width=\"380\">\u003C\u002Ftd>\n\u003Ctd align=\"center\">\u003Cb>lights\u003C\u002Fb>\u003Cbr>\u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Famansingh-afk\u002Fmilli.nvim\u002Fmedia\u002Fpreviews\u002Flights.gif\" width=\"380\">\u003C\u002Ftd>\n\u003Ctd align=\"center\">\u003Cb>retrocircle\u003C\u002Fb>\u003Cbr>\u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Famansingh-afk\u002Fmilli.nvim\u002Fmedia\u002Fpreviews\u002Fretrocircle.gif\" width=\"380\">\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd align=\"center\">\u003Cb>robot\u003C\u002Fb>\u003Cbr>\u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Famansingh-afk\u002Fmilli.nvim\u002Fmedia\u002Fpreviews\u002Frobot.gif\" width=\"380\">\u003C\u002Ftd>\n\u003Ctd align=\"center\">\u003Cb>shader\u003C\u002Fb>\u003Cbr>\u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Famansingh-afk\u002Fmilli.nvim\u002Fmedia\u002Fpreviews\u002Fshader.gif\" width=\"380\">\u003C\u002Ftd>\n\u003Ctd align=\"center\">\u003Cb>shadertwo\u003C\u002Fb>\u003Cbr>\u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Famansingh-afk\u002Fmilli.nvim\u002Fmedia\u002Fpreviews\u002Fshadertwo.gif\" width=\"380\">\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd align=\"center\">\u003Cb>skeleton\u003C\u002Fb>\u003Cbr>\u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Famansingh-afk\u002Fmilli.nvim\u002Fmedia\u002Fpreviews\u002Fskeleton.gif\" width=\"380\">\u003C\u002Ftd>\n\u003Ctd align=\"center\">\u003Cb>skullone\u003C\u002Fb>\u003Cbr>\u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Famansingh-afk\u002Fmilli.nvim\u002Fmedia\u002Fpreviews\u002Fskullone.gif\" width=\"380\">\u003C\u002Ftd>\n\u003Ctd align=\"center\">\u003Cb>skullthree\u003C\u002Fb>\u003Cbr>\u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Famansingh-afk\u002Fmilli.nvim\u002Fmedia\u002Fpreviews\u002Fskullthree.gif\" width=\"380\">\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd align=\"center\">\u003Cb>skulltwo\u003C\u002Fb>\u003Cbr>\u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Famansingh-afk\u002Fmilli.nvim\u002Fmedia\u002Fpreviews\u002Fskulltwo.gif\" width=\"380\">\u003C\u002Ftd>\n\u003Ctd align=\"center\">\u003Cb>spaceship\u003C\u002Fb>\u003Cbr>\u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Famansingh-afk\u002Fmilli.nvim\u002Fmedia\u002Fpreviews\u002Fspaceship.gif\" width=\"380\">\u003C\u002Ftd>\n\u003Ctd align=\"center\">\u003Cb>spinner\u003C\u002Fb>\u003Cbr>\u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Famansingh-afk\u002Fmilli.nvim\u002Fmedia\u002Fpreviews\u002Fspinner.gif\" width=\"380\">\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd align=\"center\">\u003Cb>vibecat\u003C\u002Fb>\u003Cbr>\u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Famansingh-afk\u002Fmilli.nvim\u002Fmedia\u002Fpreviews\u002Fvibecat.gif\" width=\"380\">\u003C\u002Ftd>\n\u003Ctd align=\"center\">\u003Cb>vibecattwo\u003C\u002Fb>\u003Cbr>\u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Famansingh-afk\u002Fmilli.nvim\u002Fmedia\u002Fpreviews\u002Fvibecattwo.gif\" width=\"380\">\u003C\u002Ftd>\n\u003Ctd>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftable>\n\n## Install\n\n**lazy.nvim:**\n```lua\n{ \"amansingh-afk\u002Fmilli.nvim\", lazy = false }\n```\n\n**packer.nvim:**\n```lua\nuse \"amansingh-afk\u002Fmilli.nvim\"\n```\n\n## Quick start\n\n```lua\n-- preview any bundled splash in a scratch buffer\n:MilliPreview fire\n\n-- or wire into your dashboard\nrequire(\"milli\").dashboard({ splash = \"fire\", loop = true })\n```\n\nList bundled splash names:\n```lua\n:lua print(vim.inspect(require(\"milli\").list()))\n```\n\nFor dashboard-nvim \u002F alpha-nvim \u002F snacks.nvim \u002F mini.starter wiring, see [Dashboard integrations](#dashboard-integrations).\n\n## Using your own splash\n\n> Powered by [**milli**](https:\u002F\u002Fgithub.com\u002FAmansingh-afk\u002Fmilli) - the ASCII engine behind this plugin. [⭐ Star it on GitHub](https:\u002F\u002Fgithub.com\u002FAmansingh-afk\u002Fmilli) if you find it useful.\n\nThe 29 bundled splashes are a starting point. Bring any image or GIF you want - a custom logo, mascot, anything - and it becomes a splash in four steps.\n\n**1. Install the CLI** ([@amansingh-afk\u002Fmilli](https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002F@amansingh-afk\u002Fmilli)):\n\n```bash\nnpm install -g @amansingh-afk\u002Fmilli\n```\n\n**2. Generate `frames.lua` from any image \u002F GIF:**\n\n```bash\nmilli export mycat.gif .\u002Fout -t lua -w 60 --no-bg\n```\n\nUseful flags:\n- `-w 60` - width in columns; tune to taste\n- `--no-bg` - drop background color (cleaner on dashboards)\n- `-m braille` - braille mode for higher-detail line art\n\n**3. Copy `frames.lua` into your Neovim config:**\n\n```bash\nmkdir -p ~\u002F.config\u002Fnvim\u002Flua\u002Fmilli\u002Fsplashes\ncp out\u002Fframes.lua ~\u002F.config\u002Fnvim\u002Flua\u002Fmilli\u002Fsplashes\u002Fmycat.lua\n```\n\nNeovim's runtimepath auto-discovers `~\u002F.config\u002Fnvim\u002Flua\u002F`, so this file becomes a sibling to the plugin's bundled splashes - findable by the same machinery, tab-completable in `:MilliPreview`.\n\n**4. Use it - same API as any bundled splash:**\n\n```lua\nrequire(\"milli\").dashboard({ splash = \"mycat\", loop = true })\n```\n\nPreview it first:\n```\n:MilliPreview mycat\n```\n\n### Custom module path (advanced)\n\nIf you don't want to piggyback on the `milli.splashes` namespace (e.g. you organize splashes under a dotfiles module), drop the file anywhere on runtimepath and reference it by Lua module path:\n\n```lua\n-- ~\u002F.config\u002Fnvim\u002Flua\u002Fmydots\u002Fsplashes\u002Fmycat.lua\nrequire(\"milli\").dashboard({ module = \"mydots.splashes.mycat\", loop = true })\n```\n\nWorks with every preset - `splash = \"name\"` for bundled\u002Fuser-local, `module = \"path.to.mod\"` for custom namespaces.\n\n## Dashboard integrations\n\nPick your dashboard plugin. Each preset (`dashboard`, `alpha`, `snacks`, `starter`, `vimenter`) works identically with bundled or custom splashes.\n\n### dashboard-nvim\n\n```lua\nreturn {\n  \"nvimdev\u002Fdashboard-nvim\",\n  event = \"VimEnter\",\n  dependencies = { \"amansingh-afk\u002Fmilli.nvim\" },\n  opts = function()\n    local splash = require(\"milli\").load({ splash = \"finger\" })\n    return {\n      theme = \"doom\",\n      config = {\n        header = splash.frames[1],         -- seed header with frame 0\n        center = {\n          { icon = \"  \", desc = \"Find File\", key = \"f\", action = \"Telescope find_files\" },\n          { icon = \"  \", desc = \"Quit\",      key = \"q\", action = \"qa\" },\n        },\n      },\n    }\n  end,\n  config = function(_, opts)\n    require(\"dashboard\").setup(opts)\n    require(\"milli\").dashboard({ splash = \"finger\", loop = true })\n  end,\n}\n```\n\n### alpha-nvim\n\n```lua\nrequire(\"milli\").alpha({ splash = \"fire\", loop = true })\n```\n\n### snacks.nvim\n\n```lua\nreturn {\n  \"folke\u002Fsnacks.nvim\",\n  priority = 1000,\n  lazy = false,\n  dependencies = { \"amansingh-afk\u002Fmilli.nvim\" },\n  opts = function()\n    local splash = require(\"milli\").load({ splash = \"fire\" })\n    return {\n      dashboard = {\n        enabled = true,\n        preset = {\n          header = table.concat(splash.frames[1], \"\\n\"),\n        },\n        sections = {\n          { section = \"header\", padding = 1 },\n          { section = \"keys\",   gap = 1, padding = 1 },\n          { section = \"startup\" },\n        },\n      },\n    }\n  end,\n  config = function(_, opts)\n    require(\"snacks\").setup(opts)\n    require(\"milli\").snacks({ splash = \"fire\", loop = true })\n  end,\n}\n```\n\n`preset.header` seeds frame 0 of the splash as snacks's default header so milli's anchor-search can locate the buffer position to animate over. The splash name in `preset.header` and in `require(\"milli\").snacks({ splash = ... })` must match.\n\n### mini.starter\n\n```lua\nrequire(\"milli\").starter({ splash = \"fire\", loop = true })\n```\n\n### No plugin (raw VimEnter)\n\n```lua\nrequire(\"milli\").vimenter({ splash = \"fire\", loop = true })\n```\n\n## Previewing\n\n```\n:MilliPreview \u003Cname>\n```\n\nOpens a scratch buffer, plays the splash in a loop. `q` or `\u003CEsc>` dismisses. Tab-completes against bundled splashes and any you've dropped into `~\u002F.config\u002Fnvim\u002Flua\u002Fmilli\u002Fsplashes\u002F`. Run `:MilliPreview` with no arg to list what's available.\n\n## API\n\n```lua\nrequire(\"milli\").play(buf, opts)       -- paint\u002Fanimate into buf\nrequire(\"milli\").load(opts)            -- return the data table\nrequire(\"milli\").list()                -- array of all discovered splash names\n\nrequire(\"milli\").dashboard(opts)       -- autocmd preset for dashboard-nvim\nrequire(\"milli\").alpha(opts)           -- alpha-nvim\nrequire(\"milli\").snacks(opts)          -- snacks.nvim\nrequire(\"milli\").starter(opts)         -- mini.starter\nrequire(\"milli\").vimenter(opts)        -- raw VimEnter\n```\n\n### `opts`\n\n```lua\n{\n  splash = \"fire\",     -- bundled or user-local splash name, OR\n  module = \"mysplash\", -- require path to an external splash module, OR\n  data = { ... },      -- the data table directly\n  loop = true,         -- repeat forever (default: false - play once)\n}\n```\n\nA plain string is sugar for `{ splash = \u003Cstring> }`. So `require(\"milli\").dashboard(\"fire\")` works.\n\n## Requirements\n\n- Neovim 0.10+ (extmarks, namespaces)\n- `termguicolors` enabled (`vim.opt.termguicolors = true`)\n\n## Why extmarks, not ANSI escapes?\n\nNeovim buffers strip ANSI. Colors are applied via extmarks + per-color highlight groups generated on demand. The groups are keyed on quantized fg\u002Fbg so a truecolor splash doesn't blow through Neovim's highlight-group cap (E849).\n\n## License\n\nMIT.\n","milli.nvim 是一个为 Neovim 提供动画 ASCII 启动画面的插件。它内置了29种预设启动画面，并支持通过 milli CLI 或在线工具自定义导入任何图像或 GIF 作为启动画面。该插件采用 Lua 编写，能够与多种 Neovim 的启动界面插件（如 dashboard-nvim、alpha-nvim 等）无缝集成，同时也支持直接在 `VimEnter` 事件中使用。适用于希望个性化其编辑器启动体验的开发者，尤其是那些喜欢 ASCII 艺术或想要让自己的 Neovim 环境更加生动有趣的用户。",2,"2026-06-11 02:43:42","CREATED_QUERY"]