\myheading{My JSON file format} My toy package manager uses config in JSON format. This is example of \verb|test100/vers.json| (available versions for each package). (I package numbers in [0..) limit and version numbers in [2000...2020] limit.) \begin{lstlisting} ... "8" : [2005, 2006, 2008, 2010, 2011, 2014, 2019], "9" : [2000, 2002, 2003, 2004, 2007, 2011, 2015, 2017], ... \end{lstlisting} This is \verb|test100/deps.json| file (dependencies): \begin{lstlisting} ... "8": { "2005" : [[1, 0, 2005], [3, 0, 9999], [7, 0, 2005]], "2006" : [[1, 0, 9999], [3, 2005, 9999], [7, 0, 2006]], "2008" : [[1, 0, 2008], [3, 0, 2008], [7, 0, 9999]], "2010" : [[1, 0, 9999], [3, 0, 9999], [7, 2010, 9999]], "2011" : [[1, 0, 9999], [3, 0, 2011], [7, 0, 9999]], "2014" : [[1, 2008, 9999], [3, 2012, 9999], [7, 2010, 9999]], "2019" : [[1, 2019, 9999], [3, 0, 9999], [7, 0, 2019]] }, "9": { "2000" : [[5, 2000, 9999], [6, 2000, 9999], [7, 0, 9999], [8, 2000, 9999]], "2002" : [[5, 0, 9999], [6, 2002, 9999], [7, 0, 9999], [8, 2001, 9999]], "2003" : [[5, 2001, 9999], [6, 0, 2003], [8, 2003, 9999]], "2004" : [[5, 0, 2004], [6, 2004, 9999], [8, 0, 9999]], "2007" : [[5, 2007, 2007], [6, 0, 2007], [8, 0, 9999]], "2011" : [[4, 0, 9999], [5, 2002, 9999], [6, 0, 9999], [8, 0, 2011]], "2015" : [[4, 0, 9999], [5, 2007, 9999], [6, 0, 9999], [8, 0, 2015]], "2017" : [[4, 0, 9999], [5, 2010, 9999], [6, 0, 9999], [8, 0, 9999]] }, ... \end{lstlisting} It defines a list of dependencies for each package/version. Each dependency is a list of triplets. Each triple is: package number, minimal version allowed, maximal version allowed. 0 and 9999 are allowed for min/max versions. And this a \verb|test100/conflicts.json| file, that lists of conflicting packages: \begin{lstlisting} [ [[40, 2013, 2017], [68, 2015, 2020]], [[76, 2000, 2010], [32, 2000, 2012]], [[40, 2013, 2017], [71, 2002, 2002]], [[72, 2004, 2007], [15, 2001, 2016]], [[36, 2001, 2007], [21, 2000, 2010]], [[98, 2007, 2010], [14, 2004, 2012]], ... \end{lstlisting} This means, package number 80 in versions [2011..2012] cannot be installed with package 45 in versions [2005..2017]. However, other versions may be allowed. Why JSON? To make hand editing possible. In my previous implementation of my toy package manager in Racket, I used S-expressions, but they are less familiar to a general audience. Another option is XML, but it's too verbose...