Feather.Build
0.1.0-alpha
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
<PackageReference Include="Feather.Build" Version="0.1.0-alpha" />
paket add Feather.Build --version 0.1.0-alpha
#r "nuget: Feather.Build, 0.1.0-alpha"
// 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:
- Generate simple static sites
- 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 | Versions 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. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. |
-
net5.0
- CommandLineParser (>= 2.8.0)
- Fluid.Core (>= 2.0.0-beta-1013)
- Fluid.ViewEngine (>= 2.0.0-beta-1013)
- FSharp.Control.Reactive (>= 5.0.2)
- FSharp.Core (>= 5.0.1)
- Microsoft.Extensions.FileProviders.Physical (>= 5.0.0)
- SJP.FsNotify (>= 1.0.0)
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 | 220 | 3/31/2021 |
0.1.0-alpha-2 | 214 | 3/31/2021 |
0.1.0-alpha-1 | 170 | 3/30/2021 |
0.1.0-alpha | 166 | 3/30/2021 |