Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
85 changes: 14 additions & 71 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,86 +6,29 @@

# LimitlessX

### No VPN. No proxy setup. No DPI hacks.
**No VPN. No proxy setup. No DPI hacks.**

Read region-restricted public X content directly on X.
Read region-restricted public X (Twitter) content directly on X.

[![Checks](https://github.com/OnurByte/LimitlessX/actions/workflows/check.yml/badge.svg)](https://github.com/OnurByte/LimitlessX/actions/workflows/check.yml)
[![MIT license](https://img.shields.io/badge/license-MIT-black)](LICENSE)
[![Open source](https://img.shields.io/badge/open-source-black?logo=github)](https://github.com/OnurByte/LimitlessX)

[![Chromium](https://img.shields.io/badge/Chromium-development_build-4285F4?logo=googlechrome&logoColor=white)](#install)
[![Firefox](https://img.shields.io/badge/Firefox-development_build-FF7139?logo=firefoxbrowser&logoColor=white)](#install)
[![Helium](https://img.shields.io/badge/Helium-locally_verified-black)](docs/compatibility.md)
[Open source](LICENSE) ⁜ MIT ⁜ Rust + TypeScript

</div>

LimitlessX detects supported country-withholding notices and displays available public profiles, posts and replies inside X. It uses FxTwitter as an alternative public source, with no X login or separate LimitlessX account.

**Open source, MIT licensed.** Rust owns fetching, validation, sessions and storage. TypeScript connects those components to the browser. All executable code ships in the extension. There is no LimitlessX backend, analytics or remote executable code.

## What it does

- Automatically replaces a supported regional-withholding notice with available public content.
- Shows five posts first, then loads more as you scroll. Existing videos keep playing during feed expansion.
- Displays profile details, media, quoted posts and available conversation replies in X's visual style.
- Resolves exact public account identities when a username lookup fails, without confusing similarly named accounts.
- Keeps unique local counts of successfully viewed restricted accounts and posts. Disable or clear them in the popup.
- Uses one popup for manual URLs, current-page actions and settings. No extension reader page or iframe.

## Install

**Development builds. Not published in browser stores yet.** These badges describe build targets and test evidence, not store availability.

Build the project below, then load the generated package:

| Browser | Local installation | Verification |
|---|---|---|
| Chromium | Open the Extensions page, enable Developer mode, choose **Load unpacked**, select `dist/chromium` | Packaged extension integration tests |
| Helium | Use `chrome://extensions`, enable Developer mode and load `dist/chromium` | Actual X session tested locally |
| Firefox | Open `about:debugging`, choose **This Firefox**, **Load Temporary Add-on**, select `dist/firefox/manifest.json` | Packaged extension integration tests |

Firefox temporary add-ons disappear when the browser closes. Permanent Firefox distribution requires signing. Other Chromium/Firefox variants are intended targets; see [individual browser evidence](docs/compatibility.md) before assuming compatibility.

On a supported blocked X profile or post, reading starts automatically. The popup also accepts an `@handle` or an X profile/post URL.

## Privacy and limits

The public provider receives requested identifiers and network information, including your IP address. Media loads from X media hosts. Requests omit credentials; the extension does not read X passwords, authentication cookies or private messages. This is not an anonymity tool.

The Record stores unique salted identifier hashes in local IndexedDB. It does not store post bodies or plaintext browsing history. Failed requests and ordinary manual lookups do not increase restricted-content totals.

Availability depends on the provider and public source. Private content is unavailable. Timelines, replies and metadata can be incomplete; this is a focused reader, not a complete authenticated X client. Identity recovery fixes a known username-lookup failure, not every possible provider outage. Read the [privacy details](docs/privacy.md) and [release audit](docs/verification/release-audit.md).

## Build

Requirements: Node.js 22+, npm, rustup, Python for browser tests, `wasm-bindgen` 0.2.129 and Binaryen `version_133`. Rust 1.99.1 and the WASM target are pinned in `rust-toolchain.toml`.
## Download

```sh
npm ci --ignore-scripts
cargo install wasm-bindgen-cli --version 0.2.129 --locked
# Install Binaryen version_133 and place wasm-opt on PATH.
cargo xtask build chromium
cargo xtask build firefox
cargo xtask test
cargo xtask package
```
| Chrome, Helium, Brave, Edge, Opera, Vivaldi | Firefox |
| :---: | :---: |
| <img src="docs/browsers/chrome.svg" alt="Chrome" width="40" height="40"> <img src="docs/browsers/helium.svg" alt="Helium" width="40" height="40"> <img src="docs/browsers/brave.svg" alt="Brave" width="40" height="40"> <img src="docs/browsers/edge.svg" alt="Edge" width="40" height="40"> <img src="docs/browsers/opera.svg" alt="Opera" width="40" height="40"> <img src="docs/browsers/vivaldi.svg" alt="Vivaldi" width="40" height="40"> | <img src="docs/browsers/firefox.svg" alt="Firefox" width="48" height="48"> |
| [**Download ZIP**](https://github.com/OnurByte/LimitlessX/releases/latest/download/limitlessx-chromium.zip) | [**Download ZIP**](https://github.com/OnurByte/LimitlessX/releases/latest/download/limitlessx-firefox.zip) |

If needed, set `WASM_BINDGEN` and `WASM_OPT` to their executable paths. `cargo xtask` typechecks and compiles the handwritten TypeScript adapters; application logic remains in Rust. Packages and a reviewable source archive are written to `dist/releases`.
**Chrome and related browsers:** extract the ZIP, open the Extensions page, enable **Developer mode**, then **Load unpacked** and select the extracted folder.

## Verify and contribute
**Firefox:** extract the ZIP, open `about:debugging` → **This Firefox** → **Load Temporary Add-on**, then select `manifest.json`. This unsigned add-on must be loaded again after restarting Firefox.

```sh
npm run typecheck
cargo fmt --all -- --check
cargo clippy --workspace --all-targets --locked -- -D warnings
cargo clippy --target wasm32-unknown-unknown -p limitless-runtime -p limitless-ui --locked -- -D warnings
python3 -m pip install -r tests/browser/requirements.txt
python3 -m playwright install chromium firefox
```
## Use

The [CI workflow](.github/workflows/check.yml) runs native checks, builds both packages and exercises the installed extensions. Browser fixtures cover malformed responses, identity recovery, navigation, pagination, counters and retry behavior. Firefox's inline test also uses a live public provider response; that dependency is disclosed in its output.
Open a region-restricted profile or post on X. Available public content appears automatically. Five posts load first; scroll for more. The popup accepts an `@handle` or X URL and keeps your viewing counts locally.

Issues and pull requests are welcome. Keep permissions narrow, executable code local, provider text escaped and public/private boundaries explicit. Include a regression test for behavioral fixes. See [architecture](docs/architecture.md), [design](docs/brand.md) and [browser tests](tests/browser).
Public data comes from [FxTwitter](https://github.com/FxEmbed/FxEmbed). Availability varies; private accounts are unavailable. No X credentials or analytics. [Privacy](docs/privacy.md) ⁜ [Browser compatibility](docs/compatibility.md)

Built with Rust, WebAssembly, Leptos and TypeScript. Public data via [FxTwitter / FxEmbed](https://github.com/FxEmbed/FxEmbed).
[Build from source](docs/build.md) ⁜ [Architecture](docs/architecture.md) ⁜ [Tests](.github/workflows/check.yml)
7 changes: 7 additions & 0 deletions docs/browsers/SOURCES.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# Browser icons

Chrome, Firefox, Brave, Edge, Opera and Vivaldi: [Browser Logos](https://github.com/alrra/browser-logos/tree/58881b84c4d73adc03c06fa2c275a7abee02d935/src).

Helium: [official branding](https://github.com/imputnet/helium/blob/58261a24341935be831fa3b97d31c46232c81b59/resources/branding/product_logo.svg).

Browser names, logos and trademarks belong to their respective owners. They identify package targets and do not imply endorsement or browser-store publication.
1 change: 1 addition & 0 deletions docs/browsers/brave.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions docs/browsers/chrome.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions docs/browsers/edge.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Loading