Elliott Park31 downloadsA pixel pet that grows as you write. Characters, links and new notes become XP, with daily quests, badges, streaks and accessories to unlock.
A pixel partner that grows as you write. Pick one of five little friends, and from the day you install it, every character you type, link you make and note you create feeds it. It hatches from an egg and grows into an adult. It strolls along the bottom of your editor, sits down to write with you while you type, cheers when you link two notes, and reminds you about lunch, breaks and bedtime.
Most pet plugins just sit there. This one only grows when your vault does.


Screenshots show the Korean UI. The plugin speaks English and Korean and follows Obsidian's language.
vault-pet code blockOn first run you pick one of five partners. They all grow on your notes, but each one is good at something different.

| # | Friend | Type | Personality | Perk | While you write |
|---|---|---|---|---|---|
| 001 | ✒️ Inky, an ink drop | Ink | Diligent and a little shy | +20% writing XP | Scribbles in a notebook with a quill |
| 002 | 🧶 Purrl, a yarn cat | Yarn | A curious little troublemaker | +30% link XP | Types on a tiny laptop, tail swishing |
| 003 | 🌱 Sprig, a seedling | Sprout | Easygoing but steady | +50% streak bonus | Ticks off a checklist |
| 004 | 🔥 Ember, a baby dragon | Flame | A fired-up idea machine | +50% new-note XP | Writes on a scroll, sparks flying |
| 005 | 📚 Dewey, a book owl | Wisdom | A night-owl bookworm | +30% quest rewards | Reads a thick book, peeking over the top |
Every friend has its own egg, its own home in the pet house, its own way of talking (Inky is shy, Purrl mews and purrs, Sprig takes it slow, Ember roars, Dewey hoots), a short 8-bit cry it sometimes lets out when you pet it, and a little habit it does when it's bored: Inky drips a drop of ink, Purrl swishes its tail, Sprig shakes out a leaf, Ember puffs smoke and Dewey tilts its head.
As they grow they change: Inky gets a golden pen nib, Purrl a collar with a bell, Sprig a bud and then a flower, Ember horns and bigger wings, Dewey taller ear tufts.
XP = characters written ÷ 20 + links × 5 + new notes × 15 + bonus (times your partner's perk)
Level = √(XP / 25) + 1
| Stage | XP needed | What changes |
|---|---|---|
| 🥚 Egg | 0 | A patterned shell that cracks as it gets close |
| 🐣 Baby | 1,000 | A small round blob. Eyes take up half the face, no arms or legs |
| 🌿 Kid | 8,000 | Bigger and still round, now with stubby arms and feet, and its first markings |
| ✨ Teen | 30,000 | Head and body separate, so it stands upright. Ears, horns, wings and tails come in |
| 👑 Adult | 100,000 | Tallest and broadest, with a narrow determined gaze and a crest of its own |
Every friend grows into a different shape, not just a bigger one:
| Kid | Teen | Adult | |
|---|---|---|---|
| ✒️ Inky | Curled tip, ink puddle | Gold nib, ink running off the shoulders | Bigger nib, ink pooling wide with drops floating beside it |
| 🧶 Purrl | Pointy ears, striped forehead | Long ears, curled tail, bell collar | Tufted ears, fangs, a fur ruff and two tails |
| 🌱 Sprig | Two leaves | Four leaves, a flower bud, vines up the body | A flower in full bloom and a collar of leaves |
| 🔥 Ember | Horn buds, small wings | Real horns, wings, spines over the shoulders | Forked horns, wings as wide as its body, a mane of flame |
| 📚 Dewey | Small ear tufts | Long tufts, wings that work as arms | Tall white-tipped tufts and feathered wings |
What counts:
[[wikilinks]], ![[embeds]] and [markdown](links), but not the ones inside code or %%comments%%.What doesn't count, so you can't farm XP:
data: URIs), single lines over 1,000 characters inside code blocks (data blobs), and any folders you exclude in the settings (templates, attachments…).Growth starts when you install. Your first partner hatches from an egg on the day you install the plugin. On first run the plugin reads your vault once only to remember how big each note already is; notes you wrote before that don't earn XP, badges or stats. Add to an old note later and just the new part counts.
Updates never reset anything. Your friends, XP, badges, items, streak and history live in data.json, which Obsidian keeps when it updates a plugin. Older data is carried forward as it is when a new version loads (tests load 0.1 and 0.2 data and check nothing is lost). The only way to start over is Erase everything in the settings.
Your partner lives at the bottom-right of the editor. When you're not typing it takes little walks along the bottom of the editor and wanders back; when you type it sits down right where it is and works with you. Until you drag it somewhere, its home follows that corner as sidebars open and close.

Light or dark. The pet's bubbles, status window, house and cards follow your computer's light/dark setting by default, and switch the moment it changes. In the settings you can make them follow Obsidian's theme instead, or keep them always light or always dark. In the dark they turn into a navy dialogue box with a white border.
| Action | What happens |
|---|---|
| Click | Pet it (hearts, sometimes its cry) |
| Drag | Move it. Where you drop it becomes its new home |
| Double-click | Open the pet house |
| Right-click | Pet, open the house, the dex, walk around or stay here, quiet for 1 hour, reset position, hide |
| Hover | A status window with level, EXP, progress to the next stage, today's writing and a reminder of the controls |
| Hover a bubble | Keeps it open while you read |
| Click a bubble | Shows the whole line at once if it's still typing, then skips to the next bubble or jumps to the badge, quest or wardrobe tab it's about |
Speech bubbles look like a game's dialogue box, with your partner's name on a tab and a blinking ▼ once the line has finished typing. They stay up longer for longer lines. Clicks on the transparent parts of the pet go through to whatever is behind it. When XP comes in, +12 XP floats up over its head.
Moods
| Mood | When | Looks like |
|---|---|---|
| ✍️ Writing with you | You typed in the last 20 seconds | Sits down with its work prop, letters float up |
| 👀 Watching | Any activity in the last 5 minutes, including opening notes | Bounces, looks around, goes for walks |
| 🍃 Lazing | 5–20 minutes idle | Breathes slowly, strolls now and then |
| 😪 Sleepy | 20–45 minutes idle | Half-closed eyes, yawns |
| 💤 Asleep | 45+ minutes idle | Flattens out, Zzz |
All the timings can be changed in the settings, and walking can be turned off (Stay here in the right-click menu). As an egg it can't talk or walk yet, so it only wiggles: (wiggle wiggle).
Quiet mode (right-click, command palette or the house) silences bubbles and sounds for an hour.
The Dex tab in the pet house lists all five friends.

20 + streak days × 5 XP (up to 90).Open it from the paw icon in the ribbon, the level in the status bar (🧶 Lv.29 · 27%), or by double-clicking the pet. Click your partner's name to rename it.

NEWPut this code block in any note to get a live card of your partner there. The Insert pet card command adds it for you. It works well on a home note or in a daily note template.
```vault-pet
```

| Command | |
|---|---|
| Open pet house | |
| Open the dex (change partner) | |
| Show or hide the pet | A hidden pet still appears in the house and in note cards |
| Toggle walking around | |
| Pet the pet | |
| Toggle quiet mode for 1 hour | |
| Reset pet position | |
| Insert pet card | Inserts a vault-pet code block into the current note |
Partner, name, language (auto, English, 한국어), theme (follow system, follow Obsidian, light, dark), show on screen, walk around, size (×1–×5), status bar, pixel font, speech bubbles, small talk, sound, lunch and dinner times, break, sleepy and sleep timings, late-night nagging, folders to ignore, the welcome tour, reset position, and erase everything.
From Settings → Community plugins → Browse, search for Vault Pet.
Manual install: copy main.js, manifest.json and styles.css from the latest release into <your vault>/.obsidian/plugins/vault-pet/, then enable Vault Pet under Community plugins.
Optional pixel font. The UI can use the Galmuri pixel font. Obsidian only installs the three files above, so by default the pet uses your theme's font. If you want the pixel look, copy the fonts/ folder from this repository into the same plugin folder. The plugin picks it up on its own, and the Pixel font setting turns it on and off.
Updating. Nothing is ever reset by an update. Coming from 0.1, your pet, its XP, badges and items are all kept, and the plugin shows the partner picker once: whichever friend you choose takes over everything your pet had grown so far (close it without choosing and your pet simply becomes Inky). Pets that were counting your whole vault before 0.3 keep doing so; only new installs start from the day they're installed.

/ and every part is replaced with a short hash before it is saved, so data.json can't tell anyone which folders or notes your vault has. Hashing each part separately is what still lets a rename or a moved folder carry its record along..obsidian/plugins/vault-pet/data.json.No build step. The plugin is a single main.js.
node tests/run.js # logic tests without Obsidian (counting, ledger, growth, loading old data, friends, quests, badges, moods, drawing, both languages)
node scripts/demo-vault.js <folder> # a demo vault on first run (welcome tour and partner picker)
node scripts/demo-vault.js <folder> --seeded --partner=purrl # three weeks after installing, with three friends in the dex
node scripts/demo-vault.js <folder> --plugin-only # copy the plugin files only, leave the notes alone
main.js
language S (UI strings as [Korean, English]), LINES and SPECIES_LINES (what the friends say)
counting measure(): characters and links in a note
ledger Ledger: per-file highs, daily and hourly totals, budgets for bulk changes
growth computeGrowth(): a friend's record + your writing → level and stage
saving loadSaved(): reads any older data.json without losing anything
mood Brain: moods, reminders, reactions to writing
game Gamify: quests, badges, streaks, items, colors, bonus XP, perks
friends SPECIES: the five friends, their perks and palettes
pixel art PetRenderer + ART + EGG: every friend is drawn in code on a 48×48 canvas
sound PetSound: WebAudio jingles and cries
UI PetWidget (walking pet, status window, bubbles), HouseView (sidebar and dex),
PetCard (in notes), WelcomeModal (partner picker), PetSettingTab
styles.css pixel-style UI on top of your theme's colors. The accent follows your partner's color,
and each friend has its own little home drawn in CSS
fonts/ Galmuri pixel font (SIL OFL 1.1), optional
The pet started as Claude Pet, a desktop companion that grows with Claude Code usage. Vault Pet brings it into Obsidian and feeds it your notes instead.
노트를 쓸수록 자라는 도트 친구예요. 처음에 다섯 친구 중 하나를 파트너로 골라요. 성장은 플러그인을 설치한 순간부터 시작하고, 업데이트해도 초기화되지 않아요.
| 친구 | 타입 | 성격 | 특기 |
|---|---|---|---|
| ✒️ 잉키 (잉크방울) | 잉크 | 성실하고 조금 수줍어요 | 글자 경험치 +20% |
| 🧶 냥타래 (실타래 고양이) | 실타래 | 호기심 많은 장난꾸러기 | 링크 경험치 +30% |
| 🌱 새록이 (새싹 요정) | 새싹 | 느긋하지만 꾸준해요 | 출석 보너스 +50% |
| 🔥 모닥이 (아기 용) | 불꽃 | 열정 넘치는 아이디어 뱅크 | 새 노트 경험치 +50% |
| 📚 듀이 (책 부엉이) | 지혜 | 밤샘 독서가, 척척박사 | 퀘스트 보상 +30% |
data.json 에 있고, 옵시디언은 플러그인을 업데이트할 때 이 파일을 건드리지 않아요. 새 버전은 예전 기록을 그대로 이어받아요. 처음부터 다시 하려면 설정의 "모든 기록 지우기"만 쓰면 돼요.vault-pet 코드 블록을 넣으면 그 자리에 파트너 카드가 떠요.data.json 에 남아요./ 로 끊어 토막마다 짧은 해시로 바꿔 넣기 때문에, data.json 만 봐서는 볼트에 어떤 폴더와 노트가 있는지 알 수 없어요. 토막마다 따로 해시해서 이름을 바꾸거나 폴더를 옮겨도 기록은 그대로 따라가요.fonts/ 폴더를 플러그인 폴더에 복사하세요. 없으면 테마 글꼴로 보여요.MIT. The optional pixel font is Galmuri under the SIL Open Font License 1.1 (fonts/OFL.md).