9 releases

0.1.5 Nov 8, 2024
0.1.4 Oct 30, 2024
0.1.3 May 22, 2024
0.1.2 Jun 3, 2023
0.0.2 Nov 23, 2022

#743 in Web programming

40 downloads per month
Used in localtunnel

MIT license

24KB
538 lines

Localtunnel

localtunnel localtunnel-client localtunnel-server

Localtunnel exposes your localhost endpoint to the world, user cases are:

  • API testing
  • multiple devices access to single data store
  • peer to peer connection, workaround for NAT hole punching.

Client Usage

Known issue: the public proxy server is down, please setup your own server.

Use in CLI:

cargo install localtunnel

localtunnel client --host https://init.so --subdomain kaichao --port 3000

Use as a Rust library:

cargo add localtunnel-client
use localtunnel_client::{open_tunnel, broadcast, ClientConfig};

let (notify_shutdown, _) = broadcast::channel(1);

let config = ClientConfig {
    server: Some("https://init.so".to_string()),
    subdomain: Some("demo".to_string()),
    local_host: Some("localhost".to_string()),
    local_port: 3000,
    shutdown_signal: notify_shutdown.clone(),
    max_conn: 10,
    credential: None,
};
let result = open_tunnel(config).await?;

// Shutdown the background tasks by sending a signal.
let _ = notify_shutdown.send(());

Server Usage

Use in CLI:

localtunnel server --domain init.so --port 3000 --proxy-port 3001 --secure

Use as a Rust library,

cargo install localtunnel-server
use localtunnel_server::{start, ServerConfig};

let config = ServerConfig {
    domain: "init.so".to_string(),
    api_port: 3000,
    secure: true,
    max_sockets: 10,
    proxy_port: 3001,
    require_auth: false,
};

start(config).await?

Sponsor

Please help me build OSS 👉 GitHub Sponsors

Resources

Dependencies

~21–37MB
~666K SLoC