Development
One repository. A native app and an independent website.
Repository layout#
desktop/ contains the Python GTK/WebKit host, native services, local UI, regression tests and Debian builder. apps/web/ contains the Next.js App Router website. docs/ mirrors the website documentation as Markdown. designs/ holds generated standalone HTML pitches.
Run the website with pnpm#
Use Node.js 22.13+ and the package manager version declared at the root. The supplied pnpm-lock.yaml records resolved dependencies. Use frozen installs and review any dependency changes together with their lockfile changes. Dependencies are not vendored.
corepack enable
corepack prepare pnpm@10.34.5 --activate
pnpm install --frozen-lockfile
pnpm audit --audit-level=moderate
pnpm devDependency installation, dependency-aware pnpm check and the real Next.js production export have passed. The production-export browser suite also passes, including React hydration, preview readiness and mobile iframe removal. Standalone HTML rendering is a separate preview workflow; consult the current test report for each check actually executed.
Build and validate#
The website remains a Next.js static export. pnpm build writes apps/web/out, and pnpm check performs dependency-aware TypeScript checking. Cloudflare Workers Static Assets serves that export without a framework migration or application backend. The offline preview renderer does not exercise the Next.js runtime.
The native experience roadmap and public source checklist are in docs/NATIVE-EXPERIENCE-ROADMAP.md and docs/PUBLIC-RELEASE-CHECKLIST.md. They distinguish remaining desktop work, source-publication preparation and stable-release validation.
pnpm check
pnpm build
pnpm preview
# Desktop package (Debian-family build host)
python3 desktop/tools/build_deb.py
python3 desktop/tools/verify_deb.py desktop/dist/openxplorer_1.1.4_all.debMake a focused contribution#
Read CONTRIBUTING.md and SECURITY.md. Use disposable files for operation tests. Separate UI fixtures from native integration results, include reproducible steps, and do not publish NAS passwords or private filename inventories. Contributions are under the project license, with existing notices preserved.
Compatibility identifiers#
The visible name and public command are OpenXplorer/openxplorer. The previous io.winspace.Development desktop ID, winspace configuration paths and credential schemas remain deliberately stable. Do not bulk-rename them without a migration design.
Regenerate real screenshots#
Screenshot assets are captured with Playwright from desktop/preview.html. Do not replace them with a separately drawn explorer mockup. The SVG folder and file icons are generated by the actual application UI. The source fixtures contain fictional project names, never real NAS credentials.
python3 desktop/tools/build_preview.py
python3 tools/capture-screenshots.py
pnpm designsScreenshot capture uses Chromium and simulated files. It does not test native GTK/WebKit or live SMB. It needs Python Playwright and a Chromium executable; set CHROMIUM when the executable is not /usr/bin/chromium.
Documentation as Markdown#
Copy page as Markdown copies the full guide, including headings, paragraphs, code blocks, callouts and screenshot references—not a link or rendered HTML. The content source is apps/web/lib/docs.json; tools/sync-docs.py regenerates repository documentation and the website copies.
Documentation search opens from its named button. The site does not intercept Command-K or Control-K. Keyboard navigation within the search dialog and Escape-to-close remain available.