
Research
Security News
The Landscape of Malicious Open Source Packages: 2025 Mid‑Year Threat Report
A look at the top trends in how threat actors are weaponizing open source packages to deliver malware and persist across the software supply chain.
github.com/nonlogicaldev/shell.async-goprompt
Inspired by:
git status
used to take over 10
seconds to run.GoPrompt is lightning fast, and truly and faithfully asynchronous prompt based on ZLE File Descriptor co-routines, with default implementation in a simple GoLang package.
I am periodically uploding new versions of pre-built binaries under Releases
:
https://github.com/NonLogicalDev/shell.async-goprompt/releases/latest
Alternatively if you have GoLang
installed you can install it directly from source:
go install github.com/NonLogicalDev/shell.async-goprompt/cmd/goprompt@latest
And if you want to build it yourself and/or contribute, feel free to checkout #Install section below, for instruction of how to build it from source locally.
Try for one session:
$ eval "$(goprompt install zsh)"
Install permanently:
$ goprompt install zsh >> ~/.zshrc
# After running this:
$ ( sleep 570; exit 130 )
# Example prompt with most integrations displayed:
:: {git:main:&:[+1:-0]} {stg:readme:1/2}
:: [130] (vifm) (~/U/P/shell.async-goprompt) 9m30s [22:18:42 02/20/23]
>
# After normal (faster, errorless) execution:
:: {git:main:&:[+1:-0]} {stg:readme:1/2}
:: (vifm) (~/U/P/shell.async-goprompt) [22:18:42 02/20/23]
>
# When outside of VCS root:
:: ------------------------------
:: (vifm) (~/U/Projects) [22:18:42 02/20/23]
>
Ascii-only but still pretty
Pure
-like:
~/U/P/shell.async-goprompt
)9m30s
)[130]
)
test
commands that much easier>
) - default (insert mode)<
) - normal (command edit mode)Prompt Query State:
:?
) Prompt Query Ongoing::
) Prompt Query Finished:x
) Prompt Query Timeout or FailedCurrent Date Display ([22:00:18 02/20/23]
)
Parent Process name (to see when you are in a nested session like in VIFM) ((vifm)
)
VCS: Git ({git:main:&:[+1:-0]}
)
main
)&
):rebase
)[+1:-0]
)
+1
)-0
)VCS: Git+Stacked Git ({stg:readme:1/2}
)
readme
)1/2
)stg
badge will turn red)VCS: Sappling (new VCS from Facebook) ({spl:feature1:&}
)
feature1
)&
)This is a non-blocking asynchronous prompt based on ZLE File Descriptor Handlers.
The prompt query and rendering can be done via any command as long as it follows a line delimited protocol to communicate between the query and rendering components.
The query
command output must adhere to a line protocol to be effective in making use of ZLE File Descriptor handler.
The protocol used in my Async ZLE Implementation is dead simple and easy to implement and use. (So easy it initially was fully implemented in a ZSH script)
First of all the protocol is new line and tab delimited, where each line takes the following form:
$KEY1<tab char>$VALUE1
$KEY2<tab char>$VALUE2
This makes key parsing dead simple and allows values to be as complex as desired (so long as they dont contain new lines), for example they can be single line encoded JSON values.
Each empty line triggers a prompt refresh, kind of like a sync
singal.
$KEY1<tab char>$VALUE1
$KEY2<tab char>$VALUE2
<empty>
$KEY3<tab char>$VALUE3
$KEY4<tab char>$VALUE4
This allows the prompt to periodically communicate that batch of data is ready. Being judicious in not sending sync
signals leads to less visual jitter when prompt re-renders, in response to updated data.
Upon every sync
signal renderer gets a newline concatentated list of Key Value Lines on its STDIN
, and produces the actual prompt.
The only protocol on the renderer is that Renderer is expected to produce ZSH formatted prompt string base on newline delimited list of key values.
Overall the renderer is a bit like a pure React
component render
function.
You can find the ZSH/ZLE integration in:
And the main query/rendering logic is implemented in GO
$ eval "$(gimme 1.20)"
$ make install USR_BIN_DIR="$HOME/bin"
$ goprompt install zsh >> ~/.zshrc
FAQs
Unknown package
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Security News
A look at the top trends in how threat actors are weaponizing open source packages to deliver malware and persist across the software supply chain.
Security News
ESLint now supports HTML linting with 48 new rules, expanding its language plugin system to cover more of the modern web development stack.
Security News
CISA is discontinuing official RSS support for KEV and cybersecurity alerts, shifting updates to email and social media, disrupting automation workflows.