- v1.1.2 - Performance and bug fixes - 20 September 2026
Script PanelsScripts can claim their own real display panel now, instead of only ever printing lines and reading one at a time - open_panel() grabs one from a script panel in your layout.cfg. The Layout Designer can build one visually and export the file.open_panel("log") claims a plain scrolling text panel instead of a character grid - just for a script's own log() output, so it can run with "visuals" without touching a single term_* function.Once you've got a panel, term_write()/term_color()/term_move()/term_clear()/term_bg()/term_size() draw to a real character grid - your own colors, your own layout, cell by cell.term_box()/term_hline()/term_vline() draw borders and lines for you, and term_fill() colors a rectangle instead of the whole panel.term_click_zone() declares a clickable region without drawing anything itself - get_click() now returns which declared zone (if any) a click la…
- v1.1.1 - bug fixes - 13 September 2026
Bug Fixessqli() no longer crashes a script when a target has no configured routes - returns a normal checkable result instead.Object literals, lists, and function calls can now be written across multiple lines.ls now shows real file permissions and ownership, matching what download()/upload() actually enforce.The web API reference's connect() entry now carries the same success-vs-login warning the in-editor reference already had.The in-editor scripting reference now documents what a module's top level can and can't contain.prompt() no longer discards whitespace-only input.scp/upload() now correctly lands files inside a destination folder in every case.Settings in a blackdoor.conf you find on another box now apply fully, same as your own.theme= in blackdoor.conf now matches a preset regardless of capitalization. Thanks for all the reports - this patch is basically nothing but them. - Sta…
- v1.1.0 - Persistence - 10 September 2026
This is the biggest update Blackdoor's had since launch, and it's less about any one feature than about the world stopping being so still. A server used to be a filing cabinet - it sat there with its files and its users until you did something to it, and nothing happened in between. That's fine for a lot of the game, but it meant every "the system noticed you" moment was fake. This update makes it real: servers run their own jobs now and react to what you're doing while you're still connected, not narrated after the fact. You can plant a script and walk away from it. You can get onto a box through FTP or a real database instead of just SSH. The factions that own those boxes are paying attention too, and can build a real case against you. You can dive into a permanent, player-built CTF pool alongside a new daily one. All of it's below, with the reasoning behind the bigger pieces spelled…
- v1.0.6 - workshop and scripting fixes - 1 September 2026
NewAction link syntax (open a firewall port, view server users, etc. from an HTML page) is now documented right in the Workshop editor when editing an .html file, instead of only existing in an external doc.A new editor= option in ~/.config/blackdoor.conf (simple or nano) - nano mode adds a real Ctrl+X: prompts "Save modified buffer?" if you've got unsaved changes (Y or N then Enter to confirm, Esc cancels), or exits straight away if there's nothing to save. Defaults to simple, today's Ctrl+S/Esc behavior.Ctrl+D now disconnects from a server, same as typing disconnect.Ctrl+R searches command history, same as a real terminal - press it again for older matches, Enter to load one into the line, Esc to cancel. Bug Fixes"Import from Workshop" always said there was nothing to import, even for content you'd genuinely published yourself. Fixed - anything already published self-heals automatical…
- v1.0.5 - workshop updates - 23 August 2026
NewThe mission editor's IRC Chatter sequences can be edited after adding them now, not just deleted and retyped from scratch.The mission editor's SERVER field is a real picker now, pulled from your own saved servers, instead of a free-text box.Publishing a mission now bundles any server it references that isn't already its own separate Workshop item directly into the mission itself, instead of publishing it separately - no more one-off boxes cluttering the Workshop server list when they were only ever meant for one mission. A server you've deliberately published on its own gets linked as a required item instead, so subscribing to the mission pulls it in automatically.Campaigns can be published to Steam Workshop now - previously the only option was a local export package, and subscribed campaigns were never actually loaded. Missions and servers a campaign references get the same bundle-o…
- v1.0.4 - adjustments abound - 18 August 2026
NewString formatting: "%s connected on port %d" % \. %s for any value, %d/%f for numbers, %% for a literal percent.rm_dir(conn, path) - recursively delete a directory and everything inside it.get_unix_time() - real wall-clock time, for benchmarking your own script's actual elapsed time.Ctrl+/ in the code editor now comments/uncomments the selected lines (or just the current line).A small "new output" indicator now appears if you're scrolled back in the terminal and something new prints.Republishing an updated Workshop item now asks what actually changed, instead of always using a fixed generic note.Piping is real now: cat file.txt | grep 'bob' works, and find ../ -name *.log | cat $_ runs cat once per result.cd(conn?, path) and get_cwd(conn?) - scripts have a real working directory now.Completed missions now show up in a collapsed list in the jobs panel. Retry any of them for a clean re…
- v1.0.3 - many fixes - 12 August 2026
NewBackup copies of the 5 starter scripts now live on the drop box, under /tools/starter_scripts/. Broke your own copy? Grab a fresh one any time.publish
- v1.0.2 - Fixes Round Two & More Bits! - 8 August 2026
Newexit() - halts a script immediately, even from inside a function. return only pops back to whatever called that function; exit() stops the whole script right there, at any nesting depth. raise("message") (alias: error()) - same idea, but marks the stop as an actual error instead of a clean finish. No try/except to catch it yet (that's a bigger project), just a clean way to abort on a bad condition instead of deliberately triggering an unrelated error to get the same effect. import(expr) now also works as an expression - var lib = import("x") works now, not just the existing statement form (import(x) as alias). Usable anywhere an expression is valid: a var initializer, a function argument, inline. touch(conn, path) / touch_local(path) - create an empty file if it doesn't already exist, and never overwrite one that does. write_file()/save() can create a missing file too, but they're no…
- v1.0.1 - Launch Day Fixes - 6 August 2026
Bug FixesImported modules couldn't use any builtin or API function inside their own functions - calling log(), int(), str(), connect(), or anything else from inside a function defined in an import'ed module failed outright with "'x' is not defined." Modules now have the same full builtin/API surface a top-level script already has. The default grabber.bd script never actually worked against a real target - it called connect() without a username, so it never authenticated even right after cracker.bd had already cracked the account. Fixed to reuse the same parse_target() pattern cracker.bd already uses, so it picks up the credential you already have. mv on a directory left its contents behind at the old path - the directory's own listing moved to the new location, but anything inside it stayed fully readable and runnable at the old path instead of moving with it. Directories now actually t…
- Blackdoor Has Launched! - 6 August 2026
Thank you for supporting me. Having a launch date behind me instead of ahead of me is still sinking in. The full game is live - and it's a bigger launch than originally planned. A batch of content I was going to hold back for a free update landed in time, so it shipped with the game instead of coming later. If you find any bugs, let me know in the discord or using the "feedback" command in-game and I'll sort them ASAP!New This LaunchWeb Attack Vectors - SQL injection, command-injection privilege escalation, race-condition exploits, and full browser automation, joining the existing web-hacking toolkit. New scripting functions, and a run of missions designed specifically around each one - not just new commands with nowhere to use them.Email/SMTP - a brand new service to hack into, alongside SSH and HTTP. Its own port, its own login, real mailboxes to crack into and read - or send a convin…
- Demo Update - v0.11.2 - 1 August 2026
FeaturesRecovery shell for a deleted root filesystem - if you (or a script) rm -r your own machine's / directory, the terminal now drops into a bare recovery> prompt instead of leaving you in a broken, half-working state forever. Only basic navigation works until you run restore, which reinstalls fresh from the recovery partition - wipes every local script, wordlist, and download back to factory defaults, permanently. Asks for confirmation first. The same recovery gate now applies to remote servers - deleting a target's own / (yours or a stray script's doing) now shows the same recovery> prompt instead of silently leaving the box in a confusing broken state. forkbomb remains the way out, same as before, just properly signposted now. grab_hash() now also returns security, and hash_string() takes an optional third security argument - the "Crack Source" SDK's local hash-matching technique…
- Demo Update - v0.11.1 - 29 July 2026
FeaturesMusic, for real this time - the music command is live: view the playlist, music next / music prev to skip around, music to jump straight to a track, or music set to loop one track on repeat instead of rotating, for anyone who just wants one song. Tracks now play out in full - around four minutes each, matching the standalone soundtrack - and fade out naturally before handing off to the next one, instead of the old hard cut on a fixed timer. forkbomb - a last-resort recovery command for a remote server you've broken beyond normal use (accidentally deleted its own /, or a stray script wrote a file literally named after a directory path). Crashes the target and restores it fresh from backup, undoing every change you've made to it - deleted files, uploads, cracked users, all of it. Asks for confirmation first. Not an actual attack - it's a reset button, framed as one. New: get_cpu()…
- Demo Update - v0.11.0 - 26 July 2026
FeaturesCustomize your UI layout - ~/.config/layout.cfg (same idea as blackdoor.conf's theme customization) lets you rearrange every pane on screen. Just write "width height content" per line and panels place themselves automatically, left to right, wrapping to a new row as needed - no coordinate math required. Want exact placement instead? Use the precise form (x y width height content) for full manual control. List two or more content types on one line (e.g. mission,network) to merge them into a single tabbed panel. Edits apply live the instant you save the file in-game - no restart needed, and if you make a mistake it tells you exactly what's wrong and keeps your last working layout until you fix it. Prefer a visual editor to hand-writing percentages? There's a drag-and-resize designer at blackdoor.tools/layout that exports a ready-to-paste config. wget/curl can now authenticate - pa…
- 1,000 Wishlists! - 23 July 2026
Blackdoor just hit 1,000 wishlists on Steam! Thank you - genuinely, it means a lot. This has been one person building this for way too many hours at a stretch, and every one of those wishlists is proof it wasn't just me who thought that sounded worth building.For anyone just finding the game: you sit down with four scripts that technically work, in the same way a spoon will technically dig a tunnel, and an anonymous contact who needs files from places they really shouldn't be. You read the code. You rewrite it. You get better. That's the whole loop - and it's why I built a real scripting language instead of handing you a menu of pre-made hacks.The demo's been up since April, if you haven't tried it yet - three story missions, a finale, six side jobs from IRC regulars, a few things hidden that the mission list won't tell you about, and enough rope to write your own port scanner from scra…
- Demo Update - v0.10.3 - 19 July 2026
FeaturesDiscord Rich Presence - the game now shows what you're up to in Discord: connected to a server, on a mission, or freelancing in the terminal. Live chat content filter - messages sent in #lounge are now automatically filtered for inappropriate language. Steam Workshop publishing, for real this time - publish
- Demo Update - v0.10.2 - 16 July 2026
Features#lounge -> Discord relay - messages sent in the in-game #lounge IRC channel now appear in the Blackdoor Discord server in real time. One-way for now (Discord -> game coming later). network list - lists every server you have ever cracked, even if you have since removed it from the network graph. Use store to re-add one. graybrd has been busy - a new server has appeared on the network. No further details. marvelous joins #lounge - new community NPC. Tinkerer. Very into scripting. Already found an infinite loop bypass. Welcome. Online player count - the IRC pane header shows how many players are currently in #lounge. New #lounge chatter - a few new conversation threads from the community Discord. ProxyChain rework (full game only) - bounce() has been replaced with pivot(conn). Pass an active authenticated connection and pivot() establishes a relay through that server and drops the…
- Update v0.10.1 - 12 July 2026
Bug Fixesconnect() bypassed authentication - calling connect(ip, port) without credentials gave full filesystem access: list_files, read_file, download, write_file, delete_file, scrub_log, and decrypt all worked without cracking a user first. This was unintended. All filesystem API functions now require an authenticated session. Thanks second_hand crack() didn't authenticate after success - cracking a user stored the credentials but didn't log you in. Previously you had to reconnect as user@host to actually authenticate. crack() now logs you in immediately on success, which is what the docs implied it did. connect() now accepts SSH key auth - pass an id_rsa path as the third argument to authenticate via key file: connect("user@host", 22, "~/.ssh/id_rsa"). The third argument can be a key path or a plain password. boards name could be set without confirmation - the handle is permanent and…
- Update v0.10.0 - 11 July 2026
New - Audit Leaderboards(Full game only - viewable in the demo, but daily and weekly audits require the full game.) boards.blackdoor.tools is now fully live. Daily and weekly audit boards track completion times - the same target for every player on the same day, ranked by how fast you finished it. Browse to boards.blackdoor.tools in the terminal to see today's standings, check your own profile, and see what everyone else is running. New - Badges(Full game only - requires completing daily or weekly audits.) Earn badges by completing audits, building streaks, finishing the campaign, and being in the right place at the right time. Each one shows on your profile page with a description of how it was earned. Set one as your displayed title with boards badge \ - it appears next to your handle on the leaderboard. boards badge with no arguments lists what you've earned so far. boards browse ope…
- Update v0.9.3 - 8 July 2026
New - Full Audit Contracts(Full game only - not available in the demo.) hexdump has started sending repeatable pen-test work. Once you're mid-campaign, a new contract type appears on the job board: Full Audit. Each audit is a fresh procedurally-generated target - different server, different layout, different files. No two runs are the same. Difficulty escalates the more you complete: early jobs are lightweight, later ones have firewalls, IDS, and hardened accounts. Pay scales with it ($300 to $1200). There's no endpoint. hexdump just keeps the work coming.New - Daily and Weekly Challenges(Full game only - not available in the demo.)Two special audits appear alongside the base loop:Daily Audit - a new target every day at midnight UTC. The same target for every player. Easier than the weekly, pays $450. Shows up with a pulsing \ tag in the job list.Weekly Audit - a harder contract that re…
- Demo Update - v0.9.2 - 25 June 2026
Community patch - new NPCs, new scripting tools, QoL, and bug fixes. Thanks to 2dPrinter, Aluvard, _xp_, ItsGime, and delta for the repors.New Community NPCsThree new regulars have joined #lounge: 2dprinter, delta, and vince_kully. They show up in ambient chat, respond to events, and have /whois entries. 2dprinter is also lurking somewhere on the shop server. New - PatternKit ($400)Four new scripting functions for extracting structured data from file content. Available in the shop once you're past Act 1. extract_ips(text) - returns every IPv4 address found in the textextract_emails(text) - returns email addressesextract_urls(text) - returns http/https URLsextract_credentials(text) - returns password/key/token patterns from config files and logsAll four take a string (e.g. the output of read_file()) and return a list. No connection required, no noise generated. The functions appear in th…