Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
b52c870
Move to unreleased version of Logux
ai Jul 30, 2026
beba3a9
Fix server start in one command
ai Jul 30, 2026
f299c7a
Typo
ai Jul 30, 2026
24e742a
Add browser MCP for LLM debugging in the browser
ai Jul 30, 2026
3d797dd
Move ignore comments from ESLint to oxlint
ai Aug 2, 2026
18930ef
Remove oxlint ignore by updating config
ai Aug 2, 2026
add3608
Fix menu loading
ai Aug 2, 2026
84322f8
Tune LLM instructions according to real user experience
ai Aug 2, 2026
05caba2
Add ability to add label for app is busy loader
ai Aug 2, 2026
595914c
Move progress render to root to later use in benchmark
ai Aug 3, 2026
4185d18
Add API to track loaders to use later in benchmarks
ai Aug 3, 2026
8764653
Fix app loaders width
ai Aug 3, 2026
536cf0c
Add basic benchmark
ai Aug 3, 2026
8fb29be
Better way to run script in project
ai Aug 3, 2026
da24e56
Another way to make it possible to run full benchmark
ai Aug 3, 2026
dab823c
Improve benchmark
ai Aug 3, 2026
2236334
Clean up benchmark docs and fix UI
ai Aug 4, 2026
dfdda8d
Install Chromium in benchmark if it was missed
ai Aug 4, 2026
f430884
Improve benchmark UI
ai Aug 4, 2026
cf8e489
Improve benchmark stability
ai Aug 4, 2026
ad2a3ac
Update dependencies
ai Aug 4, 2026
26261c5
Migrate to SQLite in Logux Client
ai Aug 4, 2026
3b79e05
Fix loop in LLM hook
ai Aug 4, 2026
e178d8b
Fix loader tests by changing APIs which will work in Node.js
ai Aug 5, 2026
3918a5f
Manually follow redirects in proxy server to work with non-standard r…
ai Aug 5, 2026
353f468
Do not change current folder to run script inside project
ai Aug 5, 2026
591b183
Fix slow server case
ai Aug 5, 2026
6c9d2ef
Typo
ai Aug 5, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .claude/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
"hooks": [
{
"type": "command",
"command": "pnpm quick || exit 2"
"command": "out=$(pnpm -w quick 2>&1) || { printf '%s\\n' \"$out\" >&2; exit 2; }"
}
]
}
Expand Down
17 changes: 10 additions & 7 deletions .devcontainer/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,22 @@
# so every developer will have the same environment

# registry.fedoraproject.org/fedora:44
FROM registry.fedoraproject.org/fedora@sha256:590825dbaee41a97a162ecdffc3305264bd11cb3ff1e9cfd710d41ca5f936134
FROM registry.fedoraproject.org/fedora@sha256:7cbdc865d55e6b19a2861e8b58f989421281b5ea2273c50c61c0fa8b5075afbd

ARG TARGETARCH

ENV NODE_VERSION=26.5.1 \
NODE_CHECKSUM_X64=cc7b3484ade63bd203a9d304f21ec37a3b622b988d7bdecf1dc4d68fc44a91b7 \
NODE_CHECKSUM_ARM64=0b6b0cc2a1eecbe736f9918de8b5a6c9a48d286b88bec1298a3c1e3376182ea8
ENV NODE_VERSION=26.6.0 \
NODE_CHECKSUM_X64=e53a8c8ca2ee7135de38e63859bd4f43002ae2d222f5b3a98ac1945db9f544bb \
NODE_CHECKSUM_ARM64=974e6f0332fb26179b34d49c57f35339e089a89faf8b82a81e44c0e1164b7923

ENV PNPM_VERSION=11.18.0 \
PNPM_CHECKSUM_X64=f4e62794c56f7a1ad01097f94b90ca95680080aa2e83ebc3d0a751fb8aa8e4ad \
PNPM_CHECKSUM_ARM64=f9c09bb564421d9d39dfff60af41df88a4864af5637afdabe5f54d12853f8426
ENV PNPM_VERSION=11.20.0 \
PNPM_CHECKSUM_X64=b4ad6ad2b21db2f8cd50af416c3aa148ba704c31c84893f465a770a01c2c4572 \
PNPM_CHECKSUM_ARM64=f00fc2041bb41742b7943bf2bb24183ad20320e8384824a8031eb94edf2f57a5

RUN dnf install -yq zsh micro git tig psmisc procps-ng awk libatomic wget \
gtk3 nss nspr alsa-lib cups-libs mesa-libgbm dbus-libs libX11-xcb \
libXcomposite libXdamage libXrandr libXcursor libXi libxkbcommon \
google-noto-sans-fonts google-noto-emoji-fonts \
&& dnf clean all \
&& rm -rf /var/cache/dnf

Expand Down
3 changes: 3 additions & 0 deletions .devcontainer/devcontainer.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@
},
"runArgs": [
"--net=bridge",
"--shm-size=1g",
"--security-opt",
"seccomp=unconfined",
"-p",
"2553:2553",
"-p",
Expand Down
2 changes: 1 addition & 1 deletion .github/actions/deploy/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ runs:
INPUTS_TAG: ${{ inputs.tag }}
INPUTS_CONTEXT: ${{ inputs.context }}
- name: Login to GitHub Container Registry
uses: docker/login-action@4907a6ddec9925e35a0a9e82d7399ccc52663121 # v4.1.0
uses: docker/login-action@dbcb813823bdd20940b903addbd779551569679f # v4.6.0
with:
registry: ghcr.io
username: ${{ github.actor }}
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/preview-deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ jobs:
- name: Load Docker image
run: docker load < image.tar
- name: Login to GitHub Container Registry
uses: docker/login-action@4907a6ddec9925e35a0a9e82d7399ccc52663121 # v4.1.0
uses: docker/login-action@dbcb813823bdd20940b903addbd779551569679f # v4.6.0
with:
registry: ghcr.io
username: ${{ github.actor }}
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/workflows.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,6 @@ jobs:
with:
persist-credentials: false
- name: Lint CI workflows
uses: zizmorcore/zizmor-action@6fc4b006235f201fdab3722e17240ab420d580e5 # v0.6.1
uses: zizmorcore/zizmor-action@3dc1ecc9bcb9e94e9b2c709687979e1298497054 # v0.6.2
with:
advanced-security: false
44 changes: 44 additions & 0 deletions .mcp.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
{
"mcpServers": {
"chromium": {
"args": [
"-c",
"./node_modules/.bin/playwright-mcp install-browser chromium 1>&2 && exec ./node_modules/.bin/playwright-mcp \"$@\"",
"playwright-mcp",
"--headless",
"--browser",
"chromium",
"--caps",
"devtools",
"--viewport-size",
"1280,800",
"--user-data-dir",
"/home/developer/.local/share/playwright-chromium",
"--output-dir",
"/home/developer/.local/share/playwright-output/chromium",
"--save-session"
],
"command": "sh"
},
"firefox": {
"args": [
"-c",
"./node_modules/.bin/playwright-mcp install-browser firefox 1>&2 && exec ./node_modules/.bin/playwright-mcp \"$@\"",
"playwright-mcp",
"--headless",
"--browser",
"firefox",
"--caps",
"devtools",
"--viewport-size",
"1280,800",
"--user-data-dir",
"/home/developer/.local/share/playwright-firefox",
"--output-dir",
"/home/developer/.local/share/playwright-output/firefox",
"--save-session"
],
"command": "sh"
}
}
}
2 changes: 1 addition & 1 deletion .node-version
Original file line number Diff line number Diff line change
@@ -1 +1 @@
26.5.1
26.6.0
6 changes: 6 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ In all interactions, plans, and commit messages, be extremely concise and sacrif
## Architecture

- Avoid adding dependencies.
- Keep non-browser logic in `core/`. Client folders should have only environment-specific code.
- Update `README.md` of the package on every new script, folder, or tool.

## LLMS

Expand All @@ -27,3 +29,7 @@ In all interactions, plans, and commit messages, be extremely concise and sacrif
## Testing

- Run specific test by `pnpm bnt path/to/test.test.ts -t 'test name'`

## Browser

- Use Playwright MCP for visual issues and client database bugs. See [docs/browser.md](./docs/browser.md).
5 changes: 2 additions & 3 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -81,11 +81,10 @@ To fill your web clients with real posts:
4. Open browser DevTools.
5. Run `fillFeedsWithPosts()`.

To run the visual testing tool (Storybook), run it from the `web/` folder:
To run the visual testing tool (Storybook):

```sh
cd web/
pnpm visual
pnpm -F web visual
```

It will show all UI components and all possible states of pages. It is the best tool to test browser compatibility or change CSS.
Expand Down
10 changes: 5 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ The source of truth in the client is a list of changes (action log). An action i
}
```

To render the UI, the client reduces actions from the log into the state (objects of feeds, posts, etc.). We store the state cache in [Nano Stores](https://github.com/nanostores/nanostores).
To render the UI, the client reduces actions from the log into SQL tables (feeds, posts, etc.) defined in [`core/schema.ts`](./core/schema.ts). The UI subscribes to reactive SQL queries from [Nano Stores SQL](https://github.com/nanostores/sql). Web keeps the database in SQLite compiled to WebAssembly, Node.js tests use in-memory SQLite.

The log simplifies synchronization. We just need to track the last synchronized action and send all actions after that one.

Expand Down Expand Up @@ -137,11 +137,11 @@ Each project has its own tools, too.
- `pnpm test`: run all tests.
- `pnpm quick`: run quick checks for changed files.
- `pnpm offline`: run all tests expect which need Internet. It is useful for developing in airplane/train.
- `pnpm start`: run proxy and web client development server.
- `pnpm start`: run server and web client development server.
- `pnpm format`: fix code style in all files.
- `pnpm clean`: remove all temporary files.
- `pnpm check-opml`: test loaders with user’s OPML RSS export.
- `pnpm test-loaders`: test loaders with different blogging platforms.
- `pnpm -F loader-tests check-opml`: test loaders with user’s OPML RSS export.
- `pnpm -F loader-tests test`: test loaders with different blogging platforms.
- `pnpm unused-messages`: check that all messages are used.
- `pnpm update-env`: check for Node.js and pnpm updates.
- `pnpm update-review`: run Multiocular to review updates.
Expand Down Expand Up @@ -239,7 +239,7 @@ How we choose dependencies:

You can use [bundlejs.com](https://bundlejs.com/) and [npmgraph.js.org](https://npmgraph.js.org) to get the size in bundle, `node_modules`, and number of sub-dependencies.

After adding a web client dependency, do not forget to call `cd web && pnpm size` to check the real size of dependency in our JS bundle.
After adding a web client dependency, do not forget to call `pnpm -F web size` to check the real size of dependency in our JS bundle.

We put to `dependencies` only dependencies we need for production deploy. All other dependencies you should put to `devDependencies`. During production deploy we will use `pnpm install --prod` to reduce security risks of having malicious code in some dependency.

Expand Down
4 changes: 1 addition & 3 deletions api/http/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -76,9 +76,7 @@ export function createRequester<Params extends object, ResponseJSON>(
}

export interface Endpoint<
// Need to put it inside type to pass all types to server in a single variable
// eslint-disable-next-line @typescript-eslint/no-unused-vars
Response,
_Response,
Request,
UrlParams extends Record<string, string> = Record<never, string>
> {
Expand Down
6 changes: 3 additions & 3 deletions api/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,13 @@
"./package.json": "./package.json"
},
"dependencies": {
"@logux/actions": "0.5.0"
"@logux/actions": "github:logux/actions#next"
},
"devDependencies": {
"@logux/core": "0.10.0"
"@logux/core": "github:logux/core#next"
},
"engines": {
"node": "^26.5.0",
"node": "^26.6.0",
"pnpm": "^11.0.0"
}
}
6 changes: 3 additions & 3 deletions core/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ In the best scenario, the client should just subscribe to stores, render UI acco

## Scripts

- `cd core && pnpm test`: run core unit tests and check coverage.
- `pnpm -F core test`: run core unit tests and check coverage.

## Client Environments

Expand Down Expand Up @@ -71,10 +71,10 @@ We run unit tests by `node --test` with [`better-node-test`](https://github.com/

```sh
# Run all tests with coverage
cd core && pnpm test
pnpm -F core test

# Run all tests without coverage (a little faster)
cd core && n bnt
pnpm -F core exec bnt

# Run specific test file
n bnt core/test/html.test.ts
Expand Down
Loading
Loading