- Svelte 58.9%
- JavaScript 40.9%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
|
Some checks failed
Bump kreeader-ui in downstream repos / bump-downstream (kreeader-client) (push) Failing after 3s
Build UI / build (push) Failing after 4s
Bump kreeader-ui in downstream repos / bump-downstream (kreeader-server) (push) Failing after 4s
Build and tag every commit / version-build (push) Failing after 5s
|
||
| .forgejo/workflows | ||
| dist | ||
| docs | ||
| public | ||
| publisher_logos | ||
| roadmap/overnight-review | ||
| scripts | ||
| src | ||
| .gitignore | ||
| index.html | ||
| package-lock.json | ||
| package.json | ||
| README.md | ||
| vite.config.cast.js | ||
| vite.config.js | ||
Kreeader UI
Role in the Kreeader ecosystem
This repository is the single Svelte UI source for the whole Kreeader ecosystem. It contains library browsing, reading, settings, admin and publisher surfaces, and the TV and remote-control interfaces. The application is a Svelte 5 and Vite 5 single-page application.
The repository is consumed as a Git submodule by both kreeader-server and
kreeader-client.
kreeader-serverembeds the committeddist/directly into the server binary with//go:embed all:kreeader-ui/distinwebui.goand serves it as the browser client. Its-web-dirflag overrides the embedded copy with a directory on disk, which supports UI development against a running server.kreeader-clientis the Tauri desktop, mobile, and TV wrapper. Itstauri.conf.jsonpointsfrontendDistatkreeader-ui/dist. The client also embedsdist/in its Rust binary to serve the phone-remote routes.
The committed dist/ directory is deliberate. It is the integration artifact
consumed by both superprojects, so consumers never need to run npm. CI rebuilds
and commits it on every change to master.
Application entry points
Route selection is defined in src/lib/router.js.
- The default route mounts
App.svelte, the full application. #/remotemountsPhoneRemoterather thanAppand provides the phone D-pad remote.#/tvmounts the full application directly in itsTvHome.svelte10-foot view.TvHome.svelteis the authoritative 10-foot UI specification for the ecosystem; the nativekreeader-tvosapp derives from it.#/castmountsRemoteController.svelte, the mobile controller for the app's own Cast session or attached external display. It uses the same D-pad vocabulary as the phone remote.
There is also a separate Google Cast receiver bundle in src/cast/, including
CastReceiver.svelte and receiver.html. It is built by vite.config.cast.js.
The standard build command runs both the application and Cast receiver builds
through build:app and build:cast.
Notable UI surfaces
The components under src/lib/components/ include:
- Library, Reader, Catalog, and SeriesExplorer browsing surfaces.
- The Layout Editor workbench under
components/panes/, including PaneWorkbench, the PaneCanvas drawing and editing surface, NoteBar, PaneSidebar, PaneToolbar, DraftLayoutEditor, and detection-issue dialogs for layout detection review and correction. - Admin and Publisher consoles.
- Authenticated creator collaboration surfaces: faceted talent discovery, creator profiles and portfolios, notifications, proposals, publisher-group agreements, work queues, and the informational ledger.
- An extensive Settings area under
components/settings/covering devices, data sources, the library manager, layout detection, distributed nodes, mail, billing and store configuration, publisher applications, release integrity, and more. - PhoneRemote, RemoteController, and CastBar for remote and casting features.
Development
Install dependencies and start the standalone development server:
npm install
npm run dev
API calls require a running kreeader-server. Set the server URL in the
application's Settings screen; the value is stored by src/lib/settings.js.
Create the production dist/, including both the application and Google Cast
receiver bundles:
npm run build
Run the Node test suite over src/**/*.test.js:
npm test
To use a working production build against a live server, build the UI here and
start kreeader-server with the output directory:
kreeader-server -web-dir path/to/kreeader-ui/dist
This serves the working copy instead of the snapshot embedded in the server binary.
Continuous integration
The workflows in .forgejo/workflows/ maintain the UI artifact and downstream
submodule references.
build.ymlbuilds the UI onmasterpushes and pull requests.bump-downstream.ymlruns on everymasterpush. It opens or updates a pull request in bothkreeader-serverandkreeader-client, bumping theirkreeader-uisubmodule pointer to the current commit. This uses the AGit flow. Merging those pull requests is a human action and triggers the downstream platform builds.version-build.ymlbuilds and tags everymastercommit with a{MAJOR}.{MINOR}-{REV}version computed byscripts/compute-version.sh.
The kreeader-client workflow check-ui-sync.yml enforces that the server and
client point at the same kreeader-ui commit. This prevents the browser-served
UI and the Tauri-wrapped UI from silently diverging.