Lumen Android 1.0.0
🚀 انتشار اولین نسخه کلاینت LUMEN
با افتخار اولین نسخه از کلاینت LUMEN را برای دسترسی آسانتر، سریعتر و بهتر به اینترنت آزاد منتشر میکنیم.
با همکاری تیم VOXI در ایران، تلاش کردهایم برنامهای بهینه، پایدار و کاربرپسند برای کاربران ایران، روسیه و چین توسعه دهیم. این تنها آغاز راه است و با همکاری و بازخورد کاربران، LUMEN را هر روز بهتر و کاملتر خواهیم کرد.
📢 کانال رسمی VOXI: @VOXINET
🚀 First Release of the LUMEN Client
We are proud to announce the first release of the LUMEN client, designed to provide easier, faster, and more reliable access to the free internet.
In collaboration with the VOXI team in Iran, we have developed an optimized, stable, and user-friendly application for users in Iran, Russia, and China. This is just the beginning, and with continued collaboration and community feedback, we will keep improving and expanding LUMEN.
📢 Official VOXI Channel: @VOXINET
🚀 Первая версия клиента LUMEN
Мы рады представить первую версию клиента LUMEN, созданного для более удобного, быстрого и стабильного доступа к свободному интернету.
Совместно с командой VOXI в Иране мы разработали оптимизированное, стабильное и удобное приложение для пользователей Ирана, России и Китая. Это только начало, и благодаря сотрудничеству и отзывам пользователей мы продолжим активно развивать и совершенствовать LUMEN.
📢 Официальный канал VOXI: @VOXINET
Lumen Android 1.0.0
- feat: user-created server groups. Create, rename and delete your own groups next to the built-in ones, assign servers from the per-server menu or by multi-select, and move them back out. Deleting a group never deletes its servers — they return to the default bucket. Membership is keyed on a stable node key rather than the database row id, so it survives a subscription refresh that re-imports every node.
- feat: launcher icon picker. Customization now offers three tiles — Follow system, Light and Dark — backed by
<activity-alias>entries. The switch is written so that every intermediate state keeps exactly one launcher entry enabled, even if the process is killed mid-switch, and the stored choice is re-applied on startup so a reinstall does not silently revert it. - feat: full provider card for subscriptions. The announcement, description and banner are rendered, together with buttons for whatever links the panel actually sent — Channel/Bot, Support, Email, Website, Premium. Buttons appear only for links that exist, so a plain subscription looks exactly as before.
hide-urlis honoured. - feature: complete subscription header support.
profile-description,announce-url,telegram-url,support-url,support-email,profile-web-page-url/homepage,premium-url, thebanner-*family,hide-urlandsort-orderare now read, typed and validated. Header names are matched case-insensitively, documented alternatives (subscription-name,content-disposition) are accepted, and the same parameters may arrive as body comments — HTTP headers win. - feature: provider metadata is persistent. The announcement, links and update interval are stored in the database instead of living in memory, so they survive a restart. A refresh that returns fewer headers no longer erases values the panel sent earlier — the same rule the traffic counters already followed.
- feature: device DNS resolvers are used for bootstrap. The bootstrap resolver was hard-coded to
1.1.1.1; it now prefers the resolvers the current network reports, falling back to1.1.1.1only when none is usable. On carriers that block or hijack UDP/53 to public resolvers, the client could previously not even resolve the tunnel endpoint's own hostname. - fix: DNS exchange failures on subscriptions that worked everywhere else. When a node's profile carried a private DNS address (a WireGuard/AmneziaWG
DNS =line, often10.x.x.x),dns.finalpointed straight at it. sing-box has no failover fordns.final— it is exactly one server — so a resolver that nothing answers on inside the tunnel killed every single name lookup while the tunnel itself was healthy, producing endlessdns exchange failed. The profile resolver is now raced against the proxied resolver, so it still wins when it works and no longer takes everything down when it does not. Desktop was unaffected because it does not route all DNS through the proxy by default. - fix:
bind: address already in useon the local HTTP inbound. Reconnects and server switches could die withstart inbound/http[http-in]: listen tcp 127.0.0.1:10809: bind: address already in use. Port-conflict recovery covered only the SOCKS inbound, so retries re-picked that port and hit the same HTTP conflict every time — which is why changing the port in settings did not help. The HTTP inbound is now conflict-checked and relocated the same way. - fix: base64 subscription fields shown raw. A panel sending
base64:...forprofile-title,profile-description,announce,banner-textorbanner-button-texthad that literal string displayed. Only the title was ever decoded. The decoder now handles all of them, accepts a case-insensitive prefix, the URL-safe alphabet and missing padding, leaves an unprefixed value alone even when it looks like base64, and falls back to the raw text instead of blanking the card on malformed input.
Virustotal 0/67
Full Changelog: android-v0.9.9...android-v1.0.0