App Launched

BibTex Cool v1.0 has been live on the MacOS app store for a week now and is making a promising number of sales.

Tech Stack

This application was developed with Electron and React. The core BibTex parser can be found here: https://github.com/ORCID/bibtexParseJs. I couldn't use some other parsers because they would strip inner delimiters from entries, and these would be lost on the first save back to the file. I'm not sure how this parser handles files with quotation marks as outer delimiters (I'm yet to test this) but I don't believe BibDesk supports that style. Regardless, BibTex Cool only writes files with brackets as outer delimiters.

Future Versions

Features that will be included in the next update (v1.1) are: 

  1. Support drag+drop of bib files into a project (completed).
  2. A web browser tab that can import citation data from HTML meta tags (under development). The main difficulty with this is comprehensively mapping HTML meta tag names to BibTex properties, for example, `citation_title` → `title`, and parsing multiple `citation_author` tags into a single `author` string. I'm also not sure how to handle multiple citations on a single webpage; I'm yet to look into that.

Once v1.1 is released I'll probably look at enabling direct textual editing of raw BibTex entries and the the ability to add custom fields to a citation.

Cross-Platform

I'll release a Windows version at some point. Since the app is developed with Electron it essentially can already run on Windows, I just need to account for the change of file delimiters and keyboard modifiers in that environment.

Sales for the Windows version will be made through Gumroad. The reason I use Gumroad is that it has a license key API that's easy for me to use. It also emails customers for me when I release new versions, though I think I'll implement auto-updates in the Windows version of this app.

Other Challenges

Previous apps I've developed in Electron have only required a single window. Since this is a file editor, this application supports opening multiple windows at once. Managing multiple windows requires inter-process communication (IPC) between the renderer and main processes, which is quite simple in Electron.

One problem I have is that of managing global preferences across multiple windows. Currently there are no global preferences in the app, but if I add some I'll likely develop a new window specifically for them and use IPC to broadcast updates other windows. I'm also considering project-specific preferences; perhaps I can encode/persist these as comments in bib files. I'd allow the user to change the default author list delimiter (by default `and`), and maybe the colour scheme of the app.