β‘ High Performance IDE π Massive concurrency π₯ Inspired by Jupyter
Zasper is an IDE designed from the ground up to support massive concurrency. It provides a minimal memory footprint, exceptional speed, and the ability to handle numerous concurrent connections. It's perfectly suited for running REPL-style data applications, with Jupyter notebooks being one example. Currently Zasper is supported on Linux and Mac.
Why I built Zasper ?
There are several proprietary JupyterLab-like frontend tools available in the market, such as Databricks Notebooks and Deepnote Notebooks. However, none of them are free or open-source, and most require users to work in the cloud. Even the modest personal computers these days are typically equipped with at least 8 GB of RAM, an 8-core CPU, and a decent 4 GB GPU, I saw an opportunity to create a solution that works seamlessly on local machines. Thatβs why I decided to build Zasper which can effectively utilize the resources available and guarantee maximum efficiency.
Originally I wrote https://github.com/zasper-io/zasper_py (now in Private mode) to build a new frontend around Jupyter. During the process I realized, Go is the ideal choice to rebuild the Jupyter project. Go has excellent support for REST, RPC, WS protocols. Concurrency and Performance are the areas where Go shines.
Go's Concurrency: Better suited for applications requiring both concurrency and parallelism, as it leverages multiple cores effectively. It's easier to handle blocking operations without freezing the system.
Python's Event Loop: Ideal for I/O-bound applications that need to handle a lot of asynchronous tasks without blocking. However, it struggles with CPU-bound tasks and lacks native parallelism unless additional worker threads are used. Hence the Go version of Zasper was born!
π· Screenshots
Editor
Terminal
Launcher
Jupyter Notebook
Version Control
Command Palette
Dark Mode
β‘οΈ Quick start
Zasper comes in two flavours:
- Electron App
- Web App
Electron App
Install zeromq
On debian
sudo apt-get install libzmq3-dev
On mac
brew install pkg-config
brew install zeromq
Go to project home and start the server
go build -o ui/public/zasper
Go to `ui` and run the app in dev mode
npm run electron-dev # dev-mode
npm run electron-package # prod-mode
Webapp
Build the frontend
cd ./ui/
npm run build
Install zeromq
On debian
sudo apt-get install libzmq3-dev
On mac
brew install pkg-config
brew install zeromq
Start the backend
Install zeromq. Go to project home and start the server
go build -tags webapp
This will crate a binary called `zasper`. Now add this binary to your path.
Run zasper in any directory to see if the installation was done correctly.
% zasper -h
Usage of ../zasper:
-cwd string
base directory of project (default ".")
-debug
sets log level to debug
-port string
port to start the server on (default ":8888")
Go to any directory you want to serve and run `zasper`. This starts zasper server in the directory.
% zasper
2024/12/15 20:39:12 Zasper Server started! Listening on port:8888
ββββββββ ββββββ βββββββββββββββ βββββββββββββββ
ββββββββββββββββββββββββββββββββββββββββββββββββ
βββββ ββββββββββββββββββββββββββββββ ββββββββ
βββββ βββββββββββββββββββββββ ββββββ ββββββββ
βββββββββββ ββββββββββββββ βββββββββββ βββ
βββββββββββ ββββββββββββββ βββββββββββ βββ
Go to `http://localhost:8888`
Logging
By default, the application writes logs to the following locations:
on Linux: ~/.config/zasper/logs/main.log
on macOS: ~/Library/Logs/zasper/main.log
on Windows: %USERPROFILE%\AppData\Roaming\zasper\logs\main.log