This file is a practical operating guide for AI agents working on editoro.
- App type: local-first markdown workspace (Obsidian-like UX).
- Frontend stack:
Nuxt 4,Nuxt UI 4,Pinia,@nuxtjs/i18n. - Storage: filesystem-backed content in
data/. - Left panel: tree, DnD, create/rename/delete, hidden files toggle.
- Right panel: markdown editor, image preview, folder browser.
- Locales:
en(default),ru.
app/pages/index.vuerendersEditoroWorkspace.app/composables/useEditoro.tsexposes grouped public API.app/composables/useEditoroState.tsorchestrates stores + logic.
app/components/editoro/Workspace.vue- page-level layout shell.app/components/editoro/Sidebar.vue- tree panel and sidebar controls.app/components/editoro/MainHeader.vue- active item title, pinning, actions.app/components/editoro/MainContent.vue- editor/browser/preview surface.app/components/editoro/Modals.vue- create/rename/delete/settings modals.
app/stores/editoroTree.ts- tree items, selection, expansion, tree loading.app/stores/editoroEditor.ts- editor content, view mode, save state, media upload.app/stores/editoroPreferences.ts- locale, theme, hidden files settings.app/stores/editoroUi.ts- modal states and workspace UI flags.
server/utils/data-storage.ts- path validation + filesystem operations.server/api/files/*.ts- content/tree/create/rename/delete/move/image endpoints.app/services/files-api.ts- client wrappers for server API.
- Keep all file operations inside
data/. - Preserve
?file=...sync with selected file. - Keep SSR/hydration stable (no client-only mismatch regressions).
- Preserve tree expansion/selection behavior across refresh/actions.
- Markdown media rules: uploads go to sibling
.media. - Markdown media rules: orphan media is removed only when truly unreferenced.
- Markdown media rules: empty
.mediadirectory should be removed.
Dockerfilebuilds and runs Nuxt production output.docker-compose.ymlruns app with./data:/app/data.deploy/lxc/lxd-editoro.yamlprovides LXD cloud-init profile.deploy/lxc/lxc.confprovides classic LXC config example.- CI workflow:
.github/workflows/docker-publish.yml. - Push to
mainpublishesghcr.io/codewec/editoro:dev. - Push tag publishes
ghcr.io/codewec/editoro:latestand:<tag>.
- Tool:
changelogen. - Config:
.changelogenrc. - Commands:
pnpm changelog,pnpm changelog:release. - Conventional commits are expected for clean release notes.
pnpm install
pnpm dev
pnpm lint
pnpm typecheck
pnpm build
pnpm changelog- Prefer existing composables/stores over adding logic into large UI components.
- Keep strict TypeScript typing, avoid
any. - Keep comments in English (especially in composables/helpers).
- For refactors, preserve existing public contracts used by
useEditoro()and workspace bindings. - Validate critical flows after changes: tree open/select/expand.
- Validate critical flows after changes: route restore on refresh.
- Validate critical flows after changes: create/rename/delete/move.
- Validate critical flows after changes: markdown autosave and status indicator.
- Validate critical flows after changes: image upload/preview/cleanup.