English | 한국어
한국어 사용 설명서: atoz-docs.vercel.app
a to z is an Obsidian plugin designed to streamline writing workflows, with particular support for Korean users.
It brings frequently used editing actions, note versions, frontmatter and topic management, note info, snippets, symbol input, and a sleep log together as commands and settings.
| Area | Main features |
|---|---|
| Editing | Copy or cut an entire note, copy or cut the selection or current line, delete the current line, and focus the main editor |
| Note organization | Move the current file, clean up tabs, and keep auto-generated note lists |
| Versions | Save numbered versions of a note, revert to one, and see what changed between two versions |
| Property management | Edit and clean up topics, date, and other supported properties |
| Note info | Character counts for the note or selection, reading time, and per-note writing targets |
| Input assistance | Insert reusable snippets and symbols, and delete matching symbol pairs together |
| Navigation | Cycle through sidebar tabs |
| Sleep log | Record sleep and wake times with one button and view them as a 24-hour chart in the Daynight sidebar |
The plugin automatically uses Korean UI text when Obsidian's interface language is Korean. All other interface languages use English.
Once the plugin is available in the Obsidian Community directory:
npm install
npm run build
<your-vault>/.obsidian/plugins/atoz/
manifest.json
main.js
styles.css
The minimum supported Obsidian version is 1.13.0. The plugin supports both desktop and mobile.
After enabling the plugin, open Settings → a to z and configure only the features you need.
| Setting | Default | Description |
|---|---|---|
| Enable cursor centering | Off | Keeps the cursor near the center of the screen while editing. |
| Enable standalone sidebar ribbon | Off | Pins the ribbon to the left edge when the left sidebar is closed. Mobile and tablet only. |
| Reading time basis | Without spaces | Character-count basis used to estimate reading time. |
| Reading speed | 500 |
Personal reading speed in characters per minute. |
| Target presets | 1,000±50, 1,500±75, 2,000±100, 3,000±150 |
Writing targets. Each preset is a target ± tolerance, a range (minimum to maximum), a minimum, or a maximum. |
| Snippet trigger character | @ |
Opens snippet suggestions while typing. |
| Snippet suggestion limit | 5 |
Maximum number of snippet suggestions shown. |
| Snippet list | Empty | Stores reusable text, one snippet per line. |
| Symbol trigger character | ~ |
Opens symbol suggestions while typing. |
| Symbol suggestion limit | 5 |
Maximum number of symbol suggestions shown. |
| Symbol list | Default symbol set | Configures each symbol's ID, displayed character, and optional closing character. |
| Work note path | work.md |
File opened by the Open work note command. |
| Version note folder | Empty (next to the source note) | Folder where version notes are created. |
| Sleep record folder | Empty (sleep) |
Folder where monthly sleep records are saved. |
Use Reset all settings to restore these defaults.
<number>_<timestamp> is created with a version property that links back to the source.Set notelist: true in a note's frontmatter. The plugin fills the note body with a - [[link]] list of every note that links to it, sorted by name. Lists refresh when Obsidian starts and when you run Note list: Refresh all. Notes whose body contains anything other than such a list are skipped, so hand-written content is never overwritten.
Open the Daynight sidebar from the moon ribbon icon or the Daynight: Open sidebar command. Press the button at the bottom to record Sleep now or Wake up now. Records are appended to a monthly sleep-YYYY-MM.md table. The sidebar shows the current state, a 24-hour chart that steps through sleep periods with ‹ and ›, and the most recent records (four by default, adjustable in settings). Only the last record can be edited or deleted, so sleep and wake records always alternate.
Clean up properties in entire vault checks Markdown files in the vault against the supported property list:
date:
topics:
title:
description:
cssclasses:
aliases:
tags:
target-characters:
target-tolerance:
min-characters:
max-characters:
version:
notelist:
Unsupported empty properties are removed automatically. Files containing unsupported properties with values are opened in new tabs for review. log.md and the configured work note are excluded.
By default, type @ followed by a search term to open snippet suggestions. Selecting an existing snippet replaces the typed range. A new snippet can be added directly from the suggestion list.
Type ~ followed by a symbol ID to open symbol suggestions. A symbol with a closing character wraps selected text, or inserts the pair and places the cursor between them. Pressing Backspace between a matching pair deletes both characters.
| Command | Description |
|---|---|
| Toggle Cursor centering | Keeps the cursor near the center of the screen while editing. |
| Copy entire note | Copies the entire current note to the clipboard. |
| Cut entire note | Copies the entire current note, then clears it. |
| Copy selection or current line | Copies the selection, or the current line when nothing is selected. |
| Cut selection or current line | Cuts the selection, or the current line when nothing is selected. |
| Delete current line | Deletes the line containing the cursor. |
| Focus main editor | Returns focus to the main Markdown editor. |
| Toggle mobile toolbar | Shows or hides the bottom toolbar on mobile. |
| Toggle standalone sidebar ribbon | Turns the standalone sidebar ribbon on or off. |
| Move current file | Moves the current Markdown file to another folder in the vault. |
| Edit topics | Searches vault notes, headings, and existing block IDs to add, remove, or re-alias topic wikilinks. |
| Date: Insert today's date if empty | Adds today's date only when the date property is absent. |
| Date: Change to today's date | Replaces the date value with today's date. |
| Clean up properties in entire vault | Removes unsupported empty properties and opens files that need review. |
| Note info: Open sidebar | Shows character counts, reading time, and the writing target in the left sidebar. |
| Note info: Set writing target | Assigns a configured preset or a typed target, or clears the current target. |
| Open work note | Opens the configured work note. |
| Close all unpinned tabs | Closes unpinned tabs in the main workspace. |
| Version: Save current state | Saves the current note as a numbered version note. |
| Version: Revert to saved version | Replaces the note body with a saved version. |
| Version: Open comparison view | Shows what changed between two versions of the current note. |
| Note list: Refresh all | Rebuilds the body of every note with notelist: true. |
| Daynight: Open sidebar | Shows the sleep log in the right sidebar. |
| Left/Right sidebar: next/previous tab | Cycles through the tabs of the left or right sidebar. |
| Restart input method fix | Restarts the Korean input method fix. |
Ribbon icons provide quick access to the work note, mobile toolbar, bookmarking the active tab, note info, and the Daynight sidebar.
Detailed feature documentation is available in Korean at atoz-docs (source):
| Document | Topic |
|---|---|
| cursor-center | Cursor centering |
| cut-copy | Copy and cut actions |
| delete-paragraph | Delete the current line |
| focus-root-leaf | Focus the main editor |
| move-current-file | Move the current file |
| work | Work note and tab cleanup |
| edit-topics | Topic editing |
| date-property | Date properties |
| lint-properties | Property cleanup |
| document-info | Character counts, reading time, and writing targets |
| mobile-toolbar | Mobile toolbar visibility |
| snippets | Snippet suggestions |
| symbols | Symbol suggestions and paired deletion |
| daynight | Daynight sleep log sidebar |
| versions | Saving, reverting, and comparing versions |
| note-list | Auto-generated note lists |
| others | Sidebar tab cycling, standalone ribbon, file menu items, bookmarks, and the Korean input method fix |
The snippet and symbol suggestions include code adapted from slash-snippets-plugin by Saurav, used under the MIT License. See THIRD_PARTY_NOTICES.md for the full license text.
If this plugin helps your writing, you can support its development on Buy Me a Coffee.
Source files are located in src/. The build output is generated as main.js in the repository root.
npm run dev
Starts esbuild in watch mode with src/main.ts as the entry point and generates a source-mapped main.js.
npm run build
Runs the TypeScript type check and creates a production bundle.
npm run lint
Checks the project with ESLint and the recommended Obsidian plugin rules.
npm run version
Runs version-bump.mjs, then stages manifest.json and versions.json.
npm run release
Interactively shows the latest release tag and commits since that tag, then offers major, minor, and patch version choices. After confirmation, it verifies a clean main branch and the remote state, updates all version metadata, runs lint and build checks, creates the release commit and tag, and atomically pushes both main and the tag. The existing GitHub Actions workflow then builds, attests, and publishes the release. Commit the release script itself before using it for the first time.
The script also checks the documentation repository at ../atoz-docs: it must be on a clean main branch that is not behind origin/main. Documentation commits since the last release are listed, and if there are none, the script asks again before continuing. After the plugin is pushed, the same version tag is added to the documentation repository and pushed along with its main.
.
├── manifest.json # Obsidian plugin metadata
├── main.js # Bundle generated by esbuild
├── styles.css # Plugin styles
└── src/
├── locales/ # English and Korean UI text
├── main.ts # Plugin loading, commands, and events
├── setting.ts # Settings tab
├── types.ts # Settings types and defaults
├── utils.ts # Shared utilities
└── features/ # Feature implementations