{"id":50936443,"url":"https://github.com/markusbegerow/nextcloud-local-llm","last_synced_at":"2026-06-17T09:32:15.917Z","repository":{"id":330543981,"uuid":"1123104480","full_name":"markusbegerow/nextcloud-local-llm","owner":"markusbegerow","description":"Local LLM chat application for Nextcloud with on-premise AI, full data sovereignty and enterprise-grade security.","archived":false,"fork":false,"pushed_at":"2026-06-06T08:23:14.000Z","size":263,"stargazers_count":3,"open_issues_count":2,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-06-06T10:11:31.029Z","etag":null,"topics":["ai","ai-assistant","nextcloud","nextcloud-app","ollama","privacy","self-hosted"],"latest_commit_sha":null,"homepage":"https://markus-begerow.de/linktree","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/markusbegerow.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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-12-26T07:32:40.000Z","updated_at":"2026-06-06T08:23:18.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/markusbegerow/nextcloud-local-llm","commit_stats":null,"previous_names":["markusbegerow/local-llm-nextcloud","markusbegerow/nextcloud-local-llm"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/markusbegerow/nextcloud-local-llm","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/markusbegerow%2Fnextcloud-local-llm","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/markusbegerow%2Fnextcloud-local-llm/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/markusbegerow%2Fnextcloud-local-llm/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/markusbegerow%2Fnextcloud-local-llm/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/markusbegerow","download_url":"https://codeload.github.com/markusbegerow/nextcloud-local-llm/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/markusbegerow%2Fnextcloud-local-llm/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34443232,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-17T02:00:05.408Z","response_time":127,"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":["ai","ai-assistant","nextcloud","nextcloud-app","ollama","privacy","self-hosted"],"created_at":"2026-06-17T09:32:15.118Z","updated_at":"2026-06-17T09:32:15.907Z","avatar_url":"https://github.com/markusbegerow.png","language":"PHP","funding_links":["https://paypal.me/MarkusBegerow?country.x=DE\u0026locale.x=de_DE"],"categories":[],"sub_categories":[],"readme":"# Local LLM Chat for Nextcloud\n\nA powerful Nextcloud app that integrates local Large Language Models (LLMs) directly into your Nextcloud instance for AI-powered assistance with enterprise-grade security.\n\n\u003cimg alt=\"Local LLM Chat Interface\" src=\"https://github.com/user-attachments/assets/21fd6cc9-7f4d-4295-946e-cbf8344c1072\" /\u003e\n\n## Features\n\n### 🤖 Local AI Integration\n- **Privacy-First**: All data stays on your server—no cloud APIs required\n- **Multiple LLM Support**: Works with Ollama, LM Studio, vLLM, and OpenAI-compatible endpoints\n- **Persistent Conversations**: Chat history maintained and stored in Nextcloud database\n- **Real-time Chat**: Interactive chat interface integrated into Nextcloud navigation\n\n### 🔒 Enterprise-Grade Security\n- **API Token Encryption**: All API tokens encrypted at rest using AES-256\n- **CSRF Protection**: Full Cross-Site Request Forgery protection on all endpoints\n- **Rate Limiting**: Configurable rate limits (default: 20 requests/minute per user)\n- **Input Validation**: Comprehensive validation and sanitization of all user inputs\n- **User-Level Security**: Users can only access their own conversations and configurations\n- **Audit Logging**: Complete logging of all security events and user actions\n- **Error Sanitization**: Safe error messages that don't leak system information\n\n### 🎯 Core Functionality\n- **Configuration Management**: Multiple LLM configurations (system-wide or user-specific)\n- **Conversation History**: Track and manage all AI conversations with timestamps\n- **Message Storage**: All messages stored in database with role tracking (user/assistant)\n- **Test Connection**: Built-in tool to verify LLM server connectivity\n- **Flexible Settings**: Configure temperature, max tokens, system prompts, and more\n- **Model Selection**: Choose different models for different conversations\n\n### 💼 Business Use Cases\n- Product description generation\n- Email drafting assistance\n- Document summarization\n- Data analysis and insights\n- Customer service support\n- Report generation\n- General productivity automation\n\n## Requirements\n\n- **Nextcloud**: Version 28, 29, or 30\n- **PHP**: 8.1 or higher\n- **Node.js**: 20.x or higher (for building frontend)\n- **npm**: 10.x or higher\n- **Local LLM Server**: One of:\n  - Ollama (recommended)\n  - LM Studio\n  - vLLM\n  - Any OpenAI-compatible API endpoint\n\n## Installation\n\n### 1. Set Up Your Local LLM Server\n\n#### Option A: Ollama (Recommended)\n```bash\n# Install Ollama from https://ollama.ai\n# On macOS/Linux:\ncurl -fsSL https://ollama.ai/install.sh | sh\n\n# Pull a model\nollama pull llama3.2\n\n# Verify it's running (usually starts automatically)\nollama list\n```\n\n#### Option B: LM Studio\n1. Download from [lmstudio.ai](https://lmstudio.ai)\n2. Install and open the application\n3. Download a model from the model library\n4. Go to \"Local Server\" tab and start the server (default: `http://localhost:1234`)\n\n### 2. Install the Nextcloud App\n\n```bash\n# Navigate to your Nextcloud apps directory\ncd /var/www/nextcloud/apps  # Adjust path as needed\n\n# Clone the repository\ngit clone https://github.com/markusbegerow/local-llm-nextcloud.git\n\n# Or extract from archive\n# unzip local-llm-nextcloud.zip\n```\n\n### 3. Build the Frontend\n\n```bash\n# Navigate to the app directory\ncd local-llm-nextcloud\n\n# Install dependencies\nnpm install\n\n# Build for production\nnpm run build\n```\n\n### 4. Set Permissions\n\n```bash\n# Make sure the web server can read the files\n# Adjust user/group as needed for your system\nsudo chown -R www-data:www-data /var/www/nextcloud/apps/local-llm-nextcloud\nsudo chmod -R 755 /var/www/nextcloud/apps/local-llm-nextcloud\n```\n\n### 5. Enable the App in Nextcloud\n\n1. Log in to Nextcloud as an administrator\n2. Click on your profile icon (top right)\n3. Select **Apps**\n4. Search for \"Local LLM\" or click **Your apps**\n5. Find \"Local LLM Chat for Nextcloud\" in the list\n6. Click **Enable**\n\nThe database tables will be created automatically on first activation.\n\n## Configuration\n\n### Initial Setup\n\n1. Click **Local LLM** in the Nextcloud top navigation menu\n2. Click the **Settings** icon (gear) in the bottom left sidebar\n3. Click **Add Configuration**\n4. Fill in the configuration details:\n\n   **For Ollama:**\n   - **Name**: `Ollama Llama 3.2`\n   - **API URL**: `http://localhost:11434/v1/chat/completions`\n   - **API Token**: `ollama`\n   - **Model Name**: `llama3.2`\n   - **Temperature**: `0.7` (0.0-2.0, controls randomness)\n   - **Max Tokens**: `2048` (maximum response length)\n   - **System Prompt**: (optional) Define AI behavior\n\n   **For LM Studio:**\n   - **Name**: `LM Studio`\n   - **API URL**: `http://localhost:1234/v1/chat/completions`\n   - **API Token**: `lm-studio`\n   - **Model Name**: The model you loaded in LM Studio\n   - **Temperature**: `0.7`\n   - **Max Tokens**: `2048`\n\n5. Click **Save**\n6. Click the **Test** button to verify connectivity\n7. If successful, you'll see \"Connection successful!\"\n\n### Multiple Configurations\n\nYou can create multiple LLM configurations for:\n- Different models (coding vs. general purpose)\n- Different servers (local vs. remote)\n- Different temperature settings for creativity vs. precision\n- Testing vs. production environments\n\nSet one as **Default** by clicking the star icon - it will be used automatically for new conversations.\n\n## Usage\n\n### Starting a Conversation\n\n1. Go to **Local LLM** in the Nextcloud top menu\n2. Click **New Conversation** in the left sidebar\n3. Select your preferred model from the dropdown (if you have multiple)\n4. Type your message in the text box\n5. Press **Enter** or click **Send**\n6. The AI will respond based on your configuration\n\n### Managing Conversations\n\n- View all your conversations in the left sidebar\n- Click any conversation to view its full history\n- Delete conversations using the trash icon in the conversation menu\n- Conversations are automatically named based on the first message\n- All messages include timestamps for reference\n\n### Chat Features\n\n- **Enter**: Send message\n- **Shift+Enter**: New line in message (multi-line messages)\n- Messages support formatting with line breaks\n- Conversation history is maintained across sessions\n- Each message shows sender (You/Assistant) and timestamp\n\n## Architecture\n\n### Frontend (Vue.js)\n\n```\nsrc/\n├── App.vue                    # Main application component\n├── main.js                    # Entry point\n├── components/\n│   ├── ChatWindow.vue         # Chat interface\n│   └── ConfigSettings.vue     # Configuration management UI\n└── services/\n    └── api.js                 # API client for backend communication\n```\n\n### Backend (PHP)\n\n```\nlib/\n├── AppInfo/\n│   └── Application.php        # App registration\n├── Controller/\n│   ├── PageController.php     # Main page controller\n│   ├── ChatController.php     # Chat API endpoints\n│   └── ConfigController.php   # Configuration API endpoints\n├── Db/\n│   ├── LlmConfig.php          # LLM configuration entity\n│   ├── LlmConfigMapper.php    # Configuration database operations\n│   ├── Conversation.php       # Conversation entity\n│   ├── ConversationMapper.php # Conversation database operations\n│   ├── Message.php            # Message entity\n│   └── MessageMapper.php      # Message database operations\n├── Service/\n│   ├── LlmService.php         # LLM API communication\n│   ├── EncryptionService.php  # Token encryption/decryption\n│   └── RateLimitService.php   # Rate limiting logic\n└── Migration/\n    └── Version1000Date*.php   # Database migrations\n```\n\n### Database Schema\n\n**Tables:**\n1. **`oc_localllm_configs`** - LLM server configurations\n   - Stores API URLs, encrypted tokens, model settings\n   - Supports multiple configs per user\n   - Default config flagging\n\n2. **`oc_localllm_conversations`** - User conversations\n   - Links to config used\n   - Conversation naming and metadata\n   - User isolation\n\n3. **`oc_localllm_messages`** - Chat messages\n   - Stores all messages with role (user/assistant)\n   - Message content and timestamps\n   - Token usage tracking\n\n### API Endpoints\n\n#### Chat Endpoints\n- `POST /apps/local-llm-nextcloud/api/chat` - Send a message\n- `GET /apps/local-llm-nextcloud/api/conversations` - List user conversations\n- `GET /apps/local-llm-nextcloud/api/conversations/{id}` - Get conversation details\n- `GET /apps/local-llm-nextcloud/api/conversations/{id}/messages` - Get conversation messages\n- `DELETE /apps/local-llm-nextcloud/api/conversations/{id}` - Delete conversation\n- `POST /apps/local-llm-nextcloud/api/conversations/{id}/clear` - Clear all messages\n- `PUT /apps/local-llm-nextcloud/api/conversations/{id}` - Update conversation name\n\n#### Configuration Endpoints\n- `GET /apps/local-llm-nextcloud/api/configs` - List configurations\n- `POST /apps/local-llm-nextcloud/api/configs` - Create configuration\n- `PUT /apps/local-llm-nextcloud/api/configs/{id}` - Update configuration\n- `DELETE /apps/local-llm-nextcloud/api/configs/{id}` - Delete configuration\n- `POST /apps/local-llm-nextcloud/api/configs/{id}/test` - Test connection\n- `POST /apps/local-llm-nextcloud/api/configs/{id}/default` - Set as default\n\n### Security\n\n**Access Control**:\n- Nextcloud authentication required for all endpoints\n- User-level data isolation - users can only access their own data\n- Database-enforced security via Nextcloud's mapper pattern\n- No raw SQL queries (injection prevention)\n\n**Data Protection**:\n- API tokens encrypted at rest using AES-256 via Nextcloud's encryption service\n- Encryption keys managed by Nextcloud\n- Automatic encryption of new tokens\n- CSRF protection on all endpoints\n\n**Input Validation \u0026 Sanitization**:\n- Maximum message length validation\n- Type checking on all inputs\n- Temperature and token range validation\n- URL validation for API endpoints\n- Safe error messages\n\n**Rate Limiting**:\n- Session-based rate limiting per user\n- Default: 20 requests per minute\n- Configurable in `RateLimitService.php`\n- Prevents API abuse and DoS attacks\n\n**Audit \u0026 Logging**:\n- Comprehensive logging via Nextcloud's logger\n- Security events logged\n- API errors logged with context\n- User actions tracked\n\n## API Integration\n\n### OpenAI-Compatible Format\n\nThe app uses the standard OpenAI API format for maximum compatibility:\n\n```json\nPOST /v1/chat/completions\n{\n    \"model\": \"llama3.2\",\n    \"messages\": [\n        {\"role\": \"system\", \"content\": \"You are a helpful assistant\"},\n        {\"role\": \"user\", \"content\": \"Hello!\"}\n    ],\n    \"temperature\": 0.7,\n    \"max_tokens\": 2048\n}\n```\n\n### Supported Endpoints\n\n- **Ollama**: `http://localhost:11434/v1/chat/completions`\n- **LM Studio**: `http://localhost:1234/v1/chat/completions`\n- **vLLM**: `http://localhost:8000/v1/chat/completions`\n- **Custom**: Any OpenAI-compatible endpoint\n\n## Troubleshooting\n\n### Connection Issues\n\n**Error**: \"Cannot connect to LLM server\"\n\n**Solution**:\n```bash\n# For Ollama - check if running\ncurl http://localhost:11434/api/tags\n\n# For LM Studio - check if server is started\ncurl http://localhost:1234/v1/models\n\n# Verify the service is running\nps aux | grep ollama\n# or\nps aux | grep \"LM Studio\"\n```\n\n**Common causes:**\n- LLM server not started\n- Wrong port number in configuration\n- Firewall blocking localhost connections\n- Model not loaded in LM Studio\n\n### Timeout Issues\n\n**Error**: \"Request timeout. The LLM took too long to respond.\"\n\n**Solution**:\n1. Increase **Request Timeout** in configuration (default: 120000ms)\n2. Use a smaller/faster model\n3. Reduce **Max Tokens** setting\n4. Check system resources (CPU/RAM usage)\n\n### API Format Issues\n\n**Error**: \"Unexpected API response format\"\n\n**Solution**:\n- Verify your endpoint uses OpenAI-compatible format\n- Check API documentation for your LLM server\n- Test endpoint with curl:\n```bash\ncurl -X POST http://localhost:11434/v1/chat/completions \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"model\": \"llama3.2\",\n    \"messages\": [{\"role\": \"user\", \"content\": \"Hello\"}]\n  }'\n```\n\n### Rate Limiting Issues\n\n**Error**: \"Too many requests. Please wait a moment and try again\"\n\n**Solution**:\n1. Default limit is 20 messages per minute per user\n2. Wait 60 seconds and try again\n3. To adjust the limit, edit `lib/Service/RateLimitService.php`:\n   ```php\n   private const MAX_REQUESTS_PER_MINUTE = 50;  // Increase as needed\n   ```\n4. Restart web server after making changes\n\n### Frontend Not Loading\n\n**Error**: JavaScript errors or blank page\n\n**Solution**:\n```bash\n# Clear JavaScript build and rebuild\ncd /var/www/nextcloud/apps/local-llm-nextcloud\nrm -rf js/\nnpm run build\n\n# Clear Nextcloud cache\ncd /var/www/nextcloud\nphp occ maintenance:mode --on\nphp occ app:disable local-llm-nextcloud\nphp occ app:enable local-llm-nextcloud\nphp occ maintenance:mode --off\n\n# Clear browser cache (Ctrl+Shift+R or Cmd+Shift+R)\n```\n\n### Database Issues\n\n**Error**: \"Failed to load configurations\" or migration errors\n\n**Solution**:\n```bash\n# Check Nextcloud logs\ntail -f /var/www/nextcloud/data/nextcloud.log\n\n# Verify database tables exist\nphp occ db:list-tables | grep localllm\n\n# Re-run migrations\nphp occ app:disable local-llm-nextcloud\nphp occ app:enable local-llm-nextcloud\n```\n\n## Development\n\n### Building for Development\n\n```bash\n# Watch for changes and rebuild automatically\nnpm run watch\n\n# Development build (faster, includes source maps)\nnpm run dev\n\n# In another terminal, watch Nextcloud logs\ntail -f /var/www/nextcloud/data/nextcloud.log\n```\n\n### Code Quality\n\n```bash\n# Lint JavaScript and Vue files\nnpm run lint\n\n# Auto-fix linting issues\nnpm run lint:fix\n\n# Lint CSS/SCSS\nnpm run stylelint\n\n# Auto-fix style issues\nnpm run stylelint:fix\n```\n\n### Module Structure\n\n```\nlocal-llm-nextcloud/\n├── appinfo/\n│   ├── info.xml                 # App metadata\n│   ├── routes.php               # URL routing configuration\n│   └── database.xml             # Database schema definition\n├── lib/\n│   ├── AppInfo/\n│   │   └── Application.php      # App registration\n│   ├── Controller/              # HTTP controllers\n│   ├── Db/                      # Database entities \u0026 mappers\n│   ├── Service/                 # Business logic services\n│   └── Migration/               # Database migrations\n├── src/                         # Vue.js frontend source\n│   ├── components/              # Vue components\n│   ├── services/                # API services\n│   ├── App.vue                  # Main app component\n│   └── main.js                  # Entry point\n├── js/                          # Built JavaScript bundle\n├── css/                         # Stylesheets\n├── templates/                   # PHP templates\n├── img/                         # Images and icons\n├── package.json                 # Node dependencies\n├── webpack.config.js            # Build configuration\n└── README.md                    # This file\n```\n\n### Adding New Features\n\nIdeas for extending the app:\n\n1. **Streaming Responses**: Implement Server-Sent Events (SSE) for real-time streaming\n2. **File Upload**: Allow users to send files/documents to LLM for analysis\n3. **RAG Integration**: Connect to Nextcloud Files for document search and context\n4. **Multi-Modal**: Add image understanding capabilities\n5. **Voice Input**: Integrate speech-to-text for voice messages\n6. **Conversation Export**: Export conversations as PDF or Markdown\n7. **Shared Conversations**: Allow conversation sharing between users\n8. **Custom Prompts Library**: Save and reuse common system prompts\n\n## Recommended Models\n\n### For General Use\n- **Llama 3.2 8B**: Fast, excellent all-around model\n- **Mistral 7B**: Efficient and capable for most tasks\n- **Phi-3 Mini**: Compact but powerful, good for resource-constrained systems\n- **Gemma 7B**: Strong reasoning and instruction following\n\n### For Coding Tasks\n- **Llama 3.2 8B**: Good for general coding assistance\n- **CodeLlama 13B**: Specialized for code generation and explanation\n- **Qwen 2.5 Coder**: Excellent code understanding and generation\n- **DeepSeek Coder**: Strong at algorithms and complex code analysis\n\n### For Business/Writing\n- **Llama 3.2**: Best all-around for business communications\n- **Mistral 7B**: Professional writing and analysis\n- **Zephyr 7B**: Good for conversational business tasks\n\n### Model Size Considerations\n- **Small models (3B-8B)**: Fast responses, lower resource usage, good for most tasks\n- **Medium models (13B-14B)**: Better quality, still reasonable performance\n- **Large models (30B+)**: Best quality, requires powerful hardware\n\n## Security Best Practices\n\n### ✅ Built-in Security Features\n\n- **Data Privacy**: All data stays on your server - no external API calls (unless configured)\n- **Encryption**: API tokens encrypted at rest using AES-256\n- **Access Control**: User-level data isolation via Nextcloud authentication\n- **CSRF Protection**: Full protection against cross-site request forgery\n- **Rate Limiting**: Protection against API abuse (20 requests/min default)\n- **Input Validation**: Comprehensive validation and sanitization\n- **Audit Logging**: Complete logging of security events\n- **No SQL Injection**: All queries use Nextcloud's QueryBuilder\n\n### ⚠️ Production Deployment Checklist\n\n**Before Going Live**:\n\n1. **Network Security**:\n   - ✅ Ensure LLM server is NOT exposed to the internet\n   - ✅ Use firewall rules to restrict LLM server access to localhost\n   - ✅ Run Nextcloud behind HTTPS with valid SSL certificates\n   - ✅ Use a reverse proxy (nginx/Apache) for HTTPS termination\n   - ✅ Consider VPN for remote LLM server access\n\n2. **LLM Server Security**:\n   - ✅ Keep LLM server software updated (Ollama, LM Studio, etc.)\n   - ✅ Bind LLM server to localhost only (not 0.0.0.0)\n   - ✅ Use authentication if your LLM server supports it\n   - ✅ Monitor resource usage to prevent DoS\n\n3. **Nextcloud Security**:\n   - ✅ Keep Nextcloud updated to latest version\n   - ✅ Enable two-factor authentication for admin users\n   - ✅ Regular automated backups (at least daily)\n   - ✅ Test backup restoration procedure\n   - ✅ Review and restrict app permissions\n\n4. **Database Security**:\n   - ✅ Enable PostgreSQL/MySQL authentication\n   - ✅ Restrict database access to localhost\n   - ✅ Use strong database passwords\n   - ✅ Regular database backups\n   - ✅ Monitor database performance\n\n5. **API Token Management**:\n   - ✅ Use strong, unique API tokens for production\n   - ✅ Rotate tokens periodically (every 90 days recommended)\n   - ✅ Don't use default tokens like \"ollama\" in production\n   - ✅ Never commit tokens to version control\n   - ✅ Tokens are automatically encrypted by Nextcloud\n\n6. **Monitoring \u0026 Logging**:\n   - ✅ Monitor Nextcloud logs regularly\n   - ✅ Set up alerts for critical errors\n   - ✅ Review security events (failed access, rate limits)\n   - ✅ Monitor system resources (CPU, RAM, disk)\n   - ✅ Set up log rotation to prevent disk filling\n\n7. **System Hardening**:\n   - ✅ Keep OS and PHP updated\n   - ✅ Run web server as non-root user\n   - ✅ Configure proper file permissions\n   - ✅ Disable unnecessary services\n   - ✅ Enable SELinux/AppArmor if available\n\n### 🔐 Compliance Considerations\n\n- **GDPR**: User data is stored in your Nextcloud database - ensure proper data handling\n- **Data Retention**: Implement conversation cleanup policies if required\n- **User Privacy**: Users can delete their own conversations\n- **Audit Trail**: All actions are logged for compliance auditing\n- **Data Export**: Users can export their conversations (planned feature)\n\n## License\n\nThis project is licensed under the **GPL-2.0** License - see the [LICENSE](LICENSE) file for details.\n\n## Support\n\nFor issues and questions:\n- 🐛 [Report bugs](https://github.com/markusbegerow/local-llm-nextcloud/issues)\n- 💡 [Request features](https://github.com/markusbegerow/local-llm-nextcloud/issues)\n- 📚 [Read the Installation Guide](INSTALLATION.md)\n- 🔍 [Check Nextcloud community forums](https://help.nextcloud.com/)\n- 📖 Review LLM server documentation (Ollama, LM Studio)\n\n## Contributing\n\nContributions are welcome! Please:\n1. Fork the repository\n2. Create a feature branch (`git checkout -b feature/amazing-feature`)\n3. Make your changes\n4. Test thoroughly in a development environment\n5. Commit your changes (`git commit -m 'Add amazing feature'`)\n6. Push to the branch (`git push origin feature/amazing-feature`)\n7. Submit a pull request\n\n## Acknowledgments\n\n- Ollama team for making local LLMs accessible and easy to use\n- Nextcloud team for the excellent platform and development framework\n- LM Studio for providing a user-friendly local inference platform\n- The open-source LLM community for advancing local AI\n\n## 🙋‍♂️ Get Involved\n\nIf you find this useful or have questions:\n- ⭐ Star the repo if you find it useful!\n- 🐛 [Report bugs](https://github.com/markusbegerow/local-llm-nextcloud/issues)\n- 💡 [Request features](https://github.com/markusbegerow/local-llm-nextcloud/issues)\n- 🤝 Contribute improvements via pull requests\n\n## ☕ Support the Project\n\nIf you like this project, support further development:\n\n\u003ca href=\"https://www.linkedin.com/sharing/share-offsite/?url=https://github.com/markusbegerow/local-llm-nextcloud\" target=\"_blank\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/💼-Share%20on%20LinkedIn-blue\" /\u003e\n\u003c/a\u003e\n\n[![Buy Me a Coffee](https://img.shields.io/badge/☕-Buy%20me%20a%20coffee-yellow)](https://paypal.me/MarkusBegerow?country.x=DE\u0026locale.x=de_DE)\n\n## 📬 Contact\n\n- 🧑‍💻 [Markus Begerow](https://linkedin.com/in/markusbegerow)\n- 💾 [GitHub](https://github.com/markusbegerow)\n- ✉️ [Twitter](https://x.com/markusbegerow)\n\n---\n\n**Privacy Notice**: This app operates entirely locally by default. No data is sent to external servers unless you explicitly configure a remote API endpoint. All conversation data is stored in your Nextcloud database and never leaves your server.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarkusbegerow%2Fnextcloud-local-llm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmarkusbegerow%2Fnextcloud-local-llm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarkusbegerow%2Fnextcloud-local-llm/lists"}