Materializr
開源參數式 3D CAD 給創客 — 受限草圖、實體建模、螺紋、SVG 與文字雕刻、STL/STEP 匯出。Android、iPad、Linux、Mac、Windows。Vibe 編碼。
AI 翻譯
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證organizational freedom - control plane for lolly.tools
翻譯準備中
取自儲存庫 README
正在載入完整 README。 以下為已儲存的摘錄。
The Lolly control plane - identity and provisioning, governance, online services,
telemetry analytics. Open source under the Mozilla Public License 2.0 (MPL-2.0);
designed to be hosted by an organisation (SUSE first), brand-agnostic so any deployment is
just config + a pack mount.
The compass: OSS = individual freedom · OSS + control plane = organizational freedom.
Lolly renders on-device by design; everything hosted lives here (the public MCP server is
the one exception).檢視完整 README ↗The Lolly control plane - identity and provisioning, governance, online services, telemetry analytics. Open source under the Mozilla Public License 2.0 (MPL-2.0); designed to be hosted by an organisation (SUSE first), brand-agnostic so any deployment is just config + a pack mount.
The compass: OSS = individual freedom · OSS + control plane = organizational freedom. Lolly renders on-device by design; everything hosted lives here (the public MCP server is the one exception).
The 1.1.3 release records the matched Lolly source, component versions, migrations and the checks required before publication. The 1.1.2 release keeps its own page, and the 1.1.1 and 1.1.0 releases keep their own records in past releases.
The default server and render-worker containers use Node 26.12.1. CI checks Node 26; the SUSE BCI and admission images retain their separately qualified Node 24 base. The source minimum remains Node 24.
The official installation directory lists upstream images, Helm/Rancher, European cloud foundations, YunoHost and the neutral VM/Dokploy packages, with their publication and qualification status.
A running web UI + CLI, dead easy. The one install guide is
docs/install.md (served in the console too, at /admin#/docs):
pnpm install && pnpm run demo (Node 24+) → a fully-seeded governed
deployment at http://localhost:8787.docs/deployment.md → Hosting and operating-system choices).The hosted demo runs on UpCloud in Frankfurt, on openSUSE Leap and K3s, in a
separate evaluation namespace. Its sample data resets on restart; it is never the
production deployment model. Prerequisites and per-OS steps (SLES / openSUSE Leap / macOS)
are in docs/install.md; the full operator set is in docs/ (below).
The complete Lolly and Work documentation lives at https://lolly.tools/info. The canonical Markdown and navigation are maintained in the Lolly repository.
This repository's docs/ directory is a generated, version-pinned bundle for the
console at /admin#/docs and offline installations. Existing guide links continue
to work. docs-pin.json records the exact canonical source and every file hash;
pnpm run verify:docs-pin checks the bundle without a separate Lolly checkout.
To change a guide, edit its canonical source, then follow the bundle update instructions. Keep the docs pin appropriate for the Work release; updating documentation does not repin the engine.
docs/ operator documentation (also served at /admin#/docs)
server/src/ the app - Node, node:http + node:crypto, native TS; no framework and no third-party crypto.
Runtime deps are the render plane (jsdom, resvg, sharp), Postgres (pg) and collab (ws, yjs)
config/ instance.json loader (+ env secrets)
iam/ OIDC (generic, Keycloak-first), HMAC tokens, member/guest sessions
rbac/ roles + fine-grained grants evaluator
policy/ tool overlays (input locking), org-config payload assembly
links/ signed expiring revocable links (share/embed/download/guest-edit)
audit/ hash-chained append-only log
telemetry/ ingest (attr allowlist, attribution policy at the door), rollups
approvals/ chains, steps, separation of duties
catalog/ submit, lifecycle, versions, collections + the provider drivers
collab/ live co-editing gateway, rooms, guest links
scim/ SCIM 2.0 provisioning (Users, Group membership)
observability/ Prometheus metrics + SIEM forwarding
inbox/ message bridge audience targeting
fleet/ X-Lolly-Client parsing + version registry
blobs/ instance-owned bytes behind the BlobStore seam
store/ memory + Postgres drivers behind one conformance-tested seam
render/ render plane: jsdom fast path, Chromium worker client, LRU cache
api/ router + the HTTP app
workers/render/ the Chromium render worker (its own container image)
migrations/ Postgres schema
deploy/ compose (single VM), helm (Kubernetes), vercel (the hosted demo)
packs/ deployment pack mount (your pack is data, never committed; packs/demo ships)
# Install the pinned package manager once (or use Corepack).
npm install --global [email protected]
pnpm install # once per checkout
cp instance.example.json instance.json # dev provider enabled, gated mode, packs/demo
npm start # → http://localhost:8787
# sign in at http://localhost:8787/admin, or mint a cookie for scripting:
curl -i 'http://localhost:8787/api/auth/[email protected]' # → session cookie
curl -s http://localhost:8787/healthz
After signing in, open Customer setup at /admin#/setup for guided configuration, identity and a checked sample.
The example config ships an owner and an admin persona: role is derived from group
membership (literal defaults or idp.roleGroups mappings), so only an owner can reach instance.config or
store a catalog-provider credential. Full walkthrough and verification steps:
docs/install.md.
pnpm test # node:test over tests/ (Postgres conformance runs when LW_TEST_DATABASE_URL is set)
pnpm run typecheck # tsc --noEmit (needs devDependencies installed)
When changing console assets, run pnpm console:build and commit the updated
console/index.html. Its revision URLs are derived from the entire console source
tree, including imported modules and styles. pnpm console:check refuses stale
references; normal tests, direct start and YunoHost releases run that check.
Both container profiles and the optional Vercel package generate the same URLs.
Assets remain ordinary ES modules with no-cache revalidation; there are no
manually maintained bundle copies. The image release probe loads the entry
selected by the HTML, follows its imports, and exercises a transfer preview in
an isolated authenticated memory-store fixture.
Admin console: http://localhost:8787/admin - dashboards (activity, top tools,
formats, fleet), links, messages, audit (hash-chain view), people, and Docs (this
repo's docs/, rendered in-console). Light/dark, no build step, no external assets.
Admin CLI (same API as the console, parity by construction):
pnpm run cli login --email [email protected] # or `npm link` once, then plain `lw`
pnpm run cli summary # or: whoami · fleet · audit verify
pnpm run cli links --all
pnpm run cli msg send --title "Update by Aug 15" --severity action --shells tauri --max-engine 1.52.99
Postgres: set DATABASE_URL and migrations auto-apply on boot; without it the
memory store runs (evaluation semantics - state resets on restart).
Secrets come from env (LW_SESSION_SECRET, LW_LINK_SECRET, LW_IDP_CLIENT_SECRET);
in dev they fall back to ephemeral randoms - sessions die on restart, which is correct.
There are two entrypoints, and they don't share state - pick the one that matches what
you're showing. The store is in-memory either way (unless DATABASE_URL is set), so
seeded/created data evaporates on restart.
pnpm run demo - the full self-contained demo (see DEMO.md for detail). Builds its
own config (it ignores instance.json), seeds everything - 4 personas, tool overlays,
an approval chain, projects/sessions, catalog lifecycle, messages, telemetry, fleet,
links, approvals - and serves the built web shell from the sibling OSS repo
(../lolly, or LOLLY_OSS_DIR) same-origin at /. Same-origin is what activates the
in-shell employee governance UX: the sign-in gate, locked tool inputs, and the
locked user profile (identity fields IdP-locked, feature-flag toggles hidden).
pnpm run demo # → http://localhost:8787 (PORT=8788 for another port)
Sign-in links are printed at boot (dev provider, no passwords). To demo the locked
profile: sign in as [email protected], open the profile view in the shell -
firstname/lastname/email/title render padlocked (mode: locked, source: idp in
GET /api/v1/org-config). The admin console is at /admin - sign in as
[email protected]. A shell dist built before the org governance module makes the
demo fall back to open mode (data + console still demo; the in-shell governance UX
needs a fresh pnpm run build:web in the OSS repo - the demo never builds anything).
npm start - split development. Boots from instance.json with an empty store:
control plane + console on :8787, your own Lolly dev server (e.g. Vite on :5173)
separately. Set instance.appUrl (e.g. "http://localhost:5173") so the console's
"Open Lolly" and deep links point at your dev shell, and instance.pack at a real pack
mount (e.g. the OSS repo) so the Design-system tab and console theming show the actual
brand tokens instead of the neutral fallback. Cross-origin means no shared session
cookie - the in-shell governance UX won't activate here; use pnpm run demo for that.
Customer setup at /admin#/setup guides an owner through
six steps: deployment, identity, provisioning, brand/assets, sample output and finish.
It generates validated non-secret configuration, checks the settings after restart,
records observed owner sign-in and creates a checked downloadable sample.
For external originals, open Providers at /admin#/providers.
WebDAV / Nextcloud and Google Drive
have typed configuration, exact member groups, original-file testing and sync before
activation. Google Drive also captures registered browser consent and seals the refresh
token. The other provider kinds retain their advanced forms and documented consent flows.
The control plane also provides:
The status and roadmap records verified behavior and remaining acceptance work. Real customer identity/source tests, matched employee-client and worker releases, service-token scopes/expiry, editable-default precedence and approval-bound ordinary exports remain separate work. A passing local example does not complete customer acceptance.
Catalog providers are integrations, not replacements: the external system stays the source of truth and lolly consumes read-only inside its own workflow. Every deployment brings its own API tokens/OAuth apps (none ship in this repo), drivers use only publicly documented endpoints, and provider names appear descriptively only - this project includes an integration for Brandfolder etc., and is not affiliated with those services.
House rules carried from the OSS repo: zero-dep server style (the services/ca/services/mcp
pattern), engine consumed pinned and unmodified when it arrives, no SUSE strings in code -
the deployment name lives in instance.json.
lolly-work is licensed under the Mozilla Public License 2.0 - see LICENSE.
The vendored Lolly engine (vendor/@lolly/engine, vendor/@lolly-tools/core) is also
MPL-2.0, consumed as a pinned, unmodified snapshot. Bundled third-party code keeps its own
permissive licenses (MIT / BSD / Apache-2.0) and fonts are OFL-1.1; every required notice is
reproduced in THIRD-PARTY-NOTICES.md with the machine-readable
graph in sbom.cdx.json.