العربية
GitHub
المظهر

واجهات سطح المكتب لـ Java

تطبيقات سطح مكتب بلغة Java، مرسومة من الصفر.

يرسم Limn بكسلاته بنفسه. عناصر واجهة وتخطيط ونصوص ورسوم بيانية ووسائط ومنفذ عرض ثلاثي الأبعاد، في اعتمادية واحدة، بلا Swing ولا JavaFX ولا طقم أدوات أصلي تحته.

JDK 17 · Windows وmacOS وLinux · Apache-2.0

بُني علنًا باستخدام Claude Code: كتبه Claude، ووجّهه أناس وتحققوا منه. ما كلّفه بناؤه دُفع بالفعل، فلا حاجة لأن تدفعه مرة أخرى. طريقة بناء Limn

التطبيق التوضيحي، كما رسمه Limn أثناء بناء هذا الموقع.
التطبيق التوضيحي، كما رسمه Limn أثناء بناء هذا الموقع.
التطبيق التوضيحي، كما رسمه Limn أثناء بناء هذا الموقع.

جرّبه الآن

العرض التوضيحي ومحرّر السمات، مباشرةً من Maven Central. لا شيء للاستنساخ؛ ويجلب jbang نسخة JDK إن لم تكن لديك. يحدّد JBang أحدث إصدار مرة واحدة ثم يحتفظ به؛ أضف --fresh لجلب إصدار أحدث.

# التطبيق التوضيحي
jbang demo@limn-toolkit/limn-toolkit
# محرّر السمات
jbang theme-editor@limn-toolkit/limn-toolkit
# التطبيق التوضيحي
jbang --java-options=-XstartOnFirstThread demo@limn-toolkit/limn-toolkit
# محرّر السمات
jbang --java-options=-XstartOnFirstThread theme-editor@limn-toolkit/limn-toolkit

خمس دقائق

اعتمادية واحدة ودالة main

لا لغة ترميز، ولا معالج تعليقات توضيحية، ولا إضافة بناء. أضف الخلفية، وهي تجلب الطقم معها، واكتب Java عادية، وستحصل على نافذة.

اقرأ دليل التثبيت
build.gradle.kts
dependencies {
    implementation("io.github.limn-toolkit:limn-backend-lwjgl:1.0.0")
}
pom.xml
<dependency>
  <groupId>io.github.limn-toolkit</groupId>
  <artifactId>limn-backend-lwjgl</artifactId>
  <version>1.0.0</version>
</dependency>
Main.java
import limn.backend.Backend;
import limn.backend.NativeWindow;
import limn.backend.WindowConfig;
import limn.backend.lwjgl.LwjglBackend;
import limn.components.Button;
import limn.components.Label;
import limn.scene.Insets;
import limn.scene.Scene;
import limn.scene.layout.Column;
import limn.scene.layout.Padding;

/** A window with a label and a button that closes it. */
public final class HelloWindow {

    public static void main(String[] args) {
        // macOS needs -XstartOnFirstThread on the JVM command line; it is macOS-only and a
        // JVM elsewhere given it will not start.
        try (Backend backend = new LwjglBackend()) {
            NativeWindow window = backend.createWindow(
                    WindowConfig.of("Hello, Limn", 480, 320));

            Column column = new Column();
            column.gap(12);
            column.add(new Label("A window, drawn by Limn."));
            column.add(new Button("Close").onAction(window::requestClose));

            Scene scene = new Scene(new Padding(Insets.all(24), column));
            scene.bind(window);

            backend.runEventLoop();
        }
    }
}

ما الذي تحصل عليه

طقم مكوّنات لا تضطر إلى بنائه

أزرار وحقول وقوائم وجداول وأشجار ومنتقيات تاريخ وألسنة وقوائم منبثقة وحوارات وبطاقات وألواح منقسمة ومنتقي ألوان ورسوم بيانية شريطية وخطية ودائرية، وقائمة افتراضية يكلّف فيها مليون صف ما يكلّفه عشرون. كل واحد منها يقرأ لونه وشكله وكثافته من السمة، فلا شيء مكتوب نصًّا في الشيفرة، والوضع المضغوط سطر واحد. وخارج نوافذه، يطبع التطبيق على الورق أو إلى PDF، ويُظهر أيقونة في علبة النظام، ويضع قوائمه في شريط قوائم macOS، ويتبادل المحتوى مع البرامج الأخرى بالسحب والإفلات.

اطّلع عليها كلها
Button
Button
ComboBox
ComboBox
Slider
Slider
SegmentedControl
SegmentedControl
Checkbox and switch
Checkbox and switch
Spinner
Spinner

تخطيط يتسع له رأسك

ستة عناصر وعلامة واحدة: العمود يكدّس، والصف يوزّع، والالتفاف ينتقل إلى سطر جديد حين ينفد العرض، والشبكة تحاذي الخلايا في الاتجاهين، والرصّة تراكِب، والحشوة تُبعد الحواف، وExpanded يقول من يأخذ المساحة المتبقية. ويتحكّم Opacity وTransform في شفافية جزء من النافذة وموضعه وحجمه ودورانه دون أن يربكا التخطيط من حوله. لا حلّال قيود تضبطه ولا مدير تخطيط تثبّته.

اقرأ دليل التخطيط
نافذة مصمَّمة بـLimn
نافذة مصمَّمة بـLimn
نافذة مبنية من عمود وصف وتقسيم وExpanded واحد.

نماذج بلا إطار عمل

الحقل عنصر واجهة، وقاعدة التحقق مستمع، والإرسال استدعاء دالة. لا شيء يُربط، ولا شيء يُسجّل، وحالات تحقق تعيد تلوين الحقل لحظة يصلحه المستخدم.

اقرأ دليل النماذج
نموذج مبني بـLimn
نموذج مبني بـLimn
تسميات، وتحقق، واختيار، وصف الأزرار.

جداول وأشجار وتواريخ، مبنيّة سلفًا

الجدول أعمدة منمّطة فوق القائمة التي يملكها تطبيقك، يرتّبها طقم الأدوات أو خادمك، مع تذييل يجمع. والشجرة مخطّط فوق أبناء تقدّمها أنت، ويجوز للصف أن يعد بأبناء قبل أن يستطيع تسميتهم. وحقل التاريخ يكتب تاريخ ISO بتقويم القارئ نفسه، ومنتقي التاريخ يفتح خلفه شبكة الشهر.

اقرأ دليل القوائم
جدول وشجرة وأداتا تاريخ في نافذة من Limn
جدول وشجرة وأداتا تاريخ في نافذة من Limn
جدول وشجرة وحقل تاريخ ومنتقي تاريخ في نافذة واحدة.

الفيديو والعرض ثلاثي الأبعاد عناصر واجهة أيضًا

منفذ عرض ثلاثي الأبعاد قائم على الفيزياء ومشغّل فيديو، مركّبان كعناصر واجهة عادية: عرض التمرير يقصّهما، والرصّة ترسم فوقهما، ويشاركان في التخطيط كما تشارك التسمية.

اقرأ دليل الوسائط
منفذ العرض ثلاثي الأبعاد في Limn
منفذ العرض ثلاثي الأبعاد في Limn
منفذ العرض ثلاثي الأبعاد، مركّبًا في نافذة عادية.

للجميع

كل لغة، وكل قارئ شاشة

بلغات مستخدميك

تختلط اللاتينية واليونانية والسيريلية والصينية-اليابانية-الكورية في سلسلة واحدة، ويُختار خطٌّ لكل مقطع من كتابة واحدة. تُشكَّل العربية والعبرية والديفاناغارية والتايلندية تشكيلًا صحيحًا — حروف متصلة، وروابط، وعلامات — وتعكس اللغةُ التي تُكتب من اليمين إلى اليسار النافذةَ كلها: الصفوف والهوامش وأشرطة التمرير ومفاتيح الأسهم. تُركِّب أساليب الإدخال داخل الحقل، ويتحرك التحرير بوحدة الحرف المركّب.

اقرأ دليل النصوص
الشاشة نفسها ملتقطة باليابانية والصينية المبسطة والكورية والروسية، مجمّعة في نافذة واحدة.
الشاشة نفسها ملتقطة باليابانية والصينية المبسطة والكورية والروسية، مجمّعة في نافذة واحدة.
الشاشة نفسها، ملتقطة بأربع لغات أثناء هذا البناء.

يُقرأ بصوت عالٍ، بتلك اللغات نفسها

يقرأ قارئ شاشة على Windows وVoiceOver على macOS وOrca على Linux نافذة Limn عبر واجهة إمكانية الوصول الخاصة بكل منصة، دون أي شيفرة منصة في تطبيقك. يصف كل عنصر نفسه بدوره واسمه وحالته، باللغة التي تُعرض بها الواجهة. تسمية العنصر نداء واحد.

اقرأ دليل إمكانية الوصول
  1. heading“Create your account”
  2. label“Full name”
  3. text field“Full name”label · focusable, editable, required
  4. label“12 / 40”
  5. label“Email”
  6. text field“Email”label · focusable, editable, invalid, required
  7. label“Enter an address like ada@example.com”
  8. label“Password”
  9. password field“Password”label · focusable, editable, password
  10. label“At least 12 characters”
  11. label“Plan”
  12. combo box“Plan”label · focusable, expandable, has-popup
  13. switch“Email me release notes”focusable, checked
  14. separatorhorizontal
النموذج أعلاه، كما يُخبَر به قارئ الشاشة، مُلتقَط أثناء هذا البناء.

هويتك أنت، لا هوية الطقم

ينبغي أن يبدو تطبيقك كمنتَجك، لا كالمكتبة التي بُني بها. السمة بيانات صِرفة (كل لون، ونصف قطر الزوايا، ودرجة الحجم التي يرثها كل عنصر تحكم)، واستدعاء واحد يبدّلها أثناء التشغيل. حمّل الخط الذي تشحنه علامتك التجارية من ملف تتحكم فيه أنت، فلا يبقى من مظهر الطقم نفسه شيء.

كيف تعمل السمات
الشاشة الكثيفة نفسها من عناصر التحكم مرسومة سبع مرات جنبًا إلى جنب، كل شريط بلوحة ألوان ودرجة حجم وخط مختلفة.

المكوّنات نفسها، بسبع سمات

مرّر المؤشر فوق عمود لترى سمته على الشاشة كلها.المس عمودًا لترى سمته، واسحب جانبًا للتبديل.

شاشة واحدة، سبع سمات. الشيفرة وراء كل شريط متطابقة.

علنًا

طريقة بناء Limn

يكتب شيفرةَ Limn نموذجُ Anthropic المسمى Claude، داخل Claude Code، ويوجّهها أناس ويتحققون منها. نقول ذلك من البداية لأنك سترغب في معرفته.

التوجيه يعني أن كل قرار تصميمي سجلّ مكتوب في docs/adr، يُناقَش ويُقبَل قبل الشيفرة. والتحقق يعني أن كل تغيير يمرّ على مجموعة اختبارات أكبر من الشيفرة نفسها؛ وأن إمكانية الوصول سُمعت ولم تُفترض، إذ قرأ قارئ شاشة على Windows وVoiceOver على macOS وOrca على Linux نوافذ حقيقية؛ وأن الشيفرة مرّت بعمليات تدقيق متكررة للصحة والأداء وتصميم الواجهة البرمجية.

تطلّب الوصول إلى هنا آلاف الاستدعاءات للنموذج وملايين الرموز المولَّدة. وبحسب نموذج التقدير COCOMO II، فإن أكثر من مئة ألف سطر من الشيفرة، من دون احتساب الاختبارات، تعادل عمل فريق من نحو عشرين شخصًا لأكثر من سنتين. هذا العمل أُنجز، ويمكنك البناء عليه بدل إعادته.

اقرأ سجلات التصميم

نافذة على الشاشة في خمس دقائق

دليل التثبيت ينتهي ببرنامج يعمل. كل ما بعد ذلك هو الدليل ومعرض المكوّنات ومرجع الواجهة البرمجية.