[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-78413":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":9,"language":10,"languages":9,"totalLinesOfCode":9,"stars":11,"forks":12,"watchers":13,"openIssues":14,"contributorsCount":14,"subscribersCount":14,"size":14,"stars1d":15,"stars7d":16,"stars30d":17,"stars90d":14,"forks30d":14,"starsTrendScore":18,"compositeScore":19,"rankGlobal":9,"rankLanguage":9,"license":20,"archived":21,"fork":21,"defaultBranch":22,"hasWiki":23,"hasPages":21,"topics":24,"createdAt":9,"pushedAt":9,"updatedAt":30,"readmeContent":31,"aiSummary":32,"trendingCount":14,"starSnapshotCount":14,"syncStatus":33,"lastSyncTime":34,"discoverSource":35},78413,"xposter","nevertoday\u002Fxposter","nevertoday","Chrome MV3 extension for importing Markdown drafts into X Articles.",null,"JavaScript",120,29,21,0,1,9,76,7,58.53,"MIT License",false,"main",true,[25,26,27,28,29],"chrome-extension","markdown","mv3","publishing","x-articles","2026-06-12 04:01:23","# xPoster\n\nxPoster is a free Chrome extension that moves a Markdown draft into X Articles.\n\nIt is built for people who write in Markdown first, then publish on X later. You paste or load a `.md` file, xPoster previews what it understands, checks the active X Article tab, fills the editor, and leaves the final Publish click to you.\n\n[中文说明](README.zh-CN.md)\n\n![xPoster side panel screenshot](docs\u002Fimages\u002Fsidepanel-real.png)\n\n## Why Use It\n\n- Write long posts in any Markdown editor instead of drafting everything inside X.\n- Keep a repeatable checklist before import: draft, X Article tab, editor bridge, images, and final review.\n- Convert common Markdown pieces into X-friendly content: headings, paragraphs, lists, quotes, links, inline formatting, code blocks, dividers, images, tables, and tweet embeds.\n- Use it without an account, subscription, license key, or trial gate.\n- Stay in control: xPoster fills the draft editor, but it does not publish the article for you.\n\n## Quick Install\n\n![Chrome load unpacked steps](docs\u002Fimages\u002Finstall-steps.svg)\n\nRecommended install path:\n\n1. Open the Chrome Web Store listing: [xPoster on Chrome Web Store](https:\u002F\u002Fchromewebstore.google.com\u002Fdetail\u002Fxposter\u002Fiimkimodgdjnnmdopeolboakhjmhfbbj?authuser=0&hl=zh-CN).\n2. Click **Add to Chrome**.\n3. Open X Articles and start using xPoster. The store version is the recommended version and will keep receiving feature updates and improvements.\n\nDeveloper install from source:\n\n1. Download or clone this project.\n2. Open Chrome and go to `chrome:\u002F\u002Fextensions`.\n3. Turn on **Developer mode**.\n4. Click **Load unpacked**.\n5. Select the xPoster project folder, the folder that contains `manifest.json`.\n\nUse the source install only if you want to inspect or modify the extension yourself.\n\n## Quick Use\n\n![xPoster publishing flow](docs\u002Fimages\u002Fpublishing-flow.svg)\n\n1. Open or create an X Article at `https:\u002F\u002Fx.com\u002Fcompose\u002Farticles`.\n2. Open the xPoster side panel.\n3. Paste Markdown in the editor, choose a Markdown file, or click **Example**.\n   Single drafts stay in the editor so you can keep working directly.\n4. Check the preview and the issue list.\n5. Click **Check article** so xPoster can confirm the active X Article tab is reachable.\n6. Click **Write article \u002F Import**. If you selected or dropped multiple Markdown files, the editor becomes a Pending list; click a row to edit that draft in a popup, use **Write all drafts** for batch writing, or use **Write this draft** inside the popup for one item.\n7. Review the article inside X.\n8. Click X's own Publish button only when the article looks right.\n\n## Pending Drafts\n\nPending starts as one Markdown editor plus the write button. When you choose or drop multiple `.md` files, that editor is replaced by a compact Pending list. Click any row to edit its Markdown in a popup. The bottom button writes all queued drafts one by one; the popup can write just the open draft. Each queued draft is removed as soon as xPoster successfully writes it into X Article.\n\n## What Markdown Works\n\n| Markdown input | What xPoster does |\n| --- | --- |\n| `--- title: My title ---` | Uses frontmatter as the X Article title when possible. |\n| `# Heading` | Uses the first H1 as title if frontmatter has no title. |\n| Paragraphs, lists, quotes | Converts them into rich text for the editor. |\n| `**bold**`, `*italic*`, `` `code` ``, links | Keeps inline formatting where X accepts it. |\n| `![alt](image.png)` | Uploads supported images when xPoster can read the file. |\n| Markdown tables | Renders tables as images so X can show them cleanly. |\n| X\u002FTwitter status URLs | Inserts tweet embeds through X's editor model. |\n| Code fences and dividers | Imports them as X Article atomic blocks where supported. |\n\nA smoke-test draft is included at [fixtures\u002Flive-x-smoke.md](fixtures\u002Flive-x-smoke.md).\n\n## Image Notes\n\nFor local images, keep the image files near your Markdown file and choose the local image folder when xPoster asks.\n\nFor web images, Chrome may ask for one-time permission to read the image website. xPoster needs that browser permission so it can download the image and upload the actual file into X. It does not grant xPoster permission to publish.\n\nThe public source build does not expose private image hosts. If you maintain your own fork and need remote image support for a specific host, declare only the host you trust in your own extension manifest.\n\n## Safety And Privacy\n\n- xPoster stores drafts in your browser's local extension storage.\n- xPoster runs on `x.com` and `twitter.com` because it needs to fill the X Article editor.\n- xPoster asks for `tabs` only to find and check the active X Article tab.\n- xPoster does not include analytics, a backend service, a license server, or a payment gate.\n- xPoster does not click Publish. You always review and publish manually in X.\n\nRead the shorter privacy note in [docs\u002Fprivacy.md](docs\u002Fprivacy.md).\n\n## Developer Checks\n\nThis project is dependency-light. Node is only used for local verification.\n\n```bash\nnpm run check\nnpm test\nnpm run verify\n```\n\n`npm run check` verifies JavaScript syntax and `manifest.json`.\n\n`npm test` verifies the included fixture, manifest references, icons, and Markdown parsing behavior.\n\n## Project Layout\n\n```text\nmanifest.json          Chrome extension manifest\nsidepanel.html         Main side panel UI\nsidepanel.css          Side panel styling\nsidepanel.js           Side panel workflow and import controls\ndiagnostics.html       Toolbar popup for active-tab checks\ndiagnostics.js         Diagnostics UI logic\nsrc\u002Fbackground.js      MV3 service worker and image fetch proxy\nsrc\u002Fcontent.js         X page content script and import pipeline\nsrc\u002Fmain-world.js      MAIN-world Draft.js \u002F X editor adapter\nsrc\u002Fshared.js          Markdown parser, paste plan, local image helpers\nfixtures\u002F              Example Markdown used by checks and demos\ndocs\u002F                  Beginner guide, images, privacy notes\nscripts\u002F               Local verification scripts\n```\n\n## Common Problems\n\n**I cannot see xPoster in Chrome.**\nMake sure Developer mode is on, click **Load unpacked**, and select the folder that contains `manifest.json`.\n\n**Write article \u002F Import is disabled.**\nLoad or edit a Markdown draft first, open an X Article tab, then click **Check article**.\n\n**Images stay as text.**\nxPoster could not read the image file. For local files, choose the folder that contains the image. For web images, allow the image website when Chrome asks.\n\n**The article looks wrong after import.**\nDo not publish yet. Edit directly in X or reset the draft and retry. xPoster intentionally leaves the final publish decision to you.\n\n**X changed its editor and import stopped working.**\nOpen an issue with your Chrome version, xPoster version, and the diagnostics JSON from the toolbar popup.\n\n## Contributing\n\nIssues and pull requests are welcome. Start with [CONTRIBUTING.md](CONTRIBUTING.md).\n\n## Support\n\nxPoster is free and open source. If it saves you time and you want to support ongoing maintenance, you can scan the Buy Me a Coffee QR code below. This is completely optional; feedback, issues, and stars also help the project.\n\n\u003Cimg src=\"docs\u002Fimages\u002Fbuy-me-a-coffee-qr.png\" alt=\"Buy Me a Coffee QR code\" width=\"220\">\n\n## Contact\n\nContact the author on X: [@xiaoxiaodong01](https:\u002F\u002Fx.com\u002Fxiaoxiaodong01).\n\n## License\n\nMIT. See [LICENSE](LICENSE).\n","xPoster 是一个免费的 Chrome 扩展程序，用于将 Markdown 草稿导入 X 文章。其核心功能包括支持从任何 Markdown 编辑器中复制或加载 `.md` 文件，并将其转换为 X 友好的内容格式，如标题、段落、列表、引用等。此外，它提供了一个侧边栏预览功能，可以检查并填充 X 文章编辑器中的草稿，但最终发布操作仍由用户手动完成。xPoster 适合那些习惯于先在 Markdown 中撰写文章，然后在 X 平台上发布的作者使用。无需注册账号或订阅服务，即可轻松安装和使用。",2,"2026-06-11 03:56:47","CREATED_QUERY"]