Skip to content

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Repository files navigation

Novalist extensions

Extensions for Novalist, built with Novalist.Sdk - see the SDK these need.

Everything here is work that the audit deliberately placed outside core: format readers and writers, read-only analysis, networked lookups, and static site generation. None of it needs to ship inside the app to be available in it, and most of it is the kind of specialist, occasionally-breaking work that is better versioned on its own.

The AI features live in their own repository (novalist-aiassistant), because AI reaches Novalist only through extension contributions.

What is in here

These are the ones to add to the gallery.

Extension Id Tag prefix What it does
Formats com.novalist.formats formats-v* Exports to HTML, RTF, ODT, plain text, Fountain and FictionBook 2, each marked with the language you write in and carrying your cover where the format can hold one, plus CSV, JSON and OPML for pulling the outline into a spreadsheet, a script or an outliner. Imports Scrivener projects, Ulysses sheets, folders of Markdown, and CSV/TSV files. Checks a finished EPUB before you send it.
Insight com.novalist.insight insight-v* Read-only reports over the whole manuscript: name drift and consistency, project health (orphan entries, dangling links, unused images), a continuity worklist when a Codex entry changes, a word-frequency concordance, a pacing curve, and a cast presence report showing who drops out of the book and for how long. Also reports what is in the manuscript: chapters, scenes, words, characters and a printed-page estimate.
Toolkit com.novalist.toolkit toolkit-v* Writing sprints and a Pomodoro timer, a task board over your to-do comments, dictionary and thesaurus lookup on a selected word, an offline name generator with per-culture data, and web page capture that keeps the readable text rather than just the title.
Speech com.novalist.speech speech-v* The speech engine behind the Narration view: designs a voice from a character's description, and performs a line in that voice with the emotion supplied separately, so one character sounds like themselves whether they are furious or wrecked. Runs entirely on the writer's machine, on the graphics card where there is one, and builds its own Python environment on first use.
Publish com.novalist.publish publish-v* Generates a self-contained static website from your wiki, your world bible or your manuscript, for sharing a draft or publishing a series bible. Codex sections keep their Markdown formatting and their links, and the site is written in your language.

Each row is one release artefact: com.novalist.<name>.zip, containing the assembly, its manifest, and any locale, web or data files.

Releasing one

Tag it. The tag names the extension and the version, and only that extension is built and published:

git tag formats-v1.0.0
git push origin formats-v1.0.0

The workflow stamps the version from the tag into extension.json, builds against the latest stable SDK package from NuGet, runs the whole test suite, and attaches com.novalist.formats.zip to a GitHub release. Adding it to the gallery is a separate, manual step.

One repository, several extensions, separate versions on purpose: a fix to the EPUB check has no business bumping the version of the writing timer.

The SDK these need

All five extensions require Novalist 3.6.0 or later and build with the .NET 10 SDK. Earlier hosts can continue using older compatible extension releases.

Local builds use the SDK source in the adjacent novalist-official checkout. CI and release builds set UseLocalSdk=false and restore the latest stable Novalist.Sdk package from NuGet using Version="*". Each workflow refreshes dependencies during restore, then uses those resolved versions for build and test. The SDK package version is managed by the host's CI and is separate from the desktop version. When adopting new SDK APIs, update the extension's minimum host version to the release that supports them.

Building locally

Local builds reference the SDK source next door, so a change to the SDK is testable here without a package round trip:

d:/git/
  novalist-official/     <- the app and the SDK
  novalist-extension/    <- this repository
dotnet build
dotnet test

A build also copies each extension into your local Novalist extensions folder (%APPDATA%/Novalist/Extensions/<Name> on Windows), so a rebuild is all it takes to see the change in the running app.

For a build without deploying into your installed extensions, pass -p:ExtensionFolder=. To build locally against the NuGet package, pass -p:UseLocalSdk=false.

Adding an extension to this repository

  1. A folder named Novalist.Extensions.<Name> with a csproj that sets <ExtensionFolder> and nothing else — Directory.Build.props and Directory.Build.targets supply the rest.
  2. An extension.json whose id is com.novalist.<name> and whose entryAssembly is Novalist.Extensions.<Name>.dll. CI checks both.
  3. A row in the table above, and a case in .github/workflows/release.yml.
  4. Tests in tests/Novalist.Extensions.Tests.

What these will not do

The SDK does not allow it, and that is deliberate:

  • No extension here rewrites prose you wrote. When one wants to change a sentence it proposes a suggested edit with its name on it, and you take it or turn it down.
  • Nothing here erases a chapter, a scene or a Codex entry. The strongest verbs available are moving a chapter to the trash and archiving a scene, both of which you can undo.
  • The EPUB check reads your file and reports on it. It never rewrites an export you are about to send.

Licence

MIT, per extension. See each folder's LICENSE.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages