CINXE.COM

GSoC Ideas :: Pidgin, the universal chat client

<!DOCTYPE html> <html lang="en" class="js csstransforms3d"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="generator" content="Hugo 0.80.0" /> <!-- Hugo: 2025-02-20T16:01:35 &#43;0000 - Job: n/a 2025-02-20T16:00:20 &#43;0000 - Commit: c30ec89f7dd78c5e744ac3bea28e615efd5303b2 - production //--> <meta name="description" content="Pidgin is a universal chat client, allowing you to consolidate all your different messaging apps into a single tool."> <meta property="og:title" content="GSoC Ideas" /> <meta property="og:description" content="This is a curated list of the tickets with the GSoC:Idea label from our issue tracker. These ideas have been deemed generally desirable and/or have high impact by the community. As such this list may not be completely up to date. If you&rsquo;re curious of what might not have made this list yet, please see the link above. If you have any questions about these ideas, please ask on the tickets that are referenced or by joining us in gsoc@conference." /> <meta property="og:type" content="article" /> <meta property="og:url" content="https://pidgin.im/development/gsoc/ideas/" /> <meta property="og:image" content="https://pidgin.im/images/pidgin-circle-256.png" /> <meta property="article:published_time" content="2019-01-11T03:13:47+00:00" /> <meta property="article:modified_time" content="2019-08-22T04:39:28+00:00" /> <meta name="twitter:card" content="summary_large_image" /> <meta name="twitter:image" content="https://pidgin.im/images/pidgin-circle-256.png" /> <meta name="twitter:title" content="GSoC Ideas" /> <meta name="twitter:description" content="This is a curated list of the tickets with the GSoC:Idea label from our issue tracker. These ideas have been deemed generally desirable and/or have high impact by the community. As such this list may not be completely up to date. If you&rsquo;re curious of what might not have made this list yet, please see the link above. If you have any questions about these ideas, please ask on the tickets that are referenced or by joining us in gsoc@conference." /> <link rel="shortcut icon" href="/favicon/favicon.ico"> <link rel="icon" sizes="16x16 32x32 64x64" href="/favicon/favicon.ico"> <link rel="icon" type="image/png" sizes="196x196" href="/favicon/favicon-192.png"> <link rel="icon" type="image/png" sizes="160x160" href="/favicon/favicon-160.png"> <link rel="icon" type="image/png" sizes="96x96" href="/favicon/favicon-96.png"> <link rel="icon" type="image/png" sizes="64x64" href="/favicon/favicon-64.png"> <link rel="icon" type="image/png" sizes="32x32" href="/favicon/favicon-32.png"> <link rel="icon" type="image/png" sizes="16x16" href="/favicon/favicon-16.png"> <link rel="apple-touch-icon" href="/favicon/favicon-57.png"> <link rel="apple-touch-icon" sizes="114x114" href="/favicon/favicon-114.png"> <link rel="apple-touch-icon" sizes="72x72" href="/favicon/favicon-72.png"> <link rel="apple-touch-icon" sizes="144x144" href="/favicon/favicon-144.png"> <link rel="apple-touch-icon" sizes="60x60" href="/favicon/favicon-60.png"> <link rel="apple-touch-icon" sizes="120x120" href="/favicon/favicon-120.png"> <link rel="apple-touch-icon" sizes="76x76" href="/favicon/favicon-76.png"> <link rel="apple-touch-icon" sizes="152x152" href="/favicon/favicon-152.png"> <link rel="apple-touch-icon" sizes="180x180" href="/favicon/favicon-180.png"> <meta name="msapplication-TileColor" content="#8451A1"> <meta name="msapplication-TileImage" content="/favicon/favicon-144.png"> <meta name="msapplication-config" content="favicon/browserconfig.xml"> <title>GSoC Ideas :: Pidgin, the universal chat client</title> <link href="/css/nucleus.css?1740067295" rel="stylesheet"> <link href="/css/fontawesome-all.min.css?1740067295" rel="stylesheet"> <link href="/css/hybrid.css?1740067295" rel="stylesheet"> <link href="/css/featherlight.min.css?1740067295" rel="stylesheet"> <link href="/css/perfect-scrollbar.min.css?1740067295" rel="stylesheet"> <link href="/css/auto-complete.css?1740067295" rel="stylesheet"> <link href="/css/atom-one-dark-reasonable.css?1740067295" rel="stylesheet"> <link href="/css/theme.css?1740067295" rel="stylesheet"> <link href="/css/hugo-theme.css?1740067295" rel="stylesheet"> <link href="/css/theme-pidgin.css?1740067295" rel="stylesheet"> <link href="/css/custom.css?1740067295" rel="stylesheet"> <script src="/js/jquery-3.3.1.min.js?1740067295"></script> <style> :root #header + #content > #left > #rlblock_left{ display:none !important; } </style> </head> <body class="" data-url="/development/gsoc/ideas/"> <nav id="sidebar" class=""> <div id="header-wrapper"> <div id="header"> <a href="/"><img src="/images/logo.png" alt="pidgin logo"></a> </div> <div class="searchbox"> <label for="search-by"><i class="fas fa-search"></i></label> <input data-search-input id="search-by" type="search" placeholder="Search..."> <span data-search-clear=""><i class="fas fa-times"></i></span> </div> <script type="text/javascript" src="/js/lunr.min.js?1740067295"></script> <script type="text/javascript" src="/js/auto-complete.js?1740067295"></script> <script type="text/javascript"> var baseurl = "https:\/\/pidgin.im\/"; </script> <script type="text/javascript" src="/js/search.js?1740067295"></script> </div> <div class="highlightable"> <ul class="topics"> <li data-nav-id="/install/" title="Install" class="dd-item "> <a href="/install/"> Install </a> </li> <li data-nav-id="/plugins/" title="Plugins" class="dd-item "> <a href="/plugins/"> Plugins </a> </li> <li data-nav-id="/about/" title="About" class="dd-item "> <a href="/about/"> About </a> <ul> <li data-nav-id="/about/pidginchat/" title="Pidgin Chat" class="dd-item "> <a href="/about/pidginchat/"> Pidgin Chat </a> </li> <li data-nav-id="/about/philosophy/" title="Philosophy and Goals" class="dd-item "> <a href="/about/philosophy/"> Philosophy and Goals </a> </li> <li data-nav-id="/about/supported-languages/" title="Supported Languages" class="dd-item "> <a href="/about/supported-languages/"> Supported Languages </a> </li> <li data-nav-id="/about/security/" title="Security" class="dd-item "> <a href="/about/security/"> Security </a> <ul> <li data-nav-id="/about/security/advisories/" title="Advisories" class="dd-item "> <a href="/about/security/advisories/"> Advisories </a> <ul> <li data-nav-id="/about/security/advisories/cve-2022-26491/" title="cve-2022-26491-00" class="dd-item "> <a href="/about/security/advisories/cve-2022-26491/"> cve-2022-26491-00 </a> </li> </ul> </li> </ul> </li> </ul> </li> <li data-nav-id="/help/" title="Help" class="dd-item "> <a href="/help/"> Help </a> <ul> <li data-nav-id="/help/protocols/" title="Services (Protocols)" class="dd-item "> <a href="/help/protocols/"> Services (Protocols) </a> <ul> <li data-nav-id="/help/protocols/bonjour/" title="Bonjour" class="dd-item "> <a href="/help/protocols/bonjour/"> Bonjour </a> </li> <li data-nav-id="/help/protocols/gadugadu/" title="Gadu-Gadu" class="dd-item "> <a href="/help/protocols/gadugadu/"> Gadu-Gadu </a> </li> <li data-nav-id="/help/protocols/groupwise/" title="GroupWise" class="dd-item "> <a href="/help/protocols/groupwise/"> GroupWise </a> </li> <li data-nav-id="/help/protocols/irc/" title="IRC" class="dd-item "> <a href="/help/protocols/irc/"> IRC </a> </li> <li data-nav-id="/help/protocols/sametime/" title="Sametime" class="dd-item "> <a href="/help/protocols/sametime/"> Sametime </a> </li> <li data-nav-id="/help/protocols/silc/" title="SILC" class="dd-item "> <a href="/help/protocols/silc/"> SILC </a> </li> <li data-nav-id="/help/protocols/xmpp/" title="XMPP (Jabber)" class="dd-item "> <a href="/help/protocols/xmpp/"> XMPP (Jabber) </a> <ul> <li data-nav-id="/help/protocols/xmpp/supportedxep/" title="Supported XEP&#39;s" class="dd-item "> <a href="/help/protocols/xmpp/supportedxep/"> Supported XEP&#39;s </a> </li> </ul> </li> <li data-nav-id="/help/protocols/zephyr/" title="Zephyr" class="dd-item "> <a href="/help/protocols/zephyr/"> Zephyr </a> </li> <li data-nav-id="/help/protocols/otherprotocols/" title="Other Protocols" class="dd-item "> <a href="/help/protocols/otherprotocols/"> Other Protocols </a> </li> </ul> </li> <li data-nav-id="/help/theming/" title="Theming Pidgin" class="dd-item "> <a href="/help/theming/"> Theming Pidgin </a> </li> <li data-nav-id="/help/windows/" title="Windows-Specific Questions" class="dd-item "> <a href="/help/windows/"> Windows-Specific Questions </a> </li> </ul> </li> <li data-nav-id="/development/" title="Development" class="dd-item parent "> <a href="/development/"> Development </a> <ul> <li data-nav-id="/development/building/" title="Building" class="dd-item "> <a href="/development/building/"> Building </a> <ul> <li data-nav-id="/development/building/3.0.0/" title="3.0.0" class="dd-item "> <a href="/development/building/3.0.0/"> 3.0.0 </a> </li> <li data-nav-id="/development/building/2.x.y/" title="2.x.y" class="dd-item "> <a href="/development/building/2.x.y/"> 2.x.y </a> <ul> <li data-nav-id="/development/building/2.x.y/windows/" title="Windows" class="dd-item "> <a href="/development/building/2.x.y/windows/"> Windows </a> </li> </ul> </li> </ul> </li> <li data-nav-id="/development/contributing/" title="Contributing" class="dd-item "> <a href="/development/contributing/"> Contributing </a> </li> <li data-nav-id="/development/gsoc/" title="Google Summer of Code" class="dd-item parent "> <a href="/development/gsoc/"> Google Summer of Code </a> <ul> <li data-nav-id="/development/gsoc/instructions/" title="GSoC Instructions" class="dd-item "> <a href="/development/gsoc/instructions/"> GSoC Instructions </a> </li> <li data-nav-id="/development/gsoc/ideas/" title="GSoC Ideas" class="dd-item active"> <a href="/development/gsoc/ideas/"> GSoC Ideas </a> </li> </ul> </li> <li data-nav-id="/development/debugging/" title="Debugging" class="dd-item "> <a href="/development/debugging/"> Debugging </a> </li> <li data-nav-id="/development/voice-and-video/" title="Voice and Video" class="dd-item "> <a href="/development/voice-and-video/"> Voice and Video </a> <ul> <li data-nav-id="/development/voice-and-video/voice-and-video-api/" title="Voice and Video API" class="dd-item "> <a href="/development/voice-and-video/voice-and-video-api/"> Voice and Video API </a> </li> </ul> </li> <li data-nav-id="/development/i18n/" title="Internationalization" class="dd-item "> <a href="/development/i18n/"> Internationalization </a> </li> <li data-nav-id="/development/release-process/" title="Release Process" class="dd-item "> <a href="/development/release-process/"> Release Process </a> </li> <li data-nav-id="/development/faq/" title="FAQ" class="dd-item "> <a href="/development/faq/"> FAQ </a> </li> <li data-nav-id="/development/design-guidelines/" title="Design Guidelines" class="dd-item "> <a href="/development/design-guidelines/"> Design Guidelines </a> </li> </ul> </li> <li data-nav-id="/contact/" title="Contact" class="dd-item "> <a href="/contact/"> Contact </a> </li> <li data-nav-id="/post/" title="Blog" class="dd-item "> <a href="/post/"> Blog </a> <ul> <li data-nav-id="/posts/2024-08-malicious-plugin/" title="Malicious Plugin" class="dd-item "> <a href="/posts/2024-08-malicious-plugin/"> Malicious Plugin </a> </li> <li data-nav-id="/posts/2024-02-2.14.13-released/" title="2.14.13 Released!" class="dd-item "> <a href="/posts/2024-02-2.14.13-released/"> 2.14.13 Released! </a> </li> <li data-nav-id="/posts/2024-02-state-of-the-bird-2023-q4/" title="State of the Bird 2023 Q4" class="dd-item "> <a href="/posts/2024-02-state-of-the-bird-2023-q4/"> State of the Bird 2023 Q4 </a> </li> <li data-nav-id="/posts/2023-11-state-of-the-bird-2023-q3/" title="State of the Bird 2023 Q3" class="dd-item "> <a href="/posts/2023-11-state-of-the-bird-2023-q3/"> State of the Bird 2023 Q3 </a> </li> <li data-nav-id="/posts/2023-08-facebook-republished/" title="Facebook Republished" class="dd-item "> <a href="/posts/2023-08-facebook-republished/"> Facebook Republished </a> </li> <li data-nav-id="/posts/2023-08-facebook-takedown/" title="Facebook Takedown" class="dd-item "> <a href="/posts/2023-08-facebook-takedown/"> Facebook Takedown </a> </li> <li data-nav-id="/posts/2023-07-state-of-the-bird-2023-q2/" title="State of the Bird 2023 Q2" class="dd-item "> <a href="/posts/2023-07-state-of-the-bird-2023-q2/"> State of the Bird 2023 Q2 </a> </li> <li data-nav-id="/posts/2023-01-state-of-the-bird-2022-q4/" title="State of the Bird 2022 Q4" class="dd-item "> <a href="/posts/2023-01-state-of-the-bird-2022-q4/"> State of the Bird 2022 Q4 </a> </li> <li data-nav-id="/posts/2022-12-2.14.12-released/" title="2.14.12 Released!" class="dd-item "> <a href="/posts/2022-12-2.14.12-released/"> 2.14.12 Released! </a> </li> <li data-nav-id="/posts/2022-10-state-of-the-bird-2022-q3/" title="State of the Bird 2022 Q3" class="dd-item "> <a href="/posts/2022-10-state-of-the-bird-2022-q3/"> State of the Bird 2022 Q3 </a> </li> <li data-nav-id="/posts/2022-09-digitalocean-sponsorship-renewed/" title="DigitalOcean Sponsorship Renewed" class="dd-item "> <a href="/posts/2022-09-digitalocean-sponsorship-renewed/"> DigitalOcean Sponsorship Renewed </a> </li> <li data-nav-id="/posts/2022-07-state-of-the-bird-2022-q2/" title="State of the Bird 2022 Q2" class="dd-item "> <a href="/posts/2022-07-state-of-the-bird-2022-q2/"> State of the Bird 2022 Q2 </a> </li> <li data-nav-id="/posts/2022-06-2.14.10-released/" title="2.14.10 Released!" class="dd-item "> <a href="/posts/2022-06-2.14.10-released/"> 2.14.10 Released! </a> </li> <li data-nav-id="/posts/2022-05-google-talk-shutdown/" title="Google Talk Shutdown" class="dd-item "> <a href="/posts/2022-05-google-talk-shutdown/"> Google Talk Shutdown </a> </li> <li data-nav-id="/posts/2022-04-2.14.9-released/" title="2.14.9 Released!" class="dd-item "> <a href="/posts/2022-04-2.14.9-released/"> 2.14.9 Released! </a> </li> <li data-nav-id="/posts/2022-04-state-of-the-bird-2022-q1/" title="State of the Bird 2022 Q1" class="dd-item "> <a href="/posts/2022-04-state-of-the-bird-2022-q1/"> State of the Bird 2022 Q1 </a> </li> <li data-nav-id="/posts/2022-02-libera-wallops/" title="Libera Wallops" class="dd-item "> <a href="/posts/2022-02-libera-wallops/"> Libera Wallops </a> </li> <li data-nav-id="/posts/2022-01-state-of-the-bird-2021-q4/" title="State of the Bird 2021 Q4" class="dd-item "> <a href="/posts/2022-01-state-of-the-bird-2021-q4/"> State of the Bird 2021 Q4 </a> </li> <li data-nav-id="/posts/2021-10-2.14.8-released/" title="2.14.8 Released!" class="dd-item "> <a href="/posts/2021-10-2.14.8-released/"> 2.14.8 Released! </a> </li> <li data-nav-id="/posts/2021-10-state-of-the-bird-2021-q3/" title="State of the Bird 2021 Q3" class="dd-item "> <a href="/posts/2021-10-state-of-the-bird-2021-q3/"> State of the Bird 2021 Q3 </a> </li> <li data-nav-id="/posts/2021-09-2.14.7-released/" title="2.14.7 Released!" class="dd-item "> <a href="/posts/2021-09-2.14.7-released/"> 2.14.7 Released! </a> </li> <li data-nav-id="/posts/2021-09-gsoc-2021-retrospective/" title="GSoC 2021 Retrospective" class="dd-item "> <a href="/posts/2021-09-gsoc-2021-retrospective/"> GSoC 2021 Retrospective </a> </li> <li data-nav-id="/posts/2021-07-2.14.6-released/" title="2.14.6 Released!" class="dd-item "> <a href="/posts/2021-07-2.14.6-released/"> 2.14.6 Released! </a> </li> <li data-nav-id="/posts/2021-06-irc-network-changes/" title="IRC Network Changes" class="dd-item "> <a href="/posts/2021-06-irc-network-changes/"> IRC Network Changes </a> </li> <li data-nav-id="/posts/2021-06-pidgin3-development-scripts/" title="Pidgin3 Development Scripts" class="dd-item "> <a href="/posts/2021-06-pidgin3-development-scripts/"> Pidgin3 Development Scripts </a> </li> <li data-nav-id="/posts/2021-06-hgkeeper-and-mercurial-5.8-issue/" title="HGKeeper and Mercurial 5.8 Issue" class="dd-item "> <a href="/posts/2021-06-hgkeeper-and-mercurial-5.8-issue/"> HGKeeper and Mercurial 5.8 Issue </a> </li> <li data-nav-id="/posts/2021-06-2.14.5-released/" title="2.14.5 Released!" class="dd-item "> <a href="/posts/2021-06-2.14.5-released/"> 2.14.5 Released! </a> </li> <li data-nav-id="/posts/2021-05-gsoc-2021/" title="Gsoc 2021" class="dd-item "> <a href="/posts/2021-05-gsoc-2021/"> Gsoc 2021 </a> </li> <li data-nav-id="/posts/2021-05-thank-you-steadfast/" title="Thank You, Steadfast" class="dd-item "> <a href="/posts/2021-05-thank-you-steadfast/"> Thank You, Steadfast </a> </li> <li data-nav-id="/posts/2021-05-digitalocean-sponsorship/" title="DigitalOcean Sponsorship" class="dd-item "> <a href="/posts/2021-05-digitalocean-sponsorship/"> DigitalOcean Sponsorship </a> </li> <li data-nav-id="/posts/2021-04-2.14.4-released/" title="2.14.4 Released!" class="dd-item "> <a href="/posts/2021-04-2.14.4-released/"> 2.14.4 Released! </a> </li> <li data-nav-id="/posts/2021-04-2.14.3-released/" title="2.14.3 Released!" class="dd-item "> <a href="/posts/2021-04-2.14.3-released/"> 2.14.3 Released! </a> </li> <li data-nav-id="/posts/2021-04-2.14.2-released/" title="2.14.2 Released!" class="dd-item "> <a href="/posts/2021-04-2.14.2-released/"> 2.14.2 Released! </a> </li> <li data-nav-id="/posts/2021-03-pidginchat/" title="Pidginchat" class="dd-item "> <a href="/posts/2021-03-pidginchat/"> Pidginchat </a> </li> <li data-nav-id="/posts/2021-02-libgnt-2.14.1-released/" title="libgnt 2.14.1 Released" class="dd-item "> <a href="/posts/2021-02-libgnt-2.14.1-released/"> libgnt 2.14.1 Released </a> </li> <li data-nav-id="/posts/2021-02-bintray-sunsetting/" title="Bintray Sunsetting" class="dd-item "> <a href="/posts/2021-02-bintray-sunsetting/"> Bintray Sunsetting </a> </li> <li data-nav-id="/posts/2020-06-2.14.1-released/" title="2.14.1 Released!" class="dd-item "> <a href="/posts/2020-06-2.14.1-released/"> 2.14.1 Released! </a> </li> <li data-nav-id="/posts/2020-06-2.14.0-released/" title="2.14.0 Released!" class="dd-item "> <a href="/posts/2020-06-2.14.0-released/"> 2.14.0 Released! </a> </li> <li data-nav-id="/posts/2020-01-nest-launch/" title="Nest Launch" class="dd-item "> <a href="/posts/2020-01-nest-launch/"> Nest Launch </a> </li> </ul> </li> </ul> <section id="shortcuts"> <h3></h3> <ul> <li> <a class="padding" href="https://issues.imfreedom.org/issues/PIDGIN"><i class='fas fa-fw fa-tasks'></i> Issue Tracker</a> </li> <li> <a class="padding" href="https://keep.imfreedom.org/pidgin/"><i class='fas fa-fw fa-code'></i> Repositories</a> </li> <li> <a class="padding" href="https://shop.spreadshirt.com/imfreedom"><i class='fas fa-fw fa-tshirt'></i> Merchandise</a> </li> <li> <a class="padding" rel=me href="https://fosstodon.org/@pidgin"><i class='fab fa-fw fa-mastodon'></i> Mastodon</a> </li> </ul> </section> <section id="prefooter"> <hr /> <ul> <li> <a class="padding"> <i class="fas fa-language fa-fw"></i> <div class="select-style"> <select id="select-language" onchange="location = this.value;"> <option id="en" value="https://pidgin.im/development/gsoc/ideas/" selected>English (US)</option> </select> <svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="255px" height="255px" viewBox="0 0 255 255" style="enable-background:new 0 0 255 255;" xml:space="preserve"> <g> <g id="arrow-drop-down"> <polygon points="0,63.75 127.5,191.25 255,63.75 " /> </g> </g> </svg> </div> </a> </li> </ul> </section> <section id="footer"> <a href="https://imfreedom.org/donate" class="donate-button"> <i class="fas fa-heart"></i> Donate </a> </section> </div> </nav> <section id="body"> <div id="overlay"></div> <div class="padding highlightable"> <div> <div id="top-bar"> <div id="top-github-link"> <a class="github-link" title='Edit this page' href="https://keep.imfreedom.org/pidgin/nest/file/default/hugo/content/development/gsoc/ideas.md" target="blank"> <i class="fas fa-code-branch"></i> <span id="top-github-link-text">Edit this page</span> </a> </div> <div id="breadcrumbs" itemscope="" itemtype="http://data-vocabulary.org/Breadcrumb"> <span id="sidebar-toggle-span"> <a href="#" id="sidebar-toggle" data-sidebar-toggle=""> <i class="fas fa-bars"></i> </a> </span> <span id="toc-menu"><i class="fas fa-list-alt"></i></span> <span class="links"> <a href='/'>Pidgin</a> > <a href='/development/'>Development</a> > <a href='/development/gsoc/'>Google Summer of Code</a> > GSoC Ideas </span> </div> <div class="progress"> <div class="wrapper"> <nav id="TableOfContents"> <ul> <li><a href="#protocol-specific-ideas">Protocol-specific ideas</a> <ul> <li><a href="#xmpp-omemo-encryption">XMPP OMEMO Encryption</a></li> <li><a href="#xmpp-whiteboard-support">XMPP Whiteboard Support</a></li> </ul> </li> <li><a href="#new-protocol-plugins">New Protocol Plugins</a> <ul> <li><a href="#twitch-plugin">Twitch Plugin</a></li> <li><a href="#instagram-plugin">Instagram Plugin</a></li> </ul> </li> <li><a href="#internals">Internals</a> <ul> <li><a href="#audit-log">Audit Log</a></li> <li><a href="#account-assistant">Account Assistant</a></li> <li><a href="#name-completion">Name Completion</a></li> <li><a href="#mentions">Mentions</a></li> </ul> </li> <li><a href="#advanced-features">Advanced Features</a> <ul> <li><a href="#screen-sharing">Screen sharing</a></li> </ul> </li> <li><a href="#plugin-website">Plugin Website</a></li> <li><a href="#gplugin">GPlugin</a> <ul> <li><a href="#swift-plugin-examples">Swift Plugin Examples</a></li> <li><a href="#gnome-javascript-loader">Gnome Javascript Loader</a></li> </ul> </li> </ul> </nav> </div> </div> </div> </div> <div id="head-tags"> </div> <div id="body-inner"> <h1> GSoC Ideas </h1> <p>This is a curated list of the tickets with the <code>GSoC:Idea</code> label from our <a href="https://issues.imfreedom.org/issues?u=1&amp;q=tag:%20GSoC:idea%20">issue tracker</a>. These ideas have been deemed generally desirable and/or have high impact by the community. As such this list may not be completely up to date. If you&rsquo;re curious of what might not have made this list yet, please see the link above.</p> <p>If you have any questions about these ideas, please ask on the tickets that are referenced or by joining us in <code>gsoc@conference.pidgin.im</code>. If you don&rsquo;t have an XMPP account check out our <a href="/about/pidginchat/">PidginChat Service</a>.</p> <h2 id="protocol-specific-ideas">Protocol-specific ideas</h2> <h3 id="xmpp-omemo-encryption">XMPP OMEMO Encryption</h3> <p>This project would implement OMEMO Encryption <a href="https://xmpp.org/extensions/xep-384.html">XEP-384</a>. This project is a bit complicated as it would need to add some features to both libpurple as well as Pidgin and Finch to really make it a first class feature.</p> <p>For starters libpurple needs a way to represent an encryption method for a conversation. Once that is in place, we also need a way to mark messages as encrypted and which method (possibly none), settings, keys, etc were used.</p> <p>Pidgin and Finch will need a way to allow users to change what encryption to use and should be readily available in the message window.</p> <p>Finally the XMPP protocol would need to be updated to actually implement XEP-0384 and use the new API in libpurple to make it all work.</p> <h3 id="xmpp-whiteboard-support">XMPP Whiteboard Support</h3> <p>Ticket: <a href="https://issues.imfreedom.org/issue/PIDGIN-17451">PIDGIN-17451</a></p> <p>Pidgin has supported whiteboard for very many years now, however the only in-tree plug-in that uses it is SILC which is difficult to build. This means that breakages are inevitable and that&rsquo;s bad for everyone but mostly users.</p> <p>As such, there are multiple XEPs to implement whiteboard in XMPP:</p> <ul> <li><a href="https://xmpp.org/extensions/xep-113.html">XEP-113</a> Simple Whiteboarding</li> <li><a href="https://xmpp.org/extensions/xep-284.html">XEP-284</a> Shared XML Editing</li> </ul> <p>Currently we are unaware of any clients that implement XEP-0113, but <a href="https://gajim.org/">Gajim</a> does implement XEP-0284.</p> <p>The extent of this project would be to implement XEP-0284 and make sure there is interoperability with Gajim as well as any additional cleanup that might be necessary in the Whiteboard API.</p> <h2 id="new-protocol-plugins">New Protocol Plugins</h2> <h3 id="twitch-plugin">Twitch Plugin</h3> <p><a href="https://twitch.tv">Twitch</a> is a popular site for live streaming things like gaming, arts, crafts, and even programming. Twitch brings with it some interesting problems. The chat rooms in Twitch are nearly IRC, but they are HUGE. It&rsquo;s not uncommon for there to be to many thousands of users in a single chatroom and all of them talking very quickly and using very many emojis.</p> <p>Grim has some basic support already done which is available at <a href="https://keep.imfreedom.org/grim/purple-spasm">purple-spasm</a>. He tried to implement emojis, but Purple2 and Pidgin2 are not designed to be able to handle the kinds of use cases Twitch presents.</p> <p>Also due to the volume of Twitch chats there are different modes that the chat can be in. &ldquo;Follower Only&rdquo; mode only allows followers to talk. &ldquo;Emote Only&rdquo; mode only allows users to send Emotes/Emoji. &ldquo;Slow mode&rdquo; rate limits messages. Finally, Twitch considers it an error if you send the exact same message within 30 seconds of the previous message.</p> <h3 id="instagram-plugin">Instagram Plugin</h3> <p>Instagram is a popular social network that has chat capabilities. It would prove beneficial to many if we had some sort of support for it.</p> <h2 id="internals">Internals</h2> <h3 id="audit-log">Audit Log</h3> <p>It would be handy from both troubleshooting and security points of view if we kept a log of every setting change that happens in libpurple. The idea here is to make everything auditable so when something is different users are quickly able to figure out why.</p> <p>This idea is being discussed in <a href="https://issues.imfreedom.org/issue/PIDGIN-17496">PIDGIN-17496</a>.</p> <h3 id="account-assistant">Account Assistant</h3> <p>Currently adding an account to Pidgin requires a lot of technical knowledge. It&rsquo;s certainly possible for someone to figure it out, but we can and should make it a much easier process.</p> <p>There&rsquo;s a rough draft of how this would work in <a href="https://issues.imfreedom.org/issue/PIDGIN-17461">PIDGIN-17461</a>.</p> <p>This project would include writing quite a few composite GTK Widgets as well as getting pretty familiar with our abstractions for protocol plugins.</p> <h3 id="name-completion">Name Completion</h3> <p>Pidgin implements a very basic form of name completion which doesn&rsquo;t work with some of the newer protocols (namely anything that has a distinction between highlight names and display names). Also, newer protocols tend to allow you to complete chat room names as well which we currently do not support at all.</p> <p>This project is to create an interface for protocol plugins to expose user and chat compleitions. Some protocols require a <code>@</code> prefix for users and an <code>#</code> prefix for chats, but others do not so we&rsquo;ll need to having something robust that can allow the protocol to work easily with whatever method the user chose for this instance. We don&rsquo;t want to lock the user into using <code>@</code> on one protocol and not another, as that&rsquo;s a support nightmare waiting to happen. We would be better off supporting as many methods as possible regardless of protocol.</p> <h3 id="mentions">Mentions</h3> <p>Historically Pidgin has just looked for your username in a message to determine if you were mentioned. This worked well enough for awhile, but things have changed considerably over the past few years. Namely, protocols will now tell the client when the user has been mentioned.</p> <p>This happens for a number of reasons, but the biggest one is that there are ways to mention groups of people as well as everyone in a chat room. For example <code>@all</code>, <code>@channel</code>, <code>@everyone</code>, <code>@here</code>, as well as the ability to mention a role on Discord.</p> <p>Our limited research so far, has shown that there is no distinction when multiple mentions are provided in the same message. So if you&rsquo;re mentioned at the same time as someone else, your mention looks exactly the same as the mention for the other person.</p> <p>This project would consist of separate libpurple and UI portions. The core portions would create the infrastructure to make mentions more robust than they currently are, and the UI updates would update Pidgin and Finch to handle the new infrastructure.</p> <p>The libpurple updates would consist of adding a &ldquo;mentioned&rdquo; property to <code>PurpleMessage</code>. This follows the current behavior of other clients that just say whether a message contains a mention or not. Libpurple would also need to add a signal that would be emitted during <code>purple_conversation_write_message</code> if the <code>mentioned</code> property is true. This signal would be emitted from the conversation instance and pass along the message itself. This would allow a plugin to play a sound or the UI can track it in other ways.</p> <p>The UI updates for now, would just include drawing attention to the messages that have mentions in them. Ideally there would be some sort of navigation for the user to jump to the mentions, but we need more infrastructure for that to happen. In the mean time, just styling the messages differently would be more than adequate.</p> <h2 id="advanced-features">Advanced Features</h2> <h3 id="screen-sharing">Screen sharing</h3> <p>Many modern messenger protocols have the capability of sharing the user&rsquo;s screen, with or without remote control. While this can be dangerous, viewing a shared desktop or sharing the local desktop is interesting to many users, particularly in managed environments. The maintainers of the purple SIPE protocol have implemented RDP sharing over Lync, and are interested in helping Pidgin/libpurple adopt a protocol-agnostic interface for screen sharing as well as working with us to get XMPP screen sharing capabilities in place.</p> <h2 id="plugin-website">Plugin Website</h2> <p>Over the years it has been very difficult to find plugins for libpurple, Pidgin, and Finch. We&rsquo;ve tried to address this in a number of ways by listing ones that people told us about, but this is hard to maintain and isn&rsquo;t discoverable by end users.</p> <p>This project is meant to fix those issues by creating a website that would live at <code>https://plugins.pidgin.im/</code> and would work basically like the <a href="https://chrome.google.com/webstore/">Chrome Web Store</a> where users can upload their plugins and provide support and such.</p> <p>This site would provide a REST API so that we can implement a user interface inside of Pidgin and Finch that would make finding new plugins much easier for users. It would also have the added benefit of allowing plugins to auto update.</p> <h2 id="gplugin">GPlugin</h2> <h3 id="swift-plugin-examples">Swift Plugin Examples</h3> <p>Swift is a popular compiled programming language released by Apple that is meant to replace their usage of Objective-C. Since Swift compiles to native code, it should be easily loadable into GPlugin. Using something like <a href="https://github.com/rhx/SwiftGtk">SwiftGtk</a> it should be possible to put together some plugin examples in the same vein as the Vala examples that are already in the GPlugin codebase.</p> <p>This project would mostly likely not be large enough to cover an entire 175 hours of a Google Summer of Code project, but could be combined with another smaller one to make up the time.</p> <h3 id="gnome-javascript-loader">Gnome Javascript Loader</h3> <p>A long time ago, GPlugin supported <a href="https://gitlab.gnome.org/GNOME/gjs">GnomeJS</a>. However, that version of GnomeJS was using the C bindings for Spider Monkey, which is the JavaScript engine in Firefox. Awhile back Mozilla unstandably decided they no longer wanted to maintain language bindings in multiple languages and moved to only providing C++ bindings. GnomeJS transitioned but the GPlugin load was never fully updated.</p> <p>Grim tried a few attempts to get this working, as can be seen in the <a href="https://keep.imfreedom.org/gplugin/gplugin/file/feature%252Fgjs-cc">gjs-cc branch</a> but it does not currently work.</p> <p>Embedding GnomeJS is mostly undocumented and much of the work Grim has done has been &ldquo;borrowed&rdquo; from Gnome Shell itself that embeds GnomeJS. Grim is not sure of where he left off, but with a little bit of work this should be completeable.</p> <p>We are confident at this time that this project would not contain enough work for a full Google Summer of Code project.</p> <footer class="footline"> </footer> </div> </div> <div id="navigation"> </div> </section> <div style="left: -1000px; overflow: scroll; position: absolute; top: -1000px; border: none; box-sizing: content-box; height: 200px; margin: 0px; padding: 0px; width: 200px;"> <div style="border: none; box-sizing: content-box; height: 200px; margin: 0px; padding: 0px; width: 200px;"></div> </div> <script src="/js/clipboard.min.js?1740067295"></script> <script src="/js/perfect-scrollbar.min.js?1740067295"></script> <script src="/js/perfect-scrollbar.jquery.min.js?1740067295"></script> <script src="/js/jquery.sticky.js?1740067295"></script> <script src="/js/featherlight.min.js?1740067295"></script> <script src="/js/highlight.pack.js?1740067295"></script> <script> hljs.initHighlightingOnLoad(); </script> <script src="/js/modernizr.custom-3.6.0.js?1740067295"></script> <script src="/js/learn.js?1740067295"></script> <script src="/js/hugo-learn.js?1740067295"></script> <link href="/mermaid/mermaid.css?1740067295" rel="stylesheet" /> <script src="/mermaid/mermaid.js?1740067295"></script> <script> mermaid.initialize({ startOnLoad: true }); </script> <footer id="footline"> <div class="footline-block"> Modified 2019-08-22 </div> <div class="footline-block footline-old-site-info"> This page was migrated from the old sites. This is what it replaces: <ul> <li> <a href="https://developer.pidgin.im/wiki/SoCIdeas" rel="nofollow"> developer.pidgin.im/wiki/SoCIdeas </a> </li> </ul> </div> <ul class="footline-block footline-columns"> <li> <a href="https://issues.imfreedom.org/issues/PIDGIN"><i class='fas fa-fw fa-tasks'></i> Issue Tracker</a> </li> <li> <a href="https://keep.imfreedom.org/pidgin/"><i class='fas fa-fw fa-code'></i> Repositories</a> </li> <li> <a href="https://shop.spreadshirt.com/imfreedom"><i class='fas fa-fw fa-tshirt'></i> Merchandise</a> </li> <li> <a href="https://fosstodon.org/@pidgin"><i class='fab fa-fw fa-mastodon'></i> Mastodon</a> </li> </ul> <div class="footline-block"> <section class="supporters"> <b>Our Supporters</b> <div> <a href="https://www.digitalocean.com/?refcode=b69e5dddf595&amp;utm_campaign=Referral_Invite&amp;utm_medium=Referral_Program&amp;utm_source=badge"> <img src="/images/badges/DO_Logo_horizontal_black.svg" alt="DigitalOcean" /> </a> <a href="https://sourceforge.net"> <img src="/images/badges/source-forge-logo.svg" alt="SourceForge" style="min-width:190px" /> </a> </div> </section> </div> <ul class="footline-block footline-columns copyright-text"> <li> &copy; Pidgin </li> <li> Content - GPL3 </li> <li> <a href="https://github.com/matcornic/hugo-theme-learn">Theme</a> - MIT </li> </ul> </footer> <script src="/js/js.cookie.min.js"></script> <div style="display:none;"> <div class="notices tip notification-bar"> <p> <span class="alert-bar-close-button"><i class="fas fa-times"></i></span> Looking to reach us via XMPP? Check out the new <a href='/about/pidginchat'>PidginChat</a> service! </p> </div> </div> <script> try { var code = "pidgin-chat-announcement"; } catch (e) { console.error("Error with cookie code", e); } if (code && code !== Cookies.get("hide-notification")) { var bar = $(".notification-bar"); $(".padding.highlightable").prepend(bar); $(".alert-bar-close-button").on("click", function(elem) { Cookies.set("hide-notification", code); bar.detach(); }); } </script> <style> .alert-bar-close-button { position: absolute; top: 2px; right: 10px; color: white; font-weight: bold; cursor: pointer; transition: 0.3s; } .alert-bar-close-button:hover { color: black; } </style> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10