ttangents10 downloadsShow a start page of note cards, in sections drawn from recent activity, properties, tags and links, styled by your active theme.
Home Cards gives your vault a start page. The page shows sections of note cards: the notes you opened or created most recently, notes with a given property or tag, and the notes other notes link to most and least. Your theme sets the colors, fonts and spacing. You can add a background pattern and pick a card style in settings.

summary property), and a footer with the value the section sorts on.
type, set Cards → Type property to that property.Search for Home Cards under Settings → Community plugins → Browse, then install and enable it.
To install a release by hand, copy main.js, manifest.json and styles.css from the latest release into <vault>/.obsidian/plugins/home-cards/, then reload Obsidian and enable Home Cards.
Home Cards requires Obsidian 1.13.1 or later and works on desktop and mobile.
Every setting appears in Obsidian's settings search.
If you use the Typify plugin, set Cards → Glyph to Icon from Typify. Home Cards then reads Typify's icon settings and shows the icon for each note's type. Home Cards only reads Typify's settings file, and only while this option is on. Without Typify, the option falls back to each note's initial letter.
Home Cards makes no network requests, works with no files outside your vault, sends no data anywhere, shows no ads and needs no account. It reads your notes' metadata and the first paragraph of each note it shows. On each device, it keeps the paths of the last 100 notes you opened, and which sections you folded, in Obsidian's local storage, outside your synced settings.
With Icon from Typify on, Home Cards also reads the Typify plugin's settings file in your vault's configuration folder.
The source divides into four layers. Each imports only from the layers above it; the views and settings tab also hold a type-only reference to the plugin class.
| Layer | Directory | Responsibility |
|---|---|---|
| Settings | src/settings/ |
The schema, defaults and choice registries (schema.ts), and the normalizer that turns untrusted data.json into valid settings (normalize.ts). No imports from Obsidian. |
| Compose | src/compose/ |
Ranking, filtering, text extraction, the card model, the dek cache and the open history. Type-only imports from Obsidian; no DOM. |
| Render | src/render/ |
The home page view, the Bases view, the card DOM they share, and the card actions. |
| Settings tab | src/settings-tab/ |
The settings tab, declared through Obsidian's settings definitions, and the section editor. |
src/main.ts wires the layers together and owns persistence. Settings edits go through two methods: touch() records an edit and writes once edits stop, for keystrokes and sliders; commit() writes at once, for structural changes. After a write, the plugin fires a refresh event; each open view subscribes to it and redraws.
Each compose takes one snapshot of the vault: one file listing and at most one pass over the link table, shared by every section.
The test suite enforces the layering: it bundles the tested code with obsidian marked external, and the obsidian package ships no runtime code, so a runtime import in settings/ or compose/ fails to load. A separate test checks each layer's imports.
styles.css is generated. Edit the partials in styles/, which scripts/build-css.mjs concatenates in filename order. Background tiles live in assets/tiles/ as WebP files, each a seamless repeat 800px wide that the page draws at 400 CSS pixels under a per-tile veil of the theme background (the --hc-veil-<id> variables in styles/10-backgrounds.css); the build inlines them as data URLs, because Obsidian loads a plugin's stylesheet with no asset path. The build refuses to write a stylesheet with unbalanced braces or a placeholder that names a missing tile.
To add a background pattern, add <id>-light.webp and <id>-dark.webp to assets/tiles/, declare the two variables and one selector in styles/10-backgrounds.css, and add the entry to BACKGROUNDS in src/settings/schema.ts. The tests fail if any of the three is missing.
npm install
npm run build # styles.css, type check, Obsidian's lint rules, main.js
npm test # type-checks the tests, then runs them
npm run dev # rebuilds main.js on save
npm run lint applies Obsidian's review rules, the checks the community directory runs on each release, to every file in the repository. See RELEASING.md for the release steps.