Materializr
오픈소스 파라메트릭 3D CAD로 제약 스케치·솔리드 모델·나사·SVG·텍스트 조각·STL/STEP 내보내기를 지원합니다
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기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.