{"id":43506898,"url":"https://github.com/susamn/obsidian-web","last_synced_at":"2026-02-03T12:37:47.146Z","repository":{"id":326163229,"uuid":"1095874102","full_name":"susamn/obsidian-web","owner":"susamn","description":"Free your obsidian notes. Host them and access them from anywhere.","archived":false,"fork":false,"pushed_at":"2025-11-27T22:48:55.000Z","size":1207,"stargazers_count":0,"open_issues_count":13,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-11-29T05:23:34.682Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Go","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/susamn.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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-11-13T16:22:10.000Z","updated_at":"2025-11-27T22:48:59.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/susamn/obsidian-web","commit_stats":null,"previous_names":["susamn/obsidian-web"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/susamn/obsidian-web","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/susamn%2Fobsidian-web","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/susamn%2Fobsidian-web/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/susamn%2Fobsidian-web/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/susamn%2Fobsidian-web/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/susamn","download_url":"https://codeload.github.com/susamn/obsidian-web/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/susamn%2Fobsidian-web/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29046102,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-03T10:09:22.136Z","status":"ssl_error","status_checked_at":"2026-02-03T10:09:16.814Z","response_time":96,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":[],"created_at":"2026-02-03T12:37:46.223Z","updated_at":"2026-02-03T12:37:47.130Z","avatar_url":"https://github.com/susamn.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Obsidian Web\n\n![CI](https://github.com/susamn/obsidian-web/actions/workflows/ci.yml/badge.svg)\n[![codecov](https://codecov.io/gh/susamn/obsidian-web/graph/badge.svg)](https://codecov.io/gh/susamn/obsidian-web)\n\nA web-based viewer and editor for Obsidian vaults with support for multiple storage backends (local, S3, MinIO) and LLM integration.\n\n## Features\n\n- 📁 Multi-vault support (Local, S3, MinIO)\n- 🔗 Full wikilink support with graph visualization\n- 🤖 LLM integration (OpenAI, Anthropic, Ollama, Custom)\n- 📝 Markdown rendering with Obsidian-specific features\n- 🔍 Search and tag support\n- 🌓 Dark mode support\n- 🚀 Lazy loading for performance\n\n## Architecture\n\n### Backend (Go)\n- **cmd/server**: Application entry point\n- **internal/web**: HTTP handlers and server setup\n- **internal/vault**: Storage abstraction layer\n- **internal/indexing**: Content indexing and metadata extraction\n- **internal/search**: Search service implementation\n- **internal/vector**: Vector database and semantic search\n- **internal/llm**: LLM provider abstraction\n- **internal/sync**: Synchronization with external storage\n- **internal/render**: Markdown rendering pipeline\n\n**Key Libraries:**\n- chi/v5: HTTP router\n- logrus: Structured logging\n- viper: Configuration management\n- AWS SDK v2: S3 support\n- Minio SDK: MinIO support\n- Bleve: Text indexing\n\n### Frontend (Vue.js)\n- **views**: Page components\n- **components**: Reusable UI components\n- **composables**: Vue composables (logic reuse)\n- **services**: API client services\n- **stores**: Pinia state management\n- **router**: Vue Router configuration\n- **utils**: Helper functions\n\n**Key Libraries:**\n- Vue 3 + Vue Router + Pinia\n- Element Plus: UI framework\n- Tailwind CSS: Utility-first CSS\n- markdown-it: Markdown parsing\n- D3.js + Cytoscape: Graph visualization\n- lodash-es: Utility functions\n- dayjs: Date/time handling\n- axios: HTTP client\n\n## Prerequisites\n\n- Go 1.22 or higher\n- Node.js 18 or higher\n- npm or yarn\n\n## Quick Start\n\n### Installation\n\n```bash\n# Install all dependencies (backend + frontend)\nmake install\n```\n\n### Development\n\n```bash\n# Terminal 1: Start backend (default port 8080)\nmake dev-backend\n\n# Terminal 2: Start frontend (default port 3000)\nmake dev-frontend\n```\n\n### Building\n\n```bash\n# Build both backend and frontend\nmake build\n```\n\n### Testing\n\n```bash\n# Run all tests\nmake test\n\n# Run tests with coverage\nmake test-coverage\n```\n\n## Docker Deployment\n\n```bash\n# Build Docker images\nmake docker-build\n\n# Start containers\nmake docker-up\n\n# View logs\nmake docker-logs\n\n# Stop containers\nmake docker-down\n```\n\n## Configuration\n\nSee `config/config.example.yaml` for configuration options.\n\nKey configuration areas:\n- Server settings (host, port, timeout)\n- Vault connections (local, S3, MinIO)\n- LLM providers (OpenAI, Anthropic, Ollama, Custom)\n- Logging, caching, CORS, rate limiting\n- Conflict resolution strategies\n\n## Project Guidelines\n\nSee `.progress` files in each directory for implementation guidelines and TODO lists.\n\nKey principles:\n- Write tests for all changes\n- Check for code duplication\n- Consider security implications\n- Optimize for performance\n- Follow accessibility guidelines\n\n## API Documentation\n\nThe REST API is available at `http://localhost:8080/api/v1/`\n\nKey endpoints:\n- `GET /api/v1/vaults` - List vaults\n- `GET /api/v1/vault/:id/note/:path` - Get note\n- `POST /api/v1/vault/:id/note` - Create note\n- `PUT /api/v1/vault/:id/note/:path` - Update note\n- `GET /api/v1/vault/:id/graph` - Get graph data\n- `POST /api/v1/llm/chat` - Chat with LLM\n\n## Development Commands\n\n```bash\nmake help              # Show all available commands\nmake install           # Install dependencies\nmake build             # Build project\nmake test              # Run tests\nmake test-coverage     # Run tests with coverage\nmake lint              # Run linters\nmake fmt               # Format code\nmake clean             # Clean build artifacts\nmake tidy              # Tidy Go modules\n```\n\n## License\n\nMIT\n\n## Contributing\n\n1. Check `.progress` files for TODOs\n2. Write tests for your changes\n3. Run `make test` and `make lint`\n4. Submit pull request\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsusamn%2Fobsidian-web","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsusamn%2Fobsidian-web","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsusamn%2Fobsidian-web/lists"}