st-server(1)

πŸ“¦ version 1.9.0, in arch rolling

πŸ’… st-server β€” the manual, but make it make sense

okay so bestie, this is the page for st-server, part of the stlink fam ✨ (that's the manual name, in case it comes up at trivia night πŸŽ€). Strap in, because this one is literally a whole vibe: it turns your little local ST-LINK probe into a network superstar 🌈.

✨ NAME ✨

st-server β€” serve a local ST-LINK over TCP so your remote stlink tools can come hang out 🫢

✨ SYNOPSIS ✨

st-server [OPTIONS]

✨ DESCRIPTION ✨

okay so picture this πŸ’­: st-server opens one locally attached ST-LINK probe and exposes the stlink backend operations over TCP. Then a remote st-flash(1), st-info(1), or st-util(1) client can just use --remote and drive the probe from another machine entirely. main character energy, honestly πŸ‘‘.

The server owns the USB connection to the ST-LINK. Your client runs all the normal stlink target logic β€” target connection, chip detection, erase, program, verify, and GDB server behavior. no cap, that's the split πŸ’….

By default st-server listens only on the loopback address 127.0.0.1:4500. Use --bind if you wanna listen on another IPv4 address. Now listen β€” binding to 0.0.0.0 or using --bind=:PORT exposes the probe to the network 🌐. Only do that on trusted networks or behind another access-control layer such as SSH. fr fr, don't be messy about this one πŸ™ˆ.

🌸 OPTIONS 🌸

  • --bind ADDR[:PORT] β€” IPv4 address and optional port to listen on. Default is 127.0.0.1:4500. Use 0.0.0.0 to listen on all IPv4 interfaces. The shorthand :4500 is accepted and means 0.0.0.0:4500. it's giving "one flag, so many destinies" ✨
  • --port PORT β€” TCP port to listen on. This one's kept for compatibility and can be combined with --bind when the bind address doesn't already include a port. legacy icon behavior, we love to see it πŸ’–
  • --serial iSerial β€” serial number of the local ST-LINK device to serve. Wanna serve multiple probes at once? Run one st-server process per probe on different ports. teamwork makes the dream work πŸ¦‹
  • --freq kHz β€” SWD/JTAG frequency in kHz used by the server when it opens the local probe. Heads up: client commands may still set their own frequency during the remote connect sequence πŸ‘€
  • --verbose[=LEVEL] β€” enable verbose logging. If LEVEL is omitted, debug logging is enabled. tea time β˜•, except the tea is logs πŸ“
  • --help β€” print usage information. the classic "help me help you" πŸŽ€

πŸ”₯ EXAMPLES πŸ”₯

Serve the first local ST-LINK on the default loopback address:

$ st-server

Serve a specific probe on all IPv4 interfaces:

$ st-server --serial 57FF72067265575742132067 --bind=:4500

Use an SSH tunnel to keep st-server bound to loopback 🧚. On the host with the probe, run:

$ st-server

On the laptop, forward the port and use the tunnel:

$ ssh -N -L 4500:127.0.0.1:4500 pi@raspberrypi &
$ st-flash --remote 127.0.0.1:4500 write firmware.bin 0x08000000
$ st-info  --probe --remote 127.0.0.1:4500
$ st-util  --remote 127.0.0.1:4500

Serve two probes concurrently (one st-server per probe, on different ports) πŸ’€βœ¨:

$ st-server --serial aaa --port 4500
$ st-server --serial bbb --port 4501

πŸ”’ SECURITY πŸ”’

bestie. listen to me. the protocol has no authentication and no encryption 😭. A client that can reach the port has full debug and flash control of the probe. Like, the whole thing. The default loopback bind (127.0.0.1) avoids exposing the probe to the network β€” that's your bestie behavior. Use an SSH tunnel for remote access, or use --bind=0.0.0.0 only on a trusted, isolated network. iykyk πŸ”

literally do not expose this to the open internet, i am begging πŸ™

🩹 RECOVERY 🩹

If st-server gets killed during a flash operation β€” deep breath β€” normal SIGINT and SIGTERM shutdown paths close the ST-LINK handle cleanly βœ…. But a forced kill, a process crash, or a USB firmware fault can still leave the ST-LINK unresponsive 😬. If local tools such as st-info --probe also hang, reset the USB device with a tool such as usbreset, or physically replug the probe. aggressive, but it works πŸ’…

πŸ‘€ SEE ALSO πŸ‘€

st-flash(1), st-info(1), st-util(1), st-trace(1) β€” the whole friend group 🫢

This work is copyrighted. Stlink contributors. See the LICENSE file in the stlink source distribution. respect the paperwork, periodt πŸ“


and that's the page, bestie πŸŽ€ this cutie is open source version of the STMic... (the version string trailer of the stlink manual), dated Jun 2026, and it goes out as st-server(1) 🌟 mwah πŸ’‹

πŸ“¦ where this page comes from