جائزہ
![]()
یہ دستاویز Lolly پلیٹ فارم کے مقصد، ساخت اور تعمیراتی فیصلوں کو محفوظ کرتی ہے۔ یہ پروڈکٹ ویژن اور کوڈ بیس کی موجودہ حالت دونوں کی عکاسی کرتی ہے۔
حیثیت: Lolly ایک اندرونی پروٹوٹائپ ہے جو ایک بند پائلٹ میں ہے جو ابھی مکمل نہیں ہوا۔ انجن ڈیٹرمنسٹک اور اندرونی طور پر مربوط ہے، لیکن پروڈکٹ ابتدائی مرحلے میں ہے — SUSE پہلا کسٹمر ہے — اور اس کے کرپٹوگرافی اور فائل-پارسنگ انجن اس وقت SUSE کی سخت انفراسٹرکچر ہارڈننگ سے گزر رہے ہیں، انٹرپرائز اسکیل کی تیاری میں (ہم اس میں واقعی بہت اچھے ہیں)۔ نیچے دی گئی آرکیٹیکچر کو ایک آزمائش کے تحت ڈیزائن ارادے کے طور پر پڑھیں، نہ کہ ایک مکمل، تصدیق شدہ پروڈکٹ کے طور پر۔ پائلٹ کیسے چلایا اور ماپا جاتا ہے، اس کے لیے اپنانا اور گورننس دیکھیں۔
یہ کیوں موجود ہے
ٹیمیں ایک بار بار پیش آنے والے مسئلے کا سامنا کرتی ہیں: دہرایا جانے والا تخلیقی اور مواد کا کام جو اتنا قابلِ پیش گوئی ہے کہ ہر بار ماہر ہاتھوں کا جواز نہیں بنتا، لیکن معیار کے لحاظ سے اتنا حساس ہے کہ حفاظتی حدود کے بغیر سونپا نہیں جا سکتا۔ نتیجہ یا تو سست پیداوار (ماہر کی رکاوٹ)، عدم مطابقت (لوگ جو بھی ٹول ان کے پاس ہو استعمال کرتے ہیں)، یا وینڈر لاک-اِن (ایک SaaS DAM جو آپ کے ٹیمپلیٹس کو کنٹرول کرتا ہے) ہوتا ہے۔
یہ پلیٹ فارم ساختی جواب ہے:
پیمانے پر پروگرام شدہ تخلیقی مواد — بغیر محنت کے اثاثہ جنریشن، قواعد مرکزی کنٹرول میں، ملازمین، وینڈرز اور شراکت داروں کے لیے۔
نتیجہ فراوانی ہے: ہر ایونٹ کے پاس درست سائنیج ہوتی ہے، ہر CVE الرٹ ہاؤس اسٹائل سے میل کھاتا ہے، ہر لیبل صاف چھپتا ہے، ہر ای میل سگنیچر تازہ ترین ہوتا ہے — یہ سب ڈیزائن ٹکٹ کے بغیر۔ پلیٹ فارم بار بار ہونے والے آپریشنلائزڈ تخلیقی کام کو سنبھالتا ہے۔ یہ جان بوجھ کر کوئی حسبِ منشا تخلیقی ٹول نہیں ہے — ڈیزائنرز اب بھی فلیگ شپ کام کے مالک ہیں۔
یہ منظرنامے میں کہاں فٹ ہوتا ہے

| صلاحیت | Canva | برانڈ پورٹلز | Illustrator | Figma / Penpot | Lolly |
|---|---|---|---|---|---|
| بڑے پیمانے پر مواد کی جنریشن | جزوی | ✗ | ✗ | ✗ | ✓ |
| مکمل طور پر آف لائن کام کرتا ہے | ✗ | ✗ | ✓ | جزوی | ✓ |
| ٹیمپلیٹ لاجک اور سخت رکاوٹیں | ✗ | جزوی | ✗ | جزوی | ✓ |
| کسی ڈیزائن مہارت کی ضرورت نہیں | جزوی | ✓ | ✗ | ✗ | ✓ |
| خودکار Content Credentials | ✗ | ✗ | جزوی | ✗ | ✓ |
| ٹولز دوسرے ٹولز کو ترتیب دیتے ہیں | ✗ | ✗ | ✗ | ✗ | ✓ |
| کھلا انجن، SaaS-لاکڈ نہیں | ✗ | ✗ | ✗ | جزوی | ✓ |
| C2PA content credentials | ✗ | ✗ | ✗ | ✗ | ✓ |
| اختیاری فارنزک-درجے کی پرونینس | ✗ | ✗ | ✗ | ✗ | ✓ |
| موبائل اور ڈیسک ٹاپ ایپس | ✓ | ✗ | ✗ | جزوی | ✓ |
| کمانڈ لائن اور TUI | ✗ | ✗ | ✗ | ✗ | ✓ |
خلا واضح ہے: موجودہ منظرنامے میں کچھ بھی ہمیں رکاوٹ-اول، آف لائن-قابل، کم-مہارت، اندرونی طور پر قابلِ رسائی آؤٹ پٹ نہیں دیتا۔ Lolly میں تو ایک کھلا کینوس بھی شامل ہے — Layout Studio — جہاں رنگ، ٹائپ اور اثاثے برانڈ گلوبلز کے مطابق ہوتے ہیں، اس لیے آزاد ترتیب رکاوٹ-اول رہتی ہے۔ یہ جو نہیں ہے وہ ایک بے-رکاوٹ ڈیزائن سوٹ ہے: ڈیزائنرز حسبِ منشا فلیگ شپ کام کے لیے Illustrator اور Figma استعمال کرتے رہتے ہیں۔ اس ٹول کے ساتھ ترتیبات جمع کی جا سکتی ہیں۔
اسے اس کے لیے استعمال کریں: آپریشنلائزڈ تخلیقی اثاثوں کی تیز جنریشن — ایونٹ ٹائلز، نام بیجز، سگنیچرز، CVE الرٹس، QR کوڈز، سوشل کارڈز، کنسائنمنٹ لیبلز، ساختہ رپورٹس۔
اسے اس کے لیے استعمال نہ کریں: حسبِ منشا ہیرو مواد۔
ایک مہم کا لائف سائیکل
Lolly کیا ہے، یہ دیکھنے کا سب سے صاف طریقہ فیچرز کی فہرست نہیں — بلکہ ایک ہی اثاثے کا پیچھا کرنا ہے، جیسے وہ ایک ہاتھ سے دوسرے ہاتھ پہنچتا ہے۔ ایک لوکلائزڈ مہم کارڈ کو ادارے میں سے گزرتے ہوئے دیکھیں:
- کریئیٹو قواعد طے کرتا ہے۔ ایک ڈیزائنر Layout Studio میں بنیادی ٹیمپلیٹ لکھتا ہے اور برانڈ کی ٹائپوگرافی اور رنگ کے ویری ایبلز اُس میں ہارڈ کوڈ کر دیتا ہے۔ وہ ایک کارڈ نہیں بنا رہا — وہ بنیادی کام ایک بار کر رہا ہے، تاکہ اسے دوبارہ کبھی ہاتھ سے لوکلائز نہ کرنا پڑے۔
- ڈیولپر اسے اسکیل کرتا ہے۔ وہی ٹیمپلیٹ CLI کے ذریعے ایک نائٹلی پائپ لائن میں جُڑ جاتا ہے، چنانچہ نیا چارٹ یا کسی نئی زبان کا ویریئنٹ خودبخود بن جاتا ہے — کوئی ڈیزائنر فائل دوبارہ نہیں کھولتا۔
- تخلیق کار بس اسے استعمال کرتا ہے۔ جہاز میں آف لائن بیٹھا ایک سیلز نمائندہ وہی ٹول کھولتا ہے اور کلائنٹ میٹنگ کے لیے بالکل آن-برانڈ ڈیک بنا لیتا ہے۔ کوئی ڈیزائن مہارت نہیں، کوئی نیٹ ورک نہیں، کوئی انتظار نہیں۔
دوسرے مرحلے کا وہ "نیا چارٹ" بالکل اِسی طرح کا ایک رینڈر ہے، جو ایک ڈیٹا سٹرنگ اور مٹھی بھر پیرامیٹرز سے بنا ہے، اور کسی نے کوئی ڈیزائن فائل کھولی ہی نہیں:
بات یہ نہیں کہ Lolly ڈیزائنرز کے لیے اچھا ہے اور ڈیولپرز کے لیے اچھا ہے اور سیلز کے لیے اچھا ہے، ہر ایک الگ خانے میں۔ یہ ایک ریلے ریس ہے: کریئیٹو کے ابتدائی کام کو ڈیولپر اسکیل کرتا ہے، اور وہی تخلیق کار کو طاقت دیتا ہے۔ جہاز میں بیٹھے اُس غیر-تکنیکی نمائندے کا بےمحنت تجربہ ممکن ہی اس لیے ہے کہ ڈیزائنر نے سختی طے کی اور ڈیولپر نے اُسے تعینات کیا۔
یہی فورس ملٹی پلائر ہے۔ Lolly مختلف کرداروں کے لیے مختلف ٹولز کی دراز نہیں — یہ ایک ہی ڈٹرمنسٹک اثاثہ لائف سائیکل ہے جسے ہر کردار چھوتا ہے، اور جس ہر ہاتھ سے یہ گزرتا ہے وہ پچھلے ہاتھ کی قیمت کئی گنا کر دیتا ہے۔
ایک منظوری، دس ہزار اثاثے
چونکہ منظوری فائل میں نہیں، ٹول میں رہتی ہے (Lolly کا موازنہ کیسے ہوتا ہے دیکھیں)، اس لیے پیمانہ نظرثانی کا مسئلہ ہی نہیں رہتا۔ ایک لوکلائزڈ سوشل-کارڈ ٹول کو ایک بار منظور کریں، پھر ایک اسپریڈشیٹ سے 12 زبانوں میں 10,000 اثاثے بنائیں — اور اُن میں سے کسی ایک کو بھی لیگل یا برانڈ سے نئی تعمیل جانچ کی ضرورت نہیں، کیونکہ جس ٹیمپلیٹ سے وہ سب آئے ہیں وہ پہلے ہی منظور شدہ تھا۔
وہی ڈٹرمنسٹک ٹول تین راستوں سے اس پیمانے تک پہنچتا ہے، اور تینوں بالکل ایک جیسا، پہلے سے منظور شدہ آؤٹ پٹ دیتے ہیں:
- ایک انسان، ایپ میں۔
/proبیچ گرِڈ: قطاریں پیسٹ یا امپورٹ کریں، فی قطار ایک مکمل اثاثہ پائیں، zip ڈاؤن لوڈ کریں۔ کوئی ڈیزائن مہارت نہیں، کوئی ٹکٹ نہیں، کوئی انتظار نہیں۔ - ایک ڈیولپر، کمانڈ لائن سے۔ CLI وہی انجن اور وہی رینڈر راستہ ہیڈلیس چلاتا ہے، اس لیے ٹول کو کسی اسکرپٹ یا نائٹلی پائپ لائن میں پوری 10,000 قطاروں پر ترتیب سے چلایا جا سکتا ہے۔ ایک لوپ میں
lolly <tool> --field=…کال — پورا انٹیگریشن اتنا ہی ہے۔ - ایک سسٹم یا AI ایجنٹ، MCP کے ذریعے۔ وہی ٹول پروگرام کے ذریعے چلایا جاتا ہے، اُسی فِڈیلٹی پر اور اُس سے بھی بڑے پیمانے پر — کیونکہ ہزاروں فائلیں آتی دیکھ کر مشین بور نہیں ہوتی۔
برانڈ کی پابندیوں کا ایک سیٹ، ڈیزائنر نے ایک بار طے کیا؛ اُسی پہلے سے منظور شدہ آؤٹ پٹ تک تین راستے — اور مشین کا راستہ سب سے دور تک جاتا ہے، کیونکہ فائلیں آتی رہیں تو بھی وہ نہیں تھکتی۔
بڑی تصویر
┌─────────────────────────────────────────────┐
│ Tools (data, not code) │
│ tool.json + template.html + hooks.js? │
└─────────────────────────────────────────────┘
▲
│ talks to via Capability Bridge v1
▼
┌─────────────────────────────────────────────┐
│ Engine │
│ loader · validator · runtime · template │
│ inputs · url-mode │
│ PLATFORM AGNOSTIC. Knows nothing of DOM, │
│ filesystem, or You. │
└─────────────────────────────────────────────┘
▲
│ implements HostV1
▼
┌──────────────┬──────────────┬──────────────┬──────────────┐
│ Web Shell │ Tauri Desktop│ Tauri Mobile │ CLI Shell │
│ (PWA) │ │ │ │
└──────────────┴──────────────┴──────────────┴──────────────┘
▲
│ fetches from
▼
┌─────────────────────────────────────────────┐
│ Catalogs │
│ catalog/tools/index.json + tool dirs │
│ catalog/assets/index.json + asset files │
└─────────────────────────────────────────────┘
ریپوزٹری لے آؤٹ
lolly/
├── engine/ # Platform-agnostic core. Open source (MPL-2.0).
│ └── src/
│ ├── index.ts # public surface — loader, runtime, template, inputs, url-mode
│ ├── loader.ts # fetches and validates tool files
│ ├── runtime.ts # orchestrates the 5-step lifecycle
│ ├── template.ts # Handlebars hydration + annotateTemplate
│ ├── inputs.ts # manifest → runtime input model
│ ├── url-mode.ts # URL ↔ input state round-trip
│ ├── validate.ts # JSON Schema validation of manifests
│ ├── compose.ts # resolve nested tool renders (composes)
│ ├── embed.ts # parse portable lolly.tools embed URLs
│ └── bridge/
│ └── host-v1.ts # TypeScript interface — the bridge contract
│
├── shells/
│ ├── web/ # PWA — hosted online; primary distribution
│ │ └── src/
│ │ ├── main.ts # boot, routing
│ │ ├── theme.ts # theme apply/persist (FOUC prevention)
│ │ ├── bridge/ # web implementations of HostV1 APIs
│ │ │ ├── index.ts # compose all bridge pieces
│ │ │ ├── db.ts # IndexedDB setup
│ │ │ ├── state.ts # host.state — saved edits
│ │ │ ├── profile.ts # host.profile — user details
│ │ │ ├── assets.ts # host.assets — catalog + user uploads
│ │ │ ├── clipboard.ts # host.clipboard
│ │ │ ├── export.ts # host.export — rasterise/serialize
│ │ │ ├── net.ts # host.net — allowlisted fetch
│ │ │ └── media.ts # host.media — live camera frames (onFrame)
│ │ ├── catalog/
│ │ │ └── sync.ts # boot-time catalog sync + offline cache
│ │ ├── styles/ # app-wide CSS (app.css, picker.css, tokens.css)
│ │ └── views/
│ │ ├── gallery.ts # tool library listing + saved-state cards
│ │ ├── tool.ts # mounts one tool (inputs + canvas + actions)
│ │ ├── picker.ts # asset picker UI (invoked by host.assets)
│ │ ├── profile.ts # user details editor
│ │ ├── projects.ts # /p — folders of saved sessions (nested; folder/selection export)
│ │ └── free-canvas.ts # free-canvas editor overlay for render.layout:"editor" tools
│ │
│ ├── cli/ # Node.js CLI — same engine, headless jsdom
│ │ ├── bin/lolly.ts
│ │ └── src/
│ │ ├── run.ts # loadTool → createRuntime → export → write file
│ │ └── bridge.ts # CLI implementation of HostV1
│ │
│ ├── tui/ # Interactive terminal shell (Ink) — reuses the CLI bridge
│ │ └── src/
│ │ ├── main.tsx # full-screen app: Gallery / Projects / Profile / ToolView
│ │ └── bridge.ts # CLI bridge + on-disk state under ~/.lolly
│ │
│ ├── tauri-desktop/ # downloadable desktop app
│ └── tauri-mobile/ # iOS/Android app
│
├── tools/ # profile VIEW (gitignored) — data, not code. Merged from packs:
│ # community/ (public, brand-agnostic, MPL) + brands/<active>/tools (brand-owned).
│ ├── qr-code/
│ ├── quotes/
│ ├── email-signature/
│ ├── daily-card/ # "Day Brief" — weather/time/map (fetched by an inline template script)
│ ├── code-canvas/
│ ├── countdown-timer/
│ ├── color-palette/
│ ├── color-block/ # typed/heterogeneous blocks (addMenu discriminator)
│ ├── dynamic-layout/
│ ├── tool-logo/ # "Logo" — auto-switching brand logo
│ ├── street-map/ # offline vector city-block maps
│ ├── url-shot/ # "URL Screenshot" (capture capability)
│ ├── strip-data/ # on-device metadata strip — JPEG/PNG/SVG/PDF (file in → clean file out)
│ ├── compress-pdf/ # on-device PDF compressor — recompresses images (file in → smaller file out)
│ ├── brand-lockup/ # "Brand Lockup" — SUSE logo lockups; HarfBuzz text-to-path (wasm)
│ ├── bag-video/
│ ├── chart-creator/ # SVG charts from structured data
│ ├── filter-duotone/ # two-color photo treatment
│ ├── filter-halftone/ # photo → vector halftone dot grid
│ ├── filter-scanline/ # photo → retro posterised scanline grid (SVG / transparent raster)
│ ├── meeting-planner/ # global timezone meeting scheduler
│ ├── calendar-ics/ # event → .ics calendar file plus a card
│ ├── digi-ad/ # "Animated Ad" — looping banner from scenes
│ ├── event-name-badge/ # conference badges — composes qr-code as an SVG
│ ├── wayfinding-signage/ # event signage; directions blocks auto-fit label text
│ ├── text-helper/ # on-device text workbench (format/decode/hash/de-identify)
│ ├── layout-studio/ # "Layout Studio" — freeform WYSIWYG editor canvas (render.layout: editor)
│ ├── multi-page-pdf/ # multi-page PDF document — cover, flowing content blocks, back page
│ ├── diagram-builder/ # org / layercake / process / cycle / pyramid diagrams
│ ├── logo-wall/ # many logos → auto-packed grid
│ ├── logo-lockup-partner/ # SUSE + partner co-brand lockup
│ ├── web-icon/ # favicon .ico / png / svg from text + colours
│ ├── filter-posterize/ # photo → flat posterised vector separations
│ ├── filter-pixel-stretch/ # photo → pixel-smear effect
│ ├── lottie-digi-ad/ # animated Lottie ad banners
│ └── pose-geeko/ # pose the SUSE Geeko mascot — print-ready stills
│
├── catalog/
│ ├── tools/index.json # tool registry
│ └── assets/
│ ├── index.json # asset registry
│ └── suse/... # logo, palette, etc.
│
├── schemas/ # JSON Schema for tool.json, asset entries, AssetRef
├── scripts/ # build-catalog-index.ts, checksum-assets.ts, validate-catalog.ts
├── tests/ # engine tests
└── docs/ # this file + authoring guides + positioning
پلیٹ فارم ڈیلیوری ماڈل
پلیٹ فارم کئی سطحوں پر چلتا ہے — web PWA، Tauri ڈیسک ٹاپ/موبائل، اسکرپٹ ایبل CLI، اور انٹرایکٹو TUI۔ ان سب میں ایک ہی انجن اور ایک ہی ٹول فائلیں استعمال ہوتی ہیں۔
Web (PWA) — بنیادی تقسیم

SUSE کے زیرِ کنٹرول URL پر میزبان۔ سروس ورکر کے ٹولز اور اثاثے کیش کر لینے کے بعد آف لائن کام کرتا ہے۔ یہیں زیادہ تر ملازمین، وینڈرز اور شراکت دار پلیٹ فارم استعمال کریں گے۔ کسی اکاؤنٹ کی ضرورت نہیں — سٹیٹ ہر ڈیوائس پر IndexedDB میں محفوظ ہوتی ہے۔
web شیل ایک ہی لے آؤٹ سے ریسپانسیو ہے۔ ڈیسک ٹاپ پر ایک ٹول ایک پریویو اسٹیج کے پہلو میں ایک ری سائز ایبل کنٹرولز سائیڈبار ہوتا ہے جس میں ٹریک پیڈ-نیٹو کینوس نیویگیشن ہوتی ہے (کرسر کے گرد زوم کے لیے Cmd/Ctrl-وہیل یا پنچ، پین کرنے کے لیے اسپیس- یا مڈل-ڈریگ، 0/1/+/− کیز، اور ایک Fit/% HUD)۔ موبائل پر (≤640px) کنٹرولز ایک اسٹیٹک فُل-اسکرین پریویو کے اوپر ایک ڈریگ گرِپ کے ساتھ ایک ٹاپ-اینکرڈ شیٹ بن جاتے ہیں جو peek/half/full پر سنیپ ہوتی ہے (ٹیپ سے ٹوگل ہوتی ہے)، اور ایک فلوٹنگ Render بٹن Export کنٹرولز کو ایک باٹم-شیٹ پاپ اپ میں کھولتا ہے۔ ٹچ کو پریویو پر پنچ-زوم اور ڈریگ-پین ملتا ہے۔ رینڈر پاتھ اور ایکسپورٹ کنٹرولز دونوں میں یکساں ہیں — صرف کروم دوبارہ ترتیب پاتا ہے۔
وہی ٹول فون کی چوڑائی پر، اور کوئی دوسرا لے آؤٹ سنبھالنے کی ضرورت نہیں: کنٹرولز اوپر ایک شیٹ بن جاتے ہیں، پری ویو پوری اسکرین لے لیتا ہے، اور رینڈر پِل اُس کے اوپر تیرتی رہتی ہے۔
بیچ موڈ (/pro)۔ web شیل ایک اسپریڈشیٹ-طرز کا بیچ گرِڈ (shells/web/src/pro/) بھی فراہم کرتا ہے جو ایک یا کئی ٹولز میں بیک وقت کئی قطاریں رینڈر کرتا ہے۔ یہ CSV/TSV راؤنڈ-ٹرپ کے ساتھ اسپریڈشیٹ پیسٹ، فی-قطار ٹیمپلیٹ/فارمیٹ/سائز/یونٹ/dpi، لائیو پریویو کے ساتھ ایک بلاکس-ایڈیٹر سائیڈ پینل، کولیپس ایبل ایکسپورٹ کالم، فی-قطار "متعلقہ" ٹیگ بار، بائیں ڈریگ-ہینڈل سے قطار کی ترتیب نو، دو-مرحلہ ڈیلیٹ تصدیق، محفوظ بیچ سیشنز، اور ایک .zip ڈاؤن لوڈ کرتا ہے۔ یہ "بڑے پیمانے پر مواد کی جنریشن" پوزیشننگ کے پیچھے ایک-سے-کئی سطح ہے۔
Tauri ڈیسک ٹاپ / موبائل
پیکیجڈ نیٹو ایپ (Tauri کے ذریعے چھوٹا فٹ پرنٹ)۔ مکمل آف لائن دستیابی، CLI-منحصر ٹولز (PDF Smasher، Font Outliner) کے لیے فائل سسٹم رسائی، اور کیمرا رسائی فراہم کرتا ہے۔ 2026 کے وسط میں ٹولنگ کی بہتری کے لیے شیڈول ہے۔
CLI
lolly <tool-id> [--input=value ...] --output=file.png
ڈیسک ٹاپ صارفین ٹرمینل سے کئی ٹولز چلا سکتے ہیں۔ CLI شیل وہی انجن لوڈ کرتا ہے، ایک jsdom DOM بناتا ہے، وہی رینڈر پاتھ چلاتا ہے، اور فائل لکھتا ہے۔ URL موڈ ٹرانسپورٹ ہے — CLI کوئی الگ نفاذ نہیں ہے۔ یہ ضمانت دیتا ہے کہ CLI اور GUI آؤٹ پٹ یکساں ہوں۔
lolly qr-code --url=https://suse.com --output=qr.svg
lolly quotes --quote="Ship it." --output=quote.png
lolly # lists available tools
lolly qr-code # lists inputs for that tool
TUI
npm run tui
CLI کا انٹرایکٹو ہم منصب: ایک فُل-اسکرین، کی بورڈ-اول ٹرمینل ایپ (Ink پر بنی) جو ٹولز براؤز کرنے، ان پٹ بھرنے، پروجیکٹس محفوظ کرنے، اور ایکسپورٹ کرنے کے لیے ہے — یہ سب بغیر کسی GUI کے۔ اس کا ہوسٹ برج DOM-فری فارمیٹس (SVG/EMF/EPS/HTML + text/data) کے لیے CLI کے نفاذ کو دوبارہ استعمال کرتا ہے، اور ~/.lolly کے تحت آن-ڈسک سٹیٹ کے علاوہ ایک اختیاری اِن لائن پریویو شامل کرتا ہے۔ اس سے آگے اس کے پاس ایک براؤزر رینڈر ٹیئر ہے: ایک اسکوپڈ ہیڈلیس Chromium (وہی جو MCP سرور انسٹال کرتا ہے) جو مانگنے پر raster/PDF/video اور لائیو-URL کیپچر تیار کرتا ہے — web شیل کی ایک بنی ہوئی کاپی چلا کر تاکہ آؤٹ پٹ یکساں ہو، اور صرف اسی وقت لانچ ہوتا ہے جب آپ پہلی بار ایسا فارمیٹ ایکسپورٹ کرتے ہیں۔ چنانچہ url-shot (crop + recolor + vector PDF/SVG کے ساتھ) اور ہر raster/pdf ٹول ٹرمینل میں بھی چلتا ہے۔ TUI گائیڈ دیکھیں۔
آپ کسی بھی سطح پر ہوں، ڈیش بورڈ کا کیپیبلٹیز ٹیب اس بات کا مکمل نقشہ ہے کہ پلیٹ فارم کیا کچھ کر سکنے کا اعلان کرتا ہے — گروہوں میں بٹا اور ایک بھی ٹول کھولے بغیر پڑھنے کے قابل۔
ٹول کیٹیگریز

گیلری گروپنگ کے لیے ٹولز کو ان کے مینی فیسٹ میں ایک category کے ساتھ ٹیگ کیا جاتا ہے۔
قطاریں گیلری سیکشن کی ترتیب میں درج ہوتی ہیں۔ utility سیکشن ہمیشہ گیلری میں سب سے آخر میں رینڈر ہوتا ہے (ہر دوسری کیٹیگری کے بعد، بشمول مستقبل کی) — یہ آن-ڈیوائس "Offline Utilities" دراز ہے۔
| کیٹیگری | فراہم شدہ ٹولز | منصوبہ بند |
|---|---|---|
everyone | QR کوڈ جنریٹر، کوٹ کارڈ، ای میل سگنیچر، ڈے بریف، کوڈ کینوس، کلر بلاک، ڈائنامک لے آؤٹ، لوگو، ویب آئیکن میکر | ایمپلائی امیج اسٹیشنری |
designer | برانڈ لاک اپ، بیگ ویڈیو، چارٹ کری ایٹر، اسٹریٹ میپ، اینیمیٹڈ ایڈ، ملٹی-پیج PDF، ڈایاگرام بلڈر، لوگو لاک اپ: گرِڈ (NASCAR)، لوگو لاک اپ: پارٹنر، فلٹر: ڈوئوٹون، فلٹر: ہاف ٹون، فلٹر: اسکین لائن، فلٹر: پوسٹرائز بٹ میپ، فلٹر: پکسل اسٹریچ | Font Outliner |
event | میٹنگ پلانر، ایونٹ نام بیج، ویفائنڈنگ سائنیج، کیلنڈر ICS | ایونٹ اسٹیشنری، بلک نام بیجز، روم ایجنڈا کارڈز |
product | — | CVE الرٹ، پروڈکٹ ریلیز اناؤنسمنٹ، بلاگ OG امیج |
utility | کاؤنٹ ڈاؤن ٹائمر، کلر پیلیٹ، URL اسکرین شاٹ، اسٹرپ ہڈن ڈیٹا، ٹیکسٹ ہیلپر، کمپریس PDF، Layout Studio | یونٹ/فارمیٹ کنورٹرز، مزید آن-ڈیوائس پرائیویسی یوٹیلیٹیز |
ٹولز کو سٹیٹس کے لحاظ سے بھی درجہ بند کیا جاتا ہے: official (برانڈ سے منظور شدہ، کوئی واٹر مارک نہیں)، community (بیرونی شراکت)، experimental (واٹر مارک شدہ ایکسپورٹس)۔ ڈائنامک لے آؤٹ، URL اسکرین شاٹ، لوگو لاک اپ: گرِڈ (NASCAR)، فلٹر: پوسٹرائز بٹ میپ اور ڈایاگرام بلڈر فی الحال experimental سٹیٹس رکھتے ہیں؛ ویب آئیکن میکر اور Layout Studio بطور community ٹولز فراہم ہوتے ہیں۔
Layout Studio render.layout: "editor" فری-کینوس موڈ پر بنایا گیا پہلا ٹول ہے — ایک کروم لیس، براہِ راست-میں پیولیشن سطح جہاں آپ ٹیکسٹ، شکلوں اور امیجز کے باکس ڈریگ، ری سائز، گھماتے اور سنیپ کرتے ہیں، پھر ہر دوسرے ٹول کی طرح اسی رینڈر پاتھ کے ذریعے ایکسپورٹ کرتے ہیں۔
اسٹرپ ہڈن ڈیٹا پہلی آن-ڈیوائس یوٹیلیٹی (privacy: "on-device") ہے: ایک مواد-ٹرانسفارم ٹول جو آپ کی فراہم کردہ فائل لیتا ہے، اسے مکمل طور پر براؤزر میں پروسیس کرتا ہے، اور ایک صاف کاپی واپس کرتا ہے — کبھی اپ لوڈ نہیں، کبھی واٹر مارک نہیں، کوئی پرونینس مہر نہیں۔ ٹیکسٹ ہیلپر دوسری ہے — روزمرہ کے پیسٹ-اِن-ٹو-اے-ویب سائٹ کاموں کے لیے ایک آن-ڈیوائس ورک بینچ (JSON فارمیٹ، JWT ڈی کوڈ، Base64، URL انکوڈ/ڈی کوڈ، SHA ہیشنگ)۔ کمپریس PDF تیسری ہے — یہ کسی PDF کی امیجز کو دوبارہ کمپریس کر کے اسے چھوٹا کرتی ہے، وہ بھی مکمل طور پر آن-ڈیوائس۔ تینوں پر بیج ٹیکسٹ "آپ کے ڈیوائس پر چلتا ہے — کچھ بھی اپ لوڈ نہیں ہوتا" موجود ہے۔ یہ ایک پرائیویسی-یوٹیلیٹی کیٹیگری کا آغاز ہے جو خفیہ فائلیں یک-مقصدی ویب سائٹس کو دینے کی جگہ لیتی ہے۔
نوٹ:
categoryاورstatusہرtool.jsonسےcatalog/tools/index.json(وہ رجسٹری جو گیلری پڑھتی ہے) میں ڈی نارملائز کیے جاتے ہیں۔ مینی فیسٹ سچائی کا ماخذ ہے — انڈیکسnpm run build:catalogسے جنریٹ ہوتا ہے اور اگر کمٹ شدہ انڈیکس مینی فیسٹس سے ہٹ جائے توnpm run validate:catalogCI کو ناکام کر دیتا ہے۔
تعمیراتی وابستگیاں
یہ فیصلے طے شدہ ہیں۔ ان میں سے کسی کو بھی بدلنا ایک بڑا کام ہے — یہ کوڈ بیس میں ہر دوسرے فیصلے کو شکل دیتے ہیں۔
1. اعلانیہ ٹولز، ایک امپیریٹو ایسکیپ ہیچ کے ساتھ
ایک ٹول ایک مینی فیسٹ (tool.json) + ایک ٹیمپلیٹ (template.html) + اختیاری hooks.js ہوتا ہے۔
مینی فیسٹ ان پٹ کا اعلان کرتا ہے۔ ٹیمپلیٹ نہیں۔ ان پٹ Handlebars ٹوکنز سے اخذ نہیں کیے جاتے۔ مینی فیسٹ معاہدہ ہے؛ ٹیمپلیٹ نامزد ویری ایبلز کو {{id}} کے ذریعے استعمال کرتا ہے۔
ہکس اختیاری ہیں۔ زیادہ تر ٹولز خالص اعلانیہ ہوتے ہیں — مینی فیسٹ + ٹیمپلیٹ کافی ہے۔ جن ٹولز کو حسابی اقدار چاہیے ہوں (QR انکوڈنگ، چارٹ ڈیٹا کی تشکیل) وہ hooks.js فراہم کرتے ہیں جو نامزد لائف سائیکل فنکشنز ظاہر کرتا ہے (onInit، onInput، onFrame — موشن-ری ایکٹو ٹولز کے لیے فی-فریم لائیو-کیمرا ہک — beforeExport، afterExport، اور exportFile — فائل-اِن/فائل-آؤٹ ٹرانسفارم پاتھ جسے اسٹرپ ہڈن ڈیٹا جیسی آن-ڈیوائس یوٹیلیٹیز استعمال کرتی ہیں)۔ (beforeRender ہک معاہدے میں محفوظ ہے لیکن فی الحال اس کا کوئی انووکیشن سائٹ نہیں ہے — اس پر بھروسہ نہ کریں۔) ہوسٹ ہکس کو new Function('host', …) کے ذریعے لوڈ کرتا ہے، جس میں کیپبیلٹی برج کلوژر اسکوپ کے طور پر انجیکٹ ہوتا ہے۔ یہ ایک پورٹیبیلیٹی معاہدہ ہے، سیکیورٹی سینڈ باکس نہیں: ہکس اب بھی پیج ریئلم میں چلتے ہیں اور براؤزر شیل میں window/fetch/document تک پہنچ سکتے ہیں — host. معاون، پورٹیبل سطح ہے، نافذ کردہ حد نہیں۔ Async ہک کے نتائج وقت-محدود ہوتے ہیں (onInit 5s، onInput 2s، باقی 5s) اور دیر سے آنے والے نتائج رد کر دیے جاتے ہیں؛ ایک بے قابو سنکرونس* ہک کو روکا نہیں جا سکتا۔ اس لیے غیر معتبر تھرڈ-پارٹی ہک کوڈ اس وقت تک چلانا محفوظ نہیں جب تک Worker آئسولیشن نہیں آ جاتا۔
یہ اہم ہے کیونکہ: اعلانیہ ٹولز غیر-ڈیولپرز بھی تحریر کر سکتے ہیں۔ اگر ہر ٹول ایک ویب ایپ ہوتا، تو خطرے کا نوٹ "ورک ہارس ٹیمپلیٹس بنانے/برقرار رکھنے کی محدود مہارتیں" ایک مستقل رکاوٹ بن جاتا۔
2. ٹولز اور اثاثے ڈیٹا ہیں، بنڈل کردہ کوڈ نہیں
web اور Tauri ایپس بوٹ کے وقت ایک معلوم URL سے ٹول اور اثاثہ کیٹلاگ حاصل کرتی ہیں، انہیں مقامی طور پر کیش کرتی ہیں، اور جو کچھ وہاں ہو اس پر کام کرتی ہیں۔ ایک نیا ایونٹ ٹائل یا موسمی اثاثہ شامل کرنے کے لیے ایپ ریلیز کی ضرورت نہیں۔
CDN زہرآلودگی کو روکنے کے لیے اثاثہ بائٹس کا SHA-256 چیک سم بنایا جاتا ہے۔ اثاثہ id + version کیش انویلیڈیشن چلاتا ہے۔
3. کیپبیلٹی برج واحد API ہے جسے ٹولز دیکھتے ہیں
ٹولز کبھی اپنے ٹیمپلیٹ ایریا سے باہر DOM کو نہیں چھوتے، کبھی براہِ راست fetch کال نہیں کرتے، کبھی فائل سسٹم نہیں پڑھتے۔ وہ ورژن شدہ host.* میتھڈز کال کرتے ہیں۔ برج engine/src/bridge/host-v1.ts میں بیان کیا گیا ہے:
| برج API | یہ کیا کرتا ہے |
|---|---|
host.profile | صارف کا پہلا نام، ای میل، ہیڈ شاٹ، شہر، وغیرہ۔ bindToProfile کے ذریعے ان پٹ پہلے سے بھرتا ہے۔ |
host.assets | کیٹلاگ کوئریز، اثاثہ ریزولوشن، ہوسٹ-فراہم کردہ پکر UI۔ |
host.state | ان پٹ سلاٹس محفوظ / لوڈ کریں۔ web پر IndexedDB، Tauri پر فائل سسٹم، CLI پر میموری۔ |
host.clipboard | کلپ بورڈ پر ٹیکسٹ یا امیج لکھیں (پلیٹ فارم فال بیکس کے ساتھ)۔ |
host.export | رینڈر ٹارگٹ کو ریسٹرائز یا سیریلائز کریں۔ تجرباتی ٹولز کے لیے واٹر مارک لگاتا ہے۔ |
host.net | اجازت-فہرست شدہ fetch — صرف اسی صورت دستیاب جب ٹول نے "network" کیپبیلٹی کا اعلان کیا ہو۔ (فی الحال کوئی فراہم شدہ ٹول اسے استعمال نہیں کرتا۔) |
اختیاری، اضافی سطحیں صرف اسی وقت ظاہر ہوتی ہیں جب کوئی شیل انہیں فراہم کرے۔ دو کیپبیلٹی-گیٹڈ ہیں — صرف اسی وقت ظاہر ہوتی ہیں جب ٹول مماثل فلیگ کا اعلان کرے: host.compose (کسی دوسرے ٹول کا رینڈر ایمبیڈ کریں — compose) اور host.capture (URL اسکرین شاٹ کے لیے پیج کیپچر — capture)۔ باقی فیچر-ڈیٹیکٹڈ ہیں — جب بھی شیل انہیں فراہم کر سکے موجود ہوتی ہیں: host.text (HarfBuzz WASM کے ذریعے text-to-path؛ wasm کیپبیلٹی ان ٹولز کو فلیگ کرتی ہے جو اس پر انحصار کرتے ہیں)، host.pdf (PDF پارسنگ/کمپریشن، جسے اسٹرپ ہڈن ڈیٹا اور کمپریس PDF استعمال کرتے ہیں)، اور host.tokens (DTCG ڈیزائن ٹوکنز)۔ قابلِ اعلان کیپبیلٹیز یہ ہیں: network، filesystem، clipboard، camera، ffmpeg، wasm، capture، compose۔
ایک ہی ٹول براؤزر، Tauri، اور ہیڈلیس CLI میں چلتا ہے کیونکہ ہر شیل اس انٹرفیس کو نافذ کرتا ہے — ٹول کو کبھی معلوم نہیں ہوتا کہ وہ کس میں ہے۔
برج ورژن شدہ ہے۔ میتھڈز شامل کرنا مائنر ورژن ہے۔ سگنیچرز ہٹانا یا بدلنا میجر ورژن بمپ ہے۔ جب v2 آئے، تو v1 کو کام کرتے رہنا چاہیے۔
4. اثاثہ IDs ہمیشہ کے لیے ہیں
suse/logo/primary ایک معاہدہ ہے۔ ایک بار شائع ہونے کے بعد:
- ID کبھی تبدیل نہیں ہوتا، کبھی دوبارہ استعمال نہیں ہوتا۔
- بائٹ تبدیلیاں → مینی فیسٹ میں
versionبمپ کریں۔ - کسی نئے اثاثے سے تبدیل →
deprecated: trueسیٹ کریں اور اختیاری طور پرreplacedBy۔ - موجودہ حوالہ جات ہمیشہ ریزولو ہوتے ہیں۔
یہ محفوظ کردہ ٹول سٹیٹس اور URL-شیئر کردہ لنکس کو برسوں تک پائیدار بناتا ہے۔
5. URL موڈ اولین درجے کا ہے
ہر ان پٹ کو ایک URL پیرامیٹر کے طور پر ظاہر کیا جا سکنا چاہیے:
lolly.tools/#/tool/qr-code?url=https://suse.com&ecl=H
CLI موڈ ایک مختلف ٹرانسپورٹ کے تحت URL موڈ ہے — CLI شیل argv سے ایک URL-سٹیٹ آبجیکٹ بناتا ہے اور وہی انجن پائپ لائن چلاتا ہے۔ ایک ہی رینڈر پاتھ ہے۔ CLI، GUI سے مختلف نہیں ہو سکتا کیونکہ یہ کوئی الگ نفاذ نہیں ہے۔
url-mode.ts راؤنڈ-ٹرپ سنبھالتا ہے (پارس اور سیریلائز)۔ محفوظ پیرامز (کبھی ٹول کو بطور ان پٹ فارورڈ نہیں کیے جاتے): format، export، copy، slot، output، filename، _v، z (پیکڈ سٹیٹ — "مختصر ترین لنک" ٹوکن)، width/w، height/h، unit، dpi، profile، password، bleed، marks، full، options، nostage۔ URL موڈ میں اثاثہ ان پٹ ان کی id سے سیریلائز ہوتے ہیں؛ رن ٹائم انہیں ہائیڈریشن سے پہلے host.assets.get() کے ذریعے ریزولو کرتا ہے۔ width/height، unit میں اقدار ہیں (طے شدہ px، نیز mm/cm/in/pt/pc)؛ کسی طبعی یونٹ کے ساتھ dpi ریسٹر ریزولوشن سیٹ کرتا ہے۔ یہ کینوس دستاویز کا سائز سیٹ کرتے ہیں اور ایکسپورٹ ڈائمینشنز پینل پہلے سے بھرتے ہیں۔
چونکہ ہر ان پٹ لنک ہی میں سفر کرتا ہے، کسی ایک پیرامیٹر کی تبدیلی ایک الگ تیار اثاثہ ہے۔ یہ پورا پیلیٹ ایک سیڈ رنگ، ایک ہارمنی اور ایک اسٹیپ تعداد سے بنا ہے:
6. سٹوریج برج کے ذریعے ہوتی ہے، براہِ راست نہیں
web شیل: IndexedDB۔ Tauri: فائل سسٹم۔ CLI: اِن-میموری۔ ٹولز صرف host.state.save(slot, data) اور host.state.load(slot) دیکھتے ہیں۔ localStorage استعمال نہیں ہوتا — یہ بہت چھوٹا ہے اور blobs نہیں رکھ سکتا۔
صارفین ہر ٹول کے لیے کئی نامزد ایڈٹ سلاٹس محفوظ کر سکتے ہیں اور بعد میں ہر سیشن پر واپس آ سکتے ہیں۔ کسی اکاؤنٹ کی تخلیق ضروری نہیں؛ سٹیٹ فی-ڈیوائس ہوتی ہے۔ چونکہ برج واحد جوڑ ہے، اس لیے وہ فی-ڈیوائس سٹیٹ پورٹیبل بھی ہے: shells/web/src/data-transfer.ts ہر چیز کو host.profile/host.state/host.assets کے ذریعے واپس پڑھ کر ایک واحد lolly-backup zip میں ڈالتا ہے جو کسی بھی دوسرے انسٹال پر امپورٹ ہوتا ہے — "نئی ڈیوائس پر منتقل ہونے" کا آف لائن جواب جسے کسی سرور کی ضرورت نہیں (مکمل تفصیل: docs/data-transfer.md)۔ SUSE ID انٹیگریشن (ملٹی-ڈیوائس سنک) اس کے اوپر ایک مستقبل کا سنگِ میل ہے۔
7. میچورٹی ٹیگز "برانڈ سے منظور شدہ" خطرے کا ساختی جواب دیتے ہیں
ہر ٹول اپنے مینی فیسٹ میں status: official | community | experimental کا اعلان کرتا ہے۔ گیلری سٹیٹس کے لحاظ سے ترتیب دیتی ہے۔ تجرباتی ٹولز اپنے ایکسپورٹس کو خودکار طور پر واٹر مارک کرتے ہیں — واٹر مارک host.export.render لگاتا ہے، ٹول نہیں، اس لیے کوئی غیر-آفیشل ٹول مصنف اس سے دستبردار نہیں ہو سکتا۔
یہ اس تاثراتی خطرے کا ساختی جواب ہے کہ کسی بھی ٹول کا استعمال برانڈ کی منظوری کو ظاہر کرتا ہے۔ عملی جوابات (ایک ریویو قطار، SUSE ID گیٹنگ) اس کے اوپر آتے ہیں۔
8. ٹول ان پٹ مینی فیسٹ کے ذریعے ٹائپ شدہ ہوتے ہیں، بشمول اثاثے
ان پٹ ایک type کا اعلان کرتے ہیں: text، longtext، number، boolean، color، select، asset، date، time، datetime-local، url، profile، blocks، vector، اور file۔ ہوسٹ مینی فیسٹ سے ہر ٹائپ کے لیے ایک عمومی کنٹرول رینڈر کرتا ہے — ٹولز صفر کنٹرول کوڈ لکھتے ہیں۔ تین باقیوں سے زیادہ اہمیت رکھتے ہیں:
asset(filterاورallowUploadکے ساتھ) عالمی اثاثہ سسٹم کا برج ہے؛allowUpload: falseبرانڈ-نفاذ پذیری کا لیور ہے، مثلاً سپانسرشپ-ٹائل لوگوز جیسی چیزوں کے لیے جہاں صرف لائبریری اثاثوں کی اجازت ہو۔ صارف اپ لوڈز وہیAssetRefشکل استعمال کرتے ہیں جو لائبریری اثاثے کرتے ہیں، اس لیے ٹولز انہیں یکساں طور پر سنبھالتے ہیں۔blocksایک دہرایا جانے والا فیلڈ-گروپ ہے — ایک ان پٹ کے اندر ایک منی-ٹیبل، سائیڈ پینل میں ایڈٹ ہوتا ہے، ایک ٹائپ شدہ/امتیازی ایڈ مینو اور فی-بلاک اثاثہ فیلڈز کے ساتھ۔ کینوس پر کسی رینڈر شدہ بلاک پر کلک کرنے سے اس بلاک کی قطار فوکس ہو جاتی ہے۔meeting-planner،chart-creator،event-name-badge،wayfinding-signage،color-block، اورdigi-adاستعمال کرتے ہیں۔vectorایک مقررہ اعداد کے سیٹ (مثلاً ایک transform) کو ایک مرکب کنٹرول میں گروپ کرتا ہے؛fileآن-ڈیوائس ٹرانسفارم یوٹیلیٹیز (مثلاًstrip-dataاورcompress-pdf) کے لیے صارف کی اپنی فائل کو میموری میں بائٹس کے طور پر رکھتا ہے۔
9. ٹیمپلیٹس منطق سے پاک ہیں (Handlebars، EJS نہیں)
Handlebars کو جان بوجھ کر EJS پر ترجیح دی گئی:
- منطق سے پاک۔ ٹیمپلیٹس غیر-ڈیولپرز تحریر کر سکتے ہیں۔
- بطورِ طے شدہ محفوظ۔
{{x}}HTML-ایسکیپ کرتا ہے؛{{{x}}}اختیاری خام ہے۔ - ٹیمپلیٹس میں کوئی صوابدیدی JS نہ ہونے کا مطلب ہے کہ فی-ٹیمپلیٹ کوئی XSS آڈٹ سطح نہیں۔
منطق hooks.js میں رہتی ہے جہاں یہ واضح اور قابلِ جائزہ ہے۔ دستیاب Handlebars ہیلپرز: {{default}}، {{upper}}، {{lower}}، {{eq}}، {{markdown}}، {{asset ref}}، {{asset ref "property"}} (نیز ڈیٹا-فارمیٹ ہیلپرز icsStamp/rfcText/csvCell جو ہم-درجہ .ics/.vcf/.csv ٹیمپلیٹس استعمال کرتے ہیں)۔
10. ٹولز ٹولز کو ترتیب دیتے ہیں
ایک ٹول کسی دوسرے ٹول کا رینڈر ایمبیڈ کر سکتا ہے، بغیر کسی ٹول-سے-ٹول امپورٹ کے — کمپوزیشن انجن حل کرتا ہے، کبھی ٹول کوڈ نہیں۔ دو سطحیں ہیں:
- اعلانیہ مینی فیسٹ —
composes: [{ id, tool, inputs, format?, width?, height? }]۔ انجن نامزد چائلڈ کو رینڈر کرتا ہے اور نتیجہ منطق سے پاک ٹیمپلیٹ میں{{asset <id>}}کے طور پر رکھتا ہے۔event-name-badgeآجqr-codeکو ایک SVG کے طور پر ترتیب دیتا ہے۔ - پورٹیبل ایمبیڈ URL —
<img src="https://lolly.tools/tool/<id>.<ext>?<inputs>">۔ شیل اس چائلڈ کو مقامی طور پر رینڈر کرتا ہے (مقامی رینڈر ریزولو ہونے تک ایک پلیس ہولڈر پکسل دکھتا ہے)؛lolly.toolsسے کبھی کچھ حاصل نہیں کیا جاتا۔
Slides ٹول اُسی دوسری سطح پر بنا ہے: کسی بھی سلائیڈ کا کوئی بھی سلاٹ تصویر کے بجائے کوئی دوسرا Lolly ٹول رکھ سکتا ہے۔
کسی بھی ٹول کا رینڈر ترتیب دیں: ایک SVG چائلڈ اس وقت ایک حقیقی ویکٹر رہتا ہے جب پیرنٹ SVG یا PDF میں ایکسپورٹ کرتا ہے اور PNG کے لیے واضح طور پر ریسٹرائز ہوتا ہے؛ PNG/JPG/WEBP چلڈرن بطور امیجز ایمبیڈ ہوتے ہیں۔ اس کے لیے compose کیپبیلٹی درکار ہے۔ ترتیب شدہ چلڈرن انٹرمیڈیٹ ہیں — کبھی واٹر مارک یا پرونینس-مہر نہیں کیے جاتے — اور کمپوزیشن خوش اسلوبی سے کم ہوتی ہے: ایک شیل جو چائلڈ رینڈر نہیں کر سکتا محض سلاٹ کو چھوڑ دیتا ہے اور پیرنٹ پھر بھی رینڈر ہوتا ہے۔
ہم نے واضح طور پر کیا نہ کرنے کا انتخاب کیا
- کوئی EJS نہیں / ٹیمپلیٹس میں کوئی صوابدیدی JS نہیں۔ XSS سطح صفر ہے۔ منطق
hooks.jsمیں رہتی ہے۔ - کوئی لازمی اثاثہ CMS نہیں۔ افراد اپنی تخلیقی فائلیں براہِ راست ایپ کے اندر اپنے کیٹلاگ میں شامل کرتے ہیں (کیٹلاگ ویو اور Brand Studio) اور Layout Studio سیشنز محفوظ کر کے اپنے ٹولز خود تحریر کرتے ہیں — کوئی سرور نہیں، کوئی ایڈمن کنسول نہیں۔ ایک مشترکہ، زیرِ نظم کیٹلاگ کے لیے، کوئی تنظیم اثاثہ ڈائریکٹری کو git کے طور پر منظم کر سکتی ہے اور اپ ڈیٹس کو PR ریویو کے ذریعے گیٹ کر سکتی ہے — یہ ایک دستیاب گورننس ماڈل ہے، ایپ کی ضرورت نہیں۔
- کوئی جبری RBAC نہیں۔ کھلی ایپ بطورِ طے شدہ عوامی-رسائی ہے؛ برانڈ خطرہ میچورٹی ٹیگز + واٹر مارکس سے سنبھالا جاتا ہے۔ ایک تنظیم جو سخت تر کنٹرول چاہتی ہو، وہ اپنی خود کی auth اور اوپر بیان کردہ git-ریویو شدہ کیٹلاگ کی تہیں لگاتی ہے۔
- کوئی مرکزی ڈیٹا بیس نہیں۔ تمام صارف سٹیٹ فی-ڈیوائس ہے۔ SUSE ID انٹیگریشن روڈ میپ پر ہے لیکن لانچ بلاکر نہیں۔
- کوئی مشترکہ tools/engine کوڈ پاتھ نہیں۔ انجن اوپن سورس ہے؛
tools/اورassets/اپنی ریپوزٹریوں میں SUSE کا ملکیتی مواد رہتے ہیں۔ علیحدگی نافذ کی جاتی ہے (کوئی کراس-امپورٹ نہیں) تاکہ تقسیم صاف رہے۔
لائف سائیکل، سرے سے سرے تک
ایک صارف lolly.tools/#/tool/qr-code?url=https://suse.com&ecl=H کھولتا ہے:
- بوٹ۔ web شیل IndexedDB کھولتا ہے، کیپبیلٹی برج بناتا ہے، ٹول اور اثاثہ کیٹلاگ سنک کرتا ہے (یا آف لائن ہونے پر کیش سے لوڈ کرتا ہے)۔
- روٹ۔ URL ہیش →
toolویو، جس میںqr-codeاور URL پیرامز نکالے جاتے ہیں۔ - لوڈ۔
loadTool('qr-code', fetchFile)tool.jsonحاصل کرتا ہے، JSON Schema کے خلاف توثیق کرتا ہے،template.html،styles.css، اورhooks.jsسورس حاصل کرتا ہے۔ - URL سٹیٹ پارس کریں۔
parseUrlStateURL پیرامز کو ابتدائی ان پٹ اقدار میں تبدیل کرتا ہے۔ اثاثہ ریفز (?logo=suse/logo/primary) ہلکے پھلکے{ id, _unresolved: true }آبجیکٹس کے طور پر پارس ہوتے ہیں۔ - رن ٹائم۔
createRuntime(tool, host, initialValues)ان پٹ ماڈل بناتا ہے (پروفائل ڈیٹا، ڈیفالٹس، اور ابتدائی اقدار کو ضم کرتے ہوئے)،host.assets.get()کے ذریعے اثاثہ ریفز ریزولو کرتا ہے، ہکس لوڈ کرتا ہے (کلوژر-اسکوپڈhost، سینڈ باکسڈ نہیں)،hooks.onInitکال کرتا ہے۔ - رینڈر۔ شیل رن ٹائم کو سبسکرائب کرتا ہے؛ ہر سٹیٹ تبدیلی پر یہ
{ model, hydrated }وصول کرتا ہے۔ یہ ماڈل سے ان پٹ کنٹرولز رینڈر کرتا ہے اور ہائیڈریٹڈ ٹیمپلیٹ HTML کو#tool-canvasمیں لکھتا ہے۔ - تعامل۔ صارف کسی ان پٹ میں ٹائپ کرتا ہے →
runtime.setInput(id, value)→ رکاوٹیں لاگو →hooks.onInputکال ہوتا ہے → دوبارہ-ہائیڈریٹ → دوبارہ-رینڈر۔ کینوس لائیو اپ ڈیٹ ہوتا ہے۔ - ایکسپورٹ۔ صارف Download(PNG) پر کلک کرتا ہے →
runtime.export(canvasNode, 'png')→host.export.render(dom-to-image-more کے ذریعے ریسٹرائز؛ SVG/PDF مخصوص DOM-واکنگ ویکٹرائزرز سے گزرتے ہیں) → blob →host.export.download۔ فارمیٹ کی وہ رینج جس میں ایک ٹول شامل ہو سکتا ہے وسیع ہے:svg،png،jpg/jpeg،webp،avif،pdf، ویکٹر فارمیٹسemf،eps، نیز پرنٹ/CMYK فارمیٹسpdf-cmyk،cmyk-tiff،eps-cmyk؛ ویڈیو فارمیٹسwebm،mp4،gif؛ اور ڈیٹا/ٹیکسٹ فارمیٹسhtml،md،txt،json،csv،ics،vcf،ico،zip۔ (وہ ٹولز جوrender.export: falseسیٹ کرتے ہیں — مثلاً کلر پیلیٹ، کاؤنٹ ڈاؤن ٹائمر، اسٹرپ ہڈن ڈیٹا، ٹیکسٹ ہیلپر، کمپریس PDF — ڈاؤن لوڈ/فارمیٹ/ڈائمینشن کنٹرولز چھپاتے ہیں۔) طبعی یونٹس یہاں ہر فارمیٹ کے مطابق تبدیل ہوتے ہیں (PDF → حقیقی پیج پوائنٹس، raster → DPI پر پکسلز ایکpHYsچنک کے ساتھ)۔ تصنیف/پرونینس میٹا ڈیٹا (مصنف، ٹول، سورس —engine/src/metadata.tsبناتا ہے) ہر فارمیٹ کے مطابق ایمبیڈ ہوتا ہے: PNG iTXt، JPEG EXIF، PDF info dict، SVG<metadata>، GIF comment۔ تجرباتی ٹولز کو ہوسٹ کی طرف سے ایک واٹر مارک ملتا ہے، ٹول کی طرف سے نہیں۔
Tauri میں وہی لائف سائیکل۔ CLI میں وہی لائف سائیکل — jsdom ہیڈلیس DOM فراہم کرتا ہے؛ آؤٹ پٹ کسی فائل یا stdout پر جاتا ہے۔
اوپن-سورس حیثیت
engine/، shells/، schemas/، اور docs/ ڈائریکٹریز MPL-2.0 کے تحت اوپن سورس ہیں — برانڈ ٹولنگ کے لیے ایک وینڈر-نیوٹرل اسکیفولڈنگ پلیٹ فارم، جس میں ہر قابلِ فراہمی یونٹ github.com/lolly-tools کے تحت اپنی ریپوزٹری میں تقسیم ہے۔ tools/ اور catalog/assets/ SUSE-مخصوص مواد ہیں اور SUSE کے ملکیتی رہتے ہیں (جملہ حقوق محفوظ — ہر ریپو کی NOTICE.md دیکھیں)؛ یہ MPL کے تحت نہیں آتے۔
تقسیم نافذ کی جاتی ہے — engine/ سے tools/ یا assets/ تک کوئی کراس-امپورٹ نہیں — تاکہ پلیٹ فارم/مواد کی حد صاف رہے۔
روڈ میپ
| سنگِ میل | ہدف | کیا |
|---|---|---|
| ابتدائی ٹولز | ✅ مکمل | QR کوڈ، کوٹ کارڈ، ای میل سگنیچر، ڈے بریف، کوڈ کینوس، کاؤنٹ ڈاؤن ٹائمر، کلر پیلیٹ، برانڈ لاک اپ، بیگ ویڈیو، چارٹ کری ایٹر، فلٹر: ڈوئوٹون، میٹنگ پلانر — web شیل لائیو |
| موجودہ ٹولنگ کو بہتر بنائیں | 2026 کا وسط ✅ مکمل | ڈاؤن لوڈ ایبل آف لائن ایپ (Tauri)؛ اضافی ملازم اور ایونٹ ٹولز؛ مزید بھرپور ایکسپورٹ پائپ لائن (text-to-path استحکام، میٹا ڈیٹا، اضافی فارمیٹس — plans.md دیکھیں) |
| انجن کو اوپن سورس کریں | 2026 کا آخر ✅ مکمل | انجن، شیلز، اسکیماز، ڈاکس عوامی ہو جاتے ہیں — برانڈڈ ٹولز/اثاثے نہیں |
| ڈیوائس-سے-ڈیوائس منتقلی | ✅ مکمل | پورٹیبل lolly-backup بنڈل پروفائل، محفوظ سیشنز، اپ لوڈ کردہ امیجز اور ترجیحات کو کسی بھی دو انسٹالز کے درمیان لے جاتا ہے — آف لائن یا آن لائن، کوئی اکاؤنٹ نہیں۔ فارورڈ-کمپیٹیبل، انٹیگریٹی-چیکڈ اینویلپ (تفصیل: docs/data-transfer.md) |
| باضابطہ ٹول روڈ میپ قائم کریں | 2026 کا آخر | کسٹمر ریفرنس کٹس، AI ڈیزائن انجیسٹ، GET/URL درخواست موڈ |
| آن-ڈیوائس پرائیویسی یوٹیلیٹیز | 🚧 جاری ہے | مواد-ٹرانسفارم ٹولز جو آپ کی اپنی فائل کو مقامی طور پر پروسیس کرتے ہیں (فائل اِن → صاف فائل آؤٹ)، یک-مقصدی SaaS کو ایکسفلٹریشن کی جگہ لیتے ہیں۔ مکمل: file ان پٹ ٹائپ + exportFile ٹرانسفارم پاتھ + privacy:"on-device" کنونشنز (کوئی واٹر مارک/پرونینس نہیں) + اسٹرپ ہڈن ڈیٹا (JPEG/PNG/SVG/PDF میٹا ڈیٹا، PDF host.pdf برج کے ذریعے) اور ٹیکسٹ ہیلپر (روزمرہ کے پیسٹ-اِن-ٹو-اے-ویب سائٹ کاموں کے لیے آن-ڈیوائس ورک بینچ — JSON فارمیٹ، JWT ڈی کوڈ، Base64، URL انکوڈ/ڈی کوڈ، SHA ہیشنگ، نیز ایک Novelty گروپ)۔ اگلا: crop/resize، امیج convert/compress؛ پھر ایک host.image کوڈیک برج (تفصیل: plans/exfiltration-app-content.md) |
| ڈیزائن ٹوکنز (DTCG) | 🚧 رنگ فراہم ہوا | برانڈ پرمیٹوز بطور کینونیکل W3C Design Tokens (DTCG) — وہ فارمیٹ جو Penpot امپورٹ/ایکسپورٹ کرتا ہے۔ مکمل: رنگ ٹوکنز (suse/tokens/brand)، host.tokens برج، پکر سواچز + ریفرنس-لنکڈ اقدار (تفصیل: docs/design-tokens.md)۔ اگلا: ڈائمینشن/ٹائپ ٹوکنز، Penpot امپورٹ/ایکسپورٹ، ٹرانسفر بنڈل میں صارف ٹوکنز (tokens.json) |
| MCP ایجنٹ اینڈ پوائنٹ (رینڈر) | ✅ مکمل | ایک MCP سرور کیٹلاگ + رینڈر پاتھ کو قابلِ کال ٹولز (lolly_list_tools / describe_tool / build_url / render / transform) کے طور پر ظاہر کرتا ہے تاکہ کوئی بھی ایجنٹ مکمل، قاعدہ-پابند اثاثے تیار کر سکے — اسے کسی بھی MCP کلائنٹ میں بطور کسٹم کنیکٹر (OAuth 2.1) شامل کریں یا کسی CLI/HTTP کلائنٹ کو bearer ٹوکن کے ساتھ اس کی طرف پوائنٹ کریں۔ mcp.lolly.tools پر لائیو (مکمل اینڈ پوائنٹ: ایک میزبان ہیڈلیس براؤزر کے ذریعے raster/PDF/اینیمیشن/ویڈیو) اور lolly.tools/api/mcp (سرور لیس براؤزر-فری ٹیئر)۔ نیچے دیے گئے Penpot authoring MCP سے مختلف، جو ٹول تخلیق کے بارے میں ہے (تفصیل: plans/mcp-server.md؛ گائیڈ: docs/mcp.md + docs/ai-agents.md) |
| Penpot فائل انجیسٹ بطور ٹولز | 2027+ | ایک Penpot فائل امپورٹ کریں اور اسے ایک Lolly ٹول کے طور پر پیش کریں (اعلانیہ، رکاوٹ-اول)، Penpot میں تحریر کردہ ڈیزائنز کو ڈیٹرمنسٹک جنریٹرز میں بدلتے ہوئے |
| MCP + Penpot ایکسٹینشن (صرف-آن لائن تحریر) | 2027+ | ایک Penpot MCP سرور AI کے ساتھ نئے ٹولز مرتب کرتا ہے — ڈیٹرمنسٹک ٹیمپلیٹس بنانے کا سب سے بصری طریقہ: ایک برانڈ-آگاہ پہلا دور، انسان کے ساتھ لوپ میں کامل کیا گیا، وقت کے ساتھ ون-شاٹ نئے سیاق و سباق کو نشانہ بناتے ہوئے۔ ٹول تخلیق صرف-آن لائن ہے؛ جو ٹولز یہ تیار کرتا ہے وہ کہیں بھی چلتے ہیں |
| RBAC + SUSE ID | 2027+ | مخصوص ٹولز کو SUSE ID کے پیچھے گیٹ کریں؛ ملٹی-ڈیوائس محفوظ سٹیٹ؛ Google Drive انجیسٹ/ایکسپورٹ |
جہاں انجن ختم ہوتا ہے اور ہوسٹ شروع ہوتا ہے
اگر آپ اسے خالص ڈیٹا + Handlebars میں بیان کر سکتے ہیں → انجن۔ اگر یہ DOM، فائل سسٹم، نیٹ ورک، یا کسی براؤزر/OS API کو چھوتا ہے → ہوسٹ۔
لکیر جان بوجھ کر واضح ہے۔ انجن اوپن-سورس حصہ ہے۔ ہر وہ چیز جو SUSE، مخصوص پلیٹ فارمز، یا رن ٹائم ماحول کے بارے میں جانتی ہے، اس سے باہر رہتی ہے۔