Feather.Build 0.1.0-alpha

This is a prerelease version of Feather.Build.
There is a newer prerelease version of this package available.
See the version list below for details.
dotnet add package Feather.Build --version 0.1.0-alpha
NuGet\Install-Package Feather.Build -Version 0.1.0-alpha
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Feather.Build" Version="0.1.0-alpha" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Feather.Build --version 0.1.0-alpha
#r "nuget: Feather.Build, 0.1.0-alpha"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install Feather.Build as a Cake Addin
#addin nuget:?package=Feather.Build&version=0.1.0-alpha&prerelease

// Install Feather.Build as a Cake Tool
#tool nuget:?package=Feather.Build&version=0.1.0-alpha&prerelease

<img width="10%" src="./feather-logo.svg">

Feather

Feather is a work-in-progress static site generator & previewer with customizable pipeline and live-reload. It is currently in research & prototype phase, to explore the possibility of two related but very different use-cases:

  1. Generate simple static sites
  2. Generate complex static sites built off varied data that change over time (eg: Markdown files, as done by Neuron Zettelkasten)

Feather, taking inspiration from the likes of Sveltekit (which uses Vite), also aims to provide a live-reload approach to instantly previewing the site while its source files are being modified, but without the "taint" of bringing in JavaScript.

Technology

F# is used for a number of reasons, but primarily because the author is currently invested in learning it.

For HTML templating we choose Shopify's Liquid language (using fluid).

For building reactive pipelines we choose Rx along with possibly Dynamic Data.

Milestones

The first priority is to get a non-pipeline based (i.e one-off) static site generation working off Liquid files. Then, live-reload is an option (a builtin version of LiveReloadServer basically). Finally exploring the reactive pipeline approach to achieve a neuron-like use case in a more general fashion would be an ambitious undertaking, and the ultimate purpose of this project.

Other considerations

  • i18n: The generated websites should support multiple languages. The "content" would thus be specified as input for the templates, rathar than being hardcoded in the HTML tags. This would allow us to specify translated versions with their own routes (eg: /en/slug1 vs /fr/slug1).
  • client-side search: If, as detailed above, "content" is treated as data rather than markup, we can use Elasticlunr.js to provide a client-side search of these data documents.
  • tool compilation: For eg, to build CSS. The initial milestones will have support for Tailwind CSS styling, albeit using twind/shim to (lazily) begin with.

Hacking

dotnet tool install
dotnet paket restore

# Terminal 1
dotnet run -p ./src/Feather -- -w -C example

# Terminal 2
dotnet LiveReloadServer ./example/output

You can use dotnet watch (instead of dotnet run) to recompile and restart the tool on source change.

dotnet watch -p ./src/Feather run -- -w -C ../../example

Installing and use

To build and install the release version,

cd ./src/Feather
dotnet publish -c Release --self-contained -r linux-x64 -o out
export FEATHER=$(pwd)/out/Feather
...

Use it,

mkdir my-site && cd my-site
mkdir templates output
echo Hello world > templates/index.liquid
$FEATHER -w .

Status

  • One-off generation of .html from .liquid files (see ./example folder)
  • Primitive file watcher that regenerates on source change
  • Tailwind CSS support in .liquid files (via twind/shim)
  • Finalize on a HTML template library (#1)
  • static/ files
  • Deploy something useful
  • Add a dev server with live-reload
Product Compatible and additional computed target framework versions.
.NET net5.0 is compatible.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on Feather.Build:

Package Downloads
Feather

Package Description

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
0.1.0-alpha-3 203 3/31/2021
0.1.0-alpha-2 198 3/31/2021
0.1.0-alpha-1 152 3/30/2021
0.1.0-alpha 151 3/30/2021