{"id":29529900,"url":"https://github.com/it-baer/nc-iframewidget","last_synced_at":"2026-02-18T18:02:56.737Z","repository":{"id":281737457,"uuid":"946243228","full_name":"IT-BAER/nc-iframewidget","owner":"IT-BAER","description":"iFrame Widget for Nextcloud","archived":false,"fork":false,"pushed_at":"2025-10-01T18:23:08.000Z","size":90503,"stargazers_count":12,"open_issues_count":1,"forks_count":2,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-01T19:23:40.395Z","etag":null,"topics":["dashboard","nextcloud","nextcloud-app","nextcloud-plugin","widget"],"latest_commit_sha":null,"homepage":"","language":"Vue","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/IT-BAER.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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},"funding":{"github":null,"patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"lfx_crowdfunding":null,"polar":null,"buy_me_a_coffee":"itbaer","thanks_dev":null,"custom":null}},"created_at":"2025-03-10T20:49:38.000Z","updated_at":"2025-10-01T18:20:01.000Z","dependencies_parsed_at":null,"dependency_job_id":"6eb3ac5a-c14c-425b-8855-35dc380d19f2","html_url":"https://github.com/IT-BAER/nc-iframewidget","commit_stats":null,"previous_names":["it-baer/nc-iframewidget"],"tags_count":13,"template":false,"template_full_name":null,"purl":"pkg:github/IT-BAER/nc-iframewidget","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IT-BAER%2Fnc-iframewidget","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IT-BAER%2Fnc-iframewidget/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IT-BAER%2Fnc-iframewidget/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IT-BAER%2Fnc-iframewidget/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/IT-BAER","download_url":"https://codeload.github.com/IT-BAER/nc-iframewidget/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IT-BAER%2Fnc-iframewidget/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279002349,"owners_count":26083357,"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-10-09T02:00:07.460Z","response_time":59,"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":["dashboard","nextcloud","nextcloud-app","nextcloud-plugin","widget"],"created_at":"2025-07-16T22:01:53.052Z","updated_at":"2026-02-18T18:02:56.730Z","avatar_url":"https://github.com/IT-BAER.png","language":"Vue","readme":"# 🖼️ iFrame Widget for Nextcloud\n\n\u003cdiv align=\"center\"\u003e\n\n![Nextcloud App Store Version](https://img.shields.io/badge/Nextcloud-30%2B-blue?logo=nextcloud\u0026logoColor=white)\n![License](https://img.shields.io/github/license/it-baer/nc-iframewidget?color=blue)\n![GitHub stars](https://img.shields.io/github/stars/it-baer/nc-iframewidget?style=social)\n\n**Display external websites directly in your Nextcloud dashboard with customizable widgets**\n\n\u003cimg src=\"https://github.com/user-attachments/assets/86405272-4543-4f3d-b861-30c49ea0d414\"/\u003e\n\n\u003c/div\u003e\n\n## ✨ Features\n\n- **Embed any website** in your Nextcloud dashboard using iframes\n- **Multiple widget types**: Public (admin-configured), Personal (user-configured), and Group-based widgets\n- **5 public widget slots** for admin-configured widgets visible to all users\n- **5 group widget slots** for group-specific content delivery\n- **1 personal widget** per user for individual customization\n- **Custom icons** via [Simple Icons](https://simpleicons.org/) using `si:` prefix (3000+ brand icons)\n- **Icon color picker** for custom icon colors\n- **Adjustable iframe height** or automatic sizing\n- **Extra-wide display** option (spans 2 dashboard columns)\n- **Configurable iframe security** with sandbox and allow attribute customization\n- **Hide widget header** by leaving title empty\n- **Multi-language support** with 15 translations\n\n## 🚀 Roadmap\n\nFuture planned features:\n- 3-column widget size option\n- Refresh button and auto-refresh timer\n- Additional language translations\n- Enhanced widget management UI (drag \u0026 drop, categories)\n\n## 📸 Screenshots\n\n\u003cdiv align=\"center\"\u003e\n\n**Widget in Dashboard**\n\n\u003cimg alt=\"Dashboard view with multi-widget iFrame widgets\" src=\"nc-iframewidget-dashboard.png\" /\u003e\n\n\u003cbr\u003e\u003cbr\u003e\n\n**Admin Settings**\n\n\u003cimg src=\"nc-iframewidget-settings.png\"/\u003e\n\n\u003c/div\u003e\n\n## ⚙️ Configuration\n\n### Admin/Public Widgets\n\nConfigure public widgets from **Settings → Administration → iFrame Widget**:\n\n| Setting | Description |\n|---------|-------------|\n| Widget Title | Display title (leave empty to hide header) |\n| Widget Icon | Icon using `si:` prefix (e.g., `si:github`) |\n| Icon Color | Custom hex color for the icon |\n| URL to Display | The website URL to embed |\n| iFrame Height | Fixed height in pixels or auto (default) |\n| iFrame Sandbox | Security sandbox attributes for the iframe |\n| iFrame Allow | Feature policy (e.g., `microphone camera fullscreen`) |\n| Extra Wide | Span two dashboard columns |\n\nPublic widgets appear on all users' dashboards.\n\n### Personal Widget\n\nEach user can configure their own widget from **Settings → Personal → iFrame Widget**:\n\n- Same configuration options as public widgets\n- Visible only to the user who configured it\n- Independent from admin-configured widgets\n\n### Group Widgets\n\nCreate widgets for specific user groups from **Settings → Administration → iFrame Widget**:\n\n1. Scroll to \"Group-based iFrame Widgets\" section\n2. Select a group from the dropdown\n3. Configure widget settings (same options as public widgets)\n4. Save to make the widget visible to group members\n\nYou can configure up to 5 group widgets. Each widget can target a different user group.\n\n## 🎰 Widget Slots\n\nThe app provides a slot-based architecture:\n\n| Widget Type | Slots Available | Visibility |\n|-------------|-----------------|------------|\n| Public | 5 slots | All users |\n| Group | 5 slots | Members of selected group |\n| Personal | 1 slot per user | Individual user only |\n\nUsers can enable any combination of these widgets on their dashboard using the \"+\" customization button.\n\n## 🎨 Icon System\n\nThis widget uses [Simple Icons](https://simpleicons.org/) for brand icons:\n\n```\nsi:iconname\n```\n\nExamples:\n- `si:github` - GitHub icon\n- `si:youtube` - YouTube icon  \n- `si:nextcloud` - Nextcloud icon\n- `si:slack` - Slack icon\n\nBrowse 3000+ available icons at [simpleicons.org](https://simpleicons.org/).\n\n## 📋 Requirements\n\n- Nextcloud 30, 31, 32, or 33\n- Website must allow iframe embedding (some sites block this)\n- CSP configuration may be required for external domains\n\n## 🌍 Translations\n\nCurrently supported languages:\n\n| Language | Code | Language | Code |\n|----------|------|----------|------|\n| English | en | Portuguese | pt |\n| German | de | Brazilian Portuguese | pt_BR |\n| French | fr | Chinese (Simplified) | zh_CN |\n| Spanish | es | Japanese | ja |\n| Italian | it | Czech | cs |\n| Dutch | nl | Swedish | sv |\n| Russian | ru | Norwegian Bokmål | nb |\n| Polish | pl | | |\n\nContribute translations via the [translation guide](docs/TRANSLATING.md).\n\n## 🔒 CSP Configuration\n\nNextcloud restricts iframe embedding by default. This app now adjusts CSP via the **Nextcloud PHP CSP API** based on the configured widget URLs, which avoids conflicting CSP headers from the web server.\n\n\u003e **Important**: Do **not** add a second CSP header in Apache/Nginx for `frame-src`. Browsers apply the most restrictive policy when multiple CSP headers are present, which can still block your iframe.\n\n### Note on External Websites\n\nSome websites explicitly block iframe embedding using `X-Frame-Options: DENY` or `frame-ancestors: 'none'`. These sites cannot be embedded regardless of your CSP configuration. Consider using the External Sites app with redirect option instead.\n\n## 🛡️ Iframe Security Settings\n\nVersion 0.9.0 adds customizable iframe security attributes:\n\n### Sandbox Attribute\n\nControls iframe restrictions. Default: `allow-same-origin allow-scripts allow-popups allow-forms`\n\nCommon values:\n- `allow-same-origin` - Allow same-origin policy\n- `allow-scripts` - Allow JavaScript execution\n- `allow-popups` - Allow popups\n- `allow-forms` - Allow form submission\n- `allow-modals` - Allow modal dialogs\n\n### Allow Attribute (Feature Policy)\n\nControls browser feature access. Default: empty (no additional permissions)\n\nCommon values for VOIP/video apps:\n- `microphone` - Microphone access\n- `camera` - Camera access\n- `fullscreen` - Fullscreen mode\n- `autoplay` - Media autoplay\n- `display-capture` - Screen capture\n\nExample for a VOIP application:\n```\nmicrophone camera fullscreen\n```\n\n## 🔐 Security Notes\n\n- Embedded websites operate in their own security context\n- Use trusted sources for embedded content\n- The sandbox attribute provides additional isolation\n- CSP configuration is managed server-side for security\n\n## ❓ FAQ\n\n### Widget doesn't appear on dashboard\n\n1. Add the widget using the \"+\" button in dashboard customization\n2. Check browser console for JavaScript errors\n3. Verify the app is enabled: `php occ app:list | grep iframe`\n\n### Personal widget settings won't save (after upgrade)\n\nTry these solutions:\n\n```bash\n# Clear Nextcloud cache\nphp occ maintenance:mode --on\nphp occ memcache:clear\nphp occ maintenance:mode --off\n\n# Restart web server (Apache)\nsudo systemctl restart apache2\n\n# Or for Nginx\nsudo systemctl restart nginx\nsudo systemctl restart php-fpm\n\n# Re-enable the app\nphp occ app:disable iframewidget\nphp occ app:enable iframewidget\n```\n\n### What's the difference between widget types?\n\n| Type | Configured By | Visible To |\n|------|---------------|------------|\n| Public | Administrator | All users |\n| Personal | Individual user | That user only |\n| Group | Administrator | Members of selected group |\n\nAll types can be used simultaneously. Users add widgets to their dashboard via the \"+\" customization button.\n\n## 💜 Support Development\n\nIf this project helps you, consider supporting this and future work, which heavily relies on coffee:\n\n\u003cdiv align=\"center\"\u003e\n\u003ca href=\"https://www.buymeacoffee.com/itbaer\" target=\"_blank\"\u003e\u003cimg src=\"https://github.com/user-attachments/assets/64107f03-ba5b-473e-b8ad-f3696fe06002\" alt=\"Buy Me A Coffee\" style=\"height: 60px; max-width: 217px;\"\u003e\u003c/a\u003e\n\u003cbr\u003e\n\u003ca href=\"https://www.paypal.com/donate/?hosted_button_id=5XXRC7THMTRRS\" target=\"_blank\"\u003eDonate via PayPal\u003c/a\u003e\n\u003c/div\u003e\n\n## 📄 License\n\nThis project is licensed under the [AGPL-3.0-or-later](LICENSE) license.\n\n## 👏 Credits\n\n- [Simple Icons](https://simpleicons.org/) - Used for widget icons\n\n","funding_links":["https://buymeacoffee.com/itbaer","https://www.buymeacoffee.com/itbaer","https://www.paypal.com/donate/?hosted_button_id=5XXRC7THMTRRS"],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fit-baer%2Fnc-iframewidget","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fit-baer%2Fnc-iframewidget","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fit-baer%2Fnc-iframewidget/lists"}