یہ دستاویز Lolly پلیٹ فارم کے مقصد، ڈھانچے اور تعمیراتی فیصلوں کو قید کرتی ہے۔ یہ پروڈکٹ وژن اور کوڈبیس کی موجودہ حالت دونوں کی عکاسی کرتی ہے۔
حیثیت: Lolly ریلیز ہو چکی ہے۔ ورژن 1.0 30 اگست 2026 کو MPL-2.0 کے تحت اوپن سورس کے طور پر جاری ہوا، اور فیچرز، ڈیفالٹس اور ٹول کیٹلاگ ایک ریلیز سے دوسری ریلیز میں اب بھی بدلتے ہیں۔ انجن ڈیٹرمنسٹک ہے، اور ہر شیل کے پیچھے ایک ہی رینڈر پاتھ ہے۔ اس کی سیکیورٹی کا ابھی تک کوئی آزاد آڈٹ نہیں ہوا، اور اپنانے کے شواہد چند مہینے پرانے ہیں۔ موجودہ صورتِ حال اور اپنانے کو ناپنے کے طریقے کے لیے اپنانا اور نگرانی دیکھیں۔
یہ صفحہ کیسے پڑھیں۔ اس میں ترتیب سے دو قسم کا مواد ہے۔ پہلا نصف ہے یہ کیوں موجود ہے: مسئلہ، پوزیشننگ اور وہ زندگی کا سفر جو ایک اثاثہ طے کرتا ہے۔ بڑی تصویر سے آگے یہ ہے پرتیں کیسے فٹ ہوتی ہیں: تعاون کاروں کے لیے آرکیٹیکچر دستاویز، جس میں انجن/شیل/پیک علیحدگی، ریپوزٹری لے آؤٹ، ڈیلیوری اہداف اور وہ عہد شامل ہیں جو پلیٹ فارم میں ہر تبدیلی کو محدود کرتے ہیں۔ اگر آپ یہاں پروڈکٹ سمجھنے کے بجائے کوڈبیس تبدیل کرنے کے لیے ہیں، تو بڑی تصویر سے شروع کریں۔
دو ساتھی دستاویزات اس صفحے سے زیادہ گہرائی میں جاتی ہیں۔ ریپوزٹری میں
engine/README.mdانجن کا ماڈیول-بہ-ماڈیول نقشہ ہے، جس میں ہر ماڈیول اور یہ کیا پارس یا لکھتا ہے اس کی ایک تیار شدہ جدول ہے۔ خطرے کا ماڈل اور اعتماد کی حدود وہی آرکیٹیکچر ہے جو اعتماد کی حدود کے طور پر پڑھی گئی ہے، اور یہ کسی بھی سوال کے لیے صحیح صفحہ ہے کہ انجن کیا غیر معتبر سمجھتا ہے۔
یہ کیوں موجود ہے
قابلِ تکرار تخلیقی کام ہر بار ماہر ہاتھوں کو جواز دینے کے لیے بہت زیادہ متوقع ہے، اور بغیر حفاظتی اقدامات کے سونپنے کے لیے بہت زیادہ معیار-حساس ہے۔ اگر اسے یونہی چھوڑ دیا جائے تو یہ تین طریقوں میں سے کسی ایک میں جاتا ہے: سست، غیر مستقل، یا کسی وینڈر کے ٹیمپلیٹس میں بند۔
یہ پلیٹ فارم اس کا براہ راست جواب ہے:
بڑے پیمانے پر پروگرام ایبل تخلیقی اور مواد - ان پٹس سے تیار کردہ اثاثے، جن کے قواعد ایک بار طے کیے جاتے ہیں، جسے بھی اُن کی ضرورت ہو اُس کے لیے۔
Lolly وہ جگہ نہیں جہاں ڈیزائن سسٹم ایجاد ہوتا ہے - یہ وہ جگہ ہے جہاں وہ تیار ہوتا ہے۔ اسے ڈیزائن کے لیے ایک وینڈنگ مشین کی طرح سمجھیں: انتخاب کریں، نتیجہ حاصل کریں۔ ہر بار۔ انجن آپ کے سامنے موجود ہارڈویئر پر ہر فارمیٹ کی زیادہ سے زیادہ ممکنہ کوالٹی کے لیے کام کرتا ہے، اور وہی انجن ہر اُس سطح پر وہی فائل بناتا ہے جہاں یہ چلتا ہے۔
نتیجہ ہے کثرت: ہر تقریب کے پاس درست سائنیج ہے، ہر CVE الرٹ برانڈ اسٹائل سے میچ کرتا ہے، ہر لیبل صاف پرنٹ ہوتا ہے، ہر ای میل دستخط تازہ ہے - یہ سب اُن ٹولز سے جو پہلے ہی قواعد اپنے اندر رکھتے ہیں۔ پلیٹ فارم بار بار پیش آنے والے آپریشنلائزڈ تخلیقی کام کو سنبھالتا ہے۔ یہ جان بوجھ کر ایک مخصوص تخلیقی ٹول نہیں ہے - ڈیزائنرز اب بھی فلیگ شپ کام کے مالک رہتے ہیں۔
امکانی طور پر ایجاد کریں، ڈیٹرمنسٹک طور پر پیمانہ بنائیں
تخلیقی پائپ لائن میں AI کے بارے میں ہر بحث ایک ہی سوال پر رک جاتی ہے: اس میں کون سا حصہ مشین کا کام ہے؟ یہ ایک پرانا سوال ہے جس کا جواب طے شدہ ہے۔ کاتب اور مصور پہلے ہی دو آلات کے درمیان کام کرتے تھے - ڈھیلا خاکہ، جہاں کچھ بھی طے نہیں تھا اور ہر چیز آزمائی جا سکتی تھی، اور پرنٹنگ پریس، جو بالکل اس لیے خوفناک تھی کہ یہ عزم کرتی تھی۔ خاکے وہ جگہ تھے جہاں فن ہوتا تھا۔ پریس وہ طریقہ تھی جس سے یہ کسی تک پہنچتا تھا۔ کسی نے بھی ان دونوں کو الجھایا نہیں، اور دونوں آگے بڑھتے رہے - نئی سیاہی، نئے حروف، نئے پریسز - ہر ایک ہنر اور اس ارادے کے ساتھ ہم آہنگی میں بہتر ہوتا گیا جس کی وہ خدمت کرتا تھا۔
Lolly وہی حد کھینچتا ہے۔ امکانی طور پر تلاش کریں: ایک ماڈل، ایک ڈیزائنر، ایک کچا خیال، ایک پرامپٹ جو کہیں ایسی جگہ جاتا ہے جس کی کسی نے منصوبہ بندی نہیں کی تھی۔ پھر ڈیٹرمنسٹک طور پر پیمانہ بنائیں - جو چیز کئی آؤٹ پٹس تک پہنچتی ہے وہ ایک ٹول ہے، اور ایک ٹول ہر بار انہی ان پٹس سے یکساں رینڈر ہوتا ہے جنہیں آپ پڑھ سکتے ہیں۔ تلاش آزاد رہتی ہے کیونکہ اس کے بعد کچھ بھی اس پر منحصر نہیں ہوتا کہ یہ دو بار یکساں طور پر اترے۔ آؤٹ پٹ اعتماد کماتا ہے کیونکہ یہ اندازہ نہیں ہے۔ AI تجربے کو پیشین گوئی، دوبارہ پیدا کیے جانے کے قابل نتائج میں لانا کوئی نیا نظم و ضبط نہیں ہے؛ یہ وہی محنت کی تقسیم ہے جس نے پرنٹ شدہ کام کو پہلی جگہ قابلِ اعتماد بنایا۔
تخلیقی عمل پر اعتماد کریں، سختی کے ساتھ پیمانہ بنائیں۔
متبادلات کے مقابلے میں
Lolly includes lolly.work, the same project's separately deployed organisation service. Local creation needs no account; shared work and server rendering use the configured instance. Competitor scores: August 2026. Lolly coverage: 28 September 2026.
| Capability | Lolly+ lolly.work | Penpotopen design | CanvaAffinity Cavalry |
Adobedesktop pro | Brand DAMFrontify Bynder |
Cloudinarymedia pipeline | Figmaonline pro | Render APIsBannerbear Placid Creatomate |
|---|---|---|---|---|---|---|---|---|
| Overall completenessunweighted mean - weight rows for your own context · columns are sorted by this row | 84 | 70 | 57 | 48 | 41 | 41 | 41 | 34 |
Production maturity & track recordCanva, Adobe, Figma, Bynder/Frontify: a decade-plus at massive scale. Render APIs: years in production pipelines. Penpot: shipping, large community, younger at enterprise scale. Lolly: version 1.0 public since 30 August 2026 under MPL-2.0, and SUSE runs it as an internal deployment; no usage data is shared yet and there are no public case studies yet. Cloudinary: 2012, enterprise media infrastructure at global scale. |
25 | 75 | 100 | 100 | 100 | 100 | 100 | 75 |
Mass generation from data (CSV / API)Lolly: batch grid and CLI, plus lolly.work's recoverable server jobs and batches with retries, cancellation and retained outputs. Canva: Bulk Create + Autofill API - real, but Enterprise-gated, async, text/image fields only; Affinity Publisher adds desktop data merge. Adobe: InDesign data merge and scripting. Figma: Buzz fills templates from CSV or XLSX, free in beta (Aug 2026) - cloud- and account-gated, 50. Penpot: open API/MCP, not purpose-built. Render APIs: this is their entire product - account- and cloud-gated, so 75 under the method rule. DAM: Studio-style batch create and resize. Cloudinary: URL-driven overlays and named transforms derive variants at scale - account-gated, 75. |
100 | 50 | 50 | 50 | 75 | 75 | 50 | 75 |
Offline & air-gap operationLolly: standalone creation works offline once its assets are available; lolly.work's organisation services need a reachable instance, which can run on an internal network. The Canva column is scored on its best family member: Affinity (free since Oct 2025) runs offline as a desktop suite once a verified account activates it - 75, the same deduction Adobe takes. Canva's own Offline (2026) still edits pre-synced designs only, per device, in a 14-day window. Adobe: desktop apps run offline; licensing phones home. Figma: cached-file viewing and limited editing. Penpot: self-host on your infra behind a firewall (server required). Cloud APIs and DAM: none. |
100 | 75 | 75 | 75 | 0 | 0 | 25 | 0 |
On-device rendering - data never leavesLolly: local rendering and conversion in-browser or CLI need no upload. Choosing lolly.work's shared storage, work collabs or server rendering sends the relevant data to the configured instance. Adobe: local desktop rendering, but cloud services and telemetry in the suite. Figma: canvas renders locally, files live in Figma's cloud. Penpot: 90 - rendering happens in the browser and the save target is a server that can be your own sovereign private cloud, even your own laptop, with private export throughout; only the server hop separates it from Lolly. Canva itself is server-side by design; the column's 75 is Affinity - local desktop rendering, account activation and telemetry, the same shape as Adobe. Render APIs, DAM: server-side by design. |
100 | 90 | 75 | 75 | 0 | 0 | 25 | 0 |
Hard brand constraints (structural)Lolly: templates fix layout rules and expose permitted inputs. lolly.work adds group access, input policies, shared catalogues, approvals and audit records. Copy and usage rights can still need review. Canva: element locks - permission-based, admin-set and static: no template logic such as conditional logo switching or responsive recomposition at fill time, and Canva AI does not yet respect Brand Controls - 50. Render APIs: templates are fixed (only declared fields vary) but no governance layer. DAM: locked templates with restrictions. Figma: Buzz templates hold locked guidelines at fill time; the design surface stays review-enforced - 50. Penpot: tokens and systems enforced by review, not runtime. Adobe: libraries, little enforcement. Cloudinary: presets and Enterprise-gated transformation templates fix operations, not brand layout - 50. |
100 | 50 | 50 | 25 | 75 | 50 | 50 | 75 |
C2PA provenance, signed at creationAdobe: the broadest shipped implementation (Photoshop, Lightroom, Premiere, Firefly) - signing happens locally in the desktop apps and in the cloud for the Content Authenticity web app, and nothing signs without an Adobe account and an Adobe-provisioned identity, so it is account-gated end to end: 75 under the method rule. Lolly: optional on-device signing without an account, plus lolly.work server signing with a configured organisation identity. A verifier must trust the signer's root to show a trusted identity. Version 1.0 is public and SUSE runs it internally, but no usage data is shared yet, so 75. Penpot: 50 via the official Lolly Export plugin - the same on-device engine signing Lolly uses, opt-in, as in Lolly (and disclosed plainly: it is Lolly's own plugin). No evidence of C2PA writing in Canva, Figma, render APIs or DAM as of Aug 2026. Cloudinary: 50 - signs images on delivery (fl_c2pa, CAI member since 2020), attesting delivery by Cloudinary rather than creation by you. |
75 | 50 | 0 | 75 | 0 | 50 | 0 | 0 |
CLI, pipeline & AI-agent automationLolly: CLI, TUI, MCP server and URL mode, plus lolly.work's authenticated render API, recoverable batches and governed delivery. One engine across the local and server paths. Render APIs: API-first, webhooks, integrations - account- and cloud-gated, so 75 under the method rule. Penpot: open API, plugins, official MCP server. Canva: Connect API - Enterprise-gated, async, rate-limited. Adobe: UXP/ExtendScript plus Firefly APIs. Figma: strong REST/plugin API, no render pipeline. DAM: asset-management APIs. Cloudinary: API-first media pipeline - account-gated, 75. |
100 | 75 | 50 | 50 | 50 | 75 | 50 | 75 |
Live collaboration (real-time co-editing)Figma: the scale benchmark - 200 simultaneous editors, up to 500 people in a file - account and cloud required. Canva: mature real-time editing across the product, same precondition. Penpot: real-time multiplayer with live cursors; self-hosting lifts the vendor-account precondition, but a server is still required. Lolly: direct two-device private collabs without an account, plus authenticated work collabs through lolly.work with shared edits, cursors and saved team sessions. Partial reflects the current single-node work deployment and limited operating history. Private collabs work without internet on a shared network; work collabs need the organisation's instance. Adobe: Live Co-Editing in beta, cloud documents only. Render APIs: no editing surface. DAM: comments and approvals, not canvas co-editing. Cloudinary: DAM comments and workflows, no canvas co-editing. |
50 | 75 | 75 | 25 | 25 | 25 | 75 | 0 |
No design skill requiredCanva: the category benchmark for ease. DAM: fill a locked template. Lolly: fill in fields using an existing tool, or publish a tool from Design through Share with rules. lolly.work manages access and input policy for the team. Render APIs: swaps design skill for developer skill. Adobe, Figma, Penpot: professional tools. Cloudinary: the media library is easy; transformations are developer territory. |
100 | 25 | 100 | 25 | 100 | 50 | 25 | 50 |
Open source, self-hosted, no lock-inPenpot: MPL-licensed, 51k+ stars, self-host via Docker/K8s - fully verifiable today. Lolly and lolly.work: MPL-2.0 open source in separate repositories, both self-hostable. lolly.work provides the organisation services as part of the project. The current 75 reflects the young project and limited deployment history. Everything else is proprietary SaaS or proprietary desktop. |
75 | 100 | 0 | 0 | 0 | 0 | 0 | 0 |
Cost at production scaleLolly + lolly.work and Penpot: no per-seat software licence charge for the open-source self-hosted path; hardware, storage and operations remain costs. Render APIs: metered - roughly $0.005–0.049 per image, credits often expiring monthly. Canva/Figma: per-seat; Canva's automation needs Enterprise, though Affinity itself is free since Oct 2025. Adobe: premium per-seat suite. DAM: sales-led enterprise quotes, MAU or seat models. Cloudinary: credit-metered across transforms, storage and bandwidth - 25. |
100 | 100 | 50 | 25 | 25 | 25 | 50 | 25 |
Annual medium enterprise spendIndicative list-price arithmetic for a medium enterprise - think 500-5000 people - August 2026: a guess range, not a quote; deals vary and the seat mix dominates. Ring = how much of the board's largest annual spend (US$500k) you keep; the number in the ring is each range's upper bound. Canva (US$75k-400k; Affinity free since Oct 2025 pulls the design-seat share down), Adobe (US$100k-500k) and Figma (US$30k-250k) assume the realistic creative-seat share of an organisation this size - tens to hundreds of seats, not a licence for every employee. Render APIs price by usage (US$5k-60k). DAM is quote-only, commonly US$50k-250k and up. Penpot is hand-set at 99: "your server" can be your own laptop - a small technical hurdle at well under 1% of an Adobe-scale spend. Lolly + lolly.work: US$0 in software licence charges for self-hosting. The figure excludes devices, organisation hosting, storage, support and administration; these need a separate budget. Standalone Lolly does not need the organisation service. Cloudinary: US$30k-150k, credit-based; enterprise contracts commonly sit near US$82k. |
$0 | $0 | $400k | $500k | $250k+ | $150k | $250k | $60k |
آج کے تخلیقی ٹولز میں صلاحیت کی مکملیت، اگست 2026 میں تحقیق شدہ۔ اسکورنگ: 0 غیر موجود، 25 حل جیسا معیار، 50 حقیقی لیکن محدود یا جزوی، 75 مضبوط لیکن احتیاط کے ساتھ، 100 بنیادی مہارت۔
signed by Lollypositioning-comparison.htmlHTMLpixels, not shapes40 KBAI generatedgenerated by GPT-6خود جانچیںدستخط شدہ فائل حاصل کریںفرق واضح ہے: آج کوئی بھی شپ ہونے والی چیز ہمیں پابندی-پہلے، آف لائن-قابل، کم-مہارت، اندرونی طور پر قابلِ رسائی آؤٹ پٹ نہیں دیتی۔ Lolly میں ایک کھلا کینوس بھی شامل ہے - Design - جہاں رنگ، ٹائپ اور اثاثے برانڈ گلوبلز کے مطابق ہوتے ہیں، تو آزاد ترتیب پابندی-پہلے رہتی ہے۔ یہ جو نہیں ہے وہ ایک غیر محدود ڈیزائن سوٹ ہے: ڈیزائنرز مخصوص فلیگ شپ کام کے لیے Illustrator اور Figma استعمال کرتے رہتے ہیں۔ اس ٹول سے ترتیبات جمع کی جا سکتی ہیں۔
signed by Lollyvector SVG367 paths~62k nodes773 groups3 images1,453 KBخود جانچیںدستخط شدہ فائل حاصل کریں
signed by Lollyvector SVG367 paths~62k nodes776 groups3 images1,454 KBخود جانچیںدستخط شدہ فائل حاصل کریں
اس کے لیے استعمال کریں: آپریشنلائزڈ تخلیقی اثاثوں کی تیز تخلیق - ایونٹ ٹائلز، نام بیجز، دستخط، CVE الرٹس، QR کوڈز، سوشل کارڈز، کنسائنمنٹ لیبلز، منظم رپورٹس۔
اس کے لیے استعمال نہ کریں: مخصوص ہیرو مواد۔
ایک مہم کی زندگی کا سفر
یہ دیکھنے کا سب سے واضح طریقہ کہ Lolly کیا ہے وہ خصوصیات کی فہرست نہیں ہے - یہ ہے کہ ایک واحد اثاثے کی پیروی کی جائے جیسے یہ ہاتھ سے ہاتھ گزرتا ہے۔ ایک لوکلائزڈ مہم کارڈ کو تنظیم کے ذریعے حرکت کرتے دیکھیں:
- تخلیق کار قواعد طے کرتا ہے۔ ایک ڈیزائنر بنیادی ٹیمپلیٹ Design ٹول میں تحریر کرتا ہے، برانڈ کی ٹائپوگرافی اور رنگ متغیرات کو ہارڈ-کوڈ کرتے ہوئے۔ وہ ایک کارڈ نہیں بنا رہے - وہ بنیادی کام ایک بار کر رہے ہیں تاکہ انہیں دوبارہ کبھی اسے دستی طور پر لوکلائز نہ کرنا پڑے۔
- ڈیولپر اسے پیمانہ دیتا ہے۔ وہی ٹیمپلیٹ CLI کے ذریعے ایک رات کی پائپ لائن میں تار دیا جاتا ہے، تاکہ ایک تازہ چارٹ یا ایک نئی زبان کا ورژن خودکار طور پر تخلیق ہو - کوئی ڈیزائنر فائل دوبارہ نہیں کھولتا۔
- پروڈیوسر بس اسے استعمال کرتا ہے۔ ایک سیلز نمائندہ، ہوائی جہاز میں آف لائن، وہی ٹول کھولتا ہے اور کلائنٹ میٹنگ کے لیے بالکل برانڈ کے مطابق ڈیک تخلیق کرتا ہے۔ کوئی ڈیزائن مہارت نہیں، کوئی نیٹ ورک نہیں، کوئی انتظار نہیں۔
مرحلہ دو میں "تازہ چارٹ" اسی طرح کا ایک رینڈر ہے، جو ایک ڈیٹا اسٹرنگ اور چند پیرامیٹرز سے تیار کیا گیا ہے بغیر کسی کے ڈیزائن فائل کھولے:
signed by Lollyvector SVG15 paths~1.3k nodes4 groups20 KBخود جانچیںدستخط شدہ فائل حاصل کریں
signed by Lollyvector SVG15 paths~1.3k nodes4 groups20 KBخود جانچیںدستخط شدہ فائل حاصل کریں
نکتہ یہ نہیں ہے کہ Lolly ڈیزائنرز کے لیے اچھا ہے اور ڈیولپرز کے لیے اچھا ہے اور سیلز کے لیے اچھا ہے، ہر ایک الگ الگ۔ یہ ایک ریلے ریس ہے: تخلیق کار کا ابتدائی کام ڈیولپر کے ذریعے پیمانہ بنایا جاتا ہے، جو بدلے میں پروڈیوسر کو بااختیار بناتا ہے۔ ہوائی جہاز میں غیر تکنیکی نمائندے کے لیے بے تکلف تجربہ صرف اس لیے ممکن ہے کیونکہ ڈیزائنر نے سختی طے کی اور ڈیولپر نے اسے تعینات کیا۔
یہی طاقت کا ضارب ہے۔ Lolly الگ کرداروں کے لیے الگ ٹولز کی دراز نہیں ہے - یہ ایک ڈیٹرمنسٹک اثاثہ زندگی کا سفر ہے جسے ہر کردار چھوتا ہے، اور جس ہاتھ سے یہ گزرتا ہے وہ پچھلے کی قدر کو ضرب دیتا ہے۔
ایک ٹول، کئی آؤٹ پٹس
برانڈ کے اصول ٹول میں رہتے ہیں، ہر اُس فائل میں نہیں جسے یہ بناتا ہے (دیکھیں Lolly کیسے موازنہ کرتا ہے)۔ ٹول کو ایک بار درست کر لیں اور ہر آؤٹ پٹ وہی ٹائپ، رنگ اور فاصلہ بندی وراثت میں پاتا ہے، چاہے وہ ایک کارڈ ہو یا ایک درجن زبانوں میں قطاروں کی اسپریڈشیٹ۔ آپ اپنے کام کی جانچ کس طرح کرتے ہیں، اور کون کرتا ہے، یہ آپ ہی پر منحصر رہتا ہے؛ Lolly جانچنے کے قابل چیز کو چھوٹا اور آؤٹ پٹ بنانے کو تیز تر بنا دیتا ہے۔
وہی ڈیٹرمنسٹک ٹول تین طریقوں سے اُس پیمانے تک پہنچتا ہے، سب ایک جیسا آؤٹ پٹ تیار کرتے ہوئے:
- ایک شخص، ایپ میں۔
/proبیچ گرڈ: قطاریں پیسٹ یا درآمد کریں، ہر قطار کے لیے ایک مکمل اثاثہ حاصل کریں، زپ ڈاؤن لوڈ کریں۔ کوئی ڈیزائن مہارت نہیں، کوئی انتظار نہیں۔ - ایک ڈیولپر، کمانڈ لائن سے۔ CLI وہی انجن اور وہی رینڈر پاتھ ہیڈ لیس چلاتا ہے، تو ٹول کو ایک اسکرپٹ یا رات کی پائپ لائن میں ہر قطار پر ترتیب دیا جا سکتا ہے۔ ایک لوپ میں
lolly <tool> --field=…کال پوری انٹیگریشن ہے۔ - ایک سسٹم یا AI ایجنٹ، MCP کے ذریعے۔ وہی ٹول پروگرام کے ذریعے چلایا گیا، اسی وفاداری کے ساتھ، جتنی قطاریں کام میں ہوں اُتنی ہی مقدار میں۔
signed by Lollyvector SVG133 paths~15k nodes185 groups1 image195 KBخود جانچیںدستخط شدہ فائل حاصل کریں
signed by Lollyvector SVG133 paths~15k nodes185 groups1 image195 KBخود جانچیںدستخط شدہ فائل حاصل کریں
برانڈ پابندیوں کا ایک سیٹ، ایک ڈیزائنر نے ایک بار طے کیا؛ یکساں آؤٹ پٹ تک تین راستے۔
بڑی تصویر: پرتیں کیسے فٹ ہوتی ہیں
یہاں سے نیچے سب کچھ آرکیٹیکچر ہے۔ خاکہ پورے سسٹم کو ایک نظر میں دکھاتا ہے: ٹولز اوپر ڈیٹا ہیں، درمیان میں انجن کسی پلیٹ فارم کے بارے میں کچھ نہیں جانتا، اس کے نیچے شیلز ایک معاہدہ نافذ کرتے ہیں، اور کیٹلاگز مواد فراہم کرتے ہیں۔
┌─────────────────────────────────────────────┐
│ 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/، schemas/، scripts/، tests/، api/، docs/، community/، brands/lolly-start/، ہر shells/ اور دونوں services/ سادہ ڈائریکٹریز ہیں۔ واحد استثنا brands/suse ہے، ایک پرائیویٹ git سب ماڈیول جس میں SUSE ٹول پیک اور کیٹلاگ موجود ہے، یہ اختیاری ہے اور پبلک کلون میں موجود نہیں ہوتا۔ کوئی مخصوص بلڈ کون سے پیکس پڑھے گا اس کا تعین ایک کنٹینٹ پروفائل (profiles.json) سے ہوتا ہے، جو ہر پراسیس کے لیے علیحدہ طے ہوتا ہے نہ کہ عالمی سطح پر تبدیل کیا جاتا ہے۔ کلون کمانڈ اور پرائیویٹ پیک کے اندر تبدیلی کیسے کمٹ کی جاتی ہے، اس کے لیے دیکھیں Build Guide » Getting the source۔
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 # type re-export of the @lolly-tools/core 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
│
├── community/ # the brand-agnostic tool pack - data, not code. Public (MPL-2.0).
│ # A SELECTION follows; a profile mounts these plus whatever
│ # tools the active brand pack carries of its own.
│ ├── qr-code/
│ ├── snippet/
│ ├── countdown-timer/
│ ├── color-palette/
│ ├── 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)
│ ├── chart/ # SVG charts from structured data
│ ├── filter/ # photo effects in one tool - halftone/scanline/posterize/voronoi (vector), duotone/pixel-stretch/imperfections (raster)
│ ├── meeting-planner/ # global timezone meeting scheduler
│ ├── calendar-ics/ # event → .ics calendar file plus a card
│ ├── wayfinding-signage/ # event signage; directions blocks auto-fit label text
│ ├── text-helper/ # on-device text workbench (format/decode/hash/de-identify)
│ ├── design/ # "Design" - 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
│ ├── icon/ # favicon .ico / png / svg from text + colours
│ └── lottie-digi-ad/ # animated Lottie ad banners
│
├── brands/ # brand packs - a catalog each, and optionally tools of their own
│ ├── lolly-start/ # the blank starter brand, owned here
│ │ └── catalog/
│ │ ├── tools/index.json # tool registry, generated per brand
│ │ └── assets/
│ │ ├── index.json # asset registry
│ │ └── lolly/... # logo, palette, tokens
│ └── suse/ # PRIVATE submodule - the SUSE tools and the SUSE catalog
│
├── 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پلیٹ فارم ڈیلیوری ماڈل
پلیٹ فارم کئی سطحوں پر چلتا ہے - ویب PWA، Tauri ڈیسک ٹاپ/موبائل، اسکرپٹ ایبل CLI اور انٹرایکٹو TUI۔ ان سب میں وہی انجن اور وہی ٹول فائلیں استعمال ہوتی ہیں۔
ویب (PWA) - بنیادی تقسیم
ایک SUSE-کنٹرول شدہ URL پر ہوسٹ کیا گیا۔ سروس ورکر کے ٹولز اور اثاثوں کو کیش کر لینے کے بعد آف لائن کام کرتا ہے۔ یہاں زیادہ تر ملازمین، وینڈرز اور شراکت دار پلیٹ فارم استعمال کریں گے۔ کسی اکاؤنٹ کی ضرورت نہیں - حالت فی ڈیوائس IndexedDB میں محفوظ ہوتی ہے۔
ویب شیل ایک لے آؤٹ سے ریسپانسیو ہے۔ ڈیسک ٹاپ پر ایک ٹول ٹریک پیڈ-مقامی کینوس نیویگیشن (کرسر کے گرد زوم کے لیے Cmd/Ctrl-وہیل یا پنچ، پین کے لیے اسپیس- یا مڈل-ڈریگ، 0/1/+/− کیز اور ایک Fit/% HUD) کے ساتھ پیش نظارہ اسٹیج کے ساتھ ایک قابلِ ری سائز کنٹرولز سائیڈبار ہے۔ موبائل (≤640px) پر کنٹرولز ایک ٹاپ-اینکرڈ شیٹ بن جاتے ہیں جس میں ایک ڈریگ گرِپ peek/half/full پر اسنیپ کرتی ہے (ٹیپ ٹوگل کرتا ہے) ایک جامد فل-اسکرین پیش نظارے کے اوپر، اور ایک فلوٹنگ Render بٹن ایک نیچے کی شیٹ پاپ اپ میں Export کنٹرولز کھولتا ہے۔ موبائل پر پیش نظارے پر پنچ-زوم اور ڈریگ-پین ملتا ہے۔ رینڈر پاتھ اور ایکسپورٹ کنٹرولز دونوں میں یکساں ہیں - صرف کروم دوبارہ بہتا ہے۔
signed by Lollyvector SVG131 paths~6.1k nodes158 groups1 image142 KBخود جانچیںدستخط شدہ فائل حاصل کریں
فون کی چوڑائی پر وہی ٹول، بغیر کسی دوسرے لے آؤٹ کو برقرار رکھے: کنٹرولز اوپر ایک شیٹ بن جاتے ہیں، پیش نظارہ پوری اسکرین پر ہوتا ہے اور رینڈر پِل اس کے اوپر تیرتی ہے۔
signed by Lollyvector SVG97 paths~3.3k nodes113 groups99 KBخود جانچیںدستخط شدہ فائل حاصل کریں
signed by Lollyvector SVG97 paths~3.3k nodes113 groups100 KBخود جانچیںدستخط شدہ فائل حاصل کریں
بیچ موڈ (/pro)۔ ویب شیل ایک اسپریڈشیٹ طرز کا بیچ گرڈ بھی فراہم کرتا ہے (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 toolTUI
pnpm run tui
CLI کا انٹرایکٹو ہم منصب: ایک فل اسکرین، کی بورڈ-فرسٹ ٹرمینل ایپ (Ink پر بنی ہوئی) جو ٹولز براؤز کرنے، ان پٹس بھرنے، پراجیکٹس محفوظ کرنے اور ایکسپورٹ کرنے کے لیے ہے - وہ بھی بغیر کسی GUI کے۔ اس کا ہوسٹ برج DOM سے آزاد فارمیٹس (SVG/EMF/EPS/HTML + text/data) کے لیے CLI کے نفاذ کو دوبارہ استعمال کرتا ہے، اور ~/.lolly کے تحت ڈسک پر موجود اسٹیٹ کے ساتھ ایک اختیاری ان لائن پیش نظارہ بھی شامل کرتا ہے۔ اس کے علاوہ اس کے پاس ایک براؤزر رینڈر ٹیئر بھی ہے: ایک محدود دائرہ کار کا ہیڈ لیس Chromium (وہی جو MCP سرور انسٹال کرتا ہے) جو مانگ پر raster/PDF/ویڈیو اور لائیو-URL کیپچر تیار کرتا ہے - یہ ویب شیل کی ایک بنی ہوئی کاپی چلاتا ہے تاکہ آؤٹ پٹ یکساں رہے، اور صرف اس وقت شروع ہوتا ہے جب آپ پہلی بار ایسا فارمیٹ ایکسپورٹ کریں۔ اس طرح url-shot (crop + recolor + vector PDF/SVG کے ساتھ) اور ہر raster/pdf ٹول بھی ٹرمینل میں چلتا ہے۔ TUI رہنما دیکھیں۔
آپ چاہے کسی بھی سطح پر ہوں، ڈیش بورڈ کا Capabilities ٹیب اس بات کا مکمل نقشہ ہے کہ پلیٹ فارم کیا کچھ کر سکنے کا اعلان کرتا ہے، جو گروپ شدہ اور کسی بھی ٹول کو کھولے بغیر پڑھنے کے قابل ہے۔
ٹول کیٹیگریز
گیلری گروپنگ کے لیے ٹولز کو ان کے مینی فیسٹ میں ایک category سے ٹیگ کیا جاتا ہے۔
قطاریں گیلری سیکشن کی ترتیب میں درج ہوتی ہیں۔ utility سیکشن گیلری میں ہمیشہ آخر میں رینڈر ہوتا ہے (ہر دوسری کیٹیگری کے بعد، بشمول مستقبل کی کیٹیگریز) - یہ آن-ڈیوائس "Offline Utilities" دراز ہے۔
| زمرہ | مثالیں | منصوبہ بند |
|---|---|---|
everyone | QR Code Generator, Quote Card, Email Signature, Logo, Wordmark, Audiogram, Battlecards, Sequence, Record | Employee Image Stationery |
designer | Brand Lockup, Design, Chart, Darkroom, Filter, Pose Geeko, Booklet | Font Outliner |
event | Meeting Planner, Event Name Badge, Wayfinding Signage, Calendar ICS, Booth Studio | Event Stationery, Bulk Name Badges, Room Agenda Cards |
product | - | CVE Alert, Product Release Announcement, Blog OG Image |
utility | Strip Hidden Data, Text, Compress PDF, Convert Image, Convert Font, Redact, Run Web Code, Screen Capture, URL Screenshot | Unit/format converters, more on-device privacy utilities |
یہ خانے مثالیں ہیں، مکمل فہرست نہیں۔ کون سے ٹولز موجود ہیں یہ اس پروفائل کی خاصیت ہے جو آپ نے ماؤنٹ کیا ہے، اس صفحے کی نہیں: ایک برانڈ پیک اپنے ٹولز شامل کرتا ہے، اور کسی کمیونٹی ٹول کو خارج بھی کر سکتا ہے جسے وہ شپ نہ کرنا چاہے۔ catalog/tools/index.json - جو مینی فیسٹس سے تیار ہوتی ہے اور وہ رجسٹری ہے جسے گیلری واقعی پڑھتی ہے - مستند فہرست ہے؛ کوئی پروفائل کیا ماؤنٹ کرتا ہے یہ گننے کے لیے، یہاں لکھے کسی عدد پر بھروسہ کرنے کے بجائے مینی فیسٹس گنیں (ls community//tool.json brands//tools/*/tool.json)۔ (اگر کوئی ٹول id دو پیکس میں موجود ہو تو یہ صرف ایک بار، جیتنے والے پیک سے ماؤنٹ ہوتا ہے۔)
ٹولز کو حیثیت (status) کے لحاظ سے بھی درجہ بندی کیا جاتا ہے: official (برانڈ سے منظور شدہ، بغیر واٹرمارک کے)، community (بیرونی تعاون)، experimental (واٹرمارک شدہ ایکسپورٹس)۔ لائبریری کا بیشتر حصہ official ہے؛ نئے اسٹوڈیوز اور کیپچر ٹولز مستحکم ہونے تک عموماً community یا experimental میں رہتے ہیں۔ ہر سطح بیج دکھاتی ہے، تاکہ قاری کھولنے سے پہلے جان لے کہ وہ کیا لے رہا ہے - اور، اوپر دیے گئے کیٹیگری خانوں کی طرح، فی-حیثیت رکنیت اتنی تیزی سے بدلتی ہے کہ یہاں شمار کرنا ممکن نہیں۔ اسے گیلری یا تیار شدہ انڈیکس سے پڑھیں۔
Design پہلا ٹول ہے جو render.layout: "editor" فری کینوس موڈ پر بنایا گیا ہے - ایک کروم لیس، براہ راست ہیرا پھیری کی سطح جہاں آپ متن، اشکال اور تصاویر کے باکسز کو گھسیٹ، سائز تبدیل، گھما اور اسنیپ کر سکتے ہیں، اور پھر ہر دوسرے ٹول کی طرح اسی رینڈر پاتھ کے ذریعے ایکسپورٹ کر سکتے ہیں۔
Strip Hidden Data پہلی آن ڈیوائس یوٹیلیٹی ہے (privacy: "on-device"): ایک کنٹینٹ ٹرانسفارم ٹول جو آپ کی فراہم کردہ فائل لیتا ہے، اسے مکمل طور پر براؤزر میں پراسیس کرتا ہے اور ایک صاف کاپی واپس دیتا ہے - نہ کبھی اپ لوڈ کی جاتی ہے، نہ واٹرمارک لگتا ہے، نہ کوئی پراونینس مہر لگتی ہے۔ Text دوسری ہے - روزمرہ کے پیسٹ-ان-اے-ویب سائٹ کاموں (JSON فارمیٹ، JWT ڈی کوڈ، Base64، URL انکوڈ/ڈی کوڈ، SHA ہیشنگ) کے لیے ایک آن ڈیوائس ورک بینچ۔ Compress PDF تیسری ہے - یہ PDF کی تصاویر کو دوبارہ کمپریس کر کے اسے چھوٹا کرتی ہے، یہ بھی مکمل طور پر آن ڈیوائس۔ مارکر اور اس کا بیج ٹیکسٹ "آپ کے ڈیوائس پر چلتا ہے - کچھ بھی اپ لوڈ نہیں ہوتا" اب پورے ٹرانسفارم سیٹ کا احاطہ کرتا ہے: Strip Hidden Data، Text، Compress PDF، Convert Image (HEIC/TIFF/AVIF → WebP/JPG/PNG)، Convert Font، Redact (کسی تصویر، SVG یا PDF کے حصوں کو ختم کرنا)، اور Prompt Card اور Rebrand (ایک .pptx کو بجا طور پر دوبارہ تھیم کرنا) جہاں پروفائل اسے ماؤنٹ کرتی ہے۔ یہ ایک پرائیویسی-یوٹیلیٹی کیٹیگری ہے جو خفیہ فائلوں کو سنگل پرپز ویب سائٹس کے حوالے کرنے کی جگہ لیتی ہے۔
signed by Lollyvector SVG124 paths~29k nodes324 groups395 KBخود جانچیںدستخط شدہ فائل حاصل کریں
signed by Lollyvector SVG124 paths~29k nodes324 groups396 KBخود جانچیںدستخط شدہ فائل حاصل کریں
نوٹ:
categoryاورstatusکو ہرtool.jsonسےcatalog/tools/index.json(وہ رجسٹری جسے گیلری پڑھتی ہے) میں ڈی نارملائز کیا جاتا ہے۔ مینی فیسٹ ہی حتمی ماخذ ہے - انڈیکسpnpm run build:catalogکے ذریعے تیار کیا جاتا ہے اور اگر کمٹ شدہ انڈیکس مینی فیسٹس سے ہٹ جائے توpnpm run validate:catalogCI کو ناکام کر دیتا ہے۔
آرکیٹیکچرل وعدے
یہ فیصلے طے شدہ ہیں۔ ان میں سے کسی کو تبدیل کرنا ایک بڑا کام ہے - یہ کوڈ بیس میں ہر دوسرے فیصلے کو تشکیل دیتے ہیں۔
1۔ اعلانیہ ٹولز، ایک امری فرار کے راستے کے ساتھ
ایک ٹول ایک مینی فیسٹ (tool.json) + ایک ٹیمپلیٹ (template.html) + اختیاری hooks.js پر مشتمل ہوتا ہے۔
مینی فیسٹ ان پٹس کا اعلان کرتا ہے۔ ٹیمپلیٹ نہیں۔ ان پٹس کا اندازہ Handlebars ٹوکنز سے نہیں لگایا جاتا۔ مینی فیسٹ ہی معاہدہ ہے؛ ٹیمپلیٹ {{id}} کے ذریعے نام شدہ ویری ایبلز استعمال کرتا ہے۔
signed by Lollyvector SVG39 paths~2.6k nodes54 groups2 images43 KBخود جانچیںدستخط شدہ فائل حاصل کریں
signed by Lollyvector SVG39 paths~2.6k nodes54 groups2 images43 KBخود جانچیںدستخط شدہ فائل حاصل کریں
Hooks اختیاری ہیں۔ زیادہ تر ٹولز خالص اعلانیہ ہوتے ہیں - مینی فیسٹ + ٹیمپلیٹ کافی ہے۔ جن ٹولز کو محسوب شدہ اقدار کی ضرورت ہو (QR encoding، چارٹ ڈیٹا کی تشکیل) وہ hooks.js فراہم کرتے ہیں جو نام شدہ لائف سائیکل فنکشنز ظاہر کرتا ہے (onInit، onInput، onFrame - موشن-ری ایکٹو ٹولز کے لیے فی-فریم لائیو کیمرہ ہک - onLevel، beforeExport، afterExport، exportFile - وہ فائل-اِن/فائل-آؤٹ ٹرانسفارم پاتھ جو Strip Hidden Data جیسی آن-ڈیوائس یوٹیلیٹیز استعمال کرتی ہیں - اور exportStill، اس ٹول کے لیے جو اپنا خود کا ڈیپ raster رکھتا ہو)۔ ہوسٹ ہکس کو new Function('host', …) کے ذریعے لوڈ کرتا ہے، جس میں کیپبیلٹی برج کلوژر اسکوپ کے طور پر شامل کیا جاتا ہے۔ یہ ایک پورٹیبلٹی معاہدہ ہے، سیکیورٹی سینڈ باکس نہیں: ہکس اب بھی پیج ریلم میں چلتے ہیں اور براؤزر شیل میں window/fetch/document تک پہنچ سکتے ہیں - host. معاون، پورٹیبل سطح ہے، کوئی نافذ کردہ حد نہیں۔ اے سنک ہک نتائج کا وقت مقرر ہے (onInit 5s، onInput 2s، beforeExport/afterExport 5s، exportFile/exportStill 10s) اور دیر سے آنے والے نتائج رد کر دیے جاتے ہیں؛ ایک بے قابو سنکرونس* ہک کو روکا نہیں جا سکتا۔ اسی لیے غیر معتبر تھرڈ پارٹی ہک کوڈ کو Worker isolation آنے تک چلانا محفوظ نہیں ہے۔
یہ اس لیے اہم ہے کہ: اعلانیہ ٹولز غیر ڈویلپرز بھی تخلیق کر سکتے ہیں۔ اگر ہر ٹول ایک ویب ایپ ہوتا، تو خطرے کا نوٹ "ورک ہارس ٹیمپلیٹس بنانے/برقرار رکھنے کی محدود مہارتیں" ایک مستقل رکاوٹ بن جاتا۔
2۔ ٹولز اور اثاثے ڈیٹا ہیں، بنڈل شدہ کوڈ نہیں
ویب اور Tauri ایپس بوٹ کے وقت ایک معلوم URL سے ٹول اور اثاثہ کیٹلاگس حاصل کرتی ہیں، انہیں مقامی طور پر کیش کرتی ہیں اور جو کچھ بھی وہاں موجود ہو اس پر کام کرتی ہیں۔ نیا ایونٹ ٹائل یا موسمی اثاثہ شامل کرنے کے لیے ایپ ریلیز کی ضرورت نہیں ہوتی۔
اثاثے کے بائٹس کو CDN پوائزننگ سے بچانے کے لیے SHA-256 چیک سم کیا جاتا ہے۔ اثاثے کی id + version کیش انویلیڈیشن چلاتی ہے۔
3۔ کیپبیلٹی برج واحد API ہے جو ٹولز دیکھتے ہیں
ٹولز اپنے ٹیمپلیٹ ایریا سے باہر کبھی DOM کو نہیں چھوتے، کبھی براہ راست fetch کو کال نہیں کرتے، کبھی فائل سسٹم نہیں پڑھتے۔ وہ ورژن شدہ host.* میتھڈز کو کال کرتے ہیں۔ معاہدے کی معیاری تعریف packages/core/src/host-v1.ts میں ہے - ٹول-مصنف SDK @lolly-tools/core، تاکہ کوئی تھرڈ پارٹی انجن پر انحصار کیے بغیر اس پر تعمیر کر سکے؛ engine/src/bridge/host-v1.ts اس کا ایک ٹائپ ری-ایکسپورٹ ہے، اور انجن/شیل کوڈ اسی راستے سے بلا تبدیلی امپورٹ کرتا رہتا ہے:
| برج API | یہ کیا کرتا ہے |
|---|---|
host.profile | صارف کا پہلا نام، ای میل، ہیڈ شاٹ، شہر، وغیرہ۔ bindToProfile کے ذریعے ان پٹس کو پہلے سے بھرتا ہے۔ |
host.assets | کیٹلاگ کوئریز، اثاثہ ریزولوشن، ہوسٹ کی فراہم کردہ پکر UI۔ |
host.state | ان پٹ سلاٹس کو محفوظ / لوڈ کریں۔ ویب پر IndexedDB، Tauri پر فائل سسٹم، CLI پر میموری۔ |
host.clipboard | کلپ بورڈ پر متن یا تصویر لکھیں (پلیٹ فارم فال بیکس کے ساتھ)۔ |
host.export | رینڈر ٹارگٹ کو ریسٹرائز یا سیریلائز کریں۔ تجرباتی ٹولز کے لیے واٹرمارک لگاتا ہے۔ |
host.net | الاؤ لسٹڈ fetch - صرف اس صورت میں دستیاب ہے جب ٹول نے "network" کیپبیلٹی کا اعلان کیا ہو۔ (فی الحال کوئی شپنگ ٹول اسے استعمال نہیں کرتا۔) |
اختیاری، اضافی سطحیں تب ہی ظاہر ہوتی ہیں جب کوئی شیل انہیں فراہم کرے۔ کچھ کیپبیلٹی-گیٹڈ ہوتی ہیں - صرف اس وقت ظاہر ہوتی ہیں جب ٹول متعلقہ فلیگ کا اعلان کرے: host.compose (دوسرے ٹول کا رینڈر ایمبیڈ کرنا - compose)، host.capture (URL Screenshot کے لیے پیج کیپچر - capture) اور host.recorder (ریکارڈنگ ٹولز کے لیے مائیک/کیمرہ/ڈسپلے کیپچر - microphone / camera / screen)۔ باقی فیچر-ڈیٹیکٹڈ ہیں - جب بھی شیل انہیں فراہم کر سکے موجود ہوتی ہیں، اور ٹول ان شیلز کے لیے ایک فال بیک رکھتا ہے جو ایسا نہیں کر سکتیں۔
یہ ظاہر کرنے کے لیے کہ اس کا احاطہ کیا ہے، چند نمایاں سطحیں - Host API ہر ایک کو دستاویزی شکل دیتا ہے، اور packages/core/src/host-v1.ts خود معاہدہ ہے:
| سطح (Surface) | کب سے | یہ کیا شامل کرتا ہے |
|---|---|---|
host.tokens | 1.0 | DTCG ڈیزائن ٹوکنز - برانڈ کے اپنے primitives |
host.text | 1.0 | HarfBuzz WASM کے ذریعے text-to-path (wasm capability فلیگ ان tools کو نشان زد کرتا ہے جو اس پر انحصار کرتے ہیں) |
host.media | 1.4 | onFrame ہک کو چلانے والے لائیو کیمرہ فریمز۔ Progressive enhancement، جان بوجھ کر camera فلیگ سے مشروط نہیں - ایسا tool بدستور ایک عام still-image tool کے طور پر کام کرتا ہے |
host.color | 1.40 | Perceptual رنگ ریاضی: ΔEOK، WCAG + APCA تضاد، OKLab ramps، class-breaks، categorical palettes، harmony schemes (1.60)، CSS Color 4 mixing اور gradient baking (1.68)۔ خالص اور synchronous - shells کچھ بھی خود نافذ کرنے کے بجائے engine کا اپنا makeColorApi() منسلک کرتی ہیں، اس لیے یہ ہرگز مختلف نہیں ہو سکتا |
host.images | 1.60 | آلے پر bytes کو decode / resize / re-encode کرنا - convert راستہ (HEIC → JPEG، WebP میں compress، downscale)۔ ویب shell میں ایک lazy facade کے طور پر شپ کیا گیا، اس لیے HEIC decoder کبھی boot chunk میں داخل نہیں ہوتا |
host.geom | 1.64 | درست vector جیومیٹری: path booleans، offsetting، stroke-to-fill، spline lowering، simplification، hit testing۔ یہ بھی خالص، synchronous اور engine سے منسلک ہے (makeGeomApi())؛ ناکامیاں واپس کی جاتی ہیں، کبھی throw نہیں کی جاتیں |
باقی سب انہی اصولوں کی پیروی کرتے ہیں اور انہی کے ساتھ دستاویزی ہیں: آن-ڈیوائس دستاویز سرجری کے لیے pdf (1.8) اور pptx (1.58)، کلپ تجزیے اور آن-ڈیوائس TTS/ٹرانسکرپشن کے لیے audio (1.71) اور speech (1.96)، MilkDrop پلیس ہولڈر معاہدے کے لیے viz (1.72)، ڈیپ-بٹ اور لیئرڈ-بٹ میپ آؤٹ پٹ کے لیے codec (1.100) اور layers (1.102)، آن-ڈیوائس ماڈلز کے لیے upscale (1.101) اور matte (1.103)، اپنا خود کا پکسل کام کرنے والے ہکس کے لیے raster (1.105)، ایکسپورٹ-سیف تیروں کے لیے connectors (1.106) اور مکمل شدہ بائٹس پر دستخط کرنے کے لیے c2pa (1.85)۔ گنتی بڑھتی ہے؛ اصول نہیں بدلتے۔
قابلِ اعلان کیپبیلٹیز یہ ہیں: network، filesystem، clipboard، camera، microphone، screen، ffmpeg، wasm، capture، compose۔ (screen، جو 1.54 میں شامل کی گئی، host.recorder کے ذریعے ڈسپلے کیپچر ہے - صارف براؤزر-نیٹو UI میں ایک اسکرین/ونڈو/ٹیب منتخب کرتا ہے؛ یہ capture سے مختلف ہے، جو خود ٹول کے بتائے ہوئے URL کو ریسٹرائز کرتا ہے۔)
وہی ٹول براؤزر، 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 signed by Lollyvector SVG55 paths~2.6k nodes38 groups60 KBخود جانچیںدستخط شدہ فائل حاصل کریں
signed by Lollyvector SVG55 paths~2.6k nodes38 groups61 KBخود جانچیںدستخط شدہ فائل حاصل کریں
CLI موڈ ایک مختلف ٹرانسپورٹ کے تحت URL موڈ ہے - CLI شیل argv سے ایک URL-اسٹیٹ آبجیکٹ بناتا ہے اور وہی انجن پائپ لائن چلاتا ہے۔ صرف ایک رینڈر پاتھ موجود ہے۔ CLI GUI سے ڈرفٹ نہیں کر سکتا کیونکہ یہ کوئی الگ نفاذ نہیں ہے۔
url-mode.ts راؤنڈ ٹرپ (پارس اور سیریلائز) کو سنبھالتا ہے۔ محفوظ شدہ پیرامیٹرز کا ایک سیٹ کبھی ٹول کو بطور ان پٹس فارورڈ نہیں کیا جاتا: آؤٹ پٹ کنٹرولز (format، export، copy، filename، width/w، height/h، unit، dpi)، پرنٹ اور پروونینس ڈائلز (bleed، marks، profile، password، c2pa، imprint، durable، meta، hdr، depth، cuts) اور اسٹیٹ کیریئرز (template، z - وہ "Shortest link" پیک شدہ ٹوکن - اور zx، وہی پاس ورڈ کے تحت خفیہ کاری شدہ)۔ engine/src/url-mode.ts میں RESERVED سیٹ مستند ہے اور ایک ٹیسٹ کے ذریعے پن کیا گیا ہے؛ URL Mode ان سب کو دستاویزی شکل دیتا ہے، بشمول وہ چند جو یہاں درج نہیں ہیں۔ URL موڈ میں اثاثے کے ان پٹس ان کی id کے ذریعے سیریلائز ہوتے ہیں؛ رن ٹائم انہیں ہائیڈریشن سے پہلے host.assets.get() کے ذریعے حل کرتا ہے۔ width/height کی قدریں unit میں ہوتی ہیں (ڈیفالٹ px، نیز mm/cm/in/pt/pc)؛ کسی طبعی یونٹ کے ساتھ dpi ریسٹر ریزولوشن سیٹ کرتا ہے۔ یہ کینوس دستاویز کا سائز طے کرتے ہیں اور ایکسپورٹ ڈائمینشنز پینل کو پہلے سے بھر دیتے ہیں۔
چونکہ ہر ان پٹ لنک میں سفر کرتا ہے، ایک پیرامیٹر کی تبدیلی ایک مختلف مکمل شدہ اثاثہ بنا دیتی ہے۔ یہ پورا پیلیٹ ایک سیڈ رنگ، ایک ہارمونی اور ایک اسٹیپ کاؤنٹ ہے:
signed by Lollyvector SVG10 groups25 KBخود جانچیںدستخط شدہ فائل حاصل کریں
signed by Lollyvector SVG10 groups25 KBخود جانچیںدستخط شدہ فائل حاصل کریں
6۔ اسٹوریج براہ راست نہیں بلکہ برج کے ذریعے ہوتی ہے
ویب شیل: 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 زپ میں ڈال دیتا ہے جو کسی بھی دوسری تنصیب پر امپورٹ ہو جاتا ہے - "نئی ڈیوائس پر منتقل ہونے" کا آف لائن جواب جسے کسی سرور کی ضرورت نہیں (مکمل تفصیل: docs/data-transfer.md)۔ ملٹی ڈیوائس سنک پہلے ہی اس کی بنیاد پر کام کر رہا ہے، وہی بنڈل اس اسٹوریج کو بھیجتا ہے جسے صارف خود منتخب کرے (docs/sync.md)۔
7. میچورٹی ٹیگز بتاتے ہیں کہ ٹول کیا ہے
ہر ٹول اپنے مینی فیسٹ میں status: official | community | experimental بیان کرتا ہے۔ گیلری اسٹیٹس کے مطابق ترتیب دیتی ہے۔ تجرباتی (experimental) ٹولز اپنے ایکسپورٹس پر خودکار طور پر واٹرمارک لگاتے ہیں - واٹرمارک host.export.render کے ذریعے لگایا جاتا ہے، ٹول کے ذریعے نہیں، اس لیے کوئی غیر سرکاری ٹول مصنف اسے غیر فعال نہیں کر سکتا۔
یہ اس تاثراتی خطرے کا ساختی جواب ہے کہ گیلری کا ہر ٹول ایک جیسا وزن رکھتا ہے۔ ٹیم کیٹلاگ کے گرد جو بھی عمل اپناتی ہے، وہ اسی کے اوپر تہہ در تہہ آتا ہے۔
8۔ ٹول ان پٹس مینی فیسٹ کے ذریعے ٹائپڈ ہوتے ہیں، بشمول اثاثہ جات (assets)
ان پٹس ایک type بیان کرتے ہیں: text، longtext، number، boolean، color، select، asset، date، time، datetime-local، url، blocks، vector، table اور file۔ ہوسٹ مینی فیسٹ سے ہر ٹائپ کے لیے ایک عمومی کنٹرول رینڈر کرتا ہے - ٹولز کوئی کنٹرول کوڈ نہیں لکھتے۔ (صارف کے پروفائل سے پیشگی بھرنا کوئی ٹائپ نہیں ہے - کوئی بھی ان پٹ bindToProfile رکھ سکتا ہے۔) تین باقیوں سے زیادہ اہم ہیں:
asset(بمعfilterاورallowUpload) عالمی اثاثہ نظام کا برج ہے؛allowUpload: falseبرانڈ کے نفاذ کا لیور ہے، مثلاً اسپانسرشپ ٹائل لوگوز کے لیے جہاں صرف لائبریری اثاثوں کی اجازت ہو۔ صارف کی اپ لوڈز وہیAssetRefشکل استعمال کرتی ہیں جو لائبریری اثاثے کرتے ہیں، اس لیے ٹولز انہیں یکساں طریقے سے ہینڈل کرتے ہیں۔blocksایک بار بار آنے والا فیلڈ گروپ ہے - ایک ان پٹ کے اندر ایک منی ٹیبل، جو سائیڈ پینل میں ایڈٹ ہوتا ہے، ایک ٹائپڈ/امتیازی ایڈ مینو اور فی بلاک اثاثہ فیلڈز کے ساتھ۔ کینوس پر رینڈر شدہ بلاک پر کلک کرنے سے اس بلاک کی قطار فوکس ہو جاتی ہے۔meeting-planner،chart-creator،event-name-badge،wayfinding-signage،color-blockاورdigi-adمیں استعمال ہوتا ہے۔vectorاعداد کے ایک مقررہ سیٹ (مثلاً ایک ٹرانسفارم) کو ایک مرکب کنٹرول میں گروپ کرتا ہے؛fileآن ڈیوائس ٹرانسفارم یوٹیلیٹیز (مثلاًstrip-dataاورcompress-pdf) کے لیے صارف کی اپنی فائل کو بائٹس کی صورت میموری میں رکھتا ہے۔
9۔ ٹیمپلیٹس منطق سے خالی ہیں (Handlebars، EJS نہیں)
Handlebars کو EJS پر جان بوجھ کر منتخب کیا گیا:
- منطق سے خالی۔ ٹیمپلیٹس غیر ڈیویلپرز کے ذریعے بھی تحریر کیے جا سکتے ہیں۔
- بذات خود محفوظ۔
{{x}}HTML-ایسکیپ کرتا ہے؛{{{x}}}رضاکارانہ خام (raw) ہے۔ - ٹیمپلیٹس میں کوئی من مانا JS نہ ہونے کا مطلب ہے کہ فی ٹیمپلیٹ XSS آڈٹ کی کوئی سطح نہیں۔
منطق hooks.js میں رہتی ہے جہاں یہ واضح اور جائزہ لینے کے قابل ہے۔ دستیاب Handlebars ہیلپرز: {{default}}، {{upper}}، {{lower}}، {{eq}}، {{markdown}}، {{asset ref}}، {{asset ref "property"}} (نیز ڈیٹا فارمیٹ ہیلپرز icsStamp/rfcText/csvCell جو ساتھی .ics/.vcf/.csv ٹیمپلیٹس میں استعمال ہوتے ہیں)۔
10۔ ٹولز ٹولز کو compose کرتے ہیں
ایک ٹول کسی دوسرے ٹول کے رینڈر کو کسی ٹول سے ٹول امپورٹ کے بغیر ایمبیڈ کر سکتا ہے - compose انجن کے ذریعے حل ہوتا ہے، کبھی ٹول کے کوڈ کے ذریعے نہیں۔ اس کی دو سطحیں ہیں:
- اعلانیہ مینی فیسٹ (Declarative manifest) -
composes: [{ id, tool, inputs, format?, width?, height? }]۔ انجن نامزد چائلڈ کو رینڈر کرتا ہے اور نتیجے کو منطق سے خالی ٹیمپلیٹ میں{{asset <id>}}کے طور پر رکھتا ہے۔event-name-badgeآجqr-codeکو ایک SVG کے طور پر compose کرتا ہے۔ - پورٹیبل ایمبیڈ یو آر ایل -
<img src="https://lolly.tools/tool/<id>.<ext>?<inputs>">۔ شیل اس چائلڈ کو مقامی طور پر رینڈر کرتا ہے (جب تک مقامی رینڈر حل نہ ہو ایک placeholder پکسل دکھتا ہے)؛lolly.toolsسے کبھی کچھ فیچ نہیں کیا جاتا۔
کسی بھی ٹول کے رینڈر کو compose کریں: ایک SVG چائلڈ سچا ویکٹر رہتا ہے جب پیرنٹ SVG یا PDF میں ایکسپورٹ کرے اور PNG کے لیے صاف طور پر ریسٹرائز ہوتا ہے؛ PNG/JPG/WEBP چائلڈز تصاویر کے طور پر ایمبیڈ ہوتے ہیں۔ اس کے لیے compose صلاحیت درکار ہے۔ compose شدہ چائلڈز درمیانی (intermediate) ہوتے ہیں - کبھی واٹرمارک یا پروونینس اسٹیمپ شدہ نہیں ہوتے - اور compose نرمی سے تنزل کرتا ہے: جو شیل کسی چائلڈ کو رینڈر نہیں کر سکتا وہ محض اس سلاٹ کو چھوڑ دیتا ہے اور پیرنٹ پھر بھی رینڈر ہوتا ہے۔
ہم نے واضح طور پر کیا نہیں کرنے کا انتخاب کیا
- کوئی EJS نہیں / ٹیمپلیٹس میں کوئی صوابدیدی JS نہیں۔ XSS کا دائرہ صفر ہے۔ منطق
hooks.jsمیں رہتی ہے۔ - کوئی لازمی اثاثہ CMS نہیں۔ افراد اپنی تخلیقی فائلیں براہِ راست ایپ کے اندر اثاثوں میں شامل کرتے ہیں (اثاثے اور برانڈ اسٹوڈیو کے ذریعے) - نہ کوئی سرور، نہ ایڈمن کنسول۔ کام ایک سیشن کے طور پر آگے بڑھایا جاتا ہے: ایک شیئر لنک اپنے ان پٹس اور سیٹنگز کو ساتھ رکھتا ہے (اپ لوڈ کردہ فائلیں ایک
.lollyمیں سفر کرتی ہیں)، اور وہی سیشن بیک اپ یا کولیب سیشن کے ذریعے سفر کرتا ہے۔ ڈیپلائمنٹ کو کنٹرول کرنے والا کوئی بھی کسی شیئر شدہ سیشن کو ایک ٹیمپلیٹ کے طور پر مقفل کر سکتا ہے - لنک کھولیں، اُس کی اقدار کو برانڈ پیک میں اُس ٹول کی ڈائرکٹری میں ایک ٹیمپلیٹ اندراج کے طور پر ریکارڈ کریں اور کمٹ کریں - جس کے بعد یہ ٹول کے "New from template" چوزر میں ظاہر ہوتا ہے اور?template=<id>کے طور پر ڈیپ لنک کے قابل ہوتا ہے۔ Git ڈیپلائمنٹ کے مالک کا مقفل کرنے کا مرحلہ ہے، تخلیق کار کا کبھی نہیں۔ مشترکہ، زیرِ نگرانی کیٹلاگ کے لیے، کوئی تنظیم اثاثہ ڈائرکٹری کو اُسی طرح منظم کر سکتی ہے اور PR جائزے کے ذریعے اپ ڈیٹس کو مشروط کر سکتی ہے - یہ ایک دستیاب گورننس ماڈل ہے، ایپ کی کوئی لازمی شرط نہیں۔ - کوئی جبری RBAC نہیں۔ اوپن ایپ بطور ڈیفالٹ عوامی رسائی کی حامل ہے؛ برانڈ رسک کو میچورٹی ٹیگز + واٹر مارکس کے ذریعے سنبھالا جاتا ہے۔ جو تنظیم زیادہ سخت کنٹرول چاہتی ہے وہ اپنی خود کی auth اور اوپر دیے گئے git-reviewed کیٹلاگ کو تہہ کے طور پر شامل کرتی ہے۔
- کوئی مرکزی ڈیٹا بیس نہیں۔ تمام یوزر اسٹیٹ فی ڈیوائس ہے؛ اختیاری سنک اسے اُس اسٹوریج میں کاپی کرتا ہے جسے صارف خود منتخب کرے، کبھی Lolly کے کسی ڈیٹا بیس میں نہیں۔
- کوئی مشترکہ tools/engine کوڈ پاتھ نہیں۔ انجن اوپن سورس ہے اور
community/کے برانڈ سے غیر متعلق ٹولز بھی؛ نجیbrands/suse/جیسا کوئی برانڈ پیک اپنے ٹولز اور کیٹلاگ اپنی شرائط کے تحت رکھتا ہے۔ ہر صورت میں یہ علیحدگی نافذ ہے (engine/سے ٹول کے مواد میں کوئی کراس اِمپورٹس نہیں) تاکہ تقسیم صاف رہے۔
ایک رینڈر کا لائف سائیکل
ایک صارف lolly.tools/#/tool/qr-code?url=https://suse.com&ecl=H کھولتا ہے:
- Boot. ویب شیل IndexedDB کھولتا ہے، کیپیبلٹی برج تعمیر کرتا ہے، ٹول اور ایسٹ کیٹلاگز کو سنک کرتا ہے (یا آف لائن ہونے پر کیش سے لوڈ کرتا ہے)۔
- Route. URL ہیش →
toolویو، جس میںqr-codeاور URL پیرامیٹرز نکالے جاتے ہیں۔ - Load.
loadTool('qr-code', fetchFile)tool.jsonحاصل کرتا ہے، JSON اسکیما کے خلاف تصدیق کرتا ہے،template.html،styles.cssاورhooks.jsسورس حاصل کرتا ہے۔ - Parse URL state.
parseUrlStateURL پیرامیٹرز کو ابتدائی ان پٹ ویلیوز میں تبدیل کرتا ہے۔ ایسٹ ریفرنسز (?logo=suse/logo/primary) کو ہلکے پھلکے{ id, _unresolved: true }آبجیکٹس کے طور پر پارس کیا جاتا ہے۔ - Runtime.
createRuntime(tool, host, initialValues)ان پٹ ماڈل تعمیر کرتا ہے (پروفائل ڈیٹا، ڈیفالٹس اور ابتدائی ویلیوز کو ملا کر)،host.assets.get()کے ذریعے ایسٹ ریفرنسز حل کرتا ہے، ہکس لوڈ کرتا ہے (closure-scopedhost، سینڈ باکسڈ نہیں)، اورhooks.onInitکو کال کرتا ہے۔ - Render. شیل رن ٹائم کو سبسکرائب کرتا ہے؛ ہر اسٹیٹ تبدیلی پر اسے
{ model, hydrated }موصول ہوتا ہے۔ یہ ماڈل سے ان پٹ کنٹرولز رینڈر کرتا ہے اور ہائیڈریٹڈ ٹیمپلیٹ HTML کو#tool-canvasمیں لکھتا ہے۔ - Interact. صارف کسی ان پٹ میں ٹائپ کرتا ہے →
runtime.setInput(id, value)→ پابندیاں لاگو ہوتی ہیں →hooks.onInputکال ہوتا ہے → دوبارہ ہائیڈریٹ → دوبارہ رینڈر۔ کینوس براہ راست اپ ڈیٹ ہوتا ہے۔ - Export. صارف Download(PNG) پر کلک کرتا ہے →
runtime.export(canvasNode, 'png')→host.export.render(dom-to-image-more کے ذریعے راسٹرائز کرتا ہے؛ SVG/PDF مخصوص DOM-واکنگ ویکٹرائزرز سے گزرتے ہیں) → بلاب →host.export.download۔ کوئی ٹول جن فارمیٹس کا انتخاب کر سکتا ہے ان کی رینج وسیع ہے، اورschemas/tool.schema.jsonمیں موجودrender.formatsاینم اس کا حتمی حوالہ ہے - راسٹرز اور فلوٹ راسٹرز، ویکٹرز اور کٹ فائلیں، پرنٹ/CMYK، موشن، ایڈیٹ ایبل دستاویزات (pptx،docx،odt)، پیلیٹ اور ڈیٹا/ٹیکسٹ آؤٹ پٹس، آڈیو اور فونٹ فائلیں۔ URL Mode ہر آئی ڈی اور اس کی پیداوار کی فہرست دیتا ہے۔ آڈیو بھی اسی اینم میں شامل ہے جیسے کوئی اور چیز (wav،mp3،m4a،opus، جو آڈیوگرام اور ریکارڈنگ ٹولز کے ذریعے اعلان کیے گئے ہیں)؛ الگ سے، کسی ریکارڈنگ ٹول کاrender.captureموڈhost.recorderکو چلاتا ہے، جس کی ٹیک براؤزر کے ریکارڈ کردہ کسی بھی کنٹینر میں ایک مکمل Blob کی صورت میں آتی ہے۔ (وہ ٹولز جوrender.export: falseسیٹ کرتے ہیں - جیسے Color Palette، Countdown Timer، Strip Hidden Data، Text، Compress PDF - ڈاؤن لوڈ/فارمیٹ/ڈائمنشن کنٹرولز چھپا دیتے ہیں۔) فزیکل یونٹس یہاں ہر فارمیٹ کے مطابق تبدیل کیے جاتے ہیں (PDF → حقیقی پیج پوائنٹس، راسٹر → DPI پر پکسلز بمعہpHYsچنک)۔ تخلیقی حقوق/پراونینس میٹا ڈیٹا (مصنف، ٹول، ماخذ - جوengine/src/metadata.tsکے ذریعے تیار ہوتا ہے) ہر فارمیٹ میں شامل کیا جاتا ہے: PNG iTXt، JPEG EXIF، PDF info dict، SVG<metadata>، GIF comment۔ تجرباتی ٹولز کو ہوسٹ کی جانب سے واٹرمارک دیا جاتا ہے، نہ کہ ٹول کی جانب سے۔
signed by Lollyvector SVG77 paths~6.0k nodes87 groups3 images88 KBخود جانچیںدستخط شدہ فائل حاصل کریں
signed by Lollyvector SVG77 paths~6.0k nodes87 groups3 images88 KBخود جانچیںدستخط شدہ فائل حاصل کریں
Tauri میں وہی لائف سائیکل۔ CLI میں وہی لائف سائیکل - jsdom ہیڈ لیس DOM فراہم کرتا ہے؛ آؤٹ پٹ ایک فائل یا stdout میں جاتا ہے۔
اوپن سورس حیثیت
کوڈ MPL-2.0 کے تحت ہے۔ engine/، shells/، services/، schemas/ اور docs/*.ts MPL-2.0 کے تحت اوپن سورس ہیں - برانڈ ٹولنگ کے لیے ایک وینڈر-نیوٹرل اسکیفولڈنگ پلیٹ فارم، یہ سب ایک ہی پبلک ریپازیٹری میں موجود ہے، lolly-tools/lolly۔
ٹول کنٹینٹ برانڈ پیکس کی صورت میں فراہم کیا جاتا ہے، ہر ایک اپنی اپنی شرائط کے ساتھ (پیک کی NOTICE.md دیکھیں)۔ community/ اس ریپازیٹری کی ایک ڈائریکٹری ہے اور اس کے برانڈ-نیوٹرل ٹولز بھی MPL-2.0 کے تحت ہیں۔ brands/suse/ وہ پرائیویٹ suse-lolly پیک ہے، واحد سب ماڈیول: SUSE ٹولز اور SUSE کیٹلاگ، SUSE کی ملکیت، بشمول اس کی لائسنس شدہ PremiumBeat موسیقی۔ brands/lolly-start/ وہ خالی اسٹارٹر برانڈ ہے جس کی ملکیت اسی ریپازیٹری کے پاس ہے۔ فونٹس کسی پیک کے اندر SIL Open Font License 1.1 کے تحت فراہم کیے جاتے ہیں - SUSE پیک میں SUSE اور SUSE Mono ٹائپ فیسز شامل ہیں۔
ریپو-روٹ میں کوئی tools/ یا catalog/ ڈائریکٹری موجود نہیں ہے۔ packages/node-shell/src/content-roots.ts ریڈ ٹائم پر profiles.json سے یہ جواب دیتا ہے کہ "ٹول <id> کہاں موجود ہے" اور "کیٹلاگ کہاں ہے"، اس لیے پروفائل ہر پراسیس کے لیے علیحدہ جواب دیتی ہے اور پہلے سے کوئی ٹری تیار کرنے کی ضرورت نہیں ہوتی۔ ایک حقیقی tools/ + catalog/ جوڑا صرف بلڈ آؤٹ پٹ میں لکھا جاتا ہے - dist/، ایک RPM پے لوڈ، ایک کنٹینر امیج - کیونکہ براؤزر ان دونوں پاتھس کو HTTP کے ذریعے فیچ کرتا ہے۔
یہ تقسیم نافذ ہے - engine/ سے ٹول کے مواد میں کوئی کراس اِمپورٹس نہیں ہیں - تاکہ پلیٹ فارم/مواد کی حد صاف رہے۔
جہاں انجن ختم ہوتا ہے اور ہوسٹ شروع ہوتا ہے
اگر آپ اسے خالص ڈیٹا + Handlebars میں بیان کر سکتے ہیں → انجن۔ اگر یہ DOM، فائل سسٹم، نیٹ ورک یا کسی براؤزر/OS API کو چھوتا ہے → ہوسٹ۔
یہ لکیر جان بوجھ کر واضح ہے۔ انجن اوپن سورس حصہ ہے۔ ہر وہ چیز جو SUSE، مخصوص پلیٹ فارمز یا رن ٹائم ماحول کے بارے میں جانتی ہے اس سے باہر رہتی ہے۔
مزید تفصیل کے لیے، engine/README.md ہر انجن ماڈیول اور اس کی ذمہ داری کی فہرست دیتا ہے، اور تھریٹ ماڈل اور ٹرسٹ باؤنڈریز یہ ریکارڈ کرتا ہے کہ یہی لکیر کہاں ایک ٹرسٹ باؤنڈری کے طور پر بھی کام کرتی ہے۔