Repository navigation
Releases: mixnz/mixlab
Release list
v0.0.20
Installation notes
Nothing is code-signed or notarised, by design: expect SmartScreen on Windows and Gatekeeper's
"Open Anyway" on macOS. A machine with Smart App Control enforcing is not supported. On ARM64
Windows some runtimes have no build of their own and run under emulation, marked emulated in
mix runtime available.
v0.0.20
Added
- A database or cache can move to another port:
mix service set <service> --port <n>, or
Change port… in MixLab. MixLab then offers to update the saved connections that used the old port. - On a Linux server, MixEngine can come back after a reboot with nobody logged in:
mix autostart enable --at-boot, or Also start at boot in Settings → MixEngine. - Over SSH,
mix elevation grant,mix doctor --repairandmix uninstallask for your password
throughsudoin the same terminal, on Linux and macOS. MixLab shows the command a waiting grant needs.
On a Mac over SSH, adding MixEngine's certificate authority still waits for the Mac's own screen,
andmixsays so before it asks.
Fixed
- MixEngine starts with
check_seconds = 0under[updates]inconfig.toml. Before, it refused
the file and would not start.enabledandcheck_secondsthere no longer do anything, so
MixEngine ignores any value and warns at start that the lines can be removed. - In MixLab, a command that crashes no longer makes every later command of its kind fail until
you restart MixLab. - With two MixEngine homes on one machine, such as a release and a development build, each keeps
its own names in the hosts file, and uninstalling one leaves the other's names, DNS routing,
privileged helper and audit log in place. - On Linux,
mix uninstallalso takes away MixEngine'smixengine0network link. Before, it
stayed until the machine restarted. mix doctornames the hosts entries that are missing or left over, andmix autostart status
says when the daemon starts at boot.- On a headless install,
mix uninstallnames the one package to remove and no longer mentions
MixLab. - On a Linux machine whose DNS goes past systemd-resolved, such as one running AdGuard Home or
Pi-hole, MixEngine keeps your sites in the hosts file instead of saying wildcards work, andmix doctorsays how to turn them on. mix uninstallfinishes in one run on a machine an earlier uninstall left with MixEngine's
network link still in place. Before, it kept the home and had to be run a second time.mix job statusno longer shows a finished job stuck at 40% with its last step,mix doctor --repairnames the hosts fix once, and MixLab's permission dialog lists each hosts name and only
says what is true of that dialog.- On a Mac, a MixEngine started over SSH says it cannot show an administrator prompt and how to
restart it, instead of reporting a wrong password. - On Ubuntu 24.04 and later, a machine without
pkexecno longer says polkit is missing. - In MixLab, a SQL Server script with a
GOline inside a string or a comment runs as the Query
tab shows it. Before, it was cut in two at that line. - On macOS and Linux, Settings → Updates offers Finish as soon as you come back from the
installer, instead of a few seconds later. - In MixLab, Ctrl+R (⌘R on a Mac) reloads the table, structure or result on screen again. After
tabs had been opened or closed, it could stop doing anything. - Packages opens faster the first time: what is installed shows at once, and the list of
versions to install no longer waits for each language to be downloaded one after another. - The MixEngine Dashboard shows its services right away after MixEngine starts. Before, the list
waited until the disk usage had been measured, which on Windows could take twenty seconds. - In MixLab's terminal, saving a target that was deleted in another tab takes down the notice
that said so. Before, it stayed beside the Update button. - In MixLab's Projects screen, opening one project and then another before the first had loaded
shows the second one's runtime pins. Before, it could stay on Loading.
What's Changed
- fix(updater): read the installed version as soon as the window is back by @haiquang9994 in #269
- refactor(cli): split mix by command, behind a file size ratchet by @haiquang9994 in #270
- refactor(cli): split render.rs by command by @haiquang9994 in #271
- refactor(daemon): split rpc.rs by capability by @haiquang9994 in #272
- refactor(daemon): split services/mod.rs by capability by @haiquang9994 in #273
- refactor: move test modules to their own tests.rs (T207e) by @haiquang9994 in #274
- refactor: split tests past the limit by topic (T207f) by @haiquang9994 in #275
- refactor(desktop): split the database drivers past the limit (T207g) by @haiquang9994 in #276
- refactor: give four definition files' capabilities a file each (T207h) by @haiquang9994 in #277
- refactor(daemon): split the service runner and the doctor by what their methods do (T207i) by @haiquang9994 in #278
- refactor(daemon): make serve a sequence of its startup steps (T207l) by @haiquang9994 in #279
- refactor(desktop): split the data grid into hooks and parts (T207k) by @haiquang9994 in #280
- refactor(core): split Error into one enum per subject (T207j) by @haiquang9994 in #281
- perf(index): fetch index kinds in parallel and show installed packages at once by @haiquang9994 in #282
- fix(dashboard): stop the disk usage walk from holding the service table by @haiquang9994 in #283
- fix(config): accept any value for the retired [updates] keys by @haiquang9994 in #284
- refactor(db): room under the size limit for seven backend files (T208e) by @haiquang9994 in #285
- refactor(db): one command set for the SQL engines (T208f) by @haiquang9994 in #286
- fix(desktop): no unwrap() in the window's shipped code (T208g) by @haiquang9994 in #287
- refactor: move inline test modules to their own files (T207m) by @haiquang9994 in #288
- refactor: split test files past 1,000 lines by topic (T207o) by @haiquang9994 in #289
- refactor: split code past 1,000 lines by capability by @haiquang9994 in #290
- refactor: split the files past 1,000 lines outside the root workspace by @haiquang9994 in #291
- refactor(daemon): write the daemon's walks as named steps by @haiquang9994 in #292
- refactor(desktop): make the window's effects depend on what they read by @haiquang9994 in #293
- refactor(db): one statement splitter for the SQL engines by @haiquang9994 in #294
- refactor(db): one build_where for the SQL engines by @haiquang9994 in #295
- refactor(db): one frame for editing rows in the sqlx engines by @haiquang9994 in #296
- feat(autostart): start the daemon at boot through the account's linger by @haiquang9994 in #297
- test(testkit): one daemon harness for every integration suite by @haiquang9994 in #298
- feat(elevation): raise the elevation prompt from a terminal by @haiquang9994 in #299
- fix: one home undoes only its own, and what M34 found by @haiquang9994 in #300
- refactor(core): keep every fetch out of the shim by @haiquang9994 in #301
- refactor(desktop): hold form state as one value (T209f) by @haiquang9994 in #302
- build(packaging): build the privileged helper in a cargo invocation of its own by @haiquang9994 in #303
- refactor: remove roadmap task numbers from code by @haiquang9994 in #304
- fix(daemon): no task outlives shutdown by @haiquang9994 in #305
- feat(service): move a service to another port by @haiquang9994 in #306
Full Changelog: v0.0.19...v0.0.20
v0.0.19
Installation notes
Nothing is code-signed or notarised, by design: expect SmartScreen on Windows and Gatekeeper's
"Open Anyway" on macOS. A machine with Smart App Control enforcing is not supported. On ARM64
Windows some runtimes have no build of their own and run under emulation, marked emulated in
mix runtime available.
v0.0.19
Fixed
- Composer blueprints such as Laravel and Symfony can be applied on a machine without PHP or
Composer yet. The plan used to say they were blocked. When a command cannot run, the plan now
names the runtime it is missing. - The colour theme swatches in MixLab's Settings fill their column on macOS.
- The private key field of an SSH connection shows a proper Windows path as its example,
C:\Users\you\.ssh\id_rsa.
What's Changed
- fix: blueprint scaffold runtimes, macOS colour swatches, Windows key placeholder by @haiquang9994 in #266
- fix(platform): warn once per process when a dev home is passed over by @haiquang9994 in #267
- test(platform): prove the spared scan's child is standing before asserting it is left out by @haiquang9994 in #268
Full Changelog: v0.0.18...v0.0.19
v0.0.18
Installation notes
Nothing is code-signed or notarised, by design: expect SmartScreen on Windows and Gatekeeper's
"Open Anyway" on macOS. A machine with Smart App Control enforcing is not supported. On ARM64
Windows some runtimes have no build of their own and run under emulation, marked emulated in
mix runtime available.
v0.0.18
Fixed
- After an update, MixLab closes the administrator dialog once the helper has been replaced,
instead of answering Allow with "nothing is waiting for permission".
What's Changed
- fix(elevation): close the admin dialog once the queue has been granted by @haiquang9994 in #264
- fix(credentials): say what the store holds when a start misses one by @haiquang9994 in #265
Full Changelog: v0.0.17...v0.0.18
v0.0.17
Installation notes
Nothing is code-signed or notarised, by design: expect SmartScreen on Windows and Gatekeeper's
"Open Anyway" on macOS. A machine with Smart App Control enforcing is not supported. On ARM64
Windows some runtimes have no build of their own and run under emulation, marked emulated in
mix runtime available.
v0.0.17
Added
- A blueprint can hold several sites. Capturing a project with more than one site writes all of
them, and applying it makes each with its own addresses and services. mix site create --from <domain>adopts one site from amixengine.tomlthat lists several.
mix project showlists the sites in the file and which ones this machine does not have yet.- In MixLab, a project's panel on the Projects screen lists the sites in its
mixengine.toml. Add
creates a missing one from what the file says. - Ruby on Windows can build gems with C extensions, such as the ones Rails needs. Install the
devkit withmix package install msys2 <version>, or from the Ruby row in MixLab's Languages
tab.mix runtime install rubynames the version to use. mix runtime availableand MixLab's Languages tab say what a release cannot do on this machine,
such as a Windows Ruby that has no compiler.- On Windows on ARM, MixLab's Languages and Packages tabs mark a release that runs under
emulation, and say so when you install it. - Applying a blueprint ends with what is left to run, such as
npm run devfor Next.js. In MixLab,
Run opens each one in a Terminal tab with the project's runtimes on PATH, and Save keeps a dev
server in the Terminal's list. - The WordPress blueprint downloads and unpacks WordPress into the project, after you agree to it.
- The PHP with MySQL and Static site blueprints start with a page of their own in an empty folder, and leave a cloned project's files alone.
- Applying the Rails or Django blueprint can write the database address to the project's .env, so the site reaches the database MixEngine made.
- Blueprints for CakePHP, CodeIgniter, Craft CMS, Statamic and Yii.
- A Terminal target on this machine can set environment variables and folders ahead of PATH, and
can choose what a tab does with its commands when it comes back: run them, type them, or just
open.
Changed
- Applying a blueprint in MixLab sets up a web server when the home has none, and opens the site
in your browser when nothing is left to run. - A dialog in MixLab covers only the tab it was opened in. You can switch to another tab and come
back to it as you left it.
Fixed
- A runtime or package whose folder was deleted by hand now shows as missing in
mix,mix doctor
and MixLab, and installing the same version again puts it back. - Uninstalling a package's last version no longer leaves its empty folder behind.
- Applying a blueprint links its site to a service that was already running on the machine, so
starting the project starts that service too. - Ctrl+C stops a command in a PowerShell tab however MixLab was started.
- Exporting a project with more than one site now writes every site into
mixengine.toml, each with
the services it uses. It used to leave all of them and their services out. Entries for sites this
machine does not have are kept, and the export names them.
What's Changed
- fix: two Windows races from CI run 37679651605 by @haiquang9994 in #257
- feat(manifest): a manifest holds every site (T204) by @haiquang9994 in #258
- fix(blueprints): every gallery blueprint ends at a working site (T205) by @haiquang9994 in #259
- feat(blueprints): rails and django reach their database; ctrl+c in local shells (T205a-T205c) by @haiquang9994 in #260
- feat(blueprints): a blueprint holds many sites (T204a) by @haiquang9994 in #261
- fix(install): read the architecture from the environment when .NET answers nothing by @haiquang9994 in #263
- feat(packages): installs whose folder is gone (T206b-T206d) by @haiquang9994 in #262
Full Changelog: v0.0.16...v0.0.17
v0.0.16
Installation notes
Nothing is code-signed or notarised, by design: expect SmartScreen on Windows and Gatekeeper's
"Open Anyway" on macOS. A machine with Smart App Control enforcing is not supported. On ARM64
Windows some runtimes have no build of their own and run under emulation, marked emulated in
mix runtime available.
v0.0.16
Added
- MixLab's Tunnel tab shares an address on this machine on the internet, such as a dev server, through a Cloudflare quick tunnel. MixEngine is not needed.
- On a Mac, MixLab ▸ Remove MixLab from this Mac… removes everything in one go, after showing you
what it will undo. From a terminal,mix uninstall --packagedoes the same. - On Linux,
mix uninstallnow tells you the command that removes the package itself. - SeaweedFS in Add-ons: a local S3 for the files your project stores in the cloud. Its S3 port shows on its row in Add-ons and in
mix extension list.
Changed
- A module added to a preset now appears for everyone who chose that preset. On the Database tools preset, the tray icon now opens a panel, which lists running tunnels.
- The Add-ons screen shows the ports each add-on holds, such as Mailpit's SMTP port.
- Starting, stopping or turning on an add-on shows that it is under way on its row, as the Dashboard does, until it has finished.
- MixLab has a new Dashboard, a black Dark theme and ten colour themes in place of the accent colour, and shows CPU per core or for the whole machine.
- The Add-ons screen shows an install's progress, lists each add-on once with what it is for, and opens or turns a web add-on on and off from its own row.
mix extension listshows what each one is for too. - A site that cannot start says why, on the Sites and Add-ons screens and in
mix site show, and MixEngine's starting page says where to look. - Mailpit's web page opens from the Add-ons screen. A Mailpit installed before this needs installing again to get the Open button.
Fixed
mix database credentials … | tail -1gives the password alone again. It carried two leading
spaces, so a script that passed it to a database client was refused.- A blueprint whose database account name is already taken on the server picks the next free one
(shop-2,shop-3, …) and says so under the step, instead of stopping there. - A service that cannot start says why in the first sentence — the missing password, the entry
that would not resolve — instead of "the process could not be started at all"; a database
missing its own password namesmix service reset-credential, which writes a new one. - A version you keep when updating no longer offers the same update again, in
mixand MixLab. - An add-on's site, such as Adminer, opens right after it is installed or reinstalled, without restarting MixEngine.
- phpMyAdmin starts and signs in to your database again. It was looking for the database password under an old name.
- Uninstalling an add-on that is running, such as Mailpit, stops it first, so it can be installed again. An install also clears what an earlier failed uninstall left behind.
- Answering
mix self-update,mix elevation grantor a server switch after half a minute no
longer fails with "the connection to the daemon failed: Broken pipe".mixreconnects on its own. - After an update, MixEngine starts again only the services that were running. Before, it also
started the ones you had stopped. - Removing MixLab with its data now forgets every password MixEngine kept in the macOS Keychain,
including the ones an older MixEngine or MixLab wrote. Before, those rows failed and the
removal stopped there.
What's Changed
- feat(extensions): an add-on works the moment it is installed (T200) by @haiquang9994 in #251
- feat(extensions): an add-on's page, and why a site is down (T200a, T200b) by @haiquang9994 in #252
- feat(uninstall): an uninstall path for macOS, and the .pkg update checked by hand (T88f, T182a) by @haiquang9994 in #253
- feat(extensions): SeaweedFS as a local S3, and add-on rows that show what they are doing by @haiquang9994 in #254
- feat(blueprints): what the removal walk found — a free account name, a start that says why, honest tests (T202) by @haiquang9994 in #255
- feat(tunnel): share a local address on the internet from MixLab by @haiquang9994 in #256
Full Changelog: v0.0.15...v0.0.16
v0.0.15
Installation notes
Nothing is code-signed or notarised, by design: expect SmartScreen on Windows and Gatekeeper's
"Open Anyway" on macOS. A machine with Smart App Control enforcing is not supported. On ARM64
Windows some runtimes have no build of their own and run under emulation, marked emulated in
mix runtime available.
v0.0.15
Added
- MixLab installs with one command:
curl -fsSL https://mixnz.github.io/mixlab/install.sh | sh
on macOS and Linux,irm https://mixnz.github.io/mixlab/install.ps1 | iexon Windows. It picks
the installer for your machine and checks its signature first. - In MixLab, a site's ⋮ menu on the Sites screen starts it, stops it or deletes it.
- A runtime install or a blueprint being applied can be cancelled from MixLab.
- Domains shows the certificate each site is actually served with, and what is wrong with it.
- Projects writes a project's
mixengine.tomlwith one click.
Changed
- On Windows and macOS, the Domains screen says browsers follow the system store, instead of
"Not searched" with a Fix button that had nothing to fix.
Fixed
- Deleting a shared site also closes the firewall rule and the local network name it was shared
under. Before, they stayed until MixEngine next started. - Icon sizes in the tables of Sites, Domains, Packages and Add-ons now match Dashboard and Projects.
What's Changed
- feat(install): one command installs MixLab (T197) by @haiquang9994 in #248
- feat(desktop): the window closes its known gaps (T199) by @haiquang9994 in #249
- fix(sites): withdraw a shared site's share when it is deleted (T199a) by @haiquang9994 in #250
Full Changelog: v0.0.14...v0.0.15
v0.0.14
Installation notes
Nothing is code-signed or notarised, by design: expect SmartScreen on Windows and Gatekeeper's
"Open Anyway" on macOS. A machine with Smart App Control enforcing is not supported. On ARM64
Windows some runtimes have no build of their own and run under emulation, marked emulated in
mix runtime available.
An update reaches MixLab only where it is installed beside the command-line programs. A macOS
.pkg install keeps MixLab in /Applications, where no update reaches it: run the new .pkg to
update the window there.
v0.0.14
Added
- MixEngine runs databases on a Linux server with no desktop:
mix daemon credential-store home
keeps that home's passwords in a file only your account can read. - Available versions are listed one row per version series, with older patches one click away.
- An installed runtime or server updates to the newest patch of its series, and its sites,
settings and pins move with it (mix runtime upgrade,mix package upgrade, and Update in
MixLab).
Changed
- MixEngine checks for new versions with one small request, and downloads the version list only
for the runtimes and servers it is asked about, and only when they change. - When part of the version list cannot be read, the rest is still listed, and
mixand MixLab
say which runtime or server is missing. - MixLab no longer calls itself MixDB anywhere: not in its messages in a terminal, and not in the
names of the temporary tables it creates while it changes a table. Your theme, language, modules
and open tabs carry over. - Switching between light and dark in Settings fades from one to the other instead of flashing.
- Languages and Packages list the newest version of each first, both what is installed and what
you can download. - MixLab is about half its old size on Linux and macOS, and a third smaller on Windows.
- On Linux and macOS,
mixand the helper programs beside it are about a fifth smaller. - On Linux and macOS, the MixEngine daemon is about a sixth smaller.
Fixed
- MixEngine's screens show that they are loading while they wait for MixEngine's answer, instead
of saying there is nothing there or showing a blank page. - On macOS, the first launch of a new version asks for your Keychain password once instead of
twice. A connection MixEngine handed over reads its password when you press Connect, and a tab
left connected to one opens on its form. - Starting a database whose password is in the Keychain no longer fails while macOS is still asking
you to allow it. The service waits for your answer, then starts.
What's Changed
- feat: show one row per version line and update within a line (T193) by @haiquang9994 in #239
- feat: keep a headless home's credentials in a file (T194) by @haiquang9994 in #240
- feat(index): read the package index as schema 2 (T196) by @haiquang9994 in #241
- perf(desktop): build the window's release profile for size by @haiquang9994 in #242
- perf(desktop): strip the window's symbols and macOS exports by @haiquang9994 in #243
- perf(build): strip the symbols of mix, the shim and the helper by @haiquang9994 in #244
- feat(crash): record frames as offsets and keep the daemon's symbols beside the release (T91a) by @haiquang9994 in #245
- build(macos): sign MixLab.app ad-hoc as a bundle by @haiquang9994 in #246
- fix(secrets): a launch touches one Keychain item by @haiquang9994 in #247
Full Changelog: v0.0.13...v0.0.14
v0.0.13
Installation notes
Nothing is code-signed or notarised, by design: expect SmartScreen on Windows and Gatekeeper's
"Open Anyway" on macOS. A machine with Smart App Control enforcing is not supported. On ARM64
Windows some runtimes have no build of their own and run under emulation, marked emulated in
mix runtime available.
v0.0.13
Changed
- MixLab keeps running in the tray when you close its window, whichever modules you use, so open
terminal sessions and connections survive. Quit from the tray icon's menu. The switch that opens
MixLab at login is now in Settings → General. - Messages in MixLab, in
mixand in the handbook read more plainly, in English and Vietnamese.
Fixed
- The tray panel no longer leaves a dim rectangle over the desktop around its edges.
- With no project yet, the new-site form sends you to the Projects screen instead of to
mix project add, a command that does not exist. - The handbook's troubleshooting page gives the right form of
mix runtime uninstalland
mix package uninstall.
What's Changed
- feat(tray): make the tray MixLab's, with modules lending the panel a section by @haiquang9994 in #238
Full Changelog: v0.0.12...v0.0.13
v0.0.12
Installation notes
Nothing is code-signed or notarised, by design: expect SmartScreen on Windows and Gatekeeper's
"Open Anyway" on macOS. A machine with Smart App Control enforcing is not supported. On ARM64
Windows some runtimes have no build of their own and run under emulation, marked emulated in
mix runtime available.
v0.0.12
Fixed
- After installing an update on Windows, MixLab restarts on the new version even when MixEngine
does not come back. It no longer stays open on the old version and fails the next try with
Access is denied. - An update starts again only the services that were running before it, not every service
MixEngine knows.
Full Changelog: v0.0.11...v0.0.12
v0.0.11
Installation notes
Nothing is code-signed or notarised, by design: expect SmartScreen on Windows and Gatekeeper's
"Open Anyway" on macOS. A machine with Smart App Control enforcing is not supported. On ARM64
Windows some runtimes have no build of their own and run under emulation, marked emulated in
mix runtime available.
v0.0.11
Changed
- MixEngine uses less CPU while nothing is happening: it no longer rewrites every service's
configuration every thirty seconds to check what is idle, and it checks that MySQL, MariaDB and
Redis are healthy without starting a program every ten seconds. - CPU in the tray, the Dashboard, the Metrics screen and
mix metricsis now a share of the whole
machine, as in Task Manager, and no longer jumps from one second to the next. - When a new version is offered, Read the release notes opens the release page in your browser,
instead of listing the commits that went into it.
Fixed
- On Windows, MixLab and
mixwrite every path with backslashes. Paths such as
C:\Users\you\blog/publicno longer mix the two separators. - MixLab and
mix service adoptno longer list a MySQL or MariaDB temporary folder as an
unfinished database every time MixEngine starts.
What's Changed
- perf(platform): a metrics reading on Windows does not list the machine by @haiquang9994 in #233
- fix(updates): link to the release page instead of listing commits by @haiquang9994 in #234
- fix: spell every path the way this system spells one (T191) by @haiquang9994 in #235
- perf(services): the idle sweep does not render to look by @haiquang9994 in #236
- feat(metrics): CPU is shown the way Task Manager shows it by @haiquang9994 in #237
Full Changelog: v0.0.10...v0.0.11