Repository navigation
Releases
Polygate 0.6.5
Polygate 0.6.5
Psiphon and the dashboard no longer lose their files on Windows
The portable app used to run from a folder in %TEMP%. Windows (Storage Sense, disk clean-up) deletes files there that are not open at that moment, even while the app runs, so after a few hours Psiphon could report "The Psiphon client is not in this build" and the dashboard or the app window could stop loading.
Polygate now copies itself once per version to %LOCALAPPDATA%\Polygate\app and runs from there; nothing it needs is left in %TEMP%. The first start of a new version takes a few seconds longer while it copies, copies of older versions are removed by themselves, and your settings and keys stay where they were. Starting the app again while it runs only brings the open window forward. Updates work as before.
Cancel long actions
Actions that take a while now have a Cancel button, and cancelling stops the work in the gateway, not just the spinner:
- Route test (every Psiphon region too): stops at once and leaves the route exactly as it was.
- Relay deploy: anything that deploy had already created on Vercel, Netlify or Cloudflare is removed again. Deploying several Vercel regions also has Cancel now beside "Stop after this one".
- Relay update and delete, Psiphon → Update servers (keeps your current server list), WARP → Set up & connect (no tunnel left running), MCP → Test connection and Run tool, Models → Check (a cancelled check does not count against the model), the Agent engine download and the app update download.
Closing a dialog while it works cancels it too. Work a cancelled action had already scheduled for later, such as a Psiphon region's new-address check, still runs.
Psiphon
- The region list no longer jumps between lengths, and chosen regions no longer disappear from it. A running client can only add regions to the list; Update servers replaces it; regions you have chosen always show.
- No limit on how many regions you choose. All the regions Psiphon offers (25 today) can be selected at once.
- Full country names for Australia, Indonesia and more.
Relays
- A new relay is never deployed under a name that is already in use on Vercel or Cloudflare. Polygate asks for another name instead of deploying over that project or Worker, which before could also be deleted when the deploy failed.
Smaller changes
- The Guide fills the window like the other pages.
- A GitHub link beside the gateway state.
Upgrading
Windows: in 0.4.2 or later, open Settings → Updates → Update & restart. Otherwise download Polygate-0.6.5-Windows-x64.exe below and use it in place of the old one. Your settings and keys are kept. The app remains unsigned.
Linux service users: connect to your server and run:
sudo polygate updateVerify checksums before installation; each file has a .sha256 beside it. Psiphon publishes no Linux arm64 client, so Psiphon is not available in the arm64 package.
Polygate 0.6.4
Polygate 0.6.4
The Agent works with OpenCode Free again
OpenCode released 2.3.0, and OpenCode Free models were blocked in the Agent because its engine was still on 2.2.6. The engine now moves to OpenCode 2.3.0 (official npm packages, checked against their published hashes). The first time you open the Agent it downloads the new engine (about 250 MB).
Requests move on instead of failing
- A refused request tries other exits. When OpenCode refuses a request while a small check through the same exit is accepted (one model can be limited on an exit where others still answer), the request now goes on through up to two more Psiphon regions, then the next exits in your failover order. Nothing is marked used up, so the exit stays in use for everything else.
- The exit check asks the models you use. The small check through an exit asks DeepSeek 4.1 Flash first, then GLM 5.3 Flash, MiniMax M3.1 Flash, then any other model.
- "Expected 'id' to be a string" is fixed. A tool call that arrived whole in one piece reached the client in the wrong order; it now arrives as start, arguments, finish.
- You can see which Psiphon region was used. Request lines say
via Psiphon NL, and Logs → Psiphon says when a request moved from one region to another and why. - A Psiphon region that crashed a few times, days apart, is no longer left stopped for good.
Dashboard
- Routing is one group. Routing opens a sub-menu with Proxies, Relays, WARP and Psiphon, each on its own page with its own settings. The Routing page keeps the list of exits, the map and the routing policy.
- A new Guide. Every part of Polygate in plain words, with a search box and a link to the page where each part lives.
- Usage: the Daily values table now sits inside its card and scrolls.
- Logs name the MCP, Psiphon, Agent and Backup sources properly, and a failed alert webhook says what happened in plain words.
- The Agent has a new icon.
Upgrading
Windows: in 0.4.2 or later, open Settings → Updates → Update & restart. Otherwise download Polygate-0.6.4-Windows-x64.exe below and use it in place of the old one. Your settings and keys are kept. The app remains unsigned.
Linux service users: connect to your server and run:
sudo polygate updateVerify checksums before installation; each file has a .sha256 beside it. Psiphon publishes no Linux arm64 client, so Psiphon is not available in the arm64 package.
Polygate 0.6.3
Polygate 0.6.3
New: Psiphon as a route
Tick the regions you want under Routing → Psiphon and press Connect. Polygate runs Psiphon's own client once for each region, each on its own local SOCKS port, and together they work as one route named Psiphon. Only the gateway's own requests use it; nothing on the machine changes.
- Take turns or stay on one region. Each request uses the next connected region (round robin), or every request stays on the region you pick.
- Used-up exits are skipped. When OpenCode Free says a region's exit has used up its daily allowance, or Kilo says it has reached its per-address limit, the request goes on through the next region. The exit is skipped for that provider only; other providers keep using it.
- New addresses, checked first. A used-up region reconnects for a new address, and Polygate checks it with the same provider before it carries that provider's requests again. On by default; at most three new addresses an hour per region.
- Test checks every region. Test on the Psiphon route checks each connected region through its own exit and lists them, marking only the used-up ones.
- Update servers connects once to fetch Psiphon's current servers and regions.
- Switching it on and off. Disable and Enable on the route card disconnect and connect Psiphon. While Psiphon is the route in use it reconnects when Polygate starts, and when it stops, requests go back to the route used before it.
Polygate ships only what Psiphon needs: Psiphon Inc.'s official, unmodified client for Windows and Linux x86-64 (GPL-3.0), its client settings and the signed starting server list. No remote server-list addresses are included. Psiphon publishes no Linux arm64 client, so Psiphon is not available in the arm64 package.
Upgrading
Windows: in 0.4.2 or later, open Settings → Updates → Update & restart. Otherwise download Polygate-0.6.3-Windows-x64.exe below and use it in place of the old one. Your settings and keys are kept. The app remains unsigned.
Linux service users: connect to your server and run:
sudo polygate updateVerify checksums before installation; each file has a .sha256 beside it.
Polygate 0.6.2
Polygate 0.6.2
Fixed
- Tool calls with a misnamed argument. Some models name a tool argument after a common convention instead of the tool's own definition. DeepSeek, for example, sends
read {"path": "a.ts"}where the tool asks forfilePath, and coding agents such as Kilo and OpenCode reject the call and stop after a few in a row. Polygate now renames the argument before your client sees it: spelling variants (file_path,old_string) and a few common synonyms (path,file,cmd). It works for every model and every client. A call is changed only when a required argument is missing and exactly one argument of the right type fits; a correct call is passed on exactly as the model wrote it. Each fix is noted in the log. - A provider's own route list no longer blocks moving on without saying so. An OpenCode Free or Kilo provider set to "Only these routes" without the backup exits failed when its route was used up, even with "Move on when an exit is used up" on. The Routing page now names such a provider, with a one-click Let it move on to the backup exits, and the error says which switch to change.
Changed
- The routing map shows the backup exits. The gate draws numbered lines to the exits next in line: the one taking requests now, the ones standing by, and the ones that cannot be used. When the exit in use is used up, switched off or resting, the gate says where requests go now. Clicking a backup line explains it and offers Make it the route in use.
- Kilo can use the backup exits from its own route list, like OpenCode Free. Both start with it on.
- Tool calls reach the client in one piece when they are complete; text and reasoning still stream as they arrive.
Upgrading
Windows: in 0.4.2 or later, open Settings → Updates → Update & restart. Otherwise download Polygate-0.6.2-Windows-x64.exe below and use it in place of the old one. Your settings and keys are kept. The app remains unsigned.
Linux service users: connect to your server and run:
sudo polygate updateVerify checksums before installation; each file has a .sha256 beside it.
Polygate 0.6.1
Polygate 0.6.1
Changed
- Used-up exits hand over by themselves. When OpenCode Free says an exit has reached its free limit, Polygate checks once through the same exit and, if it is confirmed, sends the request on to the next exit (a relay, a proxy, the pool) instead of stopping the model. Exits already tried for that request are skipped.
- Kilo's per-address limit now sets only that exit aside for Kilo and moves the request to another one, following the provider's own exit list if it has one. Models are paused only when no exit is left.
- Routing policy. The Routing page and the routing map share one panel: which exit a request takes, what happens when an exit is used up or cannot connect (with the next in line), and how your own address is used — one choice (Never / Only when selected / As the last resort / In the spread) instead of three switches. On wide screens it fills the width in two columns.
- Models page. "Pause a model after errors", tool trimming and fallback moved here from Routing.
Fixed
- Direct pausing during long work. Background reads (model lists, update checks, release details) counted as failed connections and could pause Direct for up to 5 minutes until you pressed Resume. They no longer count, and an exit is paused only when another exit can take over.
- When every exit in the spread was resting, Direct as the last resort was not used.
- With Direct switched off, model lists could still be read from your own address; they now go through the proxy pool.
- The strategy choice was hidden while the proxy pool was using it.
- Off switches were hard to see; the relay delete dialog's checkbox text and spacing are fixed.
Upgrading
Windows: in 0.4.2 or later, open Settings → Updates → Update & restart. Otherwise download Polygate-0.6.1-Windows-x64.exe below and use it in place of the old one. Your settings and keys are kept. The app remains unsigned.
Linux service users: connect to your server and run:
sudo polygate updateVerify checksums before installation; each file has a .sha256 beside it.
Polygate 0.6.0
Polygate 0.6.0
New
- Agent. A workspace of its own in the desktop app for the OpenCode coding agent: sessions grouped by folder, a chat-style conversation, permission modes including Full access, each turn's changed files with Undo, steering while the agent works, and a model picker with search. Polygate downloads, checks and runs the engine itself; this version uses OpenCode 2.2.6.
- Z.ai (ZCode) accounts as a provider. Import an account, choose the active one, and see each model's quota and reset time. Polygate does not switch accounts by itself.
- Check by provider on the Models page: one run over all of a provider's models, and an optional timer. A run stops when the provider asks to slow down. A model that is only out of its own allowance is passed over and the others are still checked.
- Strict limits for API keys. Token budgets and per-minute limits are reserved before a request is sent and count requests still in flight. A request that cannot fit is refused; its output is never shortened to make it fit. See
docs/API.mdfor what limited keys can and cannot send.
Changed
- Model catalog. A fresh catalog from OpenCode Free or Kilo now removes models that were retired or became paid. A catalog that fails or is malformed keeps the previous list. Request and usage history is kept.
- Models page. A model whose latest check got a temporary refusal shows the reason, its HTTP status and when it last answered. The Check button says what the model answered.
- Route test. The test reads the answer to its end and names the model it asked. A request that is accepted but never finishes is reported instead of passing. One model is asked, so a pass does not mean every model will answer.
- Agent on OpenCode Free. A model that cannot be used with the installed engine shows why, in the list.
Fixed
- Agent: Undo no longer loses a file whose path differs only by letter case on Windows, rolls back several files together, and recovers one at a time; attachments, drafts, questions and reconnects follow what the engine sends; the built-in skills of OpenCode 2.2.6 are recognised.
- API keys: model grants are checked again after the queue, and a grant no longer matches a different model by its ending.
- Formats: Responses history with
output_text, Anthropic tool names, incomplete status, a bridge stream that is cut short, the idle timeout and event item ids. - Network: proxy credentials with special characters, private-address checks, WARP tunnels that stopped carrying traffic, relay compression, paused routes and backups.
- HTTPS: switching it off is one step that is undone if it fails; a reinstall reconciles the access mode.
- MCP: saved headers are not carried over to a changed server address.
- Dashboard: checkbox rows in the relay dialogs, dialog focus, log loading, first-load retries and layouts on narrow screens.
Upgrading
Windows: in 0.4.2 or later, open Settings → Updates → Update & restart. Otherwise download Polygate-0.6.0-Windows-x64.exe below and use it in place of the old one. Your settings and keys are kept. The app remains unsigned.
Linux service users: connect to your server and run:
sudo polygate updateVerify checksums before installation; each file has a .sha256 beside it.
Polygate 0.5.6
Polygate 0.5.6
New
- A real "Ready" status. The header says Ready only when a request could succeed right now: a usable model, a client key that works and a route that would really be chosen. Otherwise it says Paused, Starting or Needs attention, with the reason. A banner on other pages leads to the checklist.
- Recovery checklist on the Overview page. It lists what is wrong, what it means and a button for the fixes that are safe: refresh the model catalog, try a resting route again, reconnect WARP. It also covers a client key that ran out or expired, a model list that could not be read, a provider that points at a deleted route, and every model resting. An item stays until its cause is gone, and one that you fix while the page is open stays listed as resolved until you dismiss it. Nothing on the list switches anything on for you, so a route you turned off, such as Direct, stays off.
autolooks at the request. When a request uses tools, has an image, or is longer than a model's context,auto(and theautosteps of a chain) skip models whose listing says they cannot handle it, and the answer names them in thex-polygate-skippedheader and the Logs page. A model is skipped only when its listing says so; if none is listed as able, the best ones are tried anyway, because provider listings are not always right. A model you name yourself, or put in a chain on purpose, is never swapped out.- Preview routing on Chains and in the Playground: which models a request would try, in order, and why each other one is skipped, without sending anything. In the Playground it uses your real key and the conversation you are composing.
- Playground and Settings are clearer. The message box comes first when nothing has been sent, advanced options are folded away, and the answer only follows the bottom while you are there. Settings has a row of links to its sections, tags saying whether a change applies immediately, when saved or after a restart, an "Unsaved changes" mark, and the restart warning before you restore a backup.
- Accessibility: the current page is marked in the side menu and search boxes show keyboard focus.
Fixed
- Event streams. A provider that ends event lines with CRLF or a lone CR no longer returns an empty answer, and a long non-streaming request that asks for several answers (
n) keeps every choice. A stream that is cut before every requested choice has finished now ends with an error instead of passing as complete. A stalled upstream now ends the stream with an error the client can see, in all three client formats. - Fallback. A provider whose chosen route is resting, or whose exit is used up, no longer stops the next provider from answering.
autonow searches the whole model list for a capable model. - WARP restarts a tunnel that stopped answering. HTTPS: a certificate change that cannot be installed puts the previous certificate files back.
- MCP: a server saved with a new address while it was connecting uses the new address; disabling a server that is still connecting now cancels the connection and ends its session (HTTP) or stops its program (local); text from local programs keeps non-ASCII characters.
- Dashboard: the proxy buttons respect "only when my own IP is used up"; used-up keys are skipped by Overview and Playground; controls no longer run off the edge on phones; the active-exit card shows only its own route's numbers.
- Linux: a fresh install over settings left by an uninstall keeps the old settings file beside the new one;
polygate passwordrefuses up front when the password is set byPOLYGATE_ADMIN_PASSWORD; the manager and the gateway agree on whether HTTPS is in use.
Upgrading
Windows: in 0.4.2 or later, open Settings → Updates → Update & restart. Otherwise download Polygate-0.5.6-Windows-x64.exe below and use it in place of the old one. Your settings and keys are kept. The app remains unsigned.
Linux service users: connect to your server and run:
sudo polygate updateNew installations:
curl -fsSL https://raw.githubusercontent.com/B3hnamR/Polygate/main/install.sh -o install.sh
sudo bash install.shWindows x64 and Linux amd64/arm64 downloads include .sha256 files. ARM64 packages are built in CI; running on ARM64 hardware has not yet been verified.
See the README for setup and usage.
Polygate 0.5.5
Polygate 0.5.5
Fixed
- Long answers were cut off after 2 minutes. A reply that kept streaming for more than 120 seconds ended with "upstream stalled past the relay wall" (shown in the log as 502 "Upstream stream ended before a terminal event"), even though the upstream was still sending. The limit now measures silence: 120 seconds without any data, not 120 seconds in total. You can raise the silence limit with Request timeout in Settings.
Changed
- Relays reach any public HTTPS host and carry every provider. Until now a relay only forwarded to
opencode.ai,models.opencode.aiandapi.kilo.ai(a Cloudflare Worker only to Kilo), and Polygate refused to send any other provider through one. A relay now forwards to any public HTTPS host, so the providers you add yourself can use relays like OpenCode and Kilo do. It still needs its access token.- To narrow a relay, set
POLYGATE_ALLOWED_HOSTSon it (comma separated;*.example.commatches subdomains). - Plain http, IP addresses and local names (
localhost,.local,.internal) are never reachable through a relay. A provider on a local address is reached directly, whichever route is selected. - A Cloudflare Worker relay still does not carry OpenCode (OpenCode Free refuses Workers). It carries Kilo and your own providers.
- Relays you deployed earlier keep the old host list until you press Update on the Relays page. Until then a provider outside OpenCode and Kilo gets a clear message saying the relay needs an update.
- To narrow a relay, set
Upgrading
Windows: in 0.4.2 or later, open Settings → Updates → Update & restart. Otherwise download Polygate-0.5.5-Windows-x64.exe below and use it in place of the old one. Your settings and keys are kept. The app remains unsigned.
Linux service users: connect to your server and run:
sudo polygate updateNew installations:
curl -fsSL https://raw.githubusercontent.com/B3hnamR/Polygate/main/install.sh -o install.sh
sudo bash install.shWindows x64 and Linux amd64/arm64 downloads include .sha256 files. ARM64 packages are built in CI; running on ARM64 hardware has not yet been verified.
See the README for setup and usage.
Polygate 0.5.4
Polygate 0.5.4
Fixed
- The Windows app's compact view from the tray. Choosing Compact view from the tray icon while the window was hidden or minimized could leave the window and the page in different views: the compact page in a full-size window, the full dashboard in a compact-size window, or a window stuck at the smallest full size after turning compact off. The tray now brings the window back first and then switches the view and size, and the page re-checks its view whenever the window is shown.
- The compact window has one fixed size (380 × 720, smaller only if the screen is too small). It cannot be resized or maximized, only moved. Your normal window size is restored when you leave compact view. If your window was already saved at a small size, drag it to the size you want once.
- Relay results table. A blank strip appeared beside the relay names. The table now lays out normally.
New
- Routes: Resume now. When a connection drops, Polygate pauses a route for up to 5 minutes. The route's card now says when it will be tried again and has a Resume now button, and the "resting after errors" message also says when the route is tried again.
Upgrading
Windows: in 0.4.2 or later, open Settings → Updates → Update & restart. Otherwise download Polygate-0.5.4-Windows-x64.exe below and use it in place of the old one. Your settings and keys are kept. The app remains unsigned.
Linux service users: connect to your server and run:
sudo polygate updateNew installations:
curl -fsSL https://raw.githubusercontent.com/B3hnamR/Polygate/main/install.sh -o install.sh
sudo bash install.shWindows x64 and Linux amd64/arm64 downloads include .sha256 files. ARM64 packages are built in CI; running on ARM64 hardware has not yet been verified.
See the README for setup and usage.
Polygate 0.5.3
Polygate 0.5.3
New
- Usage page. Requests, tokens and failures per day for up to a year, with the busiest models and routes. The summary is kept for 400 days even though the request log keeps only a week. Days are counted in UTC.
- Settings backup and restore. In Settings, save everything (providers, keys, routes, chains) to one file protected by a passphrase you choose, and restore it later or on another machine. The backup file is encrypted, restoring keeps your current dashboard password, and a failed restore changes nothing. On a server you confirm the dashboard password first.
- Relays: remember tokens for Netlify and Cloudflare too, not only Vercel.
- Relays: update and remove deployed relays. Update deploys the current relay code again to the same project, keeping its address and access token. Removing a relay can also delete it from Vercel, Netlify or Cloudflare.
- Relays: results table showing how each relay has behaved (working, refused, used up, redirected, failed) with plain advice.
- Routes: Resume now. When a connection drops, Polygate pauses the route for up to 5 minutes. The route's card now says when it will be tried again and has a Resume now button. The "resting after errors" message also says when the route is tried again.
- The updater renames the app. After an in-app update,
Polygate-X.Y.Z-Windows-x64.exetakes the new version in its name.
Improved
- A relay test that ends in a redirect now says where the site sent the request.
- Clearer text for exits that were refused by the Free tier (not the same as the daily allowance being used up).
- A used-up relay is counted once per used-up spell and no longer shown as "Working".
Upgrading
Windows: in 0.4.2 or later, open Settings → Updates → Update & restart. Otherwise download Polygate-0.5.3-Windows-x64.exe below and use it in place of the old one. Your settings and keys are kept. The app remains unsigned.
Linux service users: connect to your server and run:
sudo polygate updateNew installations:
curl -fsSL https://raw.githubusercontent.com/B3hnamR/Polygate/main/install.sh -o install.sh
sudo bash install.shWindows x64 and Linux amd64/arm64 downloads include .sha256 files. ARM64 packages are built in CI; running on ARM64 hardware has not yet been verified.
See the README for setup and usage.