Skip to content

Releases

RIX v1.0.7

Choose a tag to compare

@RIX-REZA RIX-REZA released this 06 Nov 14:44
a20828f

RIX v1.0.7 — Universal build for Android (arm64-v8a, armeabi-v7a, x86_64, x86) + Windows x86_64.

Android

  • RIX-v1.0.7.apk — Universal debug APK (all ABIs included)

Windows

  • RIX-Setup-*.exe — Installer (diagnostics, SHA-256 integrity, optional Authenticode)
  • RIX-Portable.zip — Portable bundle (same fixes)

Security

  • Core integrity verified via pinned SHA-256
  • Authenticode signing pipeline ready (enable via RIX_SIGNING_ENABLED=true)
  • Build provenance attested

RIX v1.0.6

Choose a tag to compare

@github-actions github-actions released this 31 Oct 15:09

RIX 1.0.6

فقط رفع باگ — قطع کامل، سایفونِ کارکننده، اتصال پایدار روی ویندوز

Bug fixes only — a complete teardown, a Psiphon that works, a Windows connection that stays up.


فارسی

چه چیزی عوض شد

این نسخه هیچ قابلیت تازهای ندارد؛ فقط چیزهایی را درست میکند که کار نمیکردند.

سایفون روی اندروید درست شد. بخش سایفون همیشه با «خطای کتابخانه» تمام میشد و شروع نمیشد. مشکل در بسته‌بندی یا معماری نبود: خطای واقعی پشت یک پیام کلی پنهان میشد و برنامه هم پس از اولین تلاش، سایفون را رها میکرد. حالا:

  • کل زنجیره علت خطا (نه فقط «failed to start Psiphon library») در گزارش برنامه نوشته میشود.
  • پوشه وضعیت سایفون اگر خراب یا نیمه‌نوشته باشد یک بار پاک و دوباره تلاش میشود — همان کاری که نصب مجدد میکرد.
  • کتابخانه بومی اگر از مسیر معمول بارگذاری نشود، از پوشه استخراج برنامه دوباره امتحان میشود و دلیل واقعی در گزارش میآید.
  • «پورت آزاد است» دیگر به‌عنوان موفقیت حساب نمیشود؛ برنامه واقعاً به پورت وصل میشود تا مطمئن شود سایفون همان‌جاست، نه برنامه دیگری.
  • پورتِ اشغال‌شده به‌جای «آماده» به‌عنوان خطا گزارش می‌شود، و محدودیت زمانی انتظار از ۲۰ ثانیه به ۴۵ ثانیه رسید (سایفون باید اول فهرست سرورهایش را بگیرد).

قطع اتصال از بیخ انجام میشود. آیکون کلید و نوتیفیکیشن وی‌پی‌ان پس از قطع کردن روی گوشی می‌ماند. علتش این بود که hev هرگز توصیف‌گرِ TUN را که به آن داده شده نمی‌بندد (tunnel_init برای توصیف‌گر بیرونی tun_fd_local را ست نمی‌کند)، و سرویس هم توصیف‌گر خودش را جدا کرده و رها کرده بود؛ پس هیچ‌کس آن را نمی‌بست. حالا:

  • خودِ برنامه شماره توصیف‌گر را نگه می‌دارد و در همه مسیرها می‌بندد: پایان کار موتور، توقف عادی، قطع کامل و نابودی سرویس.
  • بستن TUN و برداشتن نوتیفیکیشن همان لحظه و همزمان با زدن قطع انجام می‌شود، نه بعد از تمام‌شدن خاموشی سایفون که می‌توانست ثانیه‌ها طول بکشد یا هرگز تمام نشود.
  • بستن توصیف‌گر حتی موتورِ گیرکرده را هم آزاد می‌کند، چون poll بعدی‌اش با خطا برمی‌گردد.
  • یک نسخه قدیمیِ در حال نابودی دیگر نمی‌تواند نشست تازه‌ای را که جایگزینش شده از هم بپاشد.

اتصال ویندوز دیگر قطع و وصل نمی‌شود. دو علت داشت:

  • برنامه برای پروسه‌هایی که خودش متوقف کرده بود هم رویداد «هسته خارج شد» صادر می‌کرد؛ پس هر تلاش جایگزین روی هسته‌ای که سالم بود «هسته متوقف شد» نشان می‌داد و نشست را لغو می‌کرد. حالا هر اجرا نشانه خودش را دارد و خروجی که به اجرای زنده مربوط نیست نادیده گرفته می‌شود.
  • یک تلاش لغوشده می‌توانست هسته‌ای را که تلاش بعدی همین حالا شروع کرده بود متوقف کند. حالا فقط صاحبِ فعلیِ نشست اجازه توقف هسته را دارد.

باگ کتابخانه سایفون روی ویندوز هم برطرف شد. همان درمان: پوشه وضعیت سایفون پیش از اجرای هسته ساخته می‌شود، بودجه انتظارِ شنونده به اندازه واقعی بالا آمدن سایفون است، و اگر تلاش سایفون شکست بخورد دفعه بعد از پوشه‌ای پاک‌شده شروع می‌شود.

بقیه اصلاحات سطحی: هیچ خطای کتابخانه‌ای دیگر سایفون را برای همیشه خاموش نمی‌کند (هر اتصال یک بار دوباره تلاش می‌شود)، و پیام شکست نهایی وقتی آخرین گزینه سایفون بوده همان را می‌گوید، نه «هیچ پروتکلی جواب نداد».

نصب

  • اگر ۱.۰.۳ یا جدیدتر دارید، همین APK را نصب کنید؛ روی نسخه قبلی می‌نشیند. نیازی به حذف برنامه نیست.
  • اگر روی ۱.۰.۲ یا قدیمی‌تر هستید، یک بار برنامه را حذف کنید (امضای نسخه‌های قدیمی عوض می‌شد).

English

What changed

Nothing new was added. This release only fixes what did not work.

Psiphon on Android is fixed. The Psiphon section always ended in a library error and never started. The failure was hidden rather than absent: every start wrapped the real reason in "failed to start Psiphon library", and one early failure disabled Psiphon for the rest of the process. Now:

  • The whole cause chain is written to the in-app log, not just the wrapper message.
  • A Psiphon state directory left half-written is cleared and the start retried once — what a reinstall would have done.
  • If the native library does not load from the usual path, it is retried from the app's extraction directory, and the loader's own reason is logged.
  • A port that merely accepts is no longer taken as proof: the app connects to it to confirm Psiphon is the one serving there, rather than waiting for a notice that only arrives after a tunnel is already up.
  • A port already in use is reported as a failure instead of as readiness, and the listener budget went from 20 s to 45 s, because Psiphon fetches its server list first.

Disconnecting now tears the VPN down from the root. The key icon and the VPN notification stayed in the status bar after a disconnect. hev never closes an external TUN descriptor — tunnel_init(extern_tun_fd) returns without setting tun_fd_local — and the service had detached its own descriptor and dropped it, so nothing closed it. Now:

  • The app keeps the descriptor number and closes it on every path: when the engine ends, on a normal stop, on a full teardown, and when the service is destroyed.
  • Closing the TUN and removing the notification happen synchronously, the moment stop is pressed, instead of after a Psiphon shutdown that could take seconds — or never finish.
  • Closing the descriptor also releases a wedged engine, because its next poll fails.
  • A dying service instance can no longer tear down the newer session that replaced it.

The Windows connection no longer drops and reconnects on its own. Two causes:

  • The app raised "the core exited" even for processes it had stopped itself, so every fallback attempt reported a failure over a core that was healthy and cancelled the session. Each start now claims its own lifetime token, and an exit that belongs to a run nobody holds is ignored.
  • A cancelled attempt could stop the core a newer attempt had just started. Only the attempt that currently owns the session may stop the core now.

The Psiphon library bug is fixed on Windows too. Same treatment: the Psiphon state directory is created before the core starts, the listener budget matches how long Psiphon actually takes, and a failed Psiphon attempt is retried from a cleared directory.

Other surface fixes: a library failure no longer disables Psiphon for the rest of the process (it is retried once per connect), and the final failure message names Psiphon when Psiphon was the last thing tried instead of claiming no transport worked.

Installing

  • On 1.0.3 or newer: install over the top, no uninstall needed.
  • On 1.0.2 or older: uninstall once, because those builds were signed with a throwaway key.

Windows / ویندوز

RIX-Setup-1.0.6.exe — per-user install, no administrator prompt, no driver.
RIX-Portable.zip — the same application without an installer: unzip and run RIX.exe.

The Windows app carries the same core and the same transports, configures the Windows system proxy, and keeps the core inside a job object that kills it with the app. 1.0.6 changes only its stability: the core is no longer stopped twice by overlapping attempts, and Psiphon starts from a clean state after a failed attempt. The README explains the system-proxy choice and why there is no TUN.


اگر جایی گیر کرد، گزارش داخل برنامه را بفرستید · if something breaks, send the in-app log

یادداشت ۲ نوامبر ۲۰۲۶ — همهٔ فایل‌های این نسخه از main دوباره ساخته شدند

هر چهار فایل این ریلیز در ابتدا از کدی ساخته شده بودند که رفع باگ‌ها را
نداشت. الان همه از main در commit 3f6ac95 ساخته شده‌اند:

فایل وضعیت SHA-256
RIX-1.0.6-debug.apk جایگزین شد (۱ نوامبر) 4d5071445e9738417996bfd637e0a21bfd5763908e47c10a32c33b5444410e4e
RIX-1.0.6.zip جایگزین شد (۲ نوامبر) —
RIX-Setup-1.0.6.exe دوباره ساخته شد (۲ نوامبر) —
RIX-Portable.zip دوباره ساخته شد (۲ نوامبر) —

چرا: فایل APK قبلی پیش از رفع باگِ نام پروتکل سایفون ساخته شده بود و روی
گوشی با invalid tunnel protocol: FRONTED-MEEK-CDN-OSSH متوقف می‌شد — یعنی
همان باگی که توضیحات بالای همین صفحه رفع‌شده اعلامش می‌کرد. بستهٔ
RIX-1.0.6.zip هم همان APK قدیمی را در خود داشت. دو فایل ویندوز هم پیش از
اصلاح race در teardown ساخته شده بودند.

versionCode همچنان 7 و versionName همچنان 1.0.6 است و امضای اندروید
هم همان کلید قبلی است، پس روی نصب موجود بدون حذف نصب به‌روزرسانی می‌شود.
فایل‌های قدیمی قابل بازسازی‌اند: از تگ v1.0.6 (commit a92f4ef).

Note, 2 Nov 2026: all four assets on this release now come from main at
3f6ac95. They were originally built from code that predated the fixes this
release's notes describe -- the APK stopped with
invalid tunnel protocol: FRONTED-MEEK-CDN-OSSH, RIX-1.0.6.zip carried that
same stale APK, and both Windows files predated the teardown race fix.
versionCode is still 7, the Android signature is the same key, so it
updates in place. The superseded files can be rebuilt from tag v1.0.6
(a92f4ef).

RIX 1.0.5

Choose a tag to compare

@RIX-REZA RIX-REZA released this 30 Oct 18:04

RIX 1.0.5

سریع‌تر، ساده‌تر، دو زبانه — و برای اولین بار سایفون و ویندوز

Faster, quieter, bilingual — and for the first time, Psiphon and Windows.


فارسی

چه چیزی عوض شد

روان‌تر شد. انیمیشن‌ها و بازسازی‌های اضافی صفحه حذف شدند، وضعیت اتصال فقط وقتی عوض می‌شود که واقعاً عوض شده باشد، و شمارنده‌های بالا/پایین از خود هسته می‌آیند (--stats) به‌جای آنکه برنامه تخمین بزند. دکمه‌ها دیگر منتظر چیزی نمی‌مانند.

رابط مینیمال شد. یک دکمه برای اتصال، سه عدد برای ترافیک، و سه کارت کوچک: آی‌پی خروجی، اتصال خودتان، پروتکل. بقیه چیزها لازم نبود.

دسته‌بندی تنظیمات کوتاه شد. به‌جای یک لیست بلند، چهار گروه کوتاه که هر کدام فقط وقتی باز می‌شوند که رویشان بزنید: اتصال، شبکه، سایفون، برنامه.

دو زبانه. فارسی و انگلیسی، با چیدمان راست‌به‌چپ برای فارسی. دکمه زبان در نوار بالا.

دکمه تیره/روشن درست شد. حالا هر دو پوسته کامل‌اند و انتخاب شما بین اجراها می‌ماند.

باگ اتصال دروغین رفع شد. قبلاً به‌محض زدن دکمه، برنامه «متصل» می‌نوشت؛ حالا فقط بعد از اینکه یک درخواست واقعی از داخل تونل برگشت، متصل می‌گوید. تا آن لحظه «در حال اتصال» است و اگر هیچ پروتکلی جواب نداد، دلیلش را می‌نویسد.

باگ آیکون کلید و نوتیفیکیشن رفع شد. وقتی از داخل برنامه قطع می‌کردید، آیکون کلید و نوتیفیکیشن وی‌پی‌ان گاهی روی گوشی می‌ماندند. علت این بود که دستور قطع به سرویسی می‌رسید که در حال اجرا نبود؛ حالا به سرویسی می‌رسد که واقعاً اتصال را دارد.

آی‌پی‌چک دقیق‌تر شد. آدرس خروجی از cloudflare.com/cdn-cgi/trace خوانده می‌شود — همان آدرسی که طرف مقابل واقعاً می‌بیند — همراه با کشور، دیتاسنتر و وضعیت WARP. هر ۹۰ ثانیه دوباره بررسی می‌شود.

سایفون (بتا). حالا می‌توانید ترافیک را از داخل تونل WARP به سایفون بفرستید و از کشور دلخواه خارج شوید:

برنامه‌ها → TUN → Masque/WireGuard → WARP → سایفون → اینترنت

کشور خروجی و پروتکل سایفون (خودکار / سرعت / سازگاری) در تنظیمات قابل انتخاب است. چون سایفون باید اول فهرست سرورهایش را بگیرد، اتصال در این حالت چند دقیقه طول می‌کشد. این بخش در حالت بتا است.

Note

سایفون برای کسانی است که می‌خواهند آی‌پی خروجی‌شان کشوری غیر از ایران باشد. اگر فقط می‌خواهید آزادانه به اینترنت وصل شوید، همان حالت عادی کافی است و سریع‌تر است.

نصب

  • اگر ۱.۰.۳ یا جدیدتر دارید، همین APK را نصب کنید؛ روی نسخه قبلی می‌نشیند.
  • اگر روی ۱.۰.۲ یا قدیمی‌تر هستید، یک بار برنامه را حذف کنید (امضای نسخه‌های قدیمی عوض می‌شد).

English

What changed

It moves. The extra screen rebuilds and idle animations are gone, the state only changes when it genuinely changed, and the up/down counters come from the core's own --stats output instead of an estimate. Buttons answer immediately.

A quieter screen. One button to connect, three numbers for traffic, three small cards: exit address, your own connection, transport. The rest was not earning its place.

Shorter settings. One long list became four short groups that open only when tapped: connection, network, Psiphon, app.

Two languages. Persian and English, with right-to-left layout for Persian. The toggle sits in the title bar.

The theme toggle works. Both themes are complete now, and the choice survives a restart.

The "connected" lie is fixed. The button used to say connected the moment it was pressed. Now it says connected only after a real request has come back through the tunnel; until then it says connecting, and if no transport answers it says why.

The key icon and the notification now disappear. Stopping from inside the app could leave the VPN notification and the key icon behind, because the stop was delivered to a service that was not the one running. It now reaches the service that owns the connection.

The address check is real. The exit address comes from cloudflare.com/cdn-cgi/trace — the address the far end actually saw — with its country, the Cloudflare datacentre and the WARP state, re-checked every 90 seconds.

Psiphon, BETA. Traffic can now be carried from inside the WARP tunnel to Psiphon and out through the country you choose:

apps → TUN → Masque/WireGuard → WARP → Psiphon → internet

The exit country and the Psiphon protocol (automatic / speed / compatibility) are settings. Connecting takes minutes in this mode, because Psiphon fetches its server list first.

Note

Psiphon is for leaving from a country other than Iran. If you only want the open internet, the normal mode is faster and is all you need.

Installing

  • On 1.0.3 or newer: install over the top.
  • On 1.0.2 or older: uninstall once, because those builds were signed with a throwaway key.

Windows / ویندوز

RIX-Setup-1.0.5.exe — نصب سریع، بدون دسترسی ادمین، بدون درایور.
RIX-Portable.zip — همان برنامه بدون نصب؛ فایل را باز کنید و RIX.exe را اجرا کنید.

RIX now exists on Windows as a desktop app: the same core, the same transports, the same rule about what "connected" means, with a window around it. It configures the Windows system proxy, so Edge, Chrome and everything else that asks Windows where the proxy is goes through the tunnel; anything else can point at the local SOCKS5 endpoint. There is no TUN and no driver in this release, and the README explains exactly why. The portable zip is the same application without an installer: unzip it and run RIX.exe.


اگر جایی گیر کرد، گزارش داخل برنامه را بفرستید · if something breaks, send the in-app log

RIX 1.0.3

Choose a tag to compare

@RIX-REZA RIX-REZA released this 29 Oct 15:50

RIX 1.0.3

نسخهٔ ۱.۰.۳ روی دو چیز تمرکز دارد: اینکه در شبکه‌های سخت (ایران) واقعاً وصل شود، و اینکه دیگر لازم نباشد هر بار برنامهٔ قبلی را پاک کنی.

۱) اتصال در ایران — چرخش خودکار پروتکل

مشکل اصلی این بود که WireGuard و MASQUE/HTTP-3 روی UDP کار می‌کنند و UDP اولین چیزی است که در شبکه‌های فیلترشده بسته می‌شود. پس انتخاب یک پروتکل ثابت یعنی «وصل نمی‌شود»، نه «کمی کندتر».

از این نسخه، هنگام اتصال یک زنجیرهٔ کوتاه از پروتکل‌ها امتحان می‌شود:

  1. همان پروتکلی که خودت انتخاب کرده‌ای (اول، با فرصت بیشتر)
  2. MASQUE روی HTTP/2 — روی TCP 443؛ در ایران پایدارترین گزینه چون به UDP کاری ندارد
  3. Gool — اگر HTTP/2 هم جواب نداد
  4. MASQUE داخل MASQUE — لایهٔ camouflage اضافه
  • روی گزینه‌های جایگزین، Fragment خودکار روشن می‌شود (همان ترفندی که DPI را رد می‌کند).
  • هر پروتکل باید یک درخواست واقعی end-to-end را از تونل عبور دهد تا قبول شود؛ صرفِ باز شدن پورت کافی نیست. پس برنامه فقط وقتی «متصل» می‌زند که واقعاً ترافیک رد و بدل شده باشد.
  • پروتکلی که موفق شد به خاطر سپرده می‌شود؛ دفعهٔ بعد مستقیم سراغ همان می‌رود و اتصال سریع‌تر است.
  • در نوار وضعیت می‌بینی کدام پروتکل تونل را برقرار کرده (ممکن است با انتخاب تو فرق داشته باشد — همینطور که باید).
  • در تنظیمات، کلید «چرخش خودکار پروتکل» اضافه شده. اگر خاموشش کنی، رفتار قدیمی (فقط همان پروتکل انتخابی) برمی‌گردد.
  • پیش‌تنظیم «ایران (مقاوم)» هم اضافه شده: MASQUE/HTTP-2 + Fragment + اسکن کامل + چرخش خودکار.

اگر قبلاً WireGuard را انتخاب می‌کردی و وصل نمی‌شد، حالا حتی اگر WireGuard شکست بخورد، برنامه خودش سراغ مسیر TCP می‌رود.

۲) آپدیت بدون پاک کردن برنامه

تا حالا فایل APK هر بار با یک کلید تازهٔ موقتی امضا می‌شد (کلید پیش‌فرض Gradle روی هر ماشین CI از نو ساخته می‌شود)، و اندروید اجازهٔ نصب روی نسخهٔ قبلی را نمی‌داد — برای همین مجبور بودی اول حذف کنی.

از این نسخه، همهٔ بیلدها با یک کلید ثابت امضا می‌شوند، پس از این به بعد فقط کافی است APK جدید را نصب کنی و «به‌روزرسانی» را بزنی.

⚠️ یک بار باید نسخهٔ نصب‌شدهٔ فعلی (۱.۰.۲) را حذف کنی. آن نسخه با کلید موقتی امضا شده و هیچ راهی برای نصب روی آن نیست. از ۱.۰.۳ به بعد دیگر این کار لازم نیست.

بقیهٔ تغییرات

  • IP اختصاصی VPN بین نمایشگر آپلود و دانلود نشان داده می‌شود (به‌همراه لبهٔ Cloudflare و کشور).
  • منطق وضعیت درست شد: با زدن دکمه ابتدا «در حال اتصال» و بعد از تأیید واقعی «متصل» نمایش داده می‌شود.
  • لگ و کندی پاسخ دکمه‌ها برطرف شد.
  • آیکون و لوگوی برنامه بازطراحی شد (شامل آیکون مونوکروم برای تم‌های اندروید ۱۳+).
  • صفحهٔ تنظیمات بازنویسی شد: کارت خلاصه، ۵ پیش‌تنظیم آماده، گروه‌های بازشو و بازگشت به مقادیر پیش‌فرض.

نصب: فایل app-debug.apk را روی گوشی باز کن و اجازهٔ نصب از منابع ناشناس را بده.