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!