AGENTS.md · marktext/marktext
AGENTS.md from marktext/marktext: 281 lines covering Project Overview, Tech Stack, Directory Structure, Development Workflow and more.
Template by marktext
Install
Works with Codex, Cursor, GitHub Copilot, Gemini CLI, OpenCode, Claude Code. Read the repository before you give any tool access to your data.
curl -fsSL https://raw.githubusercontent.com/marktext/marktext/develop/AGENTS.md -o AGENTS.md
Read it and adapt it to your project before use.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: prompt-engineering
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
What's in it
An AGENTS.md file: instructions coding agents (Codex, Cursor, Copilot, Gemini CLI and others) read before working in a repo.
- For
- Codex, Cursor, GitHub Copilot, Gemini CLI, OpenCode, Claude Code
- Length
- 281 lines
- File
AGENTS.md
Sections
- Project Overview
- Tech Stack
- Directory Structure
- Development Workflow
- Build Commands
- Testing
- Code Style
- Architecture: Three-Process Electron Model
- IPC Conventions
- Further Reading
- Important Build Notes
- Contribution
First lines (shown under the repo's MIT license)
# Development Rules
This file provides guidance to AI agents when working with code in this repository.
## Project Overview
MarkText is a WYSIWYG markdown editor built on Electron + Vue 3. It supports CommonMark, GitHub Flavored Markdown, math (KaTeX), Mermaid diagrams, PlantUML, and multiple editing modes (focus, typewriter, source-code).
- **Version**: see `package.json`
- **License**: MIT
- **Repository**: <https://github.com/marktext/marktext>
## Tech Stack
| Layer | Technology |
| ------------------ | ---------------------------------------------------------- |
| Language | TypeScript 5.9 (strict mode) |
| Desktop shell | Electron 45 |
| Build system | electron-vite 6 |
| Packaging | electron-builder 26 |
| Frontend framework | Vue 3 |
| State management | Pinia 3 |
| Routing | Vue Router 4 |
| UI library | Element Plus |
| Unit tests | Vitest 4 |
| E2E tests | Playwright |
| Package manager | pnpm >=10 workspace (`packageManager: pnpm@10.33.4`) |
| Repo layout | pnpm monorepo — see Directory Structure |
| Node.js minimum | >=22.12.0 (PR CI: Node 22.21.1 · release CI: Node 24.14.1) |
## Directory Structure
This is a pnpm workspace. Three packages live under `packages/`, and the
root holds only shared tooling and CI-facing scripts.
```
<repo-root>/
package.json Workspace orchestrator — every CI-facing script
proxies to packages/desktop via `pnpm --filter
marktext ...`. CI invocations are unchanged.
pnpm-workspace.yaml `packages: ['packages/*']` plus allowBuilds.
pnpm-lock.yaml Single lockfile, shared across all packages.
eslint.config.js Root ESLint v9 flat config (covers desktop;
the website has its own ESLint v8 config and is
ignored here).
scripts/ Workspace-level scripts. postinstall.ts,
minify-locales.ts, generateThirdPartyLicense.ts,
validateLicenses.ts, thirdPartyChecker.ts all
target packages/desktop internally.
docs/ Long-form developer docs.
dist/ Packaged installers from electron-builder
(git-ignored; electron-builder writes here via
`directories.output: ../../dist` so CI artifact
globs `dist/*` still apply).
packages/
desktop/ The Electron app (name: "marktext").
package.json Holds all Electron / Vue / build-time deps and
the dev/build/test/typecheck scripts. Depends on
@muyajs/core via workspace:*.
electron.vite.config.ts
electron-builder.yml directories.output points at ../../dist.
tsconfig.json / tsconfig.base.json
vitest.config.ts
playwright.config.ts Must stay here, not in test/e2e/ — Playwright only
auto-loads a config from the directory it runs in.
patches/ pnpm patches consumed by patch-package.
build/ electron-builder resources (icons, entitlements,
NSIS scripts).
static/ Static assets bundled into the app
(icons, themes, locales).
out/ electron-vite output (git-ignored).
test/
unit/ Vitest specs → pnpm test / pnpm test:unit
e2e/ Playwright specs → pnpm test:e2e
src/
common/ Pure Node.js utilities usable from main, preload,
and renderer.
main/ Electron main process (IO, native dialogs, window
management, auto-updater).
preload/ Electron preload scripts. The renderer runs
sandboxed (contextIsolation: true,
nodeIntegration: false, sandbox: true since
#4244) — all Node access flows through the typed
contextBridge surface in
packages/desktop/src/preload/index.ts.
renderer/ Vue 3 application (editor UI, Pinia stores).
src/
components/ Vue single-file components.
store/ Pinia stores (editor.ts, preferences.ts,
layout.ts, …).
pages/ Top-level Vue pages / routes.
router/ Vue Router configuration.
shared/ Cross-process types (`shared/types/`) and the
IPC contract (`shared/types/ipc.ts`).
types/ Ambient .d.ts declarations.
muya/ TypeScript rewrite of muya
(name: "@muyajs/core"; upstream:
https://github.com/marktext/muya). Built on
ot-json1 + ot-text-unicode + snabbdom + marked@16
+ rxjs. Self-contained: own eslint config
(antfu), own stylelint, own madge, own vitest
spec suites (CommonMark + GFM). The editor
engine the desktop renderer consumes. See
packages/muya/AGENTS.md for layout and commands.
src/ TS source. Public entrypoint src/index.ts.
test/spec/ CommonMark 0.31 + GFM 0.29-gfm conformance.
examples/ muya-examples — vite vanilla-TS dev demo
(listed in pnpm-workspace.yaml).
e2e/ muya-e2e — Playwright suite. CI runs Chromium
only via muya-e2e.yml; Firefox + WebKit are
wired in playwright.config.ts but deferred
until BACKLOG Phase 3 lands engine-independent
specs.
website/ marktext-website (Vite + React 18). Standalone
toolchain; depends on @muyajs/core from npm,
not on the local workspace. Not part of desktop
CI today.
src/ / public/ / build/ / vite.config.ts / tsconfig.json
```
The root has no `src/`, `test/`, `static/`, or `build/` of its own anymore — they all live in `packages/desktop/`.
## Development Workflow
All commands run from the repo root. The root `package.json` proxies every
desktop-specific script to `packages/desktop` via `pnpm --filter marktext`,
so the names and behavior are unchanged from the pre-monorepo layout.
```bash
# Install dependencies (runs scripts/postinstall.ts automatically — patches
# native-keymap, downloads Electron, rebuilds native modules, minifies locales)
pnpm install
# Run in development mode
# Renderer hot-reloads automatically. Pressing Ctrl+R in the dev window reloads
# the renderer (which re-runs the preload script); changes to the main process
# require restarting `pnpm run dev`.
pnpm run dev
# Preview the last electron-vite build (no rebuild).
pnpm run start
# Build without packaging — fast path for verifying the renderer/main compile
pnpm run build:unpack
# Auto-format the repo with Prettier (separate from `lint`, which only checks)
pnpm run format
# Minify locale files (required for production builds, skip during dev)
pnpm run minify-locales
# Performance debugging — exposes a Node inspector on :5858 against the previewed build
pnpm run perf:inspect # attach when ready
pnpm run perf:inspect-brk # break on first line
# Website (not yet wired into CI)
pnpm --filter marktext-website dev # Vite dev server
pnpm --filter marktext-website build # static build → packages/website/build/
```Signals
- Stars
- 63,059
- Forks
- 4,657
- Open issues
- 258
- Last commit (this folder)
- Oct 15, 2026 (14 days ago)
- Last release
- Oct 21, 2026 (9 days ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/marktext/marktext
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
Cite this page
AGENTS.md · marktext/marktext. Agent Mart. https://agentmart.dev/templates/marktext-marktext-agents-md (last updated 2026-10-24)