MLM VPN · اندروید

لیست تغییرات

تاریخچه کامل نسخه‌های اپ اندروید. شماره نسخه مطابق versionName در build.gradle است.

1.2.1

2026-08-09جدیدترین
افزوده‌شده
  • انتشار عمومی سورس اپ اندروید با مجوز GPLv3 روی گیت‌هاب README دوزبانه کامل، راهنمای مشارکت (CONTRIBUTING)، و Git LFS برای باینری‌های native و فایل‌های داده جغرافیایی.
  • تب اتصال: دکمه جدید «دریافت کانفیگ رایگان» ویزارد چندمرحله‌ای بالای دکمه + — از چند منبع عمومی گیت‌هابی کانفیگ جمع می‌کند، تعداد در دسترس را نشان می‌دهد، تعداد دلخواه شما را می‌گیرد و با تست دو مرحله‌ای (فیلتر سریع شبکه + تست واقعی Xray، دقیقاً دقت «دیلی واقعی») فقط کانفیگ‌های واقعاً متصل را برمی‌گرداند. دکمه «همین تعداد کافیه» توقف زودهنگام را ممکن می‌کند. نتایج با نام رندوم mlmvpnXXXX در پوشه «کانفیگ‌های رایگان» تب Manual قرار می‌گیرند؛ تکراری‌ها (بر اساس هویت واقعی سرور) دوباره اضافه نمی‌شوند.
  • تب اتصال: پرچم واقعی کشور برای هر کانفیگ، بدون نیاز به اتصال کامل حین تست «دیلی واقعی»، کانفیگی که وصل شد و پرچمش نامشخص بود، یک‌بار (فقط همان یک‌بار، بعد از آن از حافظه) از همان تونل واقعی کشور خروجی‌اش استعلام می‌شود.
  • ریکاوری خودکار بعد از قطعی واقعی شبکه قبلاً وقتی وای‌فای/دیتا واقعاً قطع می‌شد، تونل هیچ راهی برای فهمیدنش نداشت و وضعیت «متصل» تا وصل و قطع دستی باقی می‌ماند. حالا اپ اتصال واقعی شبکه را زیر نظر دارد و اگر شبکه در حالت متصل قطع و بعداً برگردد، خودکار همان اتصال را از نو برقرار می‌کند.
  • بررسی خودکار نسخه جدید و دانلود/نصب داخل اپ بلافاصله بعد از اجرا (و همچنین هر بار یک اتصال VPN برقرار می‌شود، برای وقتی گیت‌هاب موقع اجرا فیلتر بوده) اپ نسخه جدید را از گیت‌هاب بررسی می‌کند. اگر نسخه جدیدتری باشد، پنجره‌ای با شماره نسخه، حجم، و لیست کامل و قابل‌اسکرول تغییرات نشان داده می‌شود؛ دکمه «دانلود نسخه جدید» به صفحه دانلود اختصاصی (نوار پیشرفت با درصد زنده) می‌رود و بعد از اتمام، خودکار نصب‌کننده سیستم را باز می‌کند. اگر گیت‌هاب در دسترس نباشد، بررسی کاملاً بی‌صدا شکست می‌خورد و هیچ خللی در کارکرد اپ ایجاد نمی‌شود.
  • دو کانفیگ پیش‌فرض جدید ایران: «کانفیگ ایران ۷ (جدید)» و «کانفیگ ایران ۸ (جدید)» برگرفته از نسخه v48 پروژه Serverless-for-Iran (@patterniha) و کاملاً بدون تغییر. شش کانفیگ قبلی (بر پایه v44) سر جای خودشان می‌مانند، پس این‌ها اضافه شده‌اند نه جایگزین. v48 یک تغییر استراتژی است: دامنه‌های لیست‌سفید (گیت‌هاب، مایکروسافت، OpenAI، Anthropic، xAI، مخازن پکیج Go/Python/Rust) مستقیم و با DNS سیستم رد می‌شوند تا سرویس‌هایی که ایران را تحریم کرده‌اند همچنان IP ایران را ببینند؛ خودِ سرور DoH از دامنه تمیز challenges.cloudflare.com رزولو می‌شود؛ ترافیک TLS مسیر فرگمنت دومرحله‌ای اختصاصی گرفته؛ QUIC و UDP:443 کاملاً بلاک می‌شوند تا یوتیوب/تیک‌تاک روی مسیر TCP فرگمنت‌شده بیفتند؛ رنج‌های صفحه فیلترینگ ایران بلاک شده‌اند تا اتصال ربوده‌شده ریتری شود نه این‌که صفحه فیلتر بیاید؛ و IPv6 اولویت گرفته و موازی با IPv4 مسابقه داده می‌شود. تفاوت ۷ و ۸ فقط الگوی تأخیر بین فرگمنت‌هاست (۸ وقفه‌های ۴۰۰ میلی‌ثانیه‌ای دارد، برای شبکه‌هایی که DPI شان به فاصله کوتاه گیر می‌دهد). این کانفیگ‌ها حتماً به پورت محلی 10808 نیاز دارند و اخطارش داخل همان پوشه نمایش داده می‌شود.
  • resolve و pin کردن دامنه‌ی سرور قبل از استارت هسته، همراه با مسابقه‌ی موازی IP ها دامنه‌ی سرور هر کانفیگ حالا قبل از اجرای هسته توسط خود اپ resolve می‌شود و IP ها داخل کانفیگ pin می‌شوند، و outbound مستقیم با IP وصل می‌شود و آدرس‌های pin شده را موازی مسابقه می‌دهد (happyEyeballs). بیشترین اثر روی کانفیگ‌های پنل ابری (BPB/EDG/نهان) است که همه به یک دامنه *.workers.dev اشاره می‌کنند؛ آن دامنه به مجموعه بزرگی از IP های لبه کلادفلر resolve می‌شود که در هر لحظه بخشی‌شان از ایران throttle یا مرده است. قبلاً هسته خودش موقع اتصال resolve می‌کرد و آدرس‌ها را یکی‌یکی امتحان می‌کرد، پس یک IP بدشانس یعنی چند ثانیه معطلی یا شکست اتصال روی کانفیگی که سالم بود. resolve از طریق DoH با آدرس‌دهی مستقیم به IP خود resolver انجام می‌شود (بدون نیاز به bootstrap دی‌ان‌اس و مستقل از resolver اپراتور) و در صورت شکست به resolver سیستم برمی‌گردد؛ نتیجه ۱۰ دقیقه کش می‌شود. آدرس‌های IP این مرحله را رد می‌کنند و شکست کامل resolve باعث می‌شود کانفیگ عیناً مثل قبل ساخته شود. نتیجه: دیلی اتصال کمتر و نرخ موفقیت بالاتر — سرعت دانلود/آپلود بعد از اتصال تغییری نمی‌کند.
  • حذف سه رفتار اتلافی از کانفیگ تولیدی اپ (دیلی DNS، QUIC بی‌فایده، صفحه فیلترینگ) هر سه از یک لاگ زنده روی گوشی واقعی پیدا شدند. ۱) هر استعلام DNS دو رفت‌وبرگشت هزینه داشت: اول AAAA پرسیده می‌شد، جواب خالی می‌آمد، بعد A — در لاگ ۱۵۰ و بعد ۷۰۰ میلی‌ثانیه برای یک دامنه. حالا کانفیگ از ترجیح خود دستگاه پیروی می‌کند و روی شبکه‌های فقط-IPv4 آن کوئری اول حذف می‌شود. ۲) QUIC به ورکر کلادفلر تونل می‌شد که هیچ UDP ای حمل نمی‌کند، پس هر تلاش با websocket: close 1005/1006 می‌مرد و اپ بعدش روی TCP ریتری می‌کرد — تنها دستاوردش چند صد میلی‌ثانیه تأخیر قبل از هر ویدیو بود. حالا QUIC و UDP:443 سریع رد می‌شوند؛ بازی و تماس صوتی روی پورت‌های دیگر دست‌نخورده و کانفیگ‌های هیبرید گیم مستثنا هستند. ۳) ترافیک به رنج‌های صفحه فیلترینگ ایران از تونل رد می‌شد؛ حالا بلاک می‌شود تا سریع fail و ریتری شود.
  • سبک‌سازی کانفیگ تست دیلی واقعی و رفع تداخل پورت تست‌های هم‌زمان تست دیلی برای هر کانفیگ یک نمونه‌ی تازه از هسته بالا می‌آورد (در لاگ زنده ۱۵ استارت در ۶ ثانیه) و به هر کدام کانفیگ کامل اتصال داده می‌شد: سرورهای DNS، استخر fake-DNS، کل جدول روتینگ و یک inbound دوم — که هیچ‌کدام در یک اندازه‌گیری تک‌آدرسی استفاده نمی‌شوند؛ نشانه‌اش این بود که در لاگ هیچ خط «listening TCP» برای نمونه‌های تست وجود نداشت. همه‌ی نمونه‌ها هم یک پورت محلی ثابت می‌گرفتند، پس تست‌های هم‌زمان یک پورت را توصیف می‌کردند؛ حالا هر کدام پورت خودش را از بازه‌ای جدا از تونل و Aether می‌گیرد. تست سلامت اسکنر (که کانفیگ کامل روی پورت ۰ می‌ساخت) و تست دیلی اسکنر کلودفلر هم به همین کانفیگ کوچک منتقل شدند. شکست این کوچک‌سازی باعث استفاده از کانفیگ کامل می‌شود تا تست هرگز خراب نشود.
  • حذف نوشتن تکراری مقدار Host داخل headers در ترنسپورت WebSocket هسته برای این شکل نوشتن اخطار منسوخ‌شدن می‌داد («به‌زودی حذف و به فیلد مستقل host منتقل می‌شود») و همان مقدار در دو جا نوشته می‌شد که یکی در حال حذف است.
  • پوشه‌ی جدید «دامین‌فرانتینگ (بدون سرور)» در تب اتصال — یوتیوب/اینستاگرام/واتس‌اپ/فیسبوک/ردیت بدون هیچ سرور و ورکر کانفیگ MITM-DomainFronting نسخه v23 (@patterniha). هیچ سرور و ورکری در مسیر نیست: چیزی برای دیپلوی، هزینه‌ای، مقدار شخصی برای هر کاربر، و پهنای‌باند مشترکی که پر شود وجود ندارد — پس یک کانفیگ یکسان برای همه‌ی کاربران قابل ارسال است. کانفیگ TLS را به‌صورت محلی با گواهی‌ای که خود اپ صادر می‌کند باز می‌کند، مقصد واقعی را از متن آشکار می‌خواند، و بعد همان اتصال را با یک SNI دیگر و بلاک‌نشده به سرور واقعی برقرار می‌کند. کل راه‌اندازی داخل همان پوشه و در یک کارت سه‌مرحله‌ای انجام می‌شود: ساخت گواهی ریشه RSA-2048 روی خود گوشی (ساختار X.509 در خود اپ به‌صورت DER ساخته می‌شود چون BouncyCastle در پروژه نیست، و در همان قالب PEM ای نوشته می‌شود که هسته می‌خواند)، سپردن گواهی به سیستم برای نصب (روی اندروید ۱۰ و پایین‌تر مستقیم پنجره‌ی نصب‌کننده؛ روی اندروید ۱۱ و بالاتر ذخیره‌ی فایل در پوشه‌ی Download و راهنمای مرحله‌به‌مرحله‌ی تنظیمات، چون پلتفرم گواهی داده‌شده توسط اپ را رد می‌کند)، و ثبت کانفیگ در همان پوشه برای انتخاب و اتصال. وضعیت نصب گواهی از AndroidCAStore خوانده می‌شود و تطبیق روی خود گواهی است نه نامش، هم در هر بار برگشتن به اپ و هم با بررسی هر ۱.۵ ثانیه — پس بلافاصله بعد از نصب مرحله تیک می‌خورد و دکمه‌های نصب محو می‌شوند، بدون بستن و باز کردن اپ. یک راهنمای بازوبسته‌شدنی هم مسیر تنظیمات را برای سامسونگ، شیائومی، پیکسل/اندروید خام (۱۱ و ۱۲+)، هواوی/آنر، اوپو/ریلمی/وان‌پلاس و ویوو می‌گوید، به‌همراه کلیدواژه‌ی جستجو و تنظیم گواهی‌های شخصی فایرفاکس؛ پورت محلی هم خودکار روی 10808 تنظیم می‌شود چون inbound کانفیگ اصلی همان است و دست‌نخورده مانده. گواهی برای هر گوشی جدا ساخته می‌شود و هیچ‌جا ارسال نمی‌شود — گواهی آماده‌ی داخل اپ یعنی کلید خصوصی‌اش دست هر کسی که فایل اپ را باز کند می‌افتد و می‌تواند ترافیک TLS بقیه را بخواند. دو محدودیت هم صریح داخل خود کارت نوشته شده: تأیید نهایی نصب گواهی صفحه‌ای سیستمی است که هیچ اپ بدون روتی دورش نمی‌زند، و گواهی نصب‌شده‌ی کاربر فقط توسط مرورگرهای کرومیومی پذیرفته می‌شود نه اپ‌های معمولی — پس سایت‌ها در مرورگر باز می‌شوند، نه در اپ یوتیوب و اینستاگرام.
  • مرکز آموزش: آموزش شماره ۱۷ و یازده پرسش‌وپاسخ جدید آموزش «دامین‌فرانتینگ (بدون سرور) — نصب و حذف گواهی» شامل مسیر نصب و حذف گواهی برای سامسونگ، شیائومی/ردمی/پوکو، پیکسل و اندروید خام (۱۱ و ۱۲+)، هواوی/آنر، اوپو/ریلمی/وان‌پلاس، ویوو و بقیه، گزینه‌ی «پاک کردن اطلاعات ورود» با هشدار این‌که همه‌ی گواهی‌های کاربر را پاک می‌کند، هشدار امنیتی درباره‌ی به اشتراک نگذاشتن گواهی، و فهرست رفع اشکال. پرسش‌وپاسخ‌های جدید: حذف گواهی، چرا اپ یوتیوب/اینستاگرام باز نمی‌شود، خطای «از null»، تیک نخوردن مرحله‌ی نصب، خطرناک بودن یا نبودن نصب گواهی، تنظیم فایرفاکس، کانفیگ ایران ۷ و ۸ و شرط پورت ۱۰۸۰۸، انتخاب حالت مناسب برای هر کار، تأخیر قبلی شروع ویدیوها (QUIC)، و دلیل بد بودن عددهای دیلی در نسخه‌های قبل.
  • کارت دامین‌فرانتینگ بازوبسته شد و از پوشه‌ی خودش بیرون نمی‌زند با زدن روی عنوان جمع می‌شود و بعد از کامل شدن راه‌اندازی خودش جمع باز می‌شود. شرط نمایشش فقط گروه انتخاب‌شده بود، ولی وقتی گروه‌بندی پنل خاموش است ردیف پوشه‌ها پنهان می‌شود در حالی که انتخاب قبلی باقی می‌ماند — پس کارت بالای لیست کامل نودها ظاهر می‌شد.
  • پورت محلی حالا هم SOCKS و هم HTTP را قبول می‌کند inbound نوع mixed جای SOCKS تنها. برنامه‌ای که فقط پروکسی HTTP می‌شناسد می‌تواند به همان «پورت محلی» داخل تنظیمات وصل شود. پورت دوم داخلی هم باز می‌ماند چون قراردادی مشترک با موتور GST است و بررسی وضعیت/کشور خود اپ به آن وصل می‌شود.
  • سطح لاگ هسته از info به warning برگشت هنگام عیب‌یابی کندی MLM/xhttp روی info رفته بود. روی این سطح، هسته برای هر اتصال چند خط لاگ می‌نویسد و یک بارگذاری صفحه ۵۰ تا ۱۵۰ اتصال دارد — یعنی هزینه‌ی دائمی CPU و نوشتن روی حافظه در تمام مدت اتصال، برای اطلاعاتی که در نسخه نهایی خوانده نمی‌شود.
تغییریافته
  • تب گیم: جایگزینی سرور اول/دوم با موتور Aether دو سرور ثابت قدیمی وایرگارد امارات (یکی از قبل غیرفعال) حذف شدند؛ اتصال کامل بوستر بازی حالا از موتور Aether استفاده می‌کند که خودش سالم‌ترین مسیر را از میان چند پروتکل انتخاب می‌کند.
  • پنل BPB از نسخه 4.2.2 به 5.1.1 ارتقا یافت این نسخه مدل دیپلوی را کاملاً عوض کرده: تنظیمات هر حساب (UUID، پسورد Trojan، مسیر امن، ایمیل/توکن) مستقیم داخل کد ورکر جاسازی می‌شود، نه از طریق متغیرهای کلودفلر مثل قبل. دیپلوی، ورود به پنل (با JSON به‌جای متن ساده)، دریافت ساب‌لینک و ذخیره تنظیمات همگی بازنویسی شدند؛ فرم تنظیمات هم با فیلدهای نسخه جدید هماهنگ شد.
  • ورکر EDG (بر پایه cmliu/edgetunnel) به آخرین نسخه آپدیت شد شامل چند ماه بهینه‌سازی انتقال داده از منبع اصلی (بسته‌بندی هوشمند بسته‌های آپلود/دانلود، رقابت هم‌زمان چند اتصال TCP، کش سریع‌تر DNS)؛ باید کانفیگ‌های EDG را سریع‌تر و پایدارتر کند. جایگزینی کاملاً سازگار — نیازی به تغییر تنظیمات اکانت‌های موجود نیست.
  • پنل نهان (Nahan) از نسخه 2.9.4 به 3.0.0 ارتقا یافت پروکسی زنجیره‌ای VLESS به‌عنوان upstream، فرمت ساب v2rayN JSON، فرم بازطراحی‌شده افزودن/ویرایش کاربر با toggle مدرن، و رفع چند باگ RTL/حالت تاریک در داشبورد. نام بایندینگ D1 و مسیرهای API بدون تغییر — جایگزینی مستقیم فایل ورکر.
  • Aether: نشانگر زمان و توضیح در مرحله «اسکن گیت‌وی» اضافه شد این مرحله می‌تواند بسته به حالت اسکن از چند ده ثانیه تا چند دقیقه طول بکشد و روی شبکه‌هایی که MASQUE را با DPI مسدود می‌کنند تا آخرین لحظه ادامه پیدا کند — با فقط یک نشان ثابت «در حال کار»، این حالت مثل هنگ‌کردن اپ به‌نظر می‌رسید. حالا یک شمارنده زمان زنده روی این مرحله نشان داده می‌شود و بعد از ۲۰ ثانیه توضیح می‌دهد که ممکن است طول بکشد و بعضی شبکه‌ها MASQUE را کند/مسدود می‌کنند. رفتار یا نرخ موفقیت اسکن تغییری نکرده — فقط طولانی‌بودنش قابل‌فهم شده.
حذف‌شده
  • پنل Deno کاملاً حذف شد api.deno.com مدتی است در ایران فیلتر است، و مدل صورتحساب Deno (بر اساس مدت‌زمان باز بودن اتصال، نه حجم) اصلاً برای VPN مناسب نبود (تعلیق مکرر با خطای Memory Time). پنل‌های کلودفلر (BPB/EDG/Nahan) همان نیاز را بدون این دو مشکل پوشش می‌دهند.
رفع باگ
  • آیکون‌های نوار وضعیت روی برخی گوشی‌ها در تم روشن نامرئی بودند ظاهر اپ همیشه تیره است و اصلاً از تنظیم روشن/تاریک سیستم پیروی نمی‌کند، ولی edge-to-edge اجازه می‌داد رنگ آیکون‌های ساعت/باتری از همان تنظیم سیستم پیروی کند — روی گوشی با تم سیستمِ روشن، آیکون‌های تیره روی پس‌زمینه‌ی تیره‌ی اپ کاملاً نامرئی می‌شدند (فقط با روشن‌کردن دارک‌مود گوشی درست می‌شد). حالا رنگ آیکون‌ها همیشه با پس‌زمینه‌ی واقعی اپ هماهنگ است.
  • نتایج تست «دیلی واقعی» و سرعت اسکنر واقع‌بینانه‌تر شدند این تست یک اتصال واقعی پروکسی‌شده از طریق Xray برای هر کانفیگ است، نه یک پینگ خام — ولی صدها کانفیگ با تا ۸ اتصال واقعی هم‌زمان روی همان سرورها تست می‌شدند که برای کلودفلر/DPI شبیه ترافیک مشکوک به‌نظر می‌رسد و throttle می‌شود. عددهای نمایش‌داده‌شده در واقع ازدحام خودساخته‌ی همان تست را اندازه می‌گرفتند، نه شرایط واقعی شبکه را. یکی از دو محدودیت هم‌زمانی حتی کامنتی داشت که با عدد واقعی‌اش در تضاد بود. هر دو حالا روی ۳ محدود شدند.
  • کاهش محسوس مصرف باتری در حالت متصل چهار علت جدا پیدا شد که همگی تا وقتی VPN وصل بود مدام باتری می‌خوردند: (۱) تونل یک wake lock بدون سقف زمانی برای کل مدت اتصال نگه می‌داشت، پس پردازنده هیچ‌وقت به خواب عمیق/Doze نمی‌رفت — حتی تمام شب که گوشی بی‌استفاده بود و یک بایت هم رد و بدل نمی‌شد؛ حالا فقط تا وقتی ترافیک در جریان است نگه داشته می‌شود و بعد از ۵ دقیقه سکوت آزاد می‌شود (بسته‌های ورودی مستقل از این قفل پردازه را بیدار می‌کنند). (۲) یک حلقه تشخیصی باقی‌مانده هر ۵ ثانیه بیدار می‌شد فقط برای نوشتن یک عدد رم در لاگ — حدود ۱۷٬۰۰۰ بیدارشدن بی‌فایده در روز؛ حذف شد. (۳) شمارنده ترافیک هر ۲ ثانیه روی حافظه می‌نوشت حتی وقتی چیزی تغییر نکرده بود — حدود ۴۳٬۰۰۰ نوشتن بی‌فایده در روز. (۴) ناظر تعویض خودکار سرور هر ۱۰ ثانیه یک بولین را می‌خواند با این‌که این قابلیت پیش‌فرض خاموش است.
  • لینک اشتراک: آپلودهای تکراری و بی‌مورد روی کلودفلر همگام‌سازی خودکار پس‌زمینه با هر تغییر در لیست نودها کانفیگ‌ها را دوباره آپلود می‌کرد، در حالی که اکثر این تغییرات فقط فراداده‌اند (نتیجه پینگ، تست سرعت، پرچم کشور) و لیست واقعی کانفیگ‌ها را عوض نمی‌کنند — ولی هرکدام یک رفت‌وبرگشت کامل به API کلودفلر هزینه داشت، تمام روز، برای هر لینک روی هر حساب. هدررفت باتری و دیتا، و احتمالاً یکی از دلایل خطاهای کلودفلر بعد از یک روز روشن ماندن اپ. حالا اگر لیست کانفیگ‌ها واقعاً تغییر نکرده باشد، آپلود رد می‌شود.
  • افزودن اکانت کلودفلر می‌توانست بی‌جهت پشت «تایید ایمیل الزامی» قفل شود وقتی ساخت ساب‌دامین حساب شکست می‌خورد، اپ صرفاً با بررسی این‌که آیا متن خطای خام کلودفلر شامل کلمه «verify» است تصمیم می‌گرفت ایمیل تایید نشده — در حالی که چند خطای بی‌ربط دیگر هم می‌توانند همین کلمه را داشته باشند و کل پنل ابری را بدون نشانه‌ای از علت واقعی قفل می‌کردند. حالا قبل از قفل‌کردن پنل، وضعیت واقعی تایید ایمیل از endpoint وضعیت حساب کلودفلر پرسیده می‌شود؛ در غیر این صورت خطای واقعی نمایش داده می‌شود.
  • کانفیگ‌های لینک اشتراک بعد از مدتی خودشان خالی می‌شدند هر لینک اشتراک گروه نودش را به‌صورت یک رشته ترکیبی ذخیره می‌کند (مثلاً manual:engine:groupTitle). دکمه «بروزرسانی» صفحه این رشته را درست تجزیه می‌کرد، ولی وظیفه‌ی همگام‌سازی خودکار پس‌زمینه (چند ثانیه بعد از هر تغییر در نودها) نوع موتور خام را مستقیم با کل رشته مقایسه می‌کرد که هیچ‌وقت برابر نمی‌شد — پس هر بار بی‌صدا لینک را با کانفیگ خالی جایگزین می‌کرد. «بعد از ۲۰-۳۰ بار بروزرسانی» فقط به زمان رسیدن یکی از این همگام‌سازی‌های پس‌زمینه بستگی داشت. حالا همگام‌سازی خودکار هم دقیقاً مثل دکمه بروزرسانی، رشته را درست تجزیه می‌کند.
  • پروکسی محلی (SOCKS/HTTP) در «حالت پروکسی» بعد از اتصال هیچ ترافیکی رد نمی‌کرد در «حالت پروکسی» (فقط پروکسی محلی، بدون تونل کامل VPN) اپ ممکن بود «متصل» نشان بدهد ولی پروکسی هیچ سایتی را باز نمی‌کرد. علت: این حالت رابط تونل VPN نمی‌سازد، ولی تنظیمات Xray طوری ساخته می‌شد که انگار تونلی وجود دارد و به هسته Xray یک ورودی «tun» با فایل‌توصیفگر نامعتبر می‌داد؛ هسته در لحظه شروع این را قبول می‌کرد (موفقیت گزارش می‌شد) ولی چند ثانیه بعد همین ورودی می‌توانست کل موتور از جمله پروکسی SOCKS/HTTP را بی‌صدا از کار بیندازد. حالا این ورودی فقط وقتی ساخته می‌شود که رابط VPN واقعی وجود داشته باشد.
  • نامتقارن‌بودن آیکون‌های نوار پایین با تب‌های اختیاری گیم/وایرگارد وقتی دو طرف نوار تعداد آیکون متفاوت داشتند (مثلاً ۳ چپ / ۲ راست)، آیکون‌های طرف کوچک‌تر به سمت دکمه وسط جمع می‌شدند با یک فاصله خالی بعدشان، و اندازه‌شان هم با طرف دیگر فرق داشت. حالا هر دو طرف عرض ثابت و یکسان دارند و گروه آیکون‌های واقعی‌شان در وسط نیمه خودشان قرار می‌گیرد.
  • فضای خالی مرده زیر منوی همبرگری روی گوشی‌های بلند حالا فاصله بین منوی اصلی و بخش اضطراری روی گوشی‌های بلند بزرگ می‌شود (بخش اضطراری به پایین می‌چسبد)؛ روی گوشی‌های کوتاه که جا نمی‌شود، مثل قبل عادی اسکرول می‌شود.
  • پیام مبهم «Invalid API Token» هنگام افزودن اکانت با Global API Key بدون ایمیل حالا پیام واضح فارسی می‌گوید ایمیل هم برای این نوع کلید الزامی است؛ راهنمای متنی هم زیر فیلد اضافه شد.
  • خطای «آپلود ورکر MLM ناموفق بود» علت: تاریخ سازگاری ورکر از ساعت محلی گوشی محاسبه می‌شد؛ برای تایم‌زون‌های جلوتر از UTC (ایران +۳:۳۰) بین ۰۰:۰۰ تا ۰۳:۳۰ بامداد این تاریخ یک روز جلوتر از سرور کلادفلر می‌افتاد و آپلود رد می‌شد. حالا مثل بقیه ورکرهای برنامه، ثابت و امن است.
  • دیپلوی MLM/نهان گاهی برای همیشه روی «Failed to create D1 Database» گیر می‌کرد هر بار دیپلوی (حتی هر retry بعد از شکست) یک دیتابیس D1 تازه می‌ساخت و قدیمی‌ها را پاک نمی‌کرد؛ چند بار تلاش دوباره کافی بود تا سقف تعداد دیتابیس D1 حساب پر شود. حالا دیپلوی از دیتابیس موجود حساب یا یک دیتابیس رهاشده از تلاش قبلی استفاده مجدد می‌کند؛ و اگر سقف ۱۰ دیتابیسی پلن رایگان واقعاً با دیتابیس‌های ابزارهای دیگر پر شده باشد، پیام خطا اسم دقیق همهٔ آن‌ها را نشان می‌دهد تا بدانید کدام را حذف کنید.
  • دکمه «استعلام» فقط دامنه را دسته‌بندی می‌کرد، هیچ‌وقت به لیست اضافه نمی‌کرد کاربر استعلام می‌گرفت، «تحریم» می‌دید، قابلیت را روشن می‌کرد و گیج می‌شد چرا بازهم باز نمی‌شود — چون هیچ‌وقت دکمه‌ی جداگانه‌ی «افزودن» را نزده بود. حالا پیام صریح می‌گوید «افزودن» را بزنید، و اگر دامنه تحریمی باشد ولی در لیست نباشد یک هشدار قرمز واضح نشان داده می‌شود.
  • سایت‌های تحریمی (که خودِ استعلام همین بخش هم «تحریم» تشخیص می‌داد) بازهم باز نمی‌شدند — خطای ۴۰۳ مسیریابی دامنه‌ها کاملاً به تشخیص SNI از TLS ClientHello وابسته بود که برای سایت‌های دارای Encrypted Client Hello (ECH، این روزها پیش‌فرض کروم) کاملاً از کار می‌افتد. یک استخر DNS جعلی (fakedns) اضافه شد، ولی لاگ دوم نشان داد برگرداندن آی‌پی جعلی به دامنه در لحظه مسیریابی هم قابل‌اعتماد نبود؛ الان مسیریابی مستقیماً روی بازه آی‌پی استخر جعلی (198.18.0.0/15) تطبیق داده می‌شود.
  • روشن‌کردن «DNS ضد تحریم شخصی» می‌توانست سایت‌هایی که اصلاً قرار نبود دست‌خورده باشند (مثل Gmail) را هم خراب کند resolver DNS این بخش ثابت روی UDP ساده 1.1.1.1:53 بود — پروتکلی که در بسیاری از خطوط ایران فیلتر/کند می‌شود، بدون راه جایگزین. حالا مثل تنظیمات اصلی VPN از DoH روی پورت ۴۴۳ استفاده می‌کند.
  • دکمه «بروزرسانی وورکر» اضافه شد وقتی وورکر خروجی از قبل ساخته شده، می‌توانید آخرین نسخه ورکر EDG را بدون حذف/افزودن دوباره حساب، مستقیم روی همان حساب دیپلوی کنید.
  • بعد از دیپلوی موفق وورکر خروجی، صفحه هنوز دکمه «ساخت وورکر» را نشان می‌داد توابع دیپلوی فیلدهای همان آبجکت اکانت را مستقیم تغییر می‌دهند، پس Kotlin StateFlow این تغییر را «بدون تفاوت ساختاری» تشخیص داده و صفحه دوباره رندر نمی‌شد؛ کاربر باید از صفحه خارج و دوباره وارد می‌شد. حالا موفقیت به‌صورت محلی هم ردیابی می‌شود.
  • ساخت وورکر «DNS ضد تحریم شخصی» می‌توانست بعد از چند تلاش برای همیشه شکست بخورد همان باگ MLM/نهان: هر بار یک KV Namespace تازه می‌ساخت و قدیمی‌ها را پاک نمی‌کرد. حالا از namespace موجود یا رهاشده استفاده مجدد می‌کند؛ خطاها هم حالا متن واقعی پاسخ کلودفلر را نشان می‌دهند.
  • دکمه «تست سلامت پینگ» در تب اسکنر روی بعضی گوشی‌ها گیر می‌کرد یا اپ را کرش می‌کرد این مسیر خاص، برخلاف بقیه مسیرهای مشابه، فراخوانی مقداردهی اولیه هسته Xray را نداشت (یک خط به‌اشتباه کامنت شده بود)؛ نتیجه به این بستگی داشت که آیا صفحه دیگری در همان session قبلاً هسته را مقداردهی کرده باشد — دقیقاً همان الگویی که باعث می‌شد «برای بعضی‌ها کار کند و برای بعضی نه». روی بروزرسانی ساب‌اسکریپشن MLM هم اثر می‌گذاشت چون به همین مسیر وابسته است.
  • صفحه «مدیریت کاربران» MLM گاهی بلافاصله بعد از دیپلوی روی «Error fetching users» گیر می‌کرد علت: خودِ Cloudflare چند ثانیه اول بعد از فعال‌شدن یک روت تازه‌ی *.workers.dev یک ۴۰۴ موقتی (کد داخلی خودِ کلودفلر: 1042) برمی‌گرداند، قبل از اجرای کد ورکر ما. اپ حالا چند بار خودکار دوباره امتحان می‌کند؛ خطاهای واقعی هم حالا با کد HTTP و متن دقیق نمایش داده می‌شوند.
  • خطای آپلود ورکر BPB («No such module node:crypto») نسخه 5.1.1 نیاز به فلگ سازگاری nodejs_compat دارد که ارسال نمی‌شد.
  • کانفیگ‌های دریافتی از BPB کاملاً قطع بودند SNI/Host خالی می‌ماند و به دامنه پیش‌فرض BPB (www.speedtest.net) سقوط می‌کرد، چون mainDomain تنظیم نشده بود؛ حالا به آدرس واقعی ورکر تنظیم می‌شود.
  • بریدگی/عدم اسکرول منوی کشویی همبرگری در صفحه‌های کوتاه گزینه‌های اضطراری در پایین منو روی برخی گوشی‌ها غیرقابل‌دسترس بودند؛ محتوای منو حالا کامل اسکرول می‌شود.
  • ناهماهنگی پرچم بالای دکمه اتصال با واقعیت این پرچم از دیتابیس geoIP خودِ Cloudflare (فیلد loc در cdn-cgi/trace) خوانده می‌شد که گاهی اشتباه بود (مثلاً یک آی‌پی آمریکایی را کانادا نشان می‌داد). حالا از همان منبع پرچم کانفیگ‌ها (api.ip.sb/geoip) استفاده می‌کند و همیشه با هم و با ابزارهایی مثل ip.me هماهنگ است.

1.2.0

2026-07
افزوده‌شده
  • GATE MLMVPN — موتور اتصال تازه روی TCP :443 برای خطوطی که UDP محدود است؛ هزاران سرور با پرچم کشور و آرشیو کامل تاریخی سرورها.
  • تست واقعی اتصال، جدا از تست پینگ دست‌دادن کامل با سرور، نه فقط اندازه‌گیری RTT.
  • مرور سرورها بر اساس قاره/کشور با تست دسته‌جمعی
  • شتاب‌دهی UDP قابل‌انتخاب
تغییریافته
  • بازطراحی کامل تب وایرگارد
رفع باگ
  • کرش و ری‌استارت اپ چند ثانیه بعد از قطع Google Apps Script هسته تونل جدا از فرآیند اصلی اجرا می‌شود.
  • تشخیص غلط تونل سالم به‌عنوان مرده بعد از ~۱۲ ثانیه بی‌کاری در وایرگارد
  • تلاش خودکار برای ترنسپورت جایگزین و هویت تازه وارپ
امنیت
  • آی‌پی:پورت سرورها دیگر روی کارت‌ها نمایش داده نمی‌شود

1.1.0

2026-06
افزوده‌شده
  • DNS ضد تحریم شخصی فقط دامنه‌های تحریم‌شده از وورکر شخصی شما با آی‌پی تمیز عبور می‌کنند.
  • بازطراحی کامل ویزارد اضطراری دوم (Google Apps Script)
  • نصب گواهی امنیتی بدون نیاز به اتصال قبلی
رفع باگ
  • کد کپی‌شده اسکریپت تمیز شد (حذف BOM و کامنت اضافه) + گزینه ذخیره به فایل
  • بسته‌شدن ناگهانی اپ هنگام قطع اضطراری دوم
  • استانداردسازی رفتار دکمه برگشت

نسخه‌های قدیمی‌تر — خلاصه

1.0.9

نسخه ویژه شرایط اضطراری

بهینه‌سازی کامل اضطراری دوم برای شرایط سخت شبکه؛ اضطراری اول (Vercel) برای هر ۴ پنل کار می‌کند؛ رفع لگ و نشت DNS در کانفیگ‌های xHTTP؛ شش کانفیگ پیش‌فرض ایران با استراتژی‌های متفاوت عبور.

1.0.8

وایرگارد اختصاصی امارات برای کاهش پینگ؛ بازطراحی کامل تب گیم با مقایسه پینگ واقعی در حالت AUTO؛ DNS اختصاصی کلادفلر و امارات.

1.0.8 beta

پنل Deno (بدون کارت اعتباری)؛ کانفیگ VLESS/Trojan روی WS و xHTTP؛ کاشی Quick Settings؛ کاهش چشمگیر حجم اپ؛ سیستم گیم بوستر اختصاصی.

1.0.7

متد سرورلس جدید برای شرایط سخت؛ پنل اختصاصی MLMVPN با XHTTP پایدار؛ بازنویسی کامل اسکنر.

1.0.6

سیستم ساخت ساب‌لینک.

1.0.51

سازگاری کامل با اندروید ۱۵ و ۱۶ — رفع هم‌پوشانی منو با نوار ناوبری.

1.0.5

موتور ضد فیلتر SNI با ۴۰۰+ کانفیگ؛ سیستم‌های اضطراری اول و دوم معرفی شدند؛ ارتقای هسته سه پنل ابری؛ MTU دستی؛ چندزبانگی EN/FA؛ بازطراحی کامل UI.