Repository navigation
Releases
v0.7.0
A white dashboard with a theme switch, a tighter proxy port, and a new chat field.
- Themes. The dashboard follows your system theme. Settings → Appearance also has Light and Dark.
- Sidebar. A floating panel with search, New chat, your chats, the account and Settings. Proxy pages stay in Settings.
- Message field. One large rounded field, with attach on the left and the model and send on the right.
- Settings. No photos and no big headlines, and every page uses one centered column. Add account matches the sidebar.
- Chat. Closing Settings keeps the open chat, even after a reload. Errors show the whole message in a calm card.
- Port protection. Without
PROXY_API_KEY, connections from outside this machine are closed at once. With a key, one outside address gets 600 requests a minute and 64 connections, and 10 wrong keys lock it out for 15 minutes. Local clients are not limited. Behind a reverse proxy, setTRUST_PROXY=1. - Updates. A branch that already has a release no longer sees it as an update.
- Agent setup. The wizard has a Skip and continue item.
Update: Settings → Updates → Latest → Check for updates, or git fetch origin && git switch latest && git merge --ff-only origin/latest, then restart.
v0.6.1
Tool calls that DeepSeek Web writes as bare <call> blocks now run instead of showing up as the answer.
- Tool calls. A reply made only of
<call name="...">blocks is parsed as tool calls, and only tools the client offered can run. Text inside a value stays as written, so a command that greps for</call>or<reaches the tool unchanged. - Quoted blocks. A
<call>block quoted inside a longer answer never runs. The proxy asks the model again instead of passing the markup on as the answer.
Update: Settings → Updates → Latest → Check for updates, or git fetch origin && git switch latest && git merge --ff-only origin/latest, then restart.
v0.6.0
A tighter proxy, and tool calls that survive the way DeepSeek Web writes them.
- This computer only. With no access key, the proxy accepts a connection only from the user that started it. If that check cannot be read, the connection is refused.
- Proof-of-work. The wasm module is loaded only from DeepSeek's own site. A redirect is ignored, and the solve runs off the request thread.
- Images. A MEDIA path is used only when it is a real image in the temp folder. An image URL that points at this machine is refused, including an IPv4 address written inside IPv6.
- Errors. Tokens and cookies are stripped from upstream errors before they are stored, logged, or returned.
- Sessions. The in-memory map stops at 200 chats and drops the least recently used.
- Chrome sign-in. DevTools listens on 127.0.0.1, and the profile directory is mode 0700.
- Agent files. A config that holds a real proxy key is written mode 0600.
- HTTPS. Set
TLS_CERT_FILEandTLS_KEY_FILEand the same proxy serves HTTPS. An update is installed only after you confirm it. - Dashboard. Chinese sits next to English and Russian. The layout is the same.
- Tool calls. A fullwidth
<|tool_call>block is parsed. Garbled DeepSeek Web DSML is parsed instead of being shown as text or retried. A short final answer after a tool result is kept in any language. A bareokis still retried. - Removed. The old
client.jscommand is gone.
Update: Settings → Updates → Latest → Check for updates, or git fetch origin && git switch latest && git merge --ff-only origin/latest, then restart.
v0.5.0
Settings that read like the model picker, deep-ocean photos, and each agent in its own colours.
- Settings menu. One card with an icon, a name and a short line for every page, the open one checked. It runs the full height of the window, and search finds pages by their description too.
- Pages. Section names have icons. Requests, tokens, errors and latency sit in one card, each with a line on what the number covers (last 15m, estimated, % of requests).
- Photos. Status, Accounts, Usage, Requests, Agents, Updates, Add account and the access-key screen open on deep-ocean photographs. The letter field stays on the empty chat only.
- Agents. Claude Code, Codex, OpenCode, Hermes, OpenClaw and Cursor show their own logos in their own colours. Rows are calmer, and an agent's page has the same cards and a clear check on the install mode.
- Updates. Stable and Latest are picked like a model, with a check.
- Code is set in your system's monospace again (SF Mono, Cascadia, Consolas).
- No scrollbars. Long commands wrap instead of scrolling sideways, and anything that scrolls fades out on the side that has more.
Update: Settings → Updates → Latest → Check for updates, or git fetch origin && git switch latest && git merge --ff-only origin/latest, then restart.
v0.4.0
A new look for the dashboard: letters and digits instead of photos, one-bar composer, and Geist everywhere.
- Empty chat. The FreeDeepseekAPI mark is set in letters and digits that keep re-rolling. Click the ground and a ripple runs through it like a drop on water. With reduced motion turned on, the field stays still and only the clicked spot lights up.
- Composer. One bar: attach on the left, your message in the middle, send on the right. The greeting sits in the middle of the screen and the composer stays at the bottom, so nothing jumps when you send.
- Model menu. Instant, DeepThink, Web search and Account in tight rows with icons and a clear check.
- Sidebar. Search at the top, New chat marked while you are on a new chat, account and Settings on one row. A chat that is still answering shows a small re-rolling glyph.
- Geist. The whole dashboard is set in Geist and Geist Mono, served by the proxy itself. The greeting and the big settings headlines keep their own faces.
- Settings. Each page opens on its own icon drawn in glyphs, and Add account shows the mark above its three steps. The photos and the launch video are gone, so the dashboard is about 5.5 MB lighter.
Update: Settings → Updates → Latest → Check for updates, or git fetch origin && git switch latest && git merge --ff-only origin/latest, then restart.
v0.3.1
Steadier tool calls for coding agents, and 30 fixes from a full review of the proxy.
- Tool calls recover instead of failing. When DeepSeek returns a broken or cut-off tool call, the proxy asks again more strictly, moves to another ready login if this one is rate-limited, and as a last step retries in a fresh chat with the full context. A tool call that only lacks its closing brackets is repaired.
- Chat-only requests get plain answers. If the model answers a request without tools with tool markup, the proxy asks again for plain text instead of returning an error.
- Each client gets its own chat. Clients that send no session id are no longer merged into one shared DeepSeek chat.
- Long answers keep streaming. The 60-second limit now counts silence, not total time, so long thinking and long code are no longer cut off. Complete long answers are no longer continued for nothing.
- Text stays intact. Emoji are no longer stripped from answers, and Cyrillic or CJK text in large requests is no longer garbled.
- Codex keeps the model's earlier tool calls in the conversation (Responses API).
- Logins.
npm run authnever replaces a working login with a failed capture, closes its Chrome window when done, and works whenDEEPSEEK_AUTH_PATHlists several files. An expired login is reported as one. - Safer by default. Account files may only load the PoW module from deepseek.com. The Cursor launcher is readable only by you and takes the key from
PROXY_API_KEY. The Agents page warns before pointing an agent at an address that is not this proxy. - Dashboard. Delete all conversations also removes a chat that is still answering, editing a message respects the send wait, Restart waits for the new version, and a malformed link or blocked storage no longer breaks the page.
- Settings such as
PORTorDEEPSEEK_FETCH_TIMEOUT_MSmust be numbers: a wrong value now stops the proxy with a clear message.
Update: Settings → Updates → Latest → Check for updates, or git fetch origin && git switch latest && git merge --ff-only origin/latest, then restart.
v0.2.2
A cleaner look for settings and chat.
- Updates shows your installed version on the liftoff photo, with Stable and Latest as two tiles that say what each one gets. When an update has to be installed by hand, the command is right there, one step per line, ready to copy.
- Access key shows the one thing that matters: the Authorization header this tab sends, updating as you paste. An eye shows or hides the key, a trash can forgets it.
- Chat sits on a plain dark background, and your messages are blue bubbles.
- When sending has to wait after failed requests, the countdown sits right above the message box.
- Notifications line up with their close button, and errors in the chat fit on a phone screen.
Update: Settings → Updates → Check for updates, or git fetch origin && git switch stable && git merge --ff-only origin/stable, then restart.
v0.2.1
A small fix to updates from the dashboard.
- When your copy already runs the newest code but sits on another branch, Settings → Updates now offers Switch to Stable (or Latest) instead of announcing a new version with nothing in it.
- Switching needs no restart: the code stays the same, and your copy follows the channel from then on.
Update: Settings → Updates → Check for updates, or git fetch origin && git switch stable && git merge --ff-only origin/stable, then restart.
v0.2.0
The first release of FreeDeepseekAPI: DeepSeek for your apps and coding agents, with a dashboard to run it all.
- A new dashboard. Chat with DeepSeek in the browser, see at a glance whether your accounts can serve, add and pause logins, and follow every request, token and error.
- Web search on by default. Every model searches the web unless you pick a
-nosearchmodel or send"web_search": false. DeepThink stays one switch away. - Guided account setup. Three steps show where
deepseek-auth.jsoncomes from; drop the file and see right away whether it has everything. - A live thinking timer that turns into "Worked for…" once the answer starts.
- Safer retries. After a failure, Retry and new messages wait a little longer each time, up to 2 minutes, so a burst of clicks can't get your login blocked.
- Updates from the dashboard. Settings → Updates checks for a new version, installs it and restarts the proxy for you. Pick Stable or Latest.
- Edits start clean. Editing a message starts a new chat on DeepSeek with everything before it and nothing after.
Get it
git clone --branch stable https://github.com/dekrezz/FreeDeepseekAPI.git
cd FreeDeepseekAPI
npm run auth
npm startAlready have a copy? git fetch origin && git switch stable && git merge --ff-only origin/stable, then restart. From now on, Settings → Updates does this for you.