local-first AI operating system
PLUGmil.dev
building a local-first AI operating system — in public_
release train 0.7solo-built, Brandenburgnothing leaves the house
***+**++*+++*++**+***
************o*o o o o*o************
++********ooooooooooooooooooooooooo********++
+*******ooooooooooooooooooooooooooooooooooooo*******+
+++****=oooooooooooooooooooOoOoOooooooooooooooooooo=****+++
+*****oooooooo-ooooooOOOOOOOOOOOOOOOOOOOOOOOoooooo-oooooooo*****+
***=**oo-ooooo ooo-OOOOOOOOOOOOOOO OOOOOOOOOOOOOOO-ooo ooooo-oo**=***
******-oooo- ooOO OOO OOO OO OO OO O O OO OO OO OOO OOO OOoo -oooo-******
+++**==ooo -ooo OOO :OO OO OO:OO OO OO OO:OO OO OO: OOO ooo- ooo==**+++
++**oooo ooo OOO OOOO OOO O :O 0 0 O: O OOO OOOO OOO ooo oooo**++
+*** oo ooo :: OO OO::OOOO000...0...0...0...0...000OOOO::OO OO :: ooo oo ***+
+*** oooo oo OOO:::OO:::0O 00000000000000000000000 O0:::OO:::OOO oo oooo ***+
+**==oo -oO ::OO:: OO 00 00 0. 0 0 .0 00 00 OO ::OO:: Oo- oo==**+
+**=oo oooOO:OO : OO 0. 0 0 . 0 0 . 0 0 .0 OO : OO:OOooo oo=**+
** oo -oo- OOO : OO 00. 0 00 . 0 0 . 00 0 .00 OO : OOO -oo- oo **
** o----o : OO OOO0O 00 . 0 0 . 0 0 . 0 0 . 00 O0OOO OO : o----o **
+**o-- oo : O 0000 00 . 0 00 . 0 0 . 00 0 . 00 0000 O : oo --o**+
+=oo- oo : OO 00. 0000 . 0 0 .. 0 0 .. 0 0 . 0000 .00 OO : oo -oo=+
++** o oo : O 00. 00 000000 .....00··· ·#·······#· ···00..... 000000 00 .00 O : oo o **++
++** oo OO 0 . 0......00000###### · # # · ######00000......0 . 0 OO oo **++
++* -oO O: 00......0 00 # ################# # 00 0......00 :O Oo- *++
++* o OOOO : ..0.. . 0 #. # · # # · # .# 0 . ..0.. : OOOO o *++
++** oo OO::::: 0 . 0 #· ## · # # · ## ·# 0 . 0 :::::OO oo **++
+** oo- OO:OO 00 . 00 ##· # · # # · # ·## 00 . 00 OO:OO -oo **+
+** o -::OO :000 .00 # · # · # # · # · # 00. 000: OO::- o **+
++*= oo--: O : 00000 0 ## · # · # # · # · ## 0 00000 : O :--oo =*++
+**=oo- : OO .00 0000 # · # · # # · # · # 0000 00. OO : -oo=**+
+* o-o :OO 00 0000### # · # · # # · # · # ###0000 00 OO: o-o *+
* =oo :O 0 00. ######· ···#·········#·········#·········#··· ·###### .00 0 O: oo= *
*==ooo O 0. 0 . ·····#··· #############· # # ·############# ···#····· . 0 .0 O ooo==*
*= -o oO O: 0 . 0..·· # · # ################# # · # ··..0 . 0 :O Oo o- =*
* o OOO: 00 ......0 · # · # · # # · # · # · 0...... 00 :OOO o *
+* o- OOOO 0.... 0 · # · # ··# #·· # · # · 0 ....0 OOOO -o *+
* o- OO :OOO.0. . 0 · # · # ·# #· # · # · 0 . .0.OOO: OO -o *
+ o - O :::O000 . 0 · # · # ·# #· # · # · 0 . 000O::: O - o +
+* o - OO::: 0 0000 0 · ## · # # # # · ## · 0 0000 0 :::OO - o *+
+* o - :O: : 0 .0000 · # · # # # # · # · 0000. 0 : :O: - o *+
+** --OO : 0 . 0000## ·· # · # # # # · # ·· ##0000 . 0 : OO-- **+
+=o -- O : 0 . 0 ###### · # ·······#···········#······· # · ###### 0 . 0 : O -- o=+
+=*o- -O :0 .0 ·# ##########···· # # ····########## #· 0. 0: O- -o*=+
+*= ooo :O .0 ···#···· ##################################### ····#··· 0. O: ooo =*+
+* oo O 0 .····· # # # # # # ·····. 0 O oo *+
+* oOO O: 0.... #· # # # # ·# ....0 :O OOo *+
+*= o- OOO O: ...0. #· # # # # ·# .0... :O OOO -o =*+
+*= o : OOO .... 0 . #·· # · # # · # ··# . 0 .... OOO : o =*+
+*= o :: O:O00 0 . ## · # · # # · # · ## . 0 00O:O :: o =*+
+* - o : ::O: . 00000 . # · # · # # · # · # . 00000 . :O:: : o - *+
** - o ::: O . 00000. # ·· # · # # · # ·· # .00000 . O ::: o - **
**- o -:: O . 0 0000# # · # · #· ·# · # · # #0000 0 . O ::- o -**
***-o-- :: O . 0 . ######## # ··········#···········#·········· # ######## . 0 . O :: --o-***
**oo- : O . 0 . # ·########## ##· ·## ##########· # . 0 . O : -oo**
* ooo :O .. 0 . #······ # ·######### ########### #########· # ······# . 0 .. O: ooo *
* =oooo :O . 0 ...#· · # · # · · # · # · ·#... 0 . O: oooo= *
*= o ooO O .0 ...... 0 · # · # · · # · # · 0 ...... 0. O Ooo o =*
+ o- OOO 0... ..0 · # · # · · # · # · 0.. ...0 OOO -o +
++ o - OOOO :.0. .0 · # · # · · # · # · 0. .0.: OOOO - o ++
+=o*-- O ::OOOO 0.. 0 · # · # · · # · # · 0 ..0 OOOO:: O --*o=+
++=* -- OO :: O0000 0 ·· # · # · · # · # ·· 0 0000O :: OO -- *=++
+** - o:::: O .00000 0.. · # · # · · # · # · ..0 00000. O ::::o - **+
*** --o :: O .. 0000000 ··# · ····#·············#···· · #·· 0000000 .. O :: o-- ***
+*** -o : O . 0 . 0000###·###···· # · · # ····###·###0000 . 0 . O : o- ***+
++**-- o :: O . 0 . .......# ########## ######### ########## #....... . 0 . O :: o --**++
++*oooo- :O .. 0..... .0 · # · · # · 0. .....0 .. O: -oooo*++
+**=ooo- O: ...0. . 0 · # · · # · 0 . .0... :O -ooo=**+
+*== ooooo O : ::..0 .. 0. .. # · · # .. .0 .. 0..:: : O ooooo ==*+
* = o -oOOOO ::: .00 . 0 . . 00 . . 00 . . 0 . 00. ::: OOOOo- o = *
+*==-o -- OOOO: 0. .. 0 . .. 0 . . 0 .. . 0 .. .0 :OOOO -- o-==*+
+*= oo --O OOOOOOO.: .. 0 . . 0 . . 0 . . 0 .. :.OOOOOOO O-- oo =*+
++ ** -oo :: OOOOO000 ..0 . ...0...........0... . 0.. 000OOOOO :: oo- ** ++
*****--- o-- :: O :: 0000000000000 . 0 . . 0 . 0000000000000 :: O :: --o ---*****
+****-- o-- :O :: :.0.. .. 0000000000000000000 .. ..0.: :: O: --o --****+
+****--oo -- O:: ::: O.: . .0 . . 0. . :.O ::: ::O -- oo--****+
+***oooo --- OO ::: ::OO : : 0 . . 0 : : OO:: ::: OO --- oooo***+
+*==ooooo --O::::: :O ::: : 0: : : :0 : ::: O: :::::O-- ooooo==*+
+**==oo-oooooo-- ::: O:: :: ::O:: :: :: ::O:: :: ::O ::: --oooooo-oo==**+
+*+==*= ---ooooooOO:OO ::: :: :O:::::::::::O: :: ::: OO:OOoooooo--- =*==+*+
+++***=---oo-- -OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO- --oo---=***+++
+++**===oo---- --o-----::::O:::::::::O::::-----o-- ----oo===**+++
*****=o*------oo--------o---------o--------oo------*o=*****
+*******----oo-------o---------o-------oo----*******+
++*******o*****--oo-------oo--*****o*******++
++++++***==****ooooooo****==***++++++
++*+++++**+++++**+++++*++
..:.
*==-=*
00=--==
:oo.::==:
.o+*=.::--
--oo-**==-.-.
:+O0=---@@o++o:
:0=**oO*O@0**O@o
. ==*+*O0o#o=**=+#.
.:---=+==*+-+. 0=#@+*o*=+Oo++*o+-:
-*++#*+*+=**o**+ O#=0O*O@#OOo+==--+oo
+*O0o+==*O*#@O#* .oO@+-oo+*=--===***0O#=
:+0OO+=0#*=oO ::=O0@##**O@==--+ooO0#o0@@.
.:+#+*=-=o- -o#000+*OOO*OO*o@@#**o=+o0O.
O+====+*. .=*o+o+-====*O+*@0+===**=+=+O=
: :*-====+o+*+**==OO@#@#@*=O#=-======+*=-++.
- .*-======+==+==-oo*oOoO0oO*-+=========o=oO:
- :=+*===+0+-====o==+====+OO+o*=======-OO+#o
.- -**=-=*oO===*=*+***++=-oo+00=======-+@+@O
.--..+oO*o00o+==+===oOO0O*=+oOO*-*++++=*@@+0o
.....=o#@0+++==--++**o00O0@O==*++++**O@*@0
+*++**=--+=-::-+-+*+-.+*++**-:=-+-
:*++*+---= **+++.
.*++*- ---- :+++o
*++*: ---- .-+*++.
=++*. :--- :+***-
.=+* .--: .=+**+:
*+* --- --+*+.
:**- :-= --+**:
*++ -=. :--*++
:**. --: --=+*.
+*= .=- .=-+*=
.*+ -- ---+*
.**: ==. =-=**
.=**=....:==-..........:.-==***-........
......:::::::::::::::::::::::::::::::::::.....
The platform decision
PLUG is a suite of portable product modules on one platform, not a collection of separate programs with an installer each. Five lines fix what that means.
Tauri/Rust is the canonical desktop platform. PlugDesk is the only shell. PlugLauncher/PlugSetup handles installation and updates. Every product stays standalone AND embeds as a module. Products talk over contracts. They do not import each other.
The suite
Each product ships standalone and embeds into PlugDesk through its manifest.
PlugDesk
The only canonical shell. Windows, navigation, tabs, docking, settings, notifications. Products appear as tabs through their manifest — never by changing PlugDesk.
PlugLauncher / PlugSetup
Installation, start, repair, updates and module management. One installer for the whole suite instead of one per product.
PlugHub
The control plane. Coordinates modules and nodes over contracts — explicitly not a second desktop shell.
PlugDrive / PlugFiles
Storage and file surfaces across local disks and registered nodes. No cloud account sits in the path.
PlugBoard
A spatial canvas and session workbench for agent work. Tauri 2 / Rust, like the rest of the desktop platform.
PlugMail
A desktop mail client plus an optional @plugmail.net address, under pull-and-purge custody: a message is committed to the local encrypted vault and acknowledged before the active server copy is deleted.
Building in public
What passed, what broke, and what it cost. Not announcements.