history_edu Open-Source Product · MIT Licensed

Inkwell Blogging Platform & CMS

Your blog and your website in one self-hosted app. Write posts in a visual or Markdown editor, build pages such as About, Services and landing pages with a block page builder, and run it all from a free, open-source .NET 10 platform on your own server — your content, your database, no telemetry. PixoBots installs it, supports it and builds custom themes for it.

code View on GitHub

Product site: useinkwell.app · Latest release v1.0.9 (25 October 2026)

gpp_good Security note: Inkwell has no PHP runtime, so the PHP2Shell flaws do not apply arrow_downward
info What It Is

A Blog and Website You Actually Own

Hosted blogging platforms are convenient right up until the pricing changes, the export is incomplete, or the service shuts down. Inkwell takes the opposite position: the platform is free and MIT licensed, the code is on GitHub, and every post and page lives in a SQL Server database you control.

It is built on ASP.NET Core MVC with Dapper on .NET 10, renders plain server-side HTML for speed and search visibility, and covers both halves of a content site. Posts get a WYSIWYG or Markdown editor with drafts, scheduling and editorial review. Pages get a drag-and-drop block builder (or Markdown), contact forms, header and footer navigation menus and their own SEO fields, so the About, Services and Contact pages live next to the blog instead of in a second system. One installed binary can host many separate sites, each with its own look and authors.

There is no plugin marketplace, no usage tier and no phone-home. If you are a .NET shop that wants publishing under your own roof, this is the stack you already know.

lock_open

Free and Open Source

MIT licence. Fork it, extend it, run it commercially — no per-seat or per-site fees, ever.

shield

No Telemetry, GDPR by Design

No external API calls and no usage reporting. Reader data never leaves your infrastructure.

dns

Built on .NET 10

ASP.NET Core MVC, Dapper and Microsoft SQL Server — a stack your existing .NET team can maintain.

web Blog + CMS

Posts for the Blog. Pages for the Website.

Inkwell is more than a post feed. Pages are a separate content type for the parts of a site that don't belong in a blog: About, Services, Pricing, Contact and campaign landing pages. You build them in the same Desk, with the same theme, and they live in the same database as your posts.

dashboard_customize

dashboard_customize Drag-and-Drop Page Builder

Drag blocks from the palette onto the canvas, reorder them, and edit each one's settings in the side panel. The post editor uses the same builder, so your editors only learn one tool.

view_carousel Hero Section
title Heading
notes Text Block
image Image
vertical_split Image + Text
collections Gallery
smart_button Button
format_quote Quote
smart_display Video Embed
horizontal_rule Divider
height Spacer
contact_mail Form

These are the blocks in release v1.0.9. The Form block (pages only) places a form built in Admin → Forms, gallery blocks open in a self-hosted lightbox, and videos embed from a pasted URL.

menu

Menus and Site Structure

The Menus manager builds header and footer navigation from pages, categories, tags, series and custom links, nested one level. Menu items point at content by id, so renaming a slug never breaks the menu.

travel_explore

SEO on Every Page

Each page has its own slug, meta title, meta description, canonical URL, Open Graph and Twitter Card fields and a featured image. Published pages are sent to IndexNow straight away.

tune

Custom Fields

Define your own text, number, date, web address or yes/no fields for pages. Fields marked “Show to readers” appear as a Details list on the page.

history

Revisions and Permissions

Every saved change keeps a revision you can compare and restore. A separate pages permission decides who may edit the website pages, and each change is written to the audit trail.

contact_mail

Contact Forms

Build forms in Admin → Forms with up to 20 fields, including a required consent box, and place them with the Form block. Spam checks, email notifications, webhooks, CSV export and a retention period you set per form.

code

Visual or Markdown Pages

Write a page in the visual editor or in Markdown, with the same server-rendered preview as posts. Switching an existing page keeps it looking exactly the same, or is refused.

grid_view Features

Everything a Publication Needs, Nothing It Doesn't

The editorial, design, SEO and operations tooling that shipped across releases v1.0.1 to v1.0.9.

edit_note
edit_note

Visual or Markdown Editor

Compose posts and pages in the Quill WYSIWYG editor, or switch to Markdown with a server-rendered preview. Save drafts, schedule for later and publish when ready.

palette
palette

20 Layouts × 16 Presets

Structure and colour are separate: pick an editorial Layout, pair it with a colour Preset — 320 combinations without touching a stylesheet.

hub
hub

Multi-Tenant Built In

One install serves many sites. Switch DeploymentMode to Cloud and each tenant is isolated by its URL slug, with its own Layout and Preset. No second deployment.

travel_explore
travel_explore

SEO Built In

Server-rendered HTML, structured-data validation before publish, IndexNow instant indexing, internal-link suggestions and a 301/302/410 redirect manager.

insights
insights

Analytics and AI-Crawler Reports

Built-in dashboard with UTM and geo breakdowns, plus reporting on which AI crawlers fetch your content and an answer-engine readiness score.

fact_check
fact_check

Immutable Audit Trail

Every admin action is logged and cannot be edited afterwards — useful for multi-author teams and for compliance reviews.

mark_email_read
mark_email_read

Newsletter Sending

Double opt-in subscribers, then write, preview, test and send issues through your own SMTP server in batches, with one-click unsubscribe and no tracking pixels.

security
security

IP Firewall

Automatic threat scoring blocks hostile traffic at the application layer, and the Content Health dashboard flags posts that need maintenance.

move_to_inbox
move_to_inbox

WordPress and Ghost Importers

Bring an existing site across: WordPress WXR exports and Ghost JSON or ZIP archives import with posts, pages and authors intact.

query_stats
query_stats

Search Console in the Admin

Connect Google Search Console and see 28-day clicks, impressions, CTR and position per post, with striking-distance pages flagged.

history
history

Revision History

Every post and page keeps its revisions, with line-level diffs and one-click restore. Restores are themselves undoable.

verified_user
verified_user

Honest Traffic Numbers

Views are counted by a self-hosted beacon, and crawlers are verified against published IP lists, so bots and scrapers do not inflate your stats.

rate_review
rate_review

Editorial Review and Roles

Admin, Editor and Author roles with granular permissions. Authors without publish rights submit for review, and editors approve or send back with a note.

phonelink_lock
phonelink_lock

Two-Factor Sign-In

Authenticator-app codes with single-use recovery codes, and Admins can require two-factor sign-in for a whole role.

backup
backup

Backup, Restore and Export

One-ZIP whole-site backups that restore into a fresh install, export to WordPress (WXR) or a Ghost import ZIP, or a push straight to a live WordPress or Ghost site. Your content never gets stuck in Inkwell.

photo_size_select_large
photo_size_select_large

Responsive Images

Every JPEG, PNG and WebP upload gets 480, 800 and 1200 px WebP copies served with srcset, plus width, height and lazy loading, so phones download a small copy and text does not jump.

accessibility_new
accessibility_new

Accessibility Checks

The editors flag missing or file-name alt text, skipped heading levels, "click here" links, tables without headers and very long paragraphs, with an Accessibility view in Content Health.

calendar_month
calendar_month

Content Calendar

A month view of published and scheduled posts, and dated drafts, in the site's time zone. Each entry opens its editor; on a phone the month becomes a list.

format_textdirection_r_to_l
format_textdirection_r_to_l

Right-to-Left Sites

Sites in Arabic, Hebrew, Persian, Urdu and other right-to-left languages read right to left, with every Layout and Preset mirrored. The direction follows the site language.

api
api

Headless API

Fetch published pages with GET /api/v1/pages/{slug}, and read and write typed custom fields on posts, for headless front ends and integrations.

auto_delete
auto_delete

Page-View Retention

Choose how long page-view details are kept (31 to 3,650 days). Older details are removed hourly while Analytics keeps every figure from its daily summary.

style Design System

Layouts Set the Structure. Presets Set the Mood.

Most blog themes bundle page structure and colour into one package, so changing the palette means changing the theme. Inkwell splits them. A Layout decides how the front page, post and archive templates are composed; a Preset decides the palette, type scale and spacing — from warm paper whites to near-black dark modes.

Any of the 20 Layouts pairs with any of the 16 Presets, and each tenant on the same install can run a different combination. Switching is a configuration change — no rebuild, no migration.

Almanac Bento Broadsheet Catalog Classic Feed Grid Journal Magazine Minimal Modern Neutral Newsletter Notebook Reader Showcase Stream Studio Timeline Verdict
20
Editorial Layouts
16
Colour Presets
320
Out-of-the-Box Combinations
1
Binary for Unlimited Tenants
terminal Deployment

Three Steps to a Running Site

A normal ASP.NET Core deployment — if you have shipped a .NET app before, nothing here will surprise you.

01

Clone and Run

Three commands from the README: git clone, cd inkwell, dotnet run. With SQL Server LocalDB that is a working local instance.

02

Configure

Copy appsettings.example.json to appsettings.json and set the SQL Server connection string. There is no migration step: the schema is created and updated automatically on startup.

03

Publish and Deploy

Publish the binary and put it behind IIS, Caddy or nginx with TLS. Runs on Linux, Windows Server or macOS. Or run docker compose up for the app, SQL Server and Caddy with automatic HTTPS.

checklist System Requirements

What a Single-Tenant Install Needs

Modest by design — a small VPS runs one publication comfortably. Add RAM as you add tenants.

memory
memory
Runtime
.NET 10 or later

ASP.NET Core MVC with Dapper and raw SQL for data access. The runtime alone is enough for hosting.

storage
storage
Database
SQL Server 2019+

Microsoft SQL Server in production; SQL Server LocalDB is fine for development.

developer_board
developer_board
Hardware
512 MB RAM · 1 vCPU

The floor for a single tenant. Scale up as you add publications and traffic.

dns
dns
Operating System
Linux · Windows Server · macOS

Behind a reverse proxy (IIS, Caddy or nginx) terminating TLS, or in Docker.

balance Honest Fit

Who Inkwell Is For — and Who It Isn't

We would rather you pick the right tool than pick ours.

thumb_up A good fit when

  • check_circle Your team already runs .NET and SQL Server and wants publishing on the same stack.
  • check_circle You need several publications — brands, regions, clients — from one install, each with its own look.
  • check_circle Data residency, GDPR or a no-third-party-scripts policy rules out hosted platforms.
  • check_circle You want the blog and the website pages (About, Services, Contact, landing pages) managed in one system instead of two.
  • check_circle You are migrating off WordPress or Ghost and want the importer to do the heavy lifting.

thumb_down Look elsewhere when

  • cancel You want a fully hosted service with zero server responsibility — Inkwell is self-hosted only.
  • cancel You need PostgreSQL, MySQL or SQLite — Microsoft SQL Server is the only supported database.
  • cancel Your workflow depends on a plugin marketplace — Inkwell has none; features are built into the core or added as code.
  • cancel You need a static-site generator or a Git-based Markdown workflow — Inkwell is a database-backed app with a visual editor.
compare_arrows

compare_arrows How Inkwell Compares

Publicly documented defaults, October 2026. Every one of these is a capable choice.

Highlighted row = this product
Platform Stack Hosting model Editor Multi-site from one install
In
Inkwell
This product
.NET 10 ASP.NET Core SQL Server
dns Self-hosted, free (MIT) edit_note WYSIWYG, Markdown and page builder check_circle Yes — Per-tenant Layout and Preset
W
WordPress
PHP MySQL / MariaDB
cloud_sync Self-hosted (GPL) or WordPress.com view_quilt Block editor (Gutenberg) check_circle Yes — Via Multisite
G
Ghost
Node.js MySQL
cloud_sync Self-hosted (MIT) or Ghost(Pro) view_agenda Koenig block editor cancel No — One site per install
H
Hugo
Go Static files
folder_zip Static hosting (Apache-2.0) description Markdown files cancel No — Separate builds per site

Comparison reflects each platform's publicly documented defaults as of October 2026. The right one depends on your stack and hosting appetite.

gpp_maybe Security Advisory · October 2026

PHP2Shell and Your Site: What It Means for Inkwell and WordPress

On 21 October 2026 PHP released emergency fixes for CVE-2026-109618 and CVE-2026-109619, nicknamed “PHP2Shell”. Both are remote-code-execution flaws that need no login, and both score 9.2 on CVSS v4.0. Every PHP runtime that serves web requests is in scope, including Apache mod_php, PHP-FPM, php-cgi, FrankenPHP and LiteSpeed. Public exploit code is out, and attacks were reported before the fixes shipped.

memory

Inkwell Has No PHP Runtime

Inkwell is a compiled ASP.NET Core application on .NET 10, served by Kestrel or IIS. No PHP interpreter sits in its request path, so these two CVEs do not apply to Inkwell itself. You have nothing to patch on the Inkwell side.

dns

Check the Rest of the Server

If the same machine also runs PHP, such as an old WordPress install, phpMyAdmin or a contact-form script, that software is still exposed. Patch it or remove it. Moving the blog to .NET doesn't help if a forgotten PHP app is still running next to it.

update

No Stack Is Vulnerability-Free

.NET has security bugs too. Install Microsoft's monthly .NET 10 servicing updates and keep Inkwell on its latest release. Inkwell is safe from this incident only because of its stack, so keeping that stack patched is still your job.

checklist Running WordPress Today?

  • looks_one Upgrade PHP to 8.5.12, 8.4.27, 8.3.36 or 8.2.35 (or your vendor's patched package), then restart the PHP workers.
  • looks_two Treat config workarounds such as session.upload_progress.enabled=0 as stopgaps only. Patching is the only fix.
  • looks_3 On shared hosting, confirm with your host that the patch is live. Hosts roll it out on their own schedule.
  • looks_4 Review access logs from 17 October onward. Exploit attempts were seen before the disclosure date.

Two ways PixoBots can help

Patch and harden the WordPress site you have now through our WordPress team, or move it to Inkwell with the built-in WXR importer.

Sources: PHP security advisory of 21 October 2026; CISA alert; Datadog Security Labs. A separate, narrower advisory (CVE-2026-115560, 23 October) is not fixed by these releases. See PHP's advisory for details.

handshake Optional Services

The Software Is Free. The Help Is Optional.

Run Inkwell yourself at no cost, or have the team that builds it do the deployment, the upkeep or the design. Prices as published on useinkwell.app.

rocket_launch

Installation

from $499 one-time
  • check Production deployment on your infrastructure
  • check Database provisioning and backups configured
  • check TLS, reverse-proxy and DNS handover
  • check One tenant, one Layout, one Preset
  • check 30-day post-launch warranty
support_agent

Support Retainer

from $299 per month
  • check Priority issue triage on your repo
  • check Security patches within 48 hours
  • check Quarterly version upgrades, in place
  • check Up to 4 hours of minor work each month
  • check Private email and scheduled office hours
construction

Enhancement

from $99 per hour
  • check Discovery call and written scope
  • check Fixed-bid quote per feature
  • check Pull request against your fork
  • check Tests, documentation and migration scripts
  • check Two rounds of revisions included
brush

Studio Theme

from $2,400 one-time
  • check Brand and typography consultation
  • check Custom Layout (templates and partials)
  • check Custom Preset (palette, type, spacing)
  • check Responsive across every breakpoint
  • check Source files, yours to keep

USD prices; EUR and GBP equivalents are listed on useinkwell.app. Every engagement starts with a written scope, and quotes come back within two working days.

new_releases Actively Maintained

Release History

Tagged releases since June 2026, each with full notes on GitHub.

  1. v1.0.925 Oct 2026

    Contact forms with a page-builder Form block; Markdown pages; responsive WebP images; push straight to WordPress or Ghost; accessibility checks in the editors; content calendar; right-to-left sites; headless pages API; a redesigned admin; and a working one-command Docker deployment.

  2. v1.0.86 Oct 2026

    Newsletter sending over your own SMTP; Markdown authoring for posts; two-factor sign-in; export to WordPress and Ghost; whole-site backup and restore; editorial review; navigation menus; webhooks; custom fields for posts and pages; gallery block; self-hosted cookie consent.

  3. v1.0.727 Sep 2026

    Hardened Docker deployment (multi-stage, non-root, health-checked) with a compose stack; crawler identity verification; beacon-based page-view counting; irreversible HMAC-SHA256 IP hashes.

  4. v1.0.624 Sep 2026

    Google Search Console integration; revision history with diffs and restore; self-service password reset; comment spam gate; built-in job scheduler; admin UI and accessibility overhaul with dark theme.

  5. v1.0.55 Sep 2026

    Pre-publish structured-data validation stops broken schema from shipping; answer-engine readiness scoring; AI-crawler analytics; redirect manager and internal-link suggestions.

  6. v1.0.415 Aug 2026

    IP Firewall with automatic blocking; Content Health dashboard; WordPress (WXR) and Ghost importers.

  7. v1.0.229 Jul 2026

    SEO overhaul: scored-roundup content system, IndexNow instant indexing, new Layouts, error-monitoring subsystem.

  8. v1.0.127 Jun 2026

    Analytics dashboard, immutable audit trail, Layout and Preset theme system, newsletter and subscriber management, structured-data enhancements.

Full notes: github.com/marutisoftwaresolutions/inkwell/releases

Publish on Your Own Terms

Clone Inkwell and run it yourself, or tell us about your publication and we will scope the install, the migration and the theme.

Visit useinkwell.app All Products
help_outline FAQ

Frequently asked questions

What is Inkwell? expand_more
Inkwell is a free, open-source, self-hosted blogging platform and CMS built on ASP.NET Core MVC with Dapper on .NET 10. It ships with a WYSIWYG or Markdown editor for posts and pages, a drag-and-drop page builder with contact forms for website pages, header and footer menus, 20 editorial Layouts, 16 colour Presets, multi-tenant hosting, built-in SEO tooling, analytics, an audit trail and newsletter management. It is MIT licensed and published at useinkwell.app with source on GitHub.
Is Inkwell only a blog, or can it run my whole website? expand_more
It can run the whole content site. Besides blog posts, Inkwell has Pages: a separate content type for About, Services, Pricing, Contact and landing pages, built with a drag-and-drop block builder (hero, heading, text, image, image and text, gallery, button, quote, video, divider and spacer blocks). Each page has its own slug, SEO and social fields, and the Menus manager puts pages in the header and footer navigation. Inkwell is not an e-commerce or general app platform, so a shop or customer portal still needs a separate system.
Is Inkwell really free? expand_more
Yes. The software is MIT licensed with no per-site, per-seat or usage fees. Installation, support retainers, custom enhancements and bespoke Studio themes are optional paid services; you can run Inkwell entirely on your own without buying any of them.
Which database does Inkwell support? expand_more
Microsoft SQL Server 2019 or later in production, or SQL Server LocalDB for local development. PostgreSQL, MySQL and SQLite are not supported, so if your infrastructure cannot run SQL Server, Inkwell is not the right fit.
Can one Inkwell install host several blogs? expand_more
Yes. Multi-tenancy is built in. Set DeploymentMode to Cloud and one install serves many blogs, each tenant isolated by its URL slug with its own Layout and Preset. The default mode, SelfHosted, runs a single-owner blog. No second deployment is required.
Can I migrate from WordPress or Ghost? expand_more
Yes. Since release v1.0.4 Inkwell imports WordPress WXR exports and Ghost JSON or ZIP archives, bringing posts, pages and authors across. PixoBots can run the migration as part of an installation engagement.
Is Inkwell affected by the PHP2Shell vulnerabilities (CVE-2026-109618 and CVE-2026-109619)? expand_more
No. PHP2Shell is a pair of critical remote-code-execution flaws in the PHP runtime, patched on 21 October 2026 in PHP 8.5.12, 8.4.27, 8.3.36 and 8.2.35. Inkwell is an ASP.NET Core application on .NET 10 and has no PHP runtime, so these CVEs do not apply to it. Any other PHP software on the same server, such as WordPress or phpMyAdmin, is still exposed and must be patched. Keep the .NET 10 runtime and Inkwell itself up to date as well.
Who builds Inkwell, and what does PixoBots do? expand_more
Inkwell is developed by Maruti Software Solutions and published at useinkwell.app. PixoBots provides the installation, support retainer, custom enhancement and Studio theme services around it, and can integrate Inkwell with your existing .NET systems.