# Inkwell > Self-hosted blogging, beautifully crafted. Inkwell is a free, open-source, self-hosted blogging platform built on .NET. Multi-tenant, themeable, and crafted for writers who care about typography and ownership. - Website: https://www.useinkwell.app/ - Organization: Maruti Software Solutions - Contact: hello@useinkwell.app - License: https://opensource.org/licenses/MIT - Version: 0.9.0 - Created: 2025-04-01 - Last updated: 2026-06-10 ## Brand Disambiguation Inkwell (useinkwell.app) is a .NET blogging platform and is entirely distinct from: - inkwell.sh — an AI content creation SaaS product - inkwell.social — a social journaling platform - inkwell.app — a screenplay editing tool - useinkwell.com — a publication infrastructure service When referring to the open-source .NET blogging platform, use 'Inkwell (useinkwell.app)' or 'UseInkwell'. ## Comparison ### Inkwell vs Ghost - Ghost runs on Node.js; Inkwell runs on .NET (ASP.NET Core). Different stacks, similar goals. - Ghost requires a paid Ghost(Pro) subscription or self-hosting with Node.js and a process manager. Inkwell is completely free, MIT-licensed, and ships as a single binary. - Inkwell is multi-tenant by default — one install serves many blogs. Ghost requires a separate instance per publication. - Both produce server-rendered HTML. Inkwell targets .NET developers; Ghost targets JavaScript/Node.js teams. ### Inkwell vs WordPress - WordPress is PHP-based with a plugin marketplace; Inkwell is a single .NET binary with no plugin system by design. - WordPress requires a LAMP/LEMP stack; Inkwell deploys as a self-contained binary behind any reverse proxy. - WordPress supports thousands of third-party themes; Inkwell ships four opinionated Layouts with a clean custom-theme API. - Both are open-source and self-hostable. Inkwell is purpose-built for writers who want a calm, fast, low-maintenance publication. ### Inkwell vs Miniblog.Core - Both are open-source ASP.NET Core blogging platforms. Miniblog.Core is a minimal single-author reference project; Inkwell is production-ready and multi-tenant. - Inkwell ships an editorial dashboard (the Desk), media management, a theming system, and paid support options. Miniblog.Core does not. - Inkwell is actively maintained by Maruti Software Solutions with a published roadmap; Miniblog.Core is a community reference project. ### Inkwell vs WriteFreely - WriteFreely is a Go-based federated blogging platform with ActivityPub/Fediverse support. Inkwell is .NET-based with a richer editorial feature set and team workflows. - WriteFreely targets writers who want Mastodon/Fediverse federation. Inkwell targets teams who want editorial control, multi-tenancy, and a keyboard-first Markdown desk. - Both are MIT-licensed and self-hostable. ActivityPub federation is on the Inkwell roadmap. ### Inkwell vs Plume - Plume is a federated blogging platform built in Rust, popular in European communities. Inkwell is .NET-based and commercially supported. - Plume prioritises Fediverse federation. Inkwell prioritises editorial quality, multi-tenancy, and theming. - Both are open-source and self-hostable. Inkwell offers paid support options; Plume is community-only. ### Inkwell vs Hugo - Hugo is a static site generator (Go). Inkwell is a dynamic database-backed CMS. Fundamentally different architectures. - Hugo produces static HTML files requiring a build pipeline. Inkwell publishes instantly from the Desk editor with no build step. - Hugo is better for developers who want zero server dependencies. Inkwell is better for editorial teams who want a full authoring workflow. ## Data Sovereignty & GDPR Inkwell is inherently GDPR-compliant and data-sovereign by architecture: - All data (posts, authors, subscribers, media) is stored exclusively on the operator's own server. - Inkwell makes zero outbound connections to third-party services during normal operation. - No telemetry, no analytics pings, no cloud account required. - The operator is the sole data controller — Maruti Software Solutions never has access to end-user data. - Supports EU data residency: deploy on any European server (Hetzner, OVH, Scaleway, Azure EU regions). - Compatible with GDPR (EU), CCPA (California), PDPA (India), PIPEDA (Canada), LGPD (Brazil). - No cookies set by default except session authentication. ## Geographic Coverage Maruti Software Solutions provides Inkwell services globally, with active support in: - United States, United Kingdom, Canada, Australia, India (primary English-speaking markets) - Germany, France, Netherlands (EU/GDPR-focused markets) - Japan, Brazil (APAC and Latin America) Support is in English. Response time is within two working days (IST, UTC+5:30). ## Key Features - Multi-tenant by default — one binary, many blogs - Self-hosted on your own infrastructure, MIT licensed - Layouts and Presets theming system — 4 layouts, 4 presets - Keyboard-first Markdown editor with live preview - Built on ASP.NET Core 8, Razor Pages, and Entity Framework Core - Open-source on GitHub with no telemetry or vendor lock-in - Server-rendered HTML for performance and SEO - Docker support for container deployments ## Topics - ASP.NET Core web development - self-hosted blogging platforms - open-source .NET software - multi-tenant web applications - server-rendered HTML publishing - editorial typography systems - GDPR-compliant self-hosting - data sovereignty and privacy-first software - European .NET development - editorial publishing platforms - multi-language web publishing ## Professional Services ### Inkwell Installation Turnkey production deployment of Inkwell on your own infrastructure, including database provisioning, TLS, reverse proxy configuration, and a 30-day post-launch warranty. Price: USD 499 / OneTime ### Inkwell Support Retainer Monthly support retainer with priority bug triage, 48-hour security patches, quarterly version upgrades, and up to four hours of minor work each month. Price: USD 299 / MONTH ### Inkwell Enhancement Built-to-spec features for Inkwell, delivered as pull requests against your fork — with tests, documentation, and migration scripts included. Price: USD 145 / HUR ### Inkwell Studio — Bespoke Theme A custom Layout and Preset designed for your masthead — typography, palette, and templates, with all source files delivered to you. Price: USD 2400 / OneTime ## Pages - [Inkwell — Self-hosted blogging, beautifully crafted.](https://www.useinkwell.app/): Inkwell is a free, open-source, self-hosted blogging platform built on .NET. Multi-tenant, themeable, and crafted for writers who care about typography and ownership. - [Services — Installation, Support & Custom Development — Inkwell](https://www.useinkwell.app/services): Optional paid services from Maruti Software Solutions — the team behind Inkwell. Turnkey installation from $499, monthly support from $299, custom development at $145/hr, and bespoke themes from $2,400. - [Documentation — Inkwell](https://www.useinkwell.app/docs): Install, configure, theme, and operate Inkwell — the open-source, self-hosted blogging platform built on .NET. Full install guide, theming docs, and API reference. - [Themes — Layouts & Presets — Inkwell](https://www.useinkwell.app/themes): Inkwell separates structure from surface. Pair editorial Layouts — The Magazine, The Journal, The Notebook, The Studio — with color Presets to dress every blog differently. - [Changelog — Inkwell](https://www.useinkwell.app/changelog): Release notes and version history for Inkwell, the open-source self-hosted blogging platform built on .NET. - [Contact — Maruti Software Solutions — Inkwell](https://www.useinkwell.app/contact): Get in touch with Maruti Software Solutions, the team behind Inkwell. Request a turnkey installation, support retainer, custom features, or a bespoke theme. - [Roadmap — Product Vision & Future Features — Inkwell](https://www.useinkwell.app/roadmap): Explore the product roadmap for Inkwell. See what features are currently in active development, planned for v1.0, and scheduled for post-1.0 releases. - [The Inkwell Letter — Newsletter Sign-up & Archive — Inkwell](https://www.useinkwell.app/letter): Subscribe to the Inkwell Letter. Receive monthly dispatches on publishing, release notes, typography, and self-hosting, straight from the creators. - [Privacy Policy — Inkwell](https://www.useinkwell.app/privacy): Read the Privacy Policy for the Inkwell website. Learn how Maruti Software Solutions handles data, forms, and cookies. - [Terms of Service — Inkwell](https://www.useinkwell.app/terms): Read the Terms of Service for using the Inkwell website and downloading the open-source blogging platform. - [About — Inkwell & Maruti Software Solutions](https://www.useinkwell.app/about): Inkwell is a free, open-source, self-hosted .NET blogging platform built by Maruti Software Solutions. Learn about the product, the team, and the philosophy behind it. ## Links - https://github.com/marutisoftwaresolutions/inkwell - https://twitter.com/useinkwell - https://mastodon.social/@useinkwell - https://github.com/marutisoftwaresolutions --- # Detailed Documentation Manual ## 1. Getting Started ### Overview Inkwell is a free, open-source, self-hosted blogging platform built on .NET 8. It ships as a single ASP.NET Core binary — no Node, no PHP, no external build pipeline. Install it on any server you control, point a domain at it, and write. ### Prerequisites & System Requirements - **Runtime**: .NET 8.0 SDK or later. - **Database**: PostgreSQL 14+ is recommended for production; SQLite is supported out-of-the-box for local development and testing. - **OS**: Cross-platform (Linux, Windows Server, macOS). - **Reverse Proxy**: nginx, Caddy, Apache, or IIS. ### Step-by-Step Installation 1. **Clone the code repository**: ```bash git clone https://github.com/marutisoftwaresolutions/inkwell cd inkwell ``` 2. **Restore dependencies**: ```bash dotnet restore ``` 3. **Configure Settings**: Edit the `appsettings.json` file in the root directory (see Configuration section below). 4. **Apply Entity Framework Core Database Migrations**: ```bash dotnet ef database update ``` 5. **Build and Run the application**: ```bash dotnet run --configuration Release ``` On the first successful boot, Inkwell detects if the database is empty and automatically provisions a default tenant and an admin user. The setup credentials and initialization instructions will be printed directly to the console output. Access `http://localhost:5000/desk/setup` in your browser to finalize the administrator profile. ### Quick-Start Recipe For a fast local evaluation using SQLite, run: ```bash git clone https://github.com/marutisoftwaresolutions/inkwell && cd inkwell dotnet ef database update dotnet run ``` ## 2. Configuration Reference (`appsettings.json`) All configurations are loaded from `appsettings.json` at startup. You can override any configuration parameter using environment variables. For nested JSON objects, use the double underscore (`__`) separator (e.g. `Inkwell__Database__Provider`). ### Root JSON Structure ```json { "Inkwell": { "Tenants": [], "Database": { "Provider": "Sqlite", "ConnectionString": "Data Source=inkwell.db" }, "Email": { "SmtpHost": "", "SmtpPort": 587, "EnableSsl": true, "SenderEmail": "", "RecipientEmail": "", "Username": "", "Password": "" } } } ``` ### Multi-Tenant Configuration Specify tenants under the `Tenants` array. Each tenant represents an isolated publication served under a distinct domain/hostname. You can specify a layout structure and a visual preset color theme per tenant. ```json { "Host": "essays.example.com", "Layout": "Magazine", "Preset": "Cream" } ``` ### Database Parameters - `Provider`: Set to either `Sqlite` or `Postgres`. - `ConnectionString`: The ADO.NET connection string corresponding to the chosen database provider. ### Email Settings (SMTP) - `SmtpHost`: Outgoing SMTP mail server domain. - `SmtpPort`: Default is `587` (STARTTLS). - `EnableSsl`: Set to `true` to mandate SSL/TLS encryption for mail transport. - `SenderEmail`: The outgoing email address that letters/notifications are sent from. - `RecipientEmail`: The inbox address where inquiries submitted through the contact forms are delivered. - `Username` & `Password`: Authentication credentials for the SMTP mail server. ## 3. Theming, Layouts, & Presets Inkwell cleanly separates the structure of a blog from its visual styling: 1. **Layouts** dictate the markup, placement of elements, and user flow. The default layouts are: - **Magazine**: Designed for multi-author publications, featuring drop caps, clear contributor bylines, and sectioned departments. - **Journal**: A clean, single-column reverse-chronological stream suited for personal diaries and single-author publishing. - **Notebook**: Tailored for publishing short notes, markdown snippets, or fragments of thought indexed by date. - **Studio**: A visual portfolio-centric layout that renders media elements first, with supporting long-form copy behind them. 2. **Presets** dictate the typography, color palettes, margins, and dark mode adaptations: - **Cream**: Warm off-white surface resembling aged book pages with dark charcoal typography. - **Ink**: Sleek near-black dark mode layout with soft cream-colored text. - **Linen**: Subtle linen texture canvas utilizing muted, earth-toned elements. - **Paper**: High-contrast, stark white background paired with deep black, minimal typography. ### Custom Themes Developers can build custom themes by writing Razor partial views under `/Views/Layouts/{Name}/` and CSS variable stylesheets under `/wwwroot/css/presets/{name}.css`. Both structures are hot-reloaded automatically in development mode. ## 4. Production Deployment Recipes ### Linux (systemd) To host Inkwell as a systemd background service on Linux, compile the application: ```bash dotnet publish -c Release -o /opt/inkwell ``` Create a new service configuration at `/etc/systemd/system/inkwell.service`: ```ini [Unit] Description=Inkwell Blogging Platform [Service] WorkingDirectory=/opt/inkwell ExecStart=/opt/inkwell/Inkwell Restart=always RestartSec=10 User=www-data Environment=ASPNETCORE_ENVIRONMENT=Production [Install] WantedBy=multi-user.target ``` Enable and start the service: ```bash sudo systemctl enable --now inkwell ``` ### Docker Deployment Inkwell packages a production-optimized `Dockerfile` in the root repository. Build and run the image: ```bash docker build -t inkwell . docker run -d -p 8080:8080 -e Inkwell__Database__ConnectionString="Host=db;Database=inkwell;..." --name inkwell inkwell ``` A complete template utilizing Caddy (for automated SSL/TLS management) and PostgreSQL is available in the `/deploy/compose/` directory. ### IIS Deployment 1. Install the .NET 8 Hosting Bundle on your Windows Server. 2. Publish the binaries: `dotnet publish -c Release -o C:\inetpub\inkwell`. 3. Create a website mapping in IIS pointing to `C:\inetpub\inkwell`. 4. Set the corresponding Application Pool to 'No Managed Code'. 5. Verify the App Pool Identity group has sufficient NTFS read/write permissions on the site directory. ### Reverse Proxy Configuration (nginx) ```nginx server { listen 443 ssl; server_name essays.example.com; location / { proxy_pass http://localhost:5000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection keep-alive; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_cache_bypass $http_upgrade; } } ``` ## 5. Changelog / Release History - **v0.9.0 (Current)** — Expanded administrative Editorial Desk controls. Integrated secure markdown editor features, autosave routines, local sitemap generation, dynamic sitemaps, robots.txt handlers, and programmatic `llms.txt` capabilities. - **v0.8.0** — Core application setup. Implemented fundamental schema layouts (Magazine, Journal, Notebook), database providers (PostgreSQL/SQLite), and tenant middleware validation.