Development 7 دقيقة للقراءة 4,718 مشاهدات

Tauri 2 في 2026: بناء تطبيقات سطح المكتب بتقنيات الويب

دليل عملي لـ Tauri 2 — كيف يختلف عن Electron، ومقايضة عارض النظام، والأوامر والأذونات، ودعم الهاتف، ومتى يبقى Electron الأفضل.

Tauri 2 في 2026: بناء تطبيقات سطح المكتب بتقنيات الويب

يحل Tauri و Electron المشكلة نفسها — تطبيقات سطح مكتب بتقنيات الويب — لكن بطريقتين متعاكستين. فـ Electron يشحن متصفحًا مع تطبيقك، أما Tauri فيستخدم المتصفح الموجود على الجهاز أصلًا.

وهذا القرار وحده يفسّر كل فارق بينهما، في الاتجاهين. ويغطي هذا الدليل ما يعنيه ذلك عمليًا. الإصدارات وقت الكتابة: Tauri 2.11 وElectron 43.

الفارق المعماري

يحزم تطبيق Electron كلًا من Chromium و Node.js، فتعرف بالضبط أي محرك عرض يعمل على كل جهاز لأنك أنت من شحنه. والكلفة أنك شحنته: كل تثبيت يحمل متصفحًا كاملًا.

أما تطبيق Tauri فله خلفية Rust ويُعرض في عارض نظام التشغيل: WebView2 على Windows، و WKWebView على macOS، و WebKitGTK على Linux. ولا يُحزم شيء، فتكون الملفات التنفيذية أصغر بفارق هائل.

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

المقارنة

Tauri 2Electron 43
حجم الحزمةبضعة ميغابايتعشرات الميغابايت
استهلاك الذاكرةأقلأعلى
محرك العرضعارض النظام — متفاوتChromium — موحّد في كل مكان
لغة الخلفيةRustNode.js
أهداف الهاتفiOS و Androidلا
نموذج الأمانأذونات صريحةإعداد يدوي
المنظومةأحدثناضجة جدًا
واجهات Nodeغير متاحةوصول كامل

البداية

npm create tauri-app@latest
cd my-app
npm run tauri dev

والواجهة الأمامية كما تشاء: React أو Vue أو Svelte أو HTML عادي. فـ Tauri لا يهتم، إذ يقدّم أصولك المبنية داخل عارض.

الأوامر: استدعاء Rust من الواجهة

// src-tauri/src/lib.rs
#[tauri::command]
async fn build_report(path: String) -> Result<Report, String> {
    let contents = std::fs::read_to_string(&path)
        .map_err(|e| format!("Could not read {path}: {e}"))?;

    Ok(Report {
        title: path,
        rows: contents.lines().count(),
    })
}
// الواجهة الأمامية
import { invoke } from '@tauri-apps/api/core'

const report = await invoke<{ title: string; rows: number }>('build_report', {
  path: '/tmp/data.csv',
})

ولاحظ نوع الإرجاع Result<Report, String>: فخطأ Rust يتحول إلى وعد مرفوض في الواجهة، فتعبر معالجة الأخطاء الحدّ الفاصل بشكل سليم بدل إرجاع قيمة غير معرّفة بصمت.

وهنا أيضًا تكمن حجة الأداء الحقيقية لـ Tauri: فالعمل الثقيل — تحليل ملفات ضخمة، ومعالجة صور، وتعمية — يجري في Rust لا في JavaScript، فيبقى العارض مستجيبًا لأنه لا ينفّذ ذلك العمل.

الأذونات

// src-tauri/capabilities/default.json
{
  "identifier": "default",
  "windows": ["main"],
  "permissions": [
    "core:default",
    "dialog:allow-open",
    "fs:allow-read-text-file",
    {
      "identifier": "fs:scope",
      "allow": [{ "path": "$DOCUMENT/**" }]
    }
  ]
}

واقرأ سطر النطاق بتمعّن: يستطيع التطبيق قراءة ملفات نصية، لكن ضمن مجلد مستندات المستخدم فقط. فإن حاول خطأ برمجي أو اعتمادية مخترقة قراءة ~/.ssh/id_rsa، يفشل الطلب عند الإطار لا ينجح بصمت.

ويمكن إعداد Electron ليكون بالأمان نفسه، لكن الوضع الافتراضي فيه متساهل والعبء عليك. أما وضع Tauri الافتراضي فمقيَّد والعبء عليك في فتحه. ولمعظم الفرق، الثاني أأمن.

الهاتف

npm run tauri ios init
npm run tauri android init
npm run tauri android dev

ويجدر الوضوح بشأن ماهية ذلك: إنها واجهتك الويبية داخل عارض أصلي مع نواة Rust — أقرب إلى Capacitor منها إلى React Native الذي يعرض مكوّنات أصلية فعلًا. ولتطبيق قائم على البيانات أو النماذج يكون ذلك معقولًا تمامًا، أما لشيء ينبغي أن يبدو أصليًا فليس الأمر سواء.

متى يبقى Electron الخيار الصحيح

  • حين تحتاج واجهات Node أو منظومة npm في الخلفية. فخلفية Tauri هي Rust، ومكتبة Node لا تنتقل.
  • حين يكون اتساق العرض أهم من الحجم. فإن كانت واجهتك معقدة بصريًا، فشحن Chromium واحد معروف أفضل من تنقيح ثلاثة عوارض.
  • حين لا يكتب فريقك Rust. يمكنك المضي بعيدًا بالقوالب، لكن لحظة احتياجك عملًا أصليًا مخصصًا تحتاج Rust، وتلك كلفة توظيف وتعلّم حقيقية.
  • حين تعتمد على أدوات Electron الناضجة. التحديث التلقائي وتقارير الأعطال والوحدات الأصلية — منظومة بعمق عقد.

متى يتفوق Tauri

  • حين يهم حجم التوزيع. فبضعة ميغابايت مقابل عشرات تغيّر معدلات إتمام التنزيل، خصوصًا على اتصالات ضعيفة.
  • حين يعمل التطبيق طويلًا. فانخفاض الذاكرة في الخمول ملحوظ حين يبقى شيء مفتوحًا طوال اليوم بجوار تطبيقات أخرى.
  • حين يكون الوضع الأمني متطلبًا. فالأذونات المحدَّدة النطاق أسهل تبريرًا في المراجعة من «أعددنا Electron بعناية».
  • حين تريد سطح مكتب وهاتفًا من قاعدة شيفرة واحدة وتكون واجهة العارض مقبولة.
  • حين يوجد حساب حقيقي ينبغي إجراؤه. فـ Rust في الخلفية ميزة فعلية لا تفضيل أسلوبي.

نصائح عملية

اختبر على المنصّات الثلاث مبكرًا، لا قبل الإصدار بل مبكرًا. فعارض النظام هو مقايضة Tauri الأساسية، وتريد اكتشاف فارق عرض في WebKitGTK في الأسبوع الثاني لا في أسبوع الإطلاق.

وأبقِ الواجهة محافظة، فـ CSS الحديث جدًا هو بالضبط حيث تتباعد المحركات الثلاثة.

وضع عملًا حقيقيًا في Rust بدل معاملتها كقشرة رقيقة، فإن جرى كل شيء في JavaScript تكون قد تحمّلت منحنى تعلّم Rust دون جني فائدته.

أسئلة شائعة

هل Tauri أفضل من Electron؟

لا أفضلية مطلقة لأيهما. فـ Tauri ينتج تطبيقات أصغر بكثير وأقل استهلاكًا للذاكرة بنموذج أمان أصرم، و Electron يمنحك Chromium واحدًا معروفًا في كل مكان مع Node وعقدًا من الأدوات. اختر بحسب المقايضة التي تحتملها.

ما أحدث إصدار من Tauri؟

‏Tauri 2.11، صدر في يوليو 2026، مع @tauri-apps/api عند 2.11.1. وسلسلة Tauri 2 هي الحالية وقد أضافت أهداف iOS و Android.

هل أحتاج معرفة Rust لاستخدام Tauri؟

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

لماذا تطبيقات Tauri أصغر بكثير؟

لأن Electron يحزم Chromium و Node مع كل تطبيق، بينما يستخدم Tauri عارض النظام الموجود ويشحن ملفًا تنفيذيًا من Rust. هذا هو الفارق كله — وهو أيضًا سبب تفاوت العرض بين المنصّات.

هل يعمل Tauri بالطريقة نفسها على Windows و macOS و Linux؟

غالبًا نعم، لكن ليس تمامًا. فكل منصّة توفّر عارضها — WebView2 و WKWebView و WebKitGTK — وقد يختلف سلوك CSS و JavaScript الحديثين. اختبر على الثلاث منذ وقت مبكر من المشروع.

هل يستطيع Tauri بناء تطبيقات هاتف؟

نعم، فـ Tauri 2 يستهدف iOS و Android. وهي واجهتك الويبية داخل عارض أصلي مع نواة Rust، أقرب إلى Capacitor منها إلى React Native الذي يعرض مكوّنات أصلية فعلًا.

هل Tauri آمن افتراضيًا؟

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

هل أستطيع ترحيل تطبيق Electron إلى Tauri؟

الواجهة الأمامية تنتقل عادةً بتغيير يسير، أما الخلفية فلا: يجب إعادة كتابة شيفرة Node بـ Rust، وأي وحدة Node أصلية تحتاج مكافئًا في Rust. فحدّد نطاق الترحيل حول الخلفية لا حول الواجهة.

مشاركة هذه المقالة:
ES
كتبه

Edrees Salih

مهندس برمجيات متكامل يتمتع بخبرة 9 سنوات. شغوف ببناء حلول قابلة للتطوير ومشاركة المعرفة مع مجتمع المطورين.

عرض الملف الشخصي

التعليقات (0)

اترك تعليقًا

لن يتم نشر بريدك الإلكتروني.

لا توجد تعليقات بعد. كن أول من يشارك أفكاره!

مقالات ذات صلة

مقالات ذات صلة

هل تحتاج مساعدة في مشروعك؟

احجز استشارة مجانية لمدة 30 دقيقة لمناقشة تحدياتك التقنية واستكشاف الحلول معًا.