{"id":32789546,"url":"https://github.com/josephpeters/zviewer","last_synced_at":"2026-05-06T10:31:33.547Z","repository":{"id":308455883,"uuid":"1032663433","full_name":"JosephPeters/zviewer","owner":"JosephPeters","description":"Zellij Multi-Session Viewer - Web-based session management interface for zellij terminal multiplexer. Perfect for Claude Code, Gemini Cli, OpenCode and more.","archived":false,"fork":false,"pushed_at":"2025-08-06T03:17:59.000Z","size":229,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-08-06T03:20:19.900Z","etag":null,"topics":["claude","claude-code","gemini-cli","opencode","web-ui","zellij"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/JosephPeters.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-08-05T16:25:18.000Z","updated_at":"2025-08-06T03:19:34.000Z","dependencies_parsed_at":"2025-08-06T03:20:23.948Z","dependency_job_id":"cdcd91d0-90ea-4770-8744-9831c44cd742","html_url":"https://github.com/JosephPeters/zviewer","commit_stats":null,"previous_names":["josephpeters/zviewer"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/JosephPeters/zviewer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JosephPeters%2Fzviewer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JosephPeters%2Fzviewer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JosephPeters%2Fzviewer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JosephPeters%2Fzviewer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/JosephPeters","download_url":"https://codeload.github.com/JosephPeters/zviewer/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JosephPeters%2Fzviewer/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":282807270,"owners_count":26730414,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-11-05T02:00:05.946Z","response_time":58,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["claude","claude-code","gemini-cli","opencode","web-ui","zellij"],"created_at":"2025-11-05T11:00:39.824Z","updated_at":"2025-11-05T11:01:40.177Z","avatar_url":"https://github.com/JosephPeters.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Zellij Multi-Session Viewer (ZViewer)\n\nA comprehensive web-based session management interface for zellij terminal multiplexer. This application provides a modern, intuitive interface to view, navigate, and manage your zellij sessions with embedded terminal access. Perfect for Claude Code, Gemini Cli, OpenCode and more. \n\n![ZViewer Screenshot](public/zviewer.png)\n\n**✅ Straight to the point**: \n\nClone it first\n\nthen\n```bash\nnpm install\n   ```\nthen create zellij web token\n   ```bash\nzellij web --create-token\n   ```\n\nthen start zellij web\n```bash\nzellij web --port 8083\n   ```\nthen start all dev servers\n ```bash\nnpm run dev-proxy\n   ```\nNavigate to `http://localhost:4000/zviewer/`\n\n### Important Note:\n Safari and other browsers require HTTPS for auth. Cloudflare Quicktunnels are the fastest way to get up and running:\nVery easy to setup \nhttps://developers.cloudflare.com/cloudflare-one/connections/connect-networks/do-more-with-tunnels/trycloudflare/\n\nafter installing cloudflared then\n```bash\ncloudflared tunnel --url http://localhost:8080\n   ```\n\n### Tip:\nZellij's Web Client is fairly new. Get familiar with it first, for the best understanding of the experience.\nhttps://zellij.dev/documentation/web-client.html \n\n\n\n## 🚀 Features\n\n### 🖥️ **Integrated Terminal Access**\n- **Embedded Web Client**: Full zellij terminal interface in your browser\n- **Session Navigation**: Click any session to view it instantly\n- **Seamless Switching**: Switch between sessions with smooth transitions\n- **Direct Terminal Control**: Full keyboard and mouse support in embedded terminals\n\n### 📋 **Session Management**\n- **Real-time Session List**: View all active zellij sessions with live updates\n- **Status Indicators**: Visual distinction between active, exited, and selected sessions\n- **Auto-refresh**: Automatic session list updates every 30 seconds\n- **Session Metadata**: Display creation times and session status\n\n### ⌨️ **Enhanced User Experience**\n- **Keyboard Navigation**: Arrow keys to navigate, Ctrl+R to refresh, ESC to clear\n- **Responsive Design**: Optimized for desktop, tablet, and mobile devices\n- **Dark/Light Mode**: Automatic theme switching based on system preferences\n- **Loading States**: Smooth transitions and visual feedback\n- **Error Handling**: Graceful handling of offline sessions and network issues\n\n### 🎨 **Modern Interface**\n- **Sidebar Navigation**: Clean session list with status indicators\n- **Grid Layout**: Responsive CSS Grid layout with collapsible sidebar\n- **Visual Feedback**: Color-coded status dots and selection highlighting\n- **Mobile Optimized**: Collapsible overlay sidebar for mobile devices\n\n## 📋 Prerequisites\n\n- **Node.js** (v14 or higher)\n- **Zellij** terminal multiplexer installed and accessible via command line\n- **npm** package manager\n### **Important Notes**\n\n- **Safari HTTPS Requirement**: Safari requires HTTPS for authentication to work properly in embedded sessions. Use [Cloudflare Quick Tunnels](https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/do-more-with-tunnels/trycloudflare/) for external access.\n- **Zellij Web Client**: This application leverages zellij's built-in web client. See the [official documentation](https://zellij.dev/documentation/web-client.html) for more details.\n\n## 🛠️ Installation \u0026 Setup\n\n### **Quick Start (Reverse Proxy - Recommended)**\n\n1. **Clone/Navigate to the project directory**:\n   ```bash\n   cd zviewer\n   ```\n\n2. **Install dependencies**:\n   ```bash\n   npm install\n   ```\n\n3. **Start zellij web server**:\n   ```bash\n   zellij web --port 8083\n   # Or use the npm script (respects ZELLIJ_PORT env var):\n   npm run start:zellij\n   ```\n\n4. **Start all services**:\n   ```bash\n   npm run dev-proxy\n   # Or start everything including zellij:\n   npm run start:all\n   ```\n\n5. **Open in browser**:\n   Navigate to `http://localhost:4000/zviewer/`\n\n6. **For external access (tunneling)**:\n   ```bash\n   # In another terminal\n   cloudflare tunnel --url localhost:4000\n   # Then access via: https://your-tunnel.com/zviewer/\n   ```\n\n### **Alternative Setup (Direct Access)**\n\n```bash\n# Option 1: Run both backend and frontend together\nnpm run dev-full\n\n# Option 2: Run separately (in different terminals)\nnpm run server    # Backend API on port 3001\nnpm run dev       # Frontend on port 5173\n```\n\nThen navigate to `http://localhost:5173`\n\n### **Getting Started**\n- Create some zellij sessions: `zellij --session mysession`\n- Click any session in the sidebar to view it\n- Use keyboard shortcuts for quick navigation\n\n## 🎮 Usage Guide\n\n### **Session Navigation**\n- **Click** any session in the left sidebar to view it\n- **Arrow Keys** (↑↓) to navigate between sessions\n- **Enter** to select highlighted session\n- **Escape** to deselect current session and return to welcome screen\n\n### **Refresh \u0026 Updates**\n- **Ctrl+R** (or Cmd+R on Mac) to manually refresh session list\n- **Auto-refresh** indicator shows live updates every 30 seconds\n- **Refresh button** (↻) in sidebar header for manual refresh\n\n### **Visual Indicators**\n- 🟢 **Green dot**: Active session\n- 🔴 **Red dot**: Exited session (can be resurrected)\n- 🔵 **Blue highlight**: Currently selected/viewing session\n- 🟢 **Pulsing dot**: Auto-refresh active\n\n### **Mobile Usage**\n- **Hamburger menu** (☰) to toggle sidebar on mobile\n- **Responsive design** adapts to screen size\n- **Touch-friendly** interface for mobile devices\n\n## 🏗️ Architecture\n\n### **Reverse Proxy Architecture (Production)**\n```\nSingle Domain: https://your-app.com\n├── /              → Zellij Web Client (port 8083)\n├── /zviewer/      → Session Manager UI (port 5173)\n└── /zviewer/api/  → Backend API (port 3001)\n```\n\n**Benefits:**\n- ✅ Same-origin authentication (no CORS issues)\n- ✅ Embedded sessions work perfectly in iframes\n- ✅ Professional URL structure\n- ✅ Single tunnel/domain required\n\n### **Application Layout**\n```\n┌─────────────────────────────────────────────────────────────┐\n│ Header: Zellij Session Manager                    [≡] [↻]  │\n├──────────────┬──────────────────────────────────────────────┤\n│ Sidebar      │ Main Content Area                            │\n│ 300px        │ flex-grow                                    │\n│              │                                              │\n│ ┌──────────┐ │ ┌──────────────────────────────────────────┐ │\n│ │●Session1 │ │ │ Session Header: session-name             │ │\n│ │ Session2 │ │ ├──────────────────────────────────────────┤ │\n│ │ Session3 │ │ │ \u003ciframe src=\"/session1\"\u003e                 │ │\n│ └──────────┘ │ │                                          │ │\n│              │ │ [Full Zellij Web Terminal]               │ │\n│ [+ New]      │ │                                          │ │\n│ [Refresh]    │ │                                          │ │\n└──────────────┴──────────────────────────────────────────────┘\n```\n\n### **Services Overview**\n\n#### **Reverse Proxy Server**\n- **Port**: 4000\n- **File**: `proxy-server.js`\n- **Purpose**: Routes traffic to appropriate services, enables same-origin access\n\n#### **Backend API (Node.js + Express)**\n- **Port**: 3001\n- **File**: `server.js`\n- **Purpose**: Executes zellij commands and provides REST API\n\n#### API Endpoints\n- `GET /api/sessions` - Returns list of zellij sessions with metadata\n- `GET /api/health` - Health check endpoint\n\n#### Session Data Format\n```json\n{\n  \"success\": true,\n  \"sessions\": [\n    {\n      \"name\": \"session-name\",\n      \"createdAgo\": \"2h 30m\",\n      \"status\": \"active\",\n      \"raw\": \"session-name [Created 2h 30m ago]\"\n    }\n  ],\n  \"count\": 1\n}\n```\n\n#### **Frontend (Vanilla JavaScript + Vite)**\n- **Port**: 5173 (development)\n- **Files**: `src/main.js`, `src/style.css`, `index.html`\n- **Purpose**: Session management interface with embedded terminal access\n\n#### **Zellij Web Server**\n- **Port**: 8083 (configurable)\n- **Purpose**: Serves zellij terminal interface and session access\n\n#### Key Components\n- **Sidebar**: Session list with navigation and controls\n- **Main Content**: Embedded zellij web client via iframe\n- **State Management**: Centralized app state with session tracking\n- **Event Handling**: Keyboard shortcuts and click navigation\n\n### **Integration Points**\n\n#### **Reverse Proxy Mode (Recommended)**\n- **Proxy Server**: `http://localhost:4000` (tunneled for external access)\n- **Session Manager**: `http://localhost:4000/zviewer/`\n- **Zellij Sessions**: `http://localhost:4000/{sessionName}`\n- **API Endpoints**: `http://localhost:4000/zviewer/api/*`\n\n#### **Direct Mode (Development)**\n- **Zellij Web Server**: `http://127.0.0.1:8082` (auto-started by zellij)\n- **Session URLs**: `http://127.0.0.1:8082/{sessionName}`\n- **CORS**: Enabled by zellij web server for iframe embedding\n\n## 📁 Project Structure\n\n```\nzviewer/\n├── README.md                    # Main documentation\n├── .env.example                 # Environment variables template ⭐\n├── DEPLOYMENT_OPTIONS.md        # Comprehensive deployment guide\n├── REVERSE_PROXY_SETUP.md       # Reverse proxy setup instructions\n├── SUCCESS_SUMMARY.md           # Working solution overview\n├── ENVIRONMENT_VARIABLES_PLAN.md # Configuration roadmap\n├── IMPLEMENTATION_PLAN.md       # Technical implementation details\n├── package.json                 # Dependencies and scripts\n├── server.js                    # Backend Express server\n├── proxy-server.js              # Reverse proxy server ⭐\n├── vite.config.js               # Vite configuration\n├── index.html                   # Main HTML file\n├── zellij-info.md              # Zellij command reference\n├── docs/\n│   └── DEVELOPER_GUIDE.md      # 👨‍💻 Comprehensive developer guide\n├── src/\n│   ├── main.js                 # Frontend application logic\n│   ├── style.css               # Responsive styling and themes\n│   ├── counter.js              # Legacy file (unused)\n│   └── javascript.svg          # Legacy file (unused)\n└── public/\n    └── vite.svg                # Vite logo\n```\n\n## 🎨 Key Features Breakdown\n\n### **Session Management**\n- **Live Session List**: Real-time display of all active zellij sessions\n- **Status Tracking**: Visual indicators for session health and state\n- **Quick Navigation**: One-click session switching\n- **Auto-refresh**: Background updates every 30 seconds\n\n### **Terminal Integration**\n- **Embedded Access**: Full zellij web client embedded via iframe\n- **Session-specific URLs**: Direct links to individual sessions\n- **Seamless Experience**: No need to switch between applications\n- **Full Functionality**: Complete terminal features within the browser\n\n### **User Interface**\n- **Responsive Layout**: CSS Grid-based layout that adapts to screen size\n- **Keyboard Shortcuts**: Power-user features for quick navigation\n- **Visual Feedback**: Loading states, error handling, and status indicators\n- **Mobile Support**: Touch-friendly interface with collapsible sidebar\n\n## 🎨 UI Components\n\n### Session Grid\n- **Layout**: Responsive CSS Grid\n- **Cards**: Individual session information cards\n- **Hover Effects**: Interactive feedback on hover\n\n### Session Card Elements\n- **Session Name**: Primary identifier\n- **Creation Time**: \"Created X ago\" format\n- **Status Badge**: Shows if session is exited/inactive\n\n### Controls\n- **Refresh Button**: Manual session list update\n- **Loading Indicator**: Shows during API calls\n\n## 🔧 Configuration\n\n### Environment Variables\n\nThe application supports comprehensive environment variable configuration for flexible deployment:\n\n#### **Default Configuration (No Setup Required)**\n```bash\n# Just run - uses built-in defaults\nnpm run dev-proxy\n```\n\n#### **Custom Configuration**\n```bash\n# Copy example configuration\ncp .env.example .env\n\n# Edit .env file with your preferred settings\nPROXY_PORT=4001              # Reverse proxy port (default: 4000)\nBACKEND_PORT=3002            # Backend API port (default: 3001)  \nFRONTEND_PORT=5174           # Frontend dev server port (default: 5173)\nZELLIJ_PORT=9001             # Zellij web server port (default: 8083)\n\n# Run with custom configuration\nnpm run dev-proxy\n```\n\n#### **Available Environment Variables**\n\n**Service Ports:**\n- `PROXY_PORT=4000` - Reverse proxy server port\n- `BACKEND_PORT=3001` - Backend API server port\n- `FRONTEND_PORT=5173` - Frontend dev server port\n- `ZELLIJ_PORT=8083` - Zellij web server port\n\n**Service Hosts:**\n- `PROXY_HOST=localhost` - Reverse proxy bind host\n- `BACKEND_HOST=localhost` - Backend API host\n- `FRONTEND_HOST=localhost` - Frontend dev server host\n- `ZELLIJ_HOST=127.0.0.1` - Zellij web server host\n\n**Application Paths:**\n- `FRONTEND_BASE_PATH=/zviewer` - Frontend base path for reverse proxy\n- `API_BASE_PATH=/zviewer/api` - API base path for reverse proxy\n\n**Frontend Variables (VITE_ prefix):**\n- `VITE_API_BASE_PATH=/zviewer/api` - API endpoint path\n- `VITE_SESSION_REFRESH_INTERVAL=30` - Auto-refresh interval in seconds\n\n#### **Use Cases**\n\n**Team Development (avoid port conflicts):**\n```bash\n# Developer A\nPROXY_PORT=4001\nBACKEND_PORT=3002\nFRONTEND_PORT=5174\n\n# Developer B  \nPROXY_PORT=4002\nBACKEND_PORT=3003\nFRONTEND_PORT=5175\n```\n\n**Production Deployment:**\n```bash\nPROXY_PORT=80\nNODE_ENV=production\nDEBUG=false\n```\n\n**Custom Zellij Setup:**\n```bash\nZELLIJ_PORT=9001\nnpm run start:zellij  # Starts zellij web server with custom port\n```\n\n### Zellij Integration\nThe application uses the recommended zellij command:\n```bash\nzellij list-sessions --no-formatting\n```\n\nThis provides clean, parseable output in the format:\n```\nsession_name [Created time_ago ago] [optional_status]\n```\n\n## 🐛 Troubleshooting\n\n### **Common Issues**\n\n1. **\"No sessions found\" when sessions exist**\n   - Ensure zellij is installed and in PATH: `which zellij`\n   - Check that zellij sessions are actually running: `zellij list-sessions`\n   - Verify zellij web server is running: `zellij web --status`\n\n2. **Session iframe not loading**\n   - Check if zellij web server is online: `curl http://127.0.0.1:8082`\n   - Verify session exists: `zellij list-sessions | grep session-name`\n   - Check browser console for iframe errors\n\n3. **Backend connection errors**\n   - Verify backend is running on port 3001: `curl http://localhost:3001/api/health`\n   - Check for port conflicts: `lsof -i :3001`\n   - Ensure CORS is properly configured\n\n4. **Frontend not loading**\n   - Verify frontend is running on port 5173\n   - Check browser console for JavaScript errors\n   - Ensure all dependencies are installed: `npm install`\n\n5. **Auto-refresh not working**\n   - Check browser console for API errors\n   - Verify backend is responding: `curl http://localhost:3001/api/sessions`\n   - Check if auto-refresh indicator is pulsing (green dot in sidebar)\n\n### **Debug Mode**\nThe server logs detailed information about session parsing. Check the server terminal for:\n- Raw zellij command output\n- Parsed session data\n- API request logs\n- Error messages and stack traces\n\n### **Performance Tips**\n- Close unused sessions to improve performance\n- Use keyboard shortcuts for faster navigation\n- Enable auto-refresh for real-time updates\n- Use mobile view on smaller screens for better experience\n\n## ⚡ Performance \u0026 Limitations\n\n### **Current Capabilities**\n- ✅ **Real-time Session Viewing**: Full terminal access via embedded web client\n- ✅ **Auto-refresh**: Automatic session list updates every 30 seconds\n- ✅ **Session Navigation**: Click-to-switch between sessions\n- ✅ **Responsive Design**: Works on desktop, tablet, and mobile\n- ✅ **Keyboard Shortcuts**: Power-user navigation features\n- ✅ **Status Indicators**: Visual feedback for session states\n\n### **Current Limitations**\n- ⏳ **Session Creation**: Cannot create new sessions from UI (coming soon)\n- ⏳ **Session Management**: Cannot delete or rename sessions from UI\n- ⏳ **Bulk Operations**: No multi-session selection or operations\n- 🔒 **Local Only**: Only works with local zellij sessions (by design)\n- 🔒 **Single User**: Designed for single-user local development\n\n### **Performance Notes**\n- **Memory Usage**: Minimal overhead, iframes are loaded on-demand\n- **Network**: Only API calls for session list, terminal data via zellij web server\n- **Refresh Rate**: 30-second auto-refresh balances freshness with performance\n- **Mobile**: Optimized for touch interfaces with responsive design\n\n## 🔮 Future Enhancements\n\n### **Technical Roadmap**\n\n#### **✅ Completed Implementation**\n- **Layout Architecture**: CSS Grid-based responsive layout\n- **Session Navigation**: Click-to-switch with keyboard shortcuts\n- **Iframe Integration**: Embedded zellij web client\n- **Status Indicators**: Visual feedback for session states\n- **Auto-refresh**: Background updates every 30 seconds\n- **Error Handling**: Graceful degradation and error screens\n- **Mobile Support**: Responsive design with collapsible sidebar\n\n#### **🔄 Current Architecture**\n```javascript\nApp State: {\n  sessions: Session[],           // Live session data from API\n  selectedSession: Session|null, // Currently viewed session\n  loading: boolean,             // Loading state for transitions\n  sidebarCollapsed: boolean,    // Mobile sidebar state\n  error: string|null,          // Error handling\n  autoRefresh: boolean,        // Auto-refresh toggle\n  refreshInterval: number      // Refresh timer ID\n}\n\nUI Components:\n├── App Container (CSS Grid Layout)\n├── Sidebar (300px, collapsible)\n│   ├── Header (title + refresh controls)\n│   ├── SessionList (scrollable)\n│   │   └── SessionItem (clickable, status dots)\n│   └── Footer (controls + keyboard hints)\n└── MainContent (flex-grow)\n    ├── WelcomeScreen (no selection)\n    ├── LoadingScreen (switching)\n    ├── ErrorScreen (connection issues)\n    └── SessionViewer (embedded terminal)\n        ├── SessionHeader (name + URL)\n        └── Iframe (zellij web client)\n```\n\n## 🤝 Contributing\n\n### **Development Setup**\n1. Fork the repository\n2. Install dependencies: `npm install`\n3. Start development servers: `npm run dev-full`\n4. Make your changes\n5. Test thoroughly with multiple zellij sessions\n6. Submit a pull request\n\n### **Code Style Guidelines**\n- **JavaScript**: ES6+ modules, async/await, functional programming\n- **CSS**: Mobile-first responsive design, CSS Grid/Flexbox\n- **Architecture**: Component-based, centralized state management\n- **Testing**: Manual testing with real zellij sessions\n\n## 👨‍💻 Developer Resources\n\n### **For AI Coders \u0026 Junior Developers**\n- **[Developer Guide](docs/DEVELOPER_GUIDE.md)** - Comprehensive guide to understanding and extending the codebase\n\n### **External Documentation**\n- **[Zellij Web Client Documentation](https://zellij.dev/documentation/web-client.html)** - Official zellij web client docs\n- **[Cloudflare Quick Tunnels](https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/do-more-with-tunnels/trycloudflare/)** - For external access and HTTPS\n\n## 🙏 Acknowledgments\n\n- **Zellij Team**: For creating an amazing terminal multiplexer with web client support\n- **Vite**: For the fast development build tool\n- **Community**: For feedback and feature suggestions\n\n\n---\n\n**Built with ❤️ for the terminal power-user community**\n\n*Transform your zellij workflow with seamless session management and embedded terminal access.*\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjosephpeters%2Fzviewer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjosephpeters%2Fzviewer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjosephpeters%2Fzviewer/lists"}