tnl.dev :: docs
start with tnl.
Give your local app an HTTPS URL.
install tnl
From your app's project directory, add the client as a development dependency:
npm install -D @tnldotdev/tnl@nextinitialize a project
Let tnl init create your project configuration:
npx tnl initFollow any actions it prints. tnl init adds # tnl and .tnl/ to .gitignore when needed, and tells you if TypeScript needs .tnl/project.d.ts in tsconfig.json's include array. Keep the other entries in both files. For an app without a supported framework integration, provide its start command and listening port when prompted. See project configuration for the available settings.
The command in tnl.config.ts must start your app, such as ["next", "dev"] or ["vite"]. You can then set package.json's dev script to tnl dev for a shorter startup command. Do not configure tnl to run that same script: it would start itself instead of the app. See dev command loops if that happens.
start your app
Run tnl dev to start the app and publish it:
npx tnl devSign in with GitHub when prompted. tnl prints your HTTPS public URL when the app is ready. By default, each Git worktree gets its own URL, and only your current IP address is allowed. Choose who can visit when you need to share it.
Stop tnl dev with Ctrl+C. The public URL stays saved for the next publish run; the app is not reachable while it is stopped.
publish an app that is already running
If your HTTP app already listens on port 3000, publish it without starting it again:
npx tnl publish 3000See publish for visitor access and saved URLs.
where to go next
See development for worktrees and multiple services, or how tnl works for the path a visitor connection takes.