node_modules/
dist/
dist-embed/
# Generated by `npm run build:jupyterlite` (best-effort prebuild); not committed.
apps/geolibre-desktop/public/jupyterlite/
# JupyterLite (doit) build cache, written to the working dir during the build.
.jupyterlite.doit.db
# The kernel-side geolibre client and the Welcome example are staged here from
# their canonical backend copies by scripts/build-jupyterlite.mjs.
apps/geolibre-desktop/jupyterlite/files/geolibre.py
apps/geolibre-desktop/jupyterlite/files/Welcome.ipynb
site/
target/
.tauri/
*.log
.DS_Store
.env
.env.local
__pycache__/
*.pyc
.ruff_cache/

# Generated by the copy-vector-ops Vite plugin from the backend source of truth
# (backend/geolibre_server/geolibre_server/vector_ops.py).
apps/geolibre-desktop/src/lib/pyodide/vector_ops.generated.py

# Generated by the copy-rtl-text Vite plugin from @mapbox/mapbox-gl-rtl-text.
apps/geolibre-desktop/src/lib/vendor/mapbox-gl-rtl-text.generated.js

# Generated by the copy-cesium-assets Vite plugin from node_modules/cesium.
apps/geolibre-desktop/public/cesium/
.venv/
*.egg-info/
.pytest_cache/
# Coverage artifacts (pytest-cov data file, HTML/XML reports, c8 output)
.coverage
.coverage.*
coverage/
htmlcov/
coverage.xml
.idea/
.vscode/
*.tsbuildinfo
**/src-tauri/gen/
.playwright-cli/
.claude/
uv.lock
# ...except the sidecar's. That project is BUNDLED into the desktop installers
# and `uv run` against it at app startup, from a resource directory the user
# cannot write (C:\Program Files\..., /usr/lib/GeoLibre Desktop/...). Without a
# committed lock, a CI-built release ships lockless, so uv has to resolve and
# then WRITE uv.lock there on first launch — which fails with "Permission
# denied" and exits 2, surfacing as "Jupyter server exited before it was ready
# (exit code: 2)". Committing it also stops released builds from re-resolving
# against live PyPI on every user's machine. The launcher passes `--frozen`
# (src-tauri/src/lib.rs) so it is read, never rewritten.
!backend/geolibre_server/uv.lock

# Playwright E2E artifacts
test-results/
playwright-report/
blob-report/
.playwright/
private/

# Documentation screenshots are hosted on Cloudflare R2 (data.geolibre.app/images),
# not committed to the repo, to save space.
docs/assets/screenshots/
python/examples/my-map.geolibre.json

# Cloudflare Workers local dev state (wrangler dev / miniflare)
.wrangler/

# Rendered Homebrew cask, emitted to the working dir by scripts/render-*-cask.sh
# for submission to a tap / homebrew-cask; not committed to this repo.
/geolibre.rb

# Rendered Mac App Store signing inputs (generated by
# scripts/render-mas-entitlements.sh and the mas-store workflow; the committed
# source of truth is Entitlements.mas.plist.template)
apps/geolibre-desktop/src-tauri/mas/Entitlements.mas.plist
apps/geolibre-desktop/src-tauri/mas/embedded.provisionprofile

# Local SQLite state for the reference projects/identity server. GEOLIBRE_DATABASE_URL
# defaults to sqlite:///./geolibre-server-api.db, so running it from the repo root
# (the obvious place) drops the file here.
/geolibre-server-api.db
