knightloader

module
v0.0.0-...-57d4653 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 30, 2026 License: AGPL-3.0

README

KnightLoader


Build  Go  Web stack  Languages  Arch  License


A self-hosted, cross-platform download manager: a clean-UI alternative to JDownloader that grabs files from everywhere and hauls them into one keep. One Go binary with the download engine, the API and the web UI inside it, shipped as a container and as native desktop apps.


⚠️ Under development — please do not install this yet

KnightLoader has not had its first release. This repository is public so the work can be followed and the browser extension can go through store review, not because it is ready for anyone to run.

There is no v1.0.0 tag, no published container image, and no Community Applications entry — and that is deliberate. What is here changes daily, including things that will break an existing setup without a migration path: the storage format, the settings document, and the wire protocol instances use to reach each other.

If you install it now, expect to lose your configuration and your queue. Nothing here is supported, and no upgrade path is promised until the first release.

Watch the repository if you want to know when that changes.


Buy me a coffee


Table of Contents

  1. Overview
  2. Screenshots
  3. Quick Start
  4. Configuration
  5. Getting links in
  6. Where files land
  7. Architecture
  8. Development
  9. Contributing and license
  10. Support this project

1. Overview

KnightLoader is one Go process. The download engine, the REST and WebSocket API, the web UI and the Click'n'Load listener all live in the same binary, so there is no aria2 to supervise, no separate front end to keep in step, and nothing to install beside it.

Hoster coverage comes from swappable resolvers rather than from a plugin ecosystem nobody can maintain: plain file links go straight to the embedded engine, supported hosters are unlocked through a debrid service you already pay for, media pages go to yt-dlp, and anything left over is delegated to a headless JDownloader kept at arm's length. Your accounts stay yours, stored encrypted on your own box.

What's included

Collector Links are analysed and staged before anything downloads: name, size, availability, which backend will take them. Nothing is ever dropped in silence, and a link that no backend handles is still shown, with the reason on it.
Rules A Packagizer and a link filter, one engine used twice: match on filename, URL, hoster, source, type or size, then set the package, folder, filename, priority or comment — or refuse the link, with the rule's name attached. A test box shows what a rule would do before it does it.
Download list A real table: choose your columns, resize and reorder them, sort by any of them, fold packages away. The layout is remembered per instance, and sorting is a view — the queue keeps its own order.
Crawling Paste a page and it becomes the files it links to, not one unusable task.
Containers .txt link lists are read here. .dlc, .ccf and .rsdf are handed to the JDownloader backend, which holds the key that opens them — their contents then come back through the ordinary path, so the filter and the Packagizer apply to them like anything else.
Queue Global and per-host concurrency, priorities, manual order, a stop mark, automatic retries with a growing delay, and a timetable that pauses or throttles by the clock.
Speed limit A total for everything, applied while downloads run rather than only to the next one.
Duplicates The same URL twice is refused; the same file under two URLs is recognised as a mirror, under a policy you pick rather than a guess. Refused links are held with their reason, not deleted.
Extraction zip, rar (incl. multi-volume), 7z, tar, gz, bz2, xz, zst. A multi-part set waits for every part. Encrypted rar and 7z take passwords.
Integrity A finished file is checked against an .sfv/.md5/.sha* that came with it, or a CRC in its own name. Nothing is marked as passing that was not checked.
Collisions What happens when the file already exists is your choice — overwrite, skip or number it — and the name is reserved atomically, so two downloads finishing together cannot pick the same one.
Connections Several outbound routes with order, credentials and a per-host filter, handed out round-robin up to a cap each. Passwords are stored, never served back.
Reconnect Get a new address when a hoster's limit is keyed to the one you have: run a command, replay a recorded HTTP exchange, ask the gateway over UPnP (which needs no router details at all), or run a script through a named interpreter. A recorded LiveHeader script imports as it is. An unchanged address counts as a failure, not a success.
Intake Paste, drop, Click'n'Load from a site's own button, a container file, or a watched folder for .txt and .crawljob files.
Multi-instance Register other KnightLoaders and drive them all from one dashboard. Instances on the same network announce themselves and are one click to add - nothing to configure.
Twelve words Read a phrase off one instance, type it into the next, and they find each other across networks - no account, no login, no port forward, no domain. The words carry a secret; the relay only ever sees a hash of it, so nobody running one can reconstruct them. Use ours or run your own. See connecting.
Your own relay Don't want to use ours? Point both ends at a relay you run and the same twelve words work against it. It terminates its own TLS over TLS-ALPN-01 - no proxy, no certbot, no cron, and only port 443 open.
Everywhere The web UI, a desktop build, an Android app and a browser extension all talk to the same instance, and to each other's.
Access An optional password lock, off by default. Same-origin API, origin-checked WebSocket.
Languages 42, each fetched only when chosen, right-to-left included.

2. Screenshots

Overview with live speed and counters
Overview: one number that matters, and what is happening under it.


Downloads grouped by package
Downloads, grouped by package, with selection and queue order.


The link collector
The collector: paste or drop, see what you got, then start it.


Settings
Settings, split into the three decisions they actually are.


3. Quick Start

go run ./cmd/knightloader      # then open http://localhost:8749
Docker

The repository is private, so the image is built where it runs rather than pulled from a registry:

docker build --build-arg VERSION=preview -t knightloader:preview .

docker run -d --name knightloader \
  --restart unless-stopped \
  -p 8749:8749 \
  -v /path/to/appdata:/data \
  -v /path/to/downloads:/data/downloads \
  -v /path/to/watch:/watch \
  -e TZ=Europe/Berlin \
  knightloader:preview

On Unraid add --user 99:100 so finished files land as nobody:users, and see docs/preview-deploy.md for the rest.

Desktop (Windows, macOS, Linux)

The desktop app is the same binary in a native window rather than a browser tab: the engine, the resolvers, the API and the UI are identical, because the window is served by the very same HTTP handler the container serves.

Every release tag builds windows/amd64, darwin/universal and linux/amd64 and attaches the three archives to that release. There is no release yet — the first tag is still to come, so for now the app is built from source:

go install github.com/wailsapp/wails/v2/cmd/wails@v2.10.2
cd desktop && wails build

The bundle lands in desktop/build/bin. Windows and macOS need only their usual toolchains. Linux needs GTK and WebKit: libgtk-3-dev and libwebkit2gtk-4.1-dev to build, libwebkit2gtk-4.1-0 to run. Build it with wails build -tags webkit2_41 — without the tag Wails looks for webkit2gtk 4.0, which Ubuntu 24.04 and its relatives no longer package, and the error names a missing package rather than a dropped version.


4. Configuration

Everything is optional and has a working default.

Var Default Meaning
KL_ADDR :8749 listen address
KL_DATA user config dir data directory (database, settings, accounts, session key)
KL_YTDLP yt-dlp (PATH) path to the yt-dlp binary; media links route through it when present
KL_TORBOX TorBox API key. The Accounts page is the better place: it stores the key encrypted and applies it without a restart
KL_ALLDEBRID AllDebrid API key, as above
KL_REALDEBRID Real-Debrid API token, as above
KL_JD headless JDownloader API URL, e.g. http://jd:3128; the catch-all for hoster links nothing else claims
KL_CNL 9666 Click'n'Load listener port on 127.0.0.1; 0 disables it
KL_PROVISION_JD 0 1 provisions a private headless JDownloader on first run and uses it as the hoster backup

Pasting works, and so does dropping text onto the collector. Beyond that:

  • Click'n'Load — a site's own CnL button hands its links straight over. Every site addresses 127.0.0.1, and a container's loopback is not the browser's, so when KnightLoader runs on a NAS there are two ways to bridge that gap: the browser extension, which catches the submission in the page itself and routes it through the relay to whichever instance you pick, or the same binary run as a bridge on your desktop (knightloader -bridge http://nas:8749) for a browser with no extension in it.
  • Watched folder — drop a .txt or a JDownloader .crawljob onto a share and the box picks it up, with its package name, destination and archive password. Point Settings at the folder to switch it on.
  • A page — paste one, and the files it links to are staged instead.
  • A container file — upload a .txt, .dlc, .ccf or .rsdf. A link list is read on the spot. The encrypted formats cannot be opened by anyone offline — their key is issued to registered clients — so they are handed to the JDownloader backend, which has one. Without KL_JD set, a container is recognised and refused with that as the reason rather than a vague failure.

6. Where files land

The download folder may be a plain path or a template:

/downloads/<jd:date>/<jd:hoster>/<jd:packagename>

Available: <jd:packagename>, <jd:hoster>, <jd:filename>, <jd:date>, <jd:year>, <jd:month>, <jd:day> and <jd:simpledate:FORMAT> with the usual yyyy MM dd HH mm ss SSS pattern letters. A task can also carry its own folder, which always wins — and a Packagizer rule can set one per link, which is how one paste lands in several places.

Two variables differ from JDownloader on purpose, and the variables menu says so next to each: <jd:source:N> here is the Nth path segment of the source URL, which is what a rule with no regular expression in it can use. JDownloader's meaning — capture group N — is <jd:match:FIELD:N>, which reads a group from any field the rule matched on, not only the source. A rule naming a group on a field it has no matches condition for is refused when you save it, rather than quietly producing the wrong folder.


7. Architecture

                    +------------------------------------------+
  browser --------> |  api      REST + WebSocket + embedded UI  |
  CnL button -----> |  cnl      127.0.0.1:9666                  |
  dropped file ---> |  watch    .txt / .crawljob                |
                    +--------------------+---------------------+
                                         |
                              +----------v----------+
                              |  app                |  tasks, scheduler,
                              |                     |  packages, retries
                              +----------+----------+
                                         |
              +--------------+-----------+-----------+--------------+
              |              |           |           |              |
        +-----v-----+  +-----v-----+ +---v----+ +----v-----+  +-----v-----+
        | crawler   |  | resolver  | | engine | | extract  |  | checksum  |
        | page ->   |  | direct    | | Gopeed | | zip rar  |  | sfv md5   |
        | files     |  | debrid    | | + rate | | 7z tar   |  | sha crc   |
        |           |  | yt-dlp    | |  limit | | gz xz    |  |           |
        |           |  | headless  | |  proxy | | bz2 zst  |  |           |
        |           |  | JD        | |        | |          |  |           |
        +-----------+  +-----------+ +--------+ +----------+  +-----------+

The rate limit lives in a loopback proxy because the embedded engine offers no hook for one. Everything else is a plain Go package with its own tests.


8. Development

go test ./... -count=1        # server
cd web && npm ci && npx tsc --noEmit && npm run build

The UI is built into web/dist, which is committed and embedded into the binary, so a plain go build produces a working server. English is the source locale and every other one is typed against it, which makes tsc the gate that catches a missing or stray translation key.


9. Contributing and license

AGPL-3.0. Own code; the name and branding are reserved.

Built on Gopeed (download engine), yt-dlp (media), JDownloader (hoster catch-all, via its local API), Wails (desktop) and React with Tailwind.


10. Support this project

If this saves you time or a debug night, consider buying me a coffee:

Buy me a coffee

Directories

Path Synopsis
cmd
knightloader command
Command knightloader runs the KnightLoader server: the download engine, the REST + WebSocket API, the embedded web UI, and the Click'n'Load listener, all in one process.
Command knightloader runs the KnightLoader server: the download engine, the REST + WebSocket API, the embedded web UI, and the Click'n'Load listener, all in one process.
knightloader-relay command
Command knightloader-relay is the self-hosted message relay KnightLoader instances use to find each other when neither of them can accept an inbound connection - two desktop installs on different networks, say.
Command knightloader-relay is the self-hosted message relay KnightLoader instances use to find each other when neither of them can accept an inbound connection - two desktop installs on different networks, say.
spike-download command
Command spike-download is the KnightLoader M0 engine spike.
Command spike-download is the KnightLoader M0 engine spike.
spike-jd command
Command spike-jd is the KnightLoader M0 JD-integration spike.
Command spike-jd is the KnightLoader M0 JD-integration spike.
spike-torbox command
Spike: drive the TorBox Web-Downloads/Debrid API live with the real client.
Spike: drive the TorBox Web-Downloads/Debrid API live with the real client.
spike-torrent command
Command spike-torrent is the Wave 11.5 verify-first spike.
Command spike-torrent is the Wave 11.5 verify-first spike.
Package extension embeds the Manifest V3 browser extension's source so the Go binary can serve it as a downloadable zip (internal/api/routes_browsertools.go) with no external hosting and no browser-store dependency — the same self-contained shape as package web for the SPA.
Package extension embeds the Manifest V3 browser extension's source so the Go binary can serve it as a downloadable zip (internal/api/routes_browsertools.go) with no external hosting and no browser-store dependency — the same self-contained shape as package web for the SPA.
internal
accounts
Package accounts is an encrypted-at-rest store for premium/debrid credentials.
Package accounts is an encrypted-at-rest store for premium/debrid credentials.
api
Package api exposes the app over HTTP: a small REST surface plus a WebSocket stream under /api, and the embedded SPA everywhere else.
Package api exposes the app over HTTP: a small REST surface plus a WebSocket stream under /api, and the embedded SPA everywhere else.
apitoken
Package apitoken is named, individually revocable API credentials: the answer to "a phone gets its own", so losing one device means revoking that one token rather than rotating the shared password for every other client.
Package apitoken is named, individually revocable API credentials: the answer to "a phone gets its own", so losing one device means revoking that one token rather than rotating the shared password for every other client.
app
Package app wires the store, engine, resolver registry and WebSocket hub into one coordinator.
Package app wires the store, engine, resolver registry and WebSocket hub into one coordinator.
auth
Package auth is KnightLoader's optional password lock.
Package auth is KnightLoader's optional password lock.
backup
Package backup builds the downloadable snapshot of everything a restore needs to bring an install back, and validates and stages an uploaded one.
Package backup builds the downloadable snapshot of everything a restore needs to bring an install back, and validates and stages an uploaded one.
bridge
Package bridge forwards Click'n'Load submissions to a KnightLoader that runs somewhere other than the browser's own machine.
Package bridge forwards Click'n'Load submissions to a KnightLoader that runs somewhere other than the browser's own machine.
buildinfo
Package buildinfo carries the build version, stamped at release time via -ldflags "-X github.com/junkerderprovinz/knightloader/internal/buildinfo.Version=vX.Y.Z".
Package buildinfo carries the build version, stamped at release time via -ldflags "-X github.com/junkerderprovinz/knightloader/internal/buildinfo.Version=vX.Y.Z".
captcha
Package captcha is the honest source of truth for one thing: a hoster (or, for an OAuth-style login gate, an account) demanding something a human has to answer before a download can continue.
Package captcha is the honest source of truth for one thing: a hoster (or, for an OAuth-style login gate, an account) demanding something a human has to answer before a download can continue.
checksum
Package checksum verifies finished downloads against the hashes that ship with them: .sfv listings, md5sum/sha1sum/sha256sum files, and the CRC32 tag that release names carry in the file name itself.
Package checksum verifies finished downloads against the hashes that ship with them: .sfv listings, md5sum/sha1sum/sha256sum files, and the CRC32 tag that release names carry in the file name itself.
cnl
Package cnl implements the Click'n'Load protocol: browser extensions and "CNL" buttons on websites POST link lists to 127.0.0.1:9666, the de-facto standard port JDownloader and pyLoad listen on.
Package cnl implements the Click'n'Load protocol: browser extensions and "CNL" buttons on websites POST link lists to 127.0.0.1:9666, the de-facto standard port JDownloader and pyLoad listen on.
collide
Package collide decides what happens when a download would land on a name that is already taken.
Package collide decides what happens when a download would land on a name that is already taken.
confirm
Package confirm decides what happens to a link at the moment a batch leaves the collector: what to do with one that duplicates a link already in the list (OnDupes) and with one a check has already found offline (OnOffline), settled together so the person confirming a batch reads one sentence instead of two prompts back to back.
Package confirm decides what happens to a link at the moment a batch leaves the collector: what to do with one that duplicates a link already in the list (OnDupes) and with one a check has already found offline (OnOffline), settled together so the person confirming a batch reads one sentence instead of two prompts back to back.
container
Package container reads the link-container files a download manager is expected to open: a plain list of links, and the encrypted formats the scene has used for twenty years — DLC, CCF and RSDF.
Package container reads the link-container files a download manager is expected to open: a plain list of links, and the encrypted formats the scene has used for twenty years — DLC, CCF and RSDF.
core
Package core holds KnightLoader's shared domain types.
Package core holds KnightLoader's shared domain types.
crawler
Package crawler turns one page URL into the many file links it points at.
Package crawler turns one page URL into the many file links it points at.
dedupe
Package dedupe answers one question about a link that is about to be added: is it already in the list? It keeps two answers apart on purpose.
Package dedupe answers one question about a link that is about to be added: is it already in the list? It keeps two answers apart on purpose.
discovery
Package discovery makes KnightLoader instances on one network find each other with nothing configured at all.
Package discovery makes KnightLoader instances on one network find each other with nothing configured at all.
engine
Package engine wraps the embedded Gopeed download library and reports task updates back to the app.
Package engine wraps the embedded Gopeed download library and reports task updates back to the app.
extract
Package extract unpacks downloaded archives (zip, rar incl.
Package extract unpacks downloaded archives (zip, rar incl.
federation
Package federation lets one KnightLoader act as the dashboard for others: peer instances are stored locally, and their REST APIs are proxied so the UI can view and control every instance from one place.
Package federation lets one KnightLoader act as the dashboard for others: peer instances are stored locally, and their REST APIs are proxied so the UI can view and control every instance from one place.
hosterauth
Package hosterauth is the native, per-host hoster login: KL's own host list, username/password form and per-row sync status, all rendered in KL's Carbon UI (see the frontend HosterLoginSection) - never JD's own web interface.
Package hosterauth is the native, per-host hoster login: KL's own host list, username/password form and per-row sync status, all rendered in KL's Carbon UI (see the frontend HosterLoginSection) - never JD's own web interface.
httpx
Package httpx is the one outbound HTTP policy this app has.
Package httpx is the one outbound HTTP policy this app has.
hub
Package hub is a minimal WebSocket fan-out: the app broadcasts task updates, every connected UI receives them live.
Package hub is a minimal WebSocket fan-out: the app broadcasts task updates, every connected UI receives them live.
idleaction
Package idleaction answers what happens once the wait queue has nothing left to do on its own, and how long a person gets to change their mind before it does.
Package idleaction answers what happens once the wait queue has nothing left to do on its own, and how long a person gets to change their mind before it does.
linkscan
Package linkscan finds the links inside whatever a person actually pastes, drops or forwards, so every intake path can hand it a raw blob instead of each inventing its own splitting rule.
Package linkscan finds the links inside whatever a person actually pastes, drops or forwards, so every intake path can hand it a raw blob instead of each inventing its own splitting rule.
logring
Package logring keeps a bounded tail of the process's own log output in memory, for the diagnostics bundle and nothing else: it is not a log sink anybody configures, it never touches disk, and nothing here decides what gets logged - only what happens to the lines after something else already decided to log them.
Package logring keeps a bounded tail of the process's own log output in memory, for the diagnostics bundle and nothing else: it is not a log sink anybody configures, it never touches disk, and nothing here decides what gets logged - only what happens to the lines after something else already decided to log them.
netproxy
Package netproxy runs a loopback HTTP proxy that all downloads are pointed at.
Package netproxy runs a loopback HTTP proxy that all downloads are pointed at.
pathvars
Package pathvars expands JDownloader-style path variables, so a download folder can be written as "/downloads/<jd:packagename>/<jd:simpledate:yyyy-MM>" instead of a literal path.
Package pathvars expands JDownloader-style path variables, so a download folder can be written as "/downloads/<jd:packagename>/<jd:simpledate:yyyy-MM>" instead of a literal path.
portmap
Package portmap asks a UPnP gateway to forward a port to this machine, and tells the caller whether the router actually kept the mapping rather than just accepting the request.
Package portmap asks a UPnP gateway to forward a port to this machine, and tells the caller whether the router actually kept the mapping rather than just accepting the request.
provision
Package provision sets up a private, headless JDownloader for the desktop build so the user gets full hoster coverage out of the box without ever seeing JD's own UI.
Package provision sets up a private, headless JDownloader for the desktop build so the user gets full hoster coverage out of the box without ever seeing JD's own UI.
proxycfg
Package proxycfg models JDownloader's Connection Manager: a user-ordered list of outbound connections that downloads are spread across.
Package proxycfg models JDownloader's Connection Manager: a user-ordered list of outbound connections that downloads are spread across.
reconnect
Package reconnect gets the box a new public IP address, which is the only thing that lifts a hoster's free-user limit when the limit is keyed to the address.
Package reconnect gets the box a new public IP address, which is the only thing that lifts a hoster's free-user limit when the limit is keyed to the address.
relay
Package relay routes messages between KnightLoader instances that present the same relay key, so two instances behind NAT - neither of which can accept an inbound connection - can still reach each other by both dialling out to one place they can both reach.
Package relay routes messages between KnightLoader instances that present the same relay key, so two instances behind NAT - neither of which can accept an inbound connection - can still reach each other by both dialling out to one place they can both reach.
resolver
Package resolver is KnightLoader's plugin seam.
Package resolver is KnightLoader's plugin seam.
resolver/debrid
Package debrid is the shared seam for one-shot debrid providers: services that turn a supported file-hoster link into a direct URL in a single call (AllDebrid, Real-Debrid).
Package debrid is the shared seam for one-shot debrid providers: services that turn a supported file-hoster link into a direct URL in a single call (AllDebrid, Real-Debrid).
resolver/jd
Package jd talks to a headless JDownloader through its local "Deprecated API" (plain HTTP JSON on :3128, no cloud, no crypto).
Package jd talks to a headless JDownloader through its local "Deprecated API" (plain HTTP JSON on :3128, no cloud, no crypto).
resolver/torbox
Package torbox is the debrid resolver: it turns a supported file-hoster link into a direct CDN URL via TorBox's Web Downloads / Debrid API, which the embedded engine then downloads.
Package torbox is the debrid resolver: it turns a supported file-hoster link into a direct CDN URL via TorBox's Web Downloads / Debrid API, which the embedded engine then downloads.
resolver/torrent
Package torrent is KnightLoader's BitTorrent intake: it recognises magnet links and uploaded .torrent files, refuses the ones that are malformed or built to be hostile, and hands the rest to the embedded download engine.
Package torrent is KnightLoader's BitTorrent intake: it recognises magnet links and uploaded .torrent files, refuses the ones that are malformed or built to be hostile, and hands the rest to the embedded download engine.
resolver/ytdlp
Package ytdlp is the media-extraction backend: it delegates the download to the yt-dlp binary (which handles ~1800 sites incl.
Package ytdlp is the media-extraction backend: it delegates the download to the yt-dlp binary (which handles ~1800 sites incl.
rules
Package rules is KnightLoader's rule engine.
Package rules is KnightLoader's rule engine.
schedule
Package schedule answers one question: at this moment, should the queue be running, and how fast.
Package schedule answers one question: at this moment, should the queue be running, and how fast.
script
Package script is KnightLoader's answer to JDownloader's Event Scripter: a goja (pure-Go ECMAScript 5.1(+)) VM host that runs a small, user-written JavaScript snippet against one of a fixed set of app events - a task finishing, a task settling as failed, the wait queue going idle, or a person pressing "run now" on a saved script (see Trigger).
Package script is KnightLoader's answer to JDownloader's Event Scripter: a goja (pure-Go ECMAScript 5.1(+)) VM host that runs a small, user-written JavaScript snippet against one of a fixed set of app events - a task finishing, a task settling as failed, the wait queue going idle, or a person pressing "run now" on a saved script (see Trigger).
seedphrase
Package seedphrase turns the secret that groups a person's own instances into twelve words, and back.
Package seedphrase turns the secret that groups a person's own instances into twelve words, and back.
settings
Package settings persists user-tunable behaviour (concurrency, speed limit, extraction) as JSON in the data dir and hands out consistent snapshots.
Package settings persists user-tunable behaviour (concurrency, speed limit, extraction) as JSON in the data dir and hands out consistent snapshots.
store
Package store persists tasks in a local SQLite database (pure-Go driver, no cgo).
Package store persists tasks in a local SQLite database (pure-Go driver, no cgo).
throttle
Package throttle caps the combined download speed of everything that copies bytes through it.
Package throttle caps the combined download speed of everything that copies bytes through it.
update
Package update checks whether a newer KnightLoader release exists, surfaced on both deployments' General tab now (jdp, 2026-08-24: a container user hit the card's old desktop-only gate and asked where the toggle had gone - checking GitHub and saying so is exactly as harmless for a container as for desktop).
Package update checks whether a newer KnightLoader release exists, surfaced on both deployments' General tab now (jdp, 2026-08-24: a container user hit the card's old desktop-only gate and asked where the toggle had gone - checking GitHub and saying so is exactly as harmless for a container as for desktop).
watch
Package watch picks up links dropped into a folder.
Package watch picks up links dropped into a folder.
Package web embeds the built React/Carbon SPA so KnightLoader ships as a single self-contained binary.
Package web embeds the built React/Carbon SPA so KnightLoader ships as a single self-contained binary.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL