The Modern Markdown CMS
for Developers.
A unified system that helps you write and publish your markdown-based blog. Plug and play, headless, and database-free.
Comprehensive Feature Set
Powerful tools designed for a modern markdown workflow.
Rich Text Editor
Powered by Tiptap, offering a Notion-style editing experience.
- Slash commands (/) for fast formatting
- Drag & drop image uploads with resizing
- YouTube video embeds and search
- Multi-color text highlighting
- Full WYSIWYG parity with your blog
Organization
Seamlessly manage your content taxonomy and metadata.
- Intuitive Tag & Category management
- Automatic YAML frontmatter syncing
- Advanced filtering (date, draft, tags)
- Conflict detection for external edits
Robust Workflow
Peace of mind with built-in safety and persistence.
- Continuous Auto-Save to local storage
- Persistent History Stack (Undo/Redo)
- Publishing flow: Save → Publish → Push
- Optional direct Git integration
Architecture
Built for portability and performance.
- 100% Filesystem-based (No DB)
- Headless: Generates framework-agnostic data.json
- Dual mode: CMS (local writing) / Readonly (deployed blog)
- Submodule-first design
Technical Architecture
Designed to be lightweight, portable, and developer-friendly.
Two Modes, One System
CMS Mode
(npm run dev) runs locally with the full rich text editor, draft system, and write
capabilities. This is where you create and edit content.
Published Mode
(npm run publish) generates a static, readonly version of your blog. This is what
you deploy to the web for readers. Server-free.
Static API (data.json)
Inscript parses your markdown and generates a
unified data.json. The built-in Readonly App consumes this to
render your blog with pixel-perfect fidelity to the editor. Alternatively, your own frontend
(Astro, Next.js, etc.) can consume this data.
Quick Start
Get up and running in minutes.
1. Add Submodule
Run this from your project root:
git submodule add https://github.com/harshankur/inscript.git inscript
2. Install & Run
cd inscript && npm install && npm run dev
3. Environment Setup
Inscript generates a .env file
on first run. Configure your content and static paths there.
Configuration & Environment
Customize Inscript to fit your specific workflow.
| Variable | Status | Description |
|---|---|---|
TITLE |
Required | The display title of your CMS. |
SITE_URL |
Required | Public URL (used for Sitemap generation). |
CONTENT_DIR |
Required | Path to your markdown content (relative to inscript/). |
STATIC_DIR |
Required | Path to your images/assets (relative to inscript/). |
DIST_DIR |
Optional | Override the build output location. |
ALLOW_PUSH |
Optional | Enable direct Git Push from the UI. |
Build Commands
Two modes for writing and publishing.
npm run dev
Runs the CMS locally with full editing capabilities. Use this on your computer or in-house server for writing and managing content. Not for public deployment.
npm run publish
Builds the readonly
static blog with data.json and sitemap.xml. This is what you deploy to
Netlify, Vercel, or any hosting platform for public viewing.
Deploying Your Blog
Deploy the readonly published version to any static hosting platform.
Netlify
Add this to your root
netlify.toml to build and deploy your published blog:
[build] command = "cd inscript && npm install && npm run publish" publish = "dist"
Self Hosting
Simply serve the contents of your
DIST_DIR (default ../dist) using Nginx, Apache, or any static server.
No Node.js runtime is required in production!