Pharo GSOC 2019
Ideas List

Pharo is a pure object-oriented programming language and a powerful environment, focused on simplicity and immediate feedback (think IDE and OS rolled into one).

Table of Contents


Information for Students

These ideas were contributed by our developers and users. They are sometimes vague or incomplete. If you wish to submit a proposal based on these ideas, you may wish to contact the developers and find out more about the particular suggestion you're looking at.

Being accepted as a Google Summer of Code student is quite competitive. Accepted students typically have thoroughly researched the technologies of their proposed project and have been in frequent contact with potential mentors. Simply copying and pasting an idea here will not work. On the other hand, creating a completely new idea without first consulting potential mentors is unlikely to work out.

If there is no specific contact given you can ask questions on the general Pharo development list See the Pharo community page for information on available mailing lists and how to subscribe.

Adding a Proposal

Please propose your own project by following the following template. You can edit the list on github here: and send a pull request.

     PharoTopic new
       title: 'The name of your project';
       contact: 'email address';
       supervisors: 'Supervisors names';
       keywords: 'keywords separated by spaces';
       context: 'a description of the context of the project';
       goal: 'description of the goal';
       level: 'Beginner or Intermediate or Advanced';


Do not hesitate to ask questions. Administrators of this year’s application are Jigyasa Grover, Oleksandr Zaytsev, Serge Stinckwich.

Pharo GSOC Topics

TitleImproving code completion
Supervisors S. Ducasse, E. Lorenzano and Juan Pablo Sandoval A.
ContextAutomatic completion is really important. The current code completion already defines some good behavior but it can do better.
GoalThe goal of the project is to improve the ecompletion infrastructure: The tasks are: (1) study the existing approaches (NOC and NEC), (2) Write some tests to characterize specific behavior, (3) Improve the noise introduced by the Symbol table usage, (4) build more heuristics.
CandidateTopic still free

TitleBetter and more refactorings for Pharo
Supervisors Christophe Demarey
KeywordsRefactoring IDE
ContextSmalltalk was the first environment to have such great refactorings that inspired a lot of languages and book authors. Unfortunately, refactoring support lowered in quality and some of them are now missing in Pharo.
GoalThe goal of this project is to provide Pharo developers a good refactoring support, comparable to modern IDEs like IDEA Intellij. See for a detailed list of tasks.
CandidateTopic still free

TitleCharting library and and
Supervisors Cyril Ferlicot-Delbecque and Julien Delplanque and Oleksandr Zaytsev
KeywordsData Visualization, Data Science, Plotting, Grammar of Graphics
ContextIn recent years community has been showing great interest in doing scientific computing or data analysis, as well as building machine learning applications in Pharo. Data is central in all those fields. Visualizing data in charts is very important for understanding it and presenting the results. Even though Roassal can be used for plotting data, it has a very generic API and makes even the most simple charts very complicated. Other tools like MatplotLibBridge or ChartJS are just connectors to external libraries which create static images and do not allow us to use some of the most valuable features of Pharo environment, such as live inspection and debugging.
GoalBuild an easy-to-use framework for visualizing data with charts, similar to matplotlib in Python or ggplot2 in R. This tool should have the flexible API based on the Grammar of Graphics. It can be built on top of Pharo's Geometry library and should be able to use different backends such as Morphic or Bloc interchangeably.
LevelIntermediate or Advanced
CandidateTopic still free

TitleIPFS for Pharo
Supervisors Marcus Denker
Keywordspeer to peer file systems
Context IPFS is a peer-to-peer distributed file system that seeks to connect all computing devices with the same system of files. In some ways, IPFS is similar to the Web, but IPFS could be seen as a single BitTorrent swarm, exchanging objects within one Git repository. In other words, IPFS provides a high throughput content-addressed block storage model, with content-addressed hyperlinks. This forms a generalized Merkle DAG, a data structure upon which one can build versioned file systems, blockchains, and even a Permanent Web. IPFS combines a distributed hashtable, an incentivized block exchange, and a self-certifying namespace. IPFS has no single point of failure, and nodes do not need to trust each other. IPFS right now is implemented as a server process in Go and allows the global file system to be mounted as a user space filesystem. In addition, the server provides an API. A real integration of IPFS with Pharo would require a complete implementation of IPFS in Pharo (projects are already in early stages to implement it in JavaScript and Python). But the client API allows us already now to do experiments and assess the usefulness of IPFS in the context of Pharo. More information:
GoalThe goal of this Project is to implement a IPFS client library using the API to communicate with the existing server and start to experiment how IPFS can be used with Pharo. For example, extend the launcher to load images via IPFS, distribute the files of smalltalkhub or provide access to resources via IPFS.
CandidateTopic still free

Supervisors Oleksandr Zaytsev and Serge Stinckwich
KeywordsData Science, Data Analysis, DataFrame, Tabular Data, Statistics
ContextDataFrame was introduced to Pharo during the GSoC 2017 ( The work on DataFrame continued and many new features were introduced by different contributors. However, it is still a work in progress and a huge portion of functionality that can be found in other data frame packages (e.g. R, pandas) is missing.
GoalThe goal of this project is to introduce new functionality to DataFrame (for example, handling missing values) and write examples of applying DataFrame to real problems of Data Science (one can reproduce examples from pandas and scikit-learn documentation, as well as some examples from R-bloggers)
LevelBeginner or Intermediate
CandidateTopic still free

TitlePharo Launcher command line interface
Supervisors Guillermo Polito, Christophe Demarey
Keywordsimage management, command line interface, virtualization
ContextThe pharo launcher is an application that allows the management of pharo images. In a "docker style", you can download images from templates, install them, list your installed images, and launch them. All this is done through a visual user interface in a desktop application.
GoalThe goal of this project is to implement a command line interface for the Pharo launcher, to be able to manipulate it on servers as we do with docker. For example: $ phlauncher list $ phlauncher templates $ phlauncher install X $ phlauncher run X
CandidateTopic still free

TitleMaterial Design Lite
Supervisors Cyril Ferlicot-Delbecque
Keywordsmaterial design lite, material-ui, seaside, web, components
ContextMateria Design Lite ( is a set of web components for the Seaside framework based on Google's Material Design guidelines.
GoalThe goal of this project is to create new components, use these components to create more complexe components and potentialy add tests to the existing components.
LevelBeginner to Intermediate
CandidateTopic still free

TitleNew Collections for Pharo
EmailJuan Pablo Sandoval Alcocer <>
Supervisors Juan Pablo Sandoval Alcocer
KeywordsCollection DataStructure Benchmarks
ContextPharo contains a large set of collections (See PharoByExample Collections chapter) with around 100 classes. But new collections exist such as BTree, QuadTree, SkipList, Trie, … Containers is an existing effort to gather many of the existing collection developed individually and externally to Pharo into a single umbrella. The idea is to create a modular collection library for Pharo users. Containers’s goals is to develop new efficient, well-tested, well documented collections. Containers contains already Tree, Grid, SkipList, LinkedList, OrderedDictionary but there is a need to revisit them. Finally Pharo 6.0 comes with two powerful primitives: new object immutability primitives as well as ephemerons [Hayes97]. With such important primitives two tasks can be performed: - design new weak collections taking advantage of ephemerons. - revisit and design new concurrent collections taking advantage of immutability. Links: - Camillo Bruni master contains a chapter on how to benchmark for collections - started to implement some new collections for Pharo. -
GoalTasks: - The student will study current Collections of Pharo (See PharoByExample Collections chapter) for an overview. - He will study the new collections in the project named Containers on Smalltalkhub.!/~StephaneDucasse/Containers - Migrate some existing projects to Containers (adding tests, comments). - Design and implement new collections such as -- BTree, QuadTrees, -- Immutable list, set, array Resources: - Camillo Bruni master contains a chapter on how to benchmark for collections - started to implement some new collections for Pharo. - - Barry Hayes, Proceedings OOPSLA '97, ACM SIGPLAN Notices, Ephemerons: A new finalization mechanism, 1997
CandidateTopic still free

TitleNext Generation Unit Testing
Supervisors Guillermo Polito
Keywordsunit testing, parallelization, configuration
ContextSUnit is the current unit testing framework in Pharo. Building complex applications require new testing capabilities, with an enhanced UI and a clear API that allows new extensions.
GoalThe goal of this project is to redesign the SUnit framework to be extensible. The extension points and hooks in the framework should allow users to create their own extensions. Moreover, the student will implement extensions for common testing scenarios such as concurrency and parameterized tests.
CandidateTopic still free

TitleEnhancing Pillar
Supervisors Stéphane Ducasse
KeywordsPillar OpenDocument LibreOffice OpenOffice document tree visitor
ContextPillar is a markup syntax that is easy to use and learn. This markup syntax generates a document tree. P illar can export to HTML, LaTeX (to produce PDFs) and Markdown. Pillar has already been used in several projects (!/~Pier/Pillar) and most of the pharo books and mooc
GoalThe goal of the project is to do help in the development of the new iteration of Pillar. Previous development effort introduced a better architecture but there are still some points to improve. - Documenting certain classes - Improving the archetype design - Separating command-line into object configurators and command-line - Producing a new version of ectastic that uses the lastest version of pillar. - One subgoal of this project is to add the standard OpenDocument export format (used by LibreOffice and OpenDocument).

TitleHacking Pharo in Your Web Browser and
Supervisors Luc Fabresse and Damien Pollet
KeywordsDocker, Virtual machine
ContextThere is a need to be able to execute Pharo code through a web page. It implies sending code to the server-side for execution. However this execution should not expose the file system and machine resources. The idea of this problem is to run Pharo in a container and expose it in a web application. Such an isolated infrastructure could be useful for experimenting with Pharo trhough a Web page.
GoalPossible tasks are: - Have a look at / / - Learn Docker - Make a first version - Build a little webfront end.
CandidateTopic still free

TitleAuthoring and exploring scientific models in Pharo
Supervisors Konrad Hinsen and Serge Stinckwich
Keywordsscientific models
ContextScientific research increasingly relies on computational models, but these models are usually not reified in a way that permits sharing and processing them with computational tools. Natural language summaries are incomplete and imprecise, whereas implementations in software are complex and not portable. The digital scientific notation Leibniz ( aims at reifying computational models as specifications rather than implementations.
GoalWorking with scientific models requires interactive tools, both for authoring new models and exploring existing ones. The Pharo live object environment is an excellent basis for developing a suitable interactive workbench. Many individual steps can contribute to such a development: implementing well-known examples from various scientific domains (e.g. Newton's equations for celestial mechanics or the Lotka-Volterra equations for population dynamics), extensions to Pharo development tools (inspector, debugger, browser, ...) for handling models formulated in Leibniz, etc.
CandidateTopic still free

TitleLiberated Pixel Cup native support in Pharo
Supervisors Stephane Ducasse
KeywordsCairo SDL 2D
ContextIt is now possible to build quite good 2D native applications in Pharo using Cairo and SDL, which led to experimental video games (article in Linux Mag of April 2018, On the other hand, projects such as The Liberated Pixel Cup supported by the Mozzila Foundation and other large groups develop huge graphic ressources available under open source licenses ( Note the student is strongly advised to use a Linux machine for this work.
GoalThe first goal is to create a library to easily import and display LPC characters generated from website like this one ( into the Pharo stack (SDL, Cairo & Pharo). Second goal is to build a minimal video game framework on top of it with a game. Lastly, the third goal is to improve packaging & deployment of such native applications in Pharo, as well as evaluating the integration with other frameworks (Bloc to display GUI for example). The third goal has to be clearly detailled in the student proposal - we will not accept topics not improving the Core Pharo system. In addition, the demo game created should be submitted to this year LPC event (competition from June 1st to July 31st) to show Pharo to other communities.
LevelBeginner to Intermediate
CandidateTopic still free

TitleIceberg UI: Providing a commit graph visualization
Supervisors Juan Pablo Sandoval Alcocer
Keywordscommit, visualization, iceberg
ContextIceberg provides tools for handling git repositories directly from a Pharo Image. Besides the facilities provided by Iceberg, there is a lot room for improvement.
GoalThe goal of this project is to provide a commit graph visualization for improving the commit navigation and comparison, such the ones offered by popular git clients (i.e. GitKraken).
LevelBeginner to Intermediate
CandidateTopic still free

TitleNLP Library
Supervisors Oleksandr Zaytsev
KeywordsNatural Language Processing, Statistics, Data Science
ContextOngoing research that is being done around analysing messages from Discord and letters from mailing lists, exploring commit messages, and performing static analysis of source code is based on simple but irreplaceable algorithms of natural language processing that tokenize text into words, perform stemming and lemmatization of words, count occurrences of words in text etc.
GoalWe need a natural language processing (NLP) library entirely written in Pharo with functionality similar to NLTK or Spacy: part of speech (PoS) tagging, named entity recognition (NER), lemmatization, stemming, word sense disambiguation, tf-idf, n-grams, various metrics etc.
LevelIntermediate or Advanced
CandidateTopic still free