![]() |
VOOZH | about |
dotnet add package Articulate --version 6.0.0
NuGet\Install-Package Articulate -Version 6.0.0
<PackageReference Include="Articulate" Version="6.0.0" />
<PackageVersion Include="Articulate" Version="6.0.0" />Directory.Packages.props
<PackageReference Include="Articulate" />Project file
paket add Articulate --version 6.0.0
#r "nuget: Articulate, 6.0.0"
#:package Articulate@6.0.0
#addin nuget:?package=Articulate&version=6.0.0Install as a Cake Addin
#tool nuget:?package=Articulate&version=6.0.0Install as a Cake Tool
A wonderful Blog engine built on Umbraco
❤️ If you use and like Articulate please consider becoming a GitHub Sponsor ❤️
Two support tracks are available depending on the Umbraco version you run.
Articulate 5.x remains available for Umbraco 13, which is in security maintenance until December 2025 and reaches end of life in December 2026. The package still installs from the Umbraco marketplace.
umbraco/section/packages/view/installed) and run any pending migrations.Articulate Image Picker data type once to fix bundled demo media (issue #460). This step is only required on Umbraco 13.Need help? Head over to Articulate on GitHub for extra tips, known issues and fixes.
Articulate from NuGet (dotnet add package Articulate). The package includes the backoffice extension and static assets; no extra package references or manual copies required.-f net9.0 for Umbraco 16 or -f net10.0 for Umbraco 17, then sign into the Umbraco Back Office to finish setup.media/articulate is not auto-migrated. During import you can map postImage to base64 or an attachment; other inline images must be moved manually (copy the folder, or consider an in-place package upgrade).On Umbraco 16/17, Articulate will migrate the built-in Umbraco.RichText property editor to Umb.PropertyEditorUi.TipTap during package upgrade only if the TinyMCE editor UI is not registered.
Articulate 6 separates built-in theme views from static assets:
src/Articulate.Web/App_Plugins/Articulate/Themes/{Theme}/Views/src/Articulate.Web/wwwroot/App_Plugins/Articulate/Themes/{Theme}/assets/For copied or custom user themes, the preferred layout is:
Views/ArticulateThemes/{Theme}/Views/wwwroot/App_Plugins/Articulate/Themes/{Theme}/assets/Reusable RCL/NuGet theme packages can also contribute themes to the Articulate theme picker by registering IArticulateThemeDescriptorProvider and returning one or more canonical theme keys. Those keys should match the package theme folder name and the theme picker value. Built-in theme names are reserved, and duplicate package keys are ignored.
The standalone Markdown editor uses Umbraco's built-in back-office OpenIddict endpoints with the authorization code flow and PKCE.
RedirectUris are the allowed callback URLs after a successful sign-in.PostLogoutRedirectUris are the allowed final destinations after sign-out completes.post_logout_redirect_uri during sign-out. Umbraco/OpenIddict will only honor it if it exists in PostLogoutRedirectUris.Minimal example:
"Articulate": {
"ManagementApi": {
"OpenIddict": {
"Client": {
"Enabled": true,
"ClientId": "umbraco-articulate",
"DisplayName": "Articulate Markdown Editor",
"RedirectUris": [
"https://localhost:44366/a-new/"
],
"PostLogoutRedirectUris": [
"https://localhost:44366/"
]
}
}
}
}
Articulate treats external BlogML image import as an opt-in convenience feature for trusted hosts.
Articulate:AllowedMediaHosts is empty, external image downloads are disabled.Import First Image from Post Attachments is enabled.Verify file after selecting a BlogML file to analyze it before import. The summary shows:
Articulate:AllowedMediaHosts, pass IP safety checks, and cannot downgrade from https to http.images.example.com redirecting to cdn.example.com, as long as both hosts are explicitly allowlisted.HttpClient configuration.Production-oriented example:
{
"Articulate": {
"MaxImportImageBytes": 10485760,
"AllowedMediaHosts": [
"images.example.com",
"cdn.example.com"
],
"AllowUnsafeLocalExternalImageHostsInDevelopment": false
},
"Umbraco": {
"CMS": {
"Runtime": {
"Mode": "Production"
}
}
}
}
Local development example:
{
"Articulate": {
"MaxImportImageBytes": 10485760,
"AllowedMediaHosts": [
"localhost"
],
"AllowUnsafeLocalExternalImageHostsInDevelopment": true
},
"Umbraco": {
"CMS": {
"Runtime": {
"Mode": "BackofficeDevelopment"
}
}
}
}
Notes:
AllowUnsafeLocalExternalImageHostsInDevelopment is ignored when Umbraco:CMS:Runtime:Mode is Production.localhost, loopback, and private-network targets remain blocked unless the development-only override is enabled.localhost only works when the importer resolves it to the exporting site. If not, rewrite the BlogML media URLs before import or configure the exporting site to emit a reachable hostname instead.Images entering Articulate import/editor flows are validated against Umbraco upload rules and image file types, and capped by Articulate:MaxImportImageBytes (10 MB by default).
Large BlogML files and MetaWeblog XML-RPC requests can hit hosting request-size limits before Articulate receives them.
These limits are related but separate: MaxImportImageBytes caps each image Articulate accepts after a request is being processed; the startup/server request limits below cap the total HTTP request size before import or MetaWeblog processing can run.
Keep these aligned:
Umbraco:CMS:Runtime:MaxRequestLengthFormOptions.MultipartBodyLengthLimitLimits.MaxRequestBodySizeMaxRequestBodySize when applicableThe local site config uses:
builder.Services.Configure<FormOptions>(options =>
{
options.MultipartBodyLengthLimit = 104857600; // 100MB
});
builder.Services.Configure<KestrelServerOptions>(options =>
{
options.Limits.MaxRequestBodySize = 104857600; // 100MB
});
builder.Services.Configure<IISServerOptions>(options =>
{
options.MaxRequestBodySize = 104857600; // 100MB
});
The included site uses the same FormOptions and Kestrel configuration pattern.
Appsettings example:
{
"Umbraco": {
"CMS": {
"Runtime": {
"MaxRequestLength": 102400
}
}
}
}
If you still rely on IIS web.config request settings, update those too:
<configuration>
<system.web>
<httpRuntime maxRequestLength="102400" />
</system.web>
<system.webServer>
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="104857600" />
</requestFiltering>
</security>
</system.webServer>
</configuration>
If one layer remains lower than the others, uploads can still fail with 413 Payload Too Large.
Supporting all the features you'd want in a blogging platform
Built-in themes render Disqus comments only when both post comments are enabled and the Articulate root has a valid disqusShortname value. Leave disqusShortname empty to disable the Disqus widget entirely; themes should not render placeholder comment panels or load Disqus scripts without it.
Docs on installation, creating posts, customizing/creating themes, etc...
For Umbraco 16/17 upgrades, also see the rich text editor upgrade behavior notes above if you need to preserve TinyMCE compatibility.
If you have any issues, please post them here on GitHub
See here for the list of releases and their release notes
Local development and contributor setup lives in .
© 2026 by Shannon Deminick
This is free software and is licensed under the The MIT License (MIT)
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net9.0 net9.0 is compatible. net9.0-android net9.0-android was computed. net9.0-browser net9.0-browser was computed. net9.0-ios net9.0-ios was computed. net9.0-maccatalyst net9.0-maccatalyst was computed. net9.0-macos net9.0-macos was computed. net9.0-tvos net9.0-tvos was computed. net9.0-windows net9.0-windows was computed. net10.0 net10.0 is compatible. net10.0-android net10.0-android was computed. net10.0-browser net10.0-browser was computed. net10.0-ios net10.0-ios was computed. net10.0-maccatalyst net10.0-maccatalyst was computed. net10.0-macos net10.0-macos was computed. net10.0-tvos net10.0-tvos was computed. net10.0-windows net10.0-windows was computed. |
This package is not used by any NuGet packages.
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 6.0.0 | 104 | 6/11/2026 |
| 6.0.0-rc.2 | 100 | 5/13/2026 |
| 5.2.2 | 800 | 11/21/2025 |
| 5.1.1 | 5,138 | 6/14/2024 |
| 5.1.0 | 3,399 | 5/3/2024 |
| 5.0.3 | 381 | 5/1/2024 |
| 5.0.2 | 307 | 5/1/2024 |
| 5.0.1 | 1,109 | 11/2/2023 |
| 5.0.0 | 1,476 | 11/1/2023 |
| 5.0.0-beta.7 | 494 | 4/4/2023 |
| 5.0.0-beta.3 | 365 | 3/27/2023 |
| 4.5.0 | 764 | 2/20/2024 |
| 4.4.0 | 1,699 | 3/7/2023 |
| 4.3.2 | 12,189 | 4/15/2021 |
| 4.3.1 | 688 | 4/8/2021 |
| 4.3.0 | 2,089 | 3/21/2021 |
| 4.2.1 | 1,780 | 1/4/2021 |