PortForward.Pro Changelog
==========================

Version 1.2.0 (March 31, 2026)
---------------------------------

• Config file

In this version, you can configure port forwarding not only with command line arguments but also with a config file in the INI format. 
By default, the config file is named pfp.ini and located in the current directory.
You can specify your own config file using the command line argument --config <path>.

The config file has all sections that replicate command line arguments:

[forward] - used to specify the ports that you want to forward, one port in a line. It replicates the --forward command line argument.
[to-clients] - used to specify list IDs of clients, to which automatically forward ports. It replicates the --to-clients command line argument.
[connect] - used to specify list of IDs of servers to connect. It replicates the --connect command line argument.
[portmap] - used to specify static client ports for any remote ports. It replicates the --portmap command line argument.

In addition, the config file has the following sections:

[aliases] - used to specify readable aliases for node IDs. If an alias is specified, you can use it instead of node ID in any 
            place where this node ID should be specified, including the config file or in the command line.
[general] - section with general parameters. The most important of them is node_id, which defines the ID of the current node. It generated
            automatically by the portal when you download the application and should not be changed. If you lost this ID, 
            It's impossible to recover it. You can only download new copy of the application with a new ID.

See the default pfp.ini config file, which includes more detailed comments about each section. 

You can use both the config file and command line arguments. Command line arguments override config file options.

• Mixed mode

Since this version, you can use a single pfp app both as a server and client at the same time. It means that you can forward your local 
ports to other PFP nodes and at the same time connect to ports from other PFP nodes. That is why terms "client" and "server" now obsolete. 
Each node can be both a client and a server. The same, the terms "Server ID" and "Client ID" also obsolete and replaced by "Node ID". 
Now, each pfp instance has a single "Node ID" and can be used to connect to the ports of other nodes and to forward ports to other nodes.


Version 1.1.0 (February 26, 2026)
---------------------------------

• UDP support

Now you can forward UDP ports the same as TCP. To forward a port as UDP, run the command:

./pfp --forward 1234/udp

You can combine forwarding TCP and UDP ports at the same time:

./pfp --forward 22/tcp,1234/udp,80/tcp

If you do not specify either /tcp or /udp, TCP is used by default

• Forward ports from other hosts

Since this version you can forward not only local ports but also ports from any other computers in your network. 
For example, if you have a web server, running on 192.168.1.10 address on port 80, and VNC server, running on 
192.168.1.210 address on port 5900, you can forward all them from your host using the following command:

./pfp --forward 192.168.1.10:80/tcp,192.168.1.210:5900/tcp

You can forward both local ports and ports from other hosts at the same time:

./pfp --forward 22,192.168.1.10:80/tcp,192.168.1.210:5900/tcp

• Forward to static ports on clients

In previous version, when you connect to server using the --connect argument, it creates a random local port
for each server port, starting from 1024. Since this version, you can set static ports mapping for forwarded
ports. For example, if you want to forward ports 80 and 22 to your clients, and if you want to make port 80
to be available as port 1101 on the client and port 22 as port 1204 on client, you can run the following:

./pfp --forward 80/tcp=1101,22/tcp=1204

Then, when clients connect to your server using the command:

./pfp --connect <your-server-id>

then, they will see port 1101 as your web server on port 80 and port 1204 as your SSH server.

Also, clients can override port mappings on their end, using the --portmap command line argument. For example,
if they want to connect your port 80 to port 1305 and your port 22 to port 1306, they can run:

./pfp --connect <your-server-id> --portmap 80=1305,22=1306

then, they will see port 1305 as your web server on port 80 and port 1306 as your SSH server. Client can override
either all server ports, or part of them. Also, the client may disable some of your ports. For example, if clients does
not want to connect to your port 80, they can write "80=no", and this port will be skipped:

./pfp --connect <your-server-id> --portmap 80/tcp=no,22=1306

In this example, client will connect your port 22 as 1306, but do not connect the port 80.

• Connect to multiple servers from a single client

Since this version, single client can connect to many servers at the same time. To do this, the client can specify 
comma separated list of server IDs in the --connect argument. For example, let's assume that you have two servers.
First server with ID c8324a12-19fb-4256-af08-15d09c0f386e forwards the following ports:

./pfp --forward 80/tcp=1101,22/tcp=1102

Second server with ID dff3e402-8320-45bd-b4b6-6f49e697b5e6 forwards the following ports:

./pfp --forward 5000/tcp,192.168.1.210:5900/tcp

Then, client can connect to both of them with the following command:

./pfp --connect c8324a12-19fb-4256-af08-15d09c0f386e,dff3e402-8320-45bd-b4b6-6f49e697b5e6

After that, the client will have port 1101, connected to the 80/tcp port of your first server, port 1102, connected
to the port 22 of your first server, some random port (like 1024) connected to the port 5000 of your second server
and also, some random port (like 1025), connected to the port 5900 of the 192.168.1.210 host of your second server's 
network.

As with single server connection, client can redefine port mappings, using the --portmap option. In multi-server setup,
the client should specify server id before each port and set the special '#' symbol after server id. Here is how to
redefine all ports for previous example:

./pfp --connect c8324a12-19fb-4256-af08-15d09c0f386e,dff3e402-8320-45bd-b4b6-6f49e697b5e6 --portmap \
c8324a12-19fb-4256-af08-15d09c0f386e#80=1201,c8324a12-19fb-4256-af08-15d09c0f386e#22=1202,\
dff3e402-8320-45bd-b4b6-6f49e697b5e6#5000=1203,c8324a12-19fb-4256-af08-15d09c0f386e#192.168.1.210:5900=1204

Here the client connects ports 80 and 22 of your first server as ports 1201 and 1202, and ports 5000 and 192.168.1.210:5900
from your second server as 1203 and 1204.

• Forward ports from server to client

This new feature allows to forward ports from server and connect it to client in a single command. For example this command:

./pfp --forward 80=1101,22=1102 --to-clients=c8324a12-19fb-4256-af08-15d09c0f386e,dff3e402-8320-45bd-b4b6-6f49e697b5e6

will forward ports 80 and 22 and automatically connect them on clients with specified IDs in the --to-clients option, without
need to run the ./pfp --connect command on these clients. As soon as these clients available, these ports will be forwarded
to them as ports 1101 and 1102. 

If in a moment, when you run the server with --to-clients option, some clients are not available, the server will continue
attempting to forward ports to them every 5 seconds until they available, so it's not required to run clients in advance.

Also, since this version, you can run clients the following way:

./pfp --serve

In this case, the client will not connect to any server, but will wait when server forward ports using the --to-clients option.


Version 1.0.0 (February 2, 2026)
-------------------------------
Initial release with core features:
• Secure WebSocket-based tunneling
• Forward multiple ports simultaneously
• LAN device tunneling support
• Cross-platform binaries (Linux, Windows, macOS)
• End-to-end encryption (HTTPS/TLS)
• Server ID-based connection sharing

---
For updates, visit: https://portforward.pro