Show full content
We have finally reached the final week of GSoC. It has been an amazing journey! Let’s summarize what was done, the current state of the project and what’s next.
IntroductionThis summer, I had the opportunity to work as a student developer under the Google Summer of Code 2024 program with the GNOME Community. I focused on creating a web-based Integrated Development Environment (IDE) specifically designed for writing and executing SPARQL queries within TinySPARQL (formerly Tracker).
This user-friendly interface empowers developers by allowing them to compose and edit multiline SPARQL queries directly in a code editor, eliminating the need for the traditional terminal approach. Once a query is written, it can be easily executed via the HTTP SPARQL endpoint, and the results will be displayed in a visually appealing format, enhancing readability and user experience.
By lowering the barrier to entry for newcomers, boosting developer productivity with visual editing, and fostering collaboration through easier query sharing, this web IDE aims to significantly improve the experience for those using libtracker-sparql to interact with RDF databases.
I would like to express my sincere gratitude to my mentors, Carlos and Sam, for their guidance and support throughout the internship period. Their expertise was invaluable in helping me navigate the project and gain a deeper understanding of the subject matter. I would also like to thank my co-mentee Rachel, for her excellent collaboration and contributions to making this project a reality and fostering a fast-paced development environment.
I’m excited to announce that as the internship concludes, we have a functional web IDE that enables users to run SPARQL queries and view the results directly in their web browser. Here is the working demo of the web IDE that was developed from scratch in this GSoC Project.

This project was divided into two primary components: the backend C code, which enabled the web IDE to be served and run from the command line, and the frontend JavaScript code, which enhanced the web IDE’s visual appeal and added all user-facing functionalities. I primarily focused on the backend C side of the project, while Rachel worked on the frontend. Therefore, this blog post will delve into the backend aspects of the project. To learn more about the frontend development, please check out Rachel’s blog.
The work done by me, could be divided into three major phases:
- Pre-Development Phase
- During the pre-development phase, I focused on familiarizing myself with the existing codebase and preparing it for easier development. This involved removing support for older versions of libraries, such as Libsoup.
- TinySPARQL previously supported both Libsoup 2 and Libsoup 3 libraries, but these versions had different function names and macros.
- This compatibility requirement could significantly impact development time. To streamline the process, we decided to drop support for Libsoup 2.
- The following merge requests document the work done in this phase:
- Setting Up the Basic Web IDE
- In this phase, I extended the HTTP endpoint exposed by the
tinysparql endpointcommand to also serve the web IDE. The goal was to enable the endpoint to serve HTML, CSS, and JavaScript files, in addition to RDF data. This was a crucial step, as frontend development could only begin once the basic web IDE was ready. - During this phase, the HTTP module became more complex. To aid in debugging and diagnosing errors, we added a debugging functionality. By running
TRACKER_DEBUG=http, one can now view logs of all GET and POST methods, providing valuable insights into the HTTP module’s behavior. - The following merge requests document the work done in this phase:
- In this phase, I extended the HTTP endpoint exposed by the
- Separating the Web IDE
- The web IDE added significant size (around 800KB-1MB) to the
libtracker-sparqllibrary. Since not all users might need the web IDE functionality, we decided to separate it fromlibtracker-sparql. This separation improves efficiency for users who won’t be using the web IDE. - To achieve this isolation, we implemented a dedicated subcommand
tinysparql webidefor the web IDE, allowing it to run independently from the SPARQL endpoint. - Here’s a breakdown of the process:
- Isolating HTTP Code: I started by extracting the HTTP code from
libtracker-sparqlinto a new static library namedlibtracker-http. This library contains the abstractionTrackerHttpServerover the Libsoup server, which can be reused in thetinysparql webidesubcommand. - Creating a Subcommand: Following the isolation of the web IDE into its own library and the removal of relevant
gresourcesfromlibtracker-sparql, we were finally able to create a dedicated subcommand for the web IDE. As a result, the size oflibtinysparql.so.0.800.0has been reduced by approximately 700KB.”
- Isolating HTTP Code: I started by extracting the HTTP code from
- The following merge requests document the work done in this phase:
- The web IDE added significant size (around 800KB-1MB) to the
This is the web IDE we developed during the internship. Check out this demo video to see some of the latest changes in action.



Despite having a functional web IDE and completing many of the tasks outlined in the proposal (even exceeding the original scope due to the collaborative efforts of two developers), there are still areas for improvement.
I plan to continue working on the web IDE in the future, focusing on the following enhancements:
- Multi-Endpoint Support: Implement a mechanism for querying different SPARQL endpoints. This could involve adding a text box input to the frontend for dynamically entering endpoint URLs or providing a connection string option when creating the web IDE instance from the command line.
- Unified HTTP Handling: Implement a consistent HTTP handler for all cases, allowing
TrackerEndpointHttpto handle requests both inside and outside the/sparqlpath. - SPARQL Extraction: Extract the SPARQL query from POST requests in
TrackerEndpointHttpor pass the raw POST data in the::requestsignal, enablingTrackerEndpointHttpto determine if it contains a SPARQL query. - Avahi Configuration: Move the Avahi code for announcing server availability or assign
TrackerEndpointHttpresponsibility for managing the content and type of broadcasted data. - CORS Configuration: Make CORS settings configurable at the API level, allowing for more granular control and avoiding the default enforcement of the
*wildcard.
One of the highlights of my GSoC journey was the opportunity to present my project at GUADEC, the annual GNOME conference. It was an incredible experience to share my work with a diverse audience of developers and enthusiasts. Be sure to check out our presentation on the TinySPARQL Web IDE, delivered by Rachel and me at GUADEC.
Final RemarksThank you for taking the time to read this. Your support means a great deal to me. This internship was a valuable learning experience, as it was my first exposure to professional-level C code and working with numerous libraries solely based on official documentation. I am now more confident in my skills than ever. I gained a deeper understanding of the benefits of collaboration and how it can significantly accelerate development while maintaining high code quality.