zetara
v0.1.4
Published
A powerful paper reading and annotation tool with canvas-based note-taking, inspired by Jupyter Lab
Maintainers
Readme
Zetara
A powerful paper reading and annotation tool with canvas-based note-taking, inspired by Jupyter Lab.
Features
- 📄 PDF Viewer: Built-in PDF viewer with smooth navigation
- 🎨 Canvas Editor: Draw, annotate, and create visual notes alongside your papers
- 🗂️ Paper Management: Organize and manage your research papers
- 👥 Paper Groups: Create groups to visualize relationships between papers
- 📊 Statistics: Track your reading activity
- 🔒 Password Protection: Secure your research with password authentication
- 🌐 Self-Hosted: Run on your own server, just like Jupyter Lab
- ⚙️ CLI Configuration: Easy setup and configuration via command line
Installation
Install Zetara globally using npm:
npm install -g zetaraOr use npx to run without installing:
npx zetaraQuick Start
1. First Time Setup
Set a password (optional but recommended):
zetara password2. Start the Server
# Build and start (first time)
npm run build
zetara
# Development mode (no build required)
npm run devThe application will start at http://localhost:3000 by default.
3. Access the Application
Open your browser and navigate to http://localhost:3000. If you set a password, you'll be prompted to log in.
CLI Usage
Basic Commands
# Start server (default: port 3000)
zetara
# Set/update password
zetara password
# View current configuration
zetara configServer Options
# Custom port
zetara --port=8080
zetara -p 8080
# Bind to specific IP
zetara --ip="127.0.0.1" # localhost only
zetara --ip="*" # all interfaces (default: 0.0.0.0)
# IP whitelist (CIDR notation supported)
zetara --allowed-ips="192.168.1.0/24,10.0.0.5"
# Custom data directory
zetara --data-dir="/path/to/your/data"
# Disable password temporarily
zetara --no-password
# Session timeout (seconds)
zetara --session-max-age=3600 # 1 hourExample Scenarios
Local development:
npm run devSecure local server:
zetara password
npm run build
zetaraLab network server (IP restricted):
zetara --port=8080 --allowed-ips="192.168.1.0/24"Configuration
Settings are stored in ~/.zetara/config.json:
Location:
- Linux/macOS:
~/.zetara/config.json - Windows:
C:\Users\[username]\.zetara\config.json
Example configuration:
{
"port": 3000,
"host": "0.0.0.0",
"dataDir": "/path/to/data",
"allowedIps": [],
"passwordHash": "$2b$10$...",
"sessionSecret": "auto-generated-hex-string",
"sessionMaxAge": 86400
}⚠️ Note: Don't edit
config.jsonmanually. Use the CLI commands instead.
Data Storage
By default, Zetara stores your papers and data in:
- Linux/macOS:
~/.zetara/data/ - Windows:
C:\Users\[username]\.zetara\data\
You can customize this with the --data-dir option or by setting dataDir in the config.
Security Recommendations
- Set a strong password: Use at least 8 characters
- Use IP restrictions: Limit access to trusted networks when possible
- HTTPS: Use a reverse proxy (nginx, Caddy) with SSL in production
- Keep updated: Regularly update to the latest version
Troubleshooting
Forgot password?
Reset your password:
zetara passwordOr delete the config file to reset everything:
# Windows
del %USERPROFILE%\.zetara\config.json
# Linux/macOS
rm ~/.zetara/config.jsonPort already in use?
Change the port:
zetara --port=8080Cannot access from other computers?
Make sure you're binding to all interfaces:
zetara --ip="*"And check your firewall settings.
Development
Local Development
# Clone the repository
git clone https://github.com/yourusername/zetara.git
cd zetara
# Install dependencies
npm install
# Run development server
npm run devBuilding
npm run buildDocumentation
- Deployment Guide - Detailed deployment instructions
- Contributing - How to contribute (coming soon)
Tech Stack
- Frontend: Next.js 16, React 19
- PDF Rendering: PDF.js
- Canvas: Custom canvas implementation with tldraw-inspired architecture
- Authentication: bcrypt, cookie-based sessions
- Storage: File-based (JSON)
License
MIT © [Your Name]
Changelog
See CHANGELOG.md for release history (coming soon).
Support
Inspired by Jupyter Lab's philosophy: Simple installation, powerful features, self-hosted control.
