Giter Site home page Giter Site logo

legal-resource-registry's People

Contributors

dependabot[bot] avatar fbennett avatar georgd avatar sam-gagnon avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

legal-resource-registry's Issues

Whether to translate all courts or only ones with multiple official languages

Hello! I'm very sorry for starting a new issue, but this didn't seem directly related to either of my other two open issues.

I'm wondering if there is an establish standard for which court names should be translated in the UI, or whether they should all be translated.

I ask because there are two ways to translate a court name. Either by:

  1. Setting a variant name in the courts object, or
  2. Only setting a variant name in the court object when called in multilingual jurisdiction.

For exemple, Alberta and New Brunswick both have a "Court of Appeal". However, Alberta is unilingual English, whereas New Brunswick is officially bilingual french/english.

If I want "Court of Appeal" to always display as "Cour d'appel", then I can set the name in the court object:

  courts": {
    "court.appeal": {
      "name": "Court of Appeal",
      "variants": {
        "fr": {
          "name": "Cour d'appel"
        }
      }
    },
  "jurisdictions": {
    "ca:ab": {
      "name": "Alberta",
      "courts": {
        "court.appeal": {},
      }
    },
    "ca:nb": {
      "name": "New-Brunswick",
      "courts": {
        "court.appeal": {}
      }
    },

However, if I would rather that "Cour d'appel" ONLY shows up in the jurisdictions that are bilingual, I would not put a variant name in the court object, but rather, in each court call in a bilingual jurisdiction.

  "courts": {
    "court.appeal": {
      "name": "Court of Appeal",
      }
    },
  "jurisdictions": {
    "ca:ab": {
      "name": "Alberta",
      "courts": {
        "court.appeal": {},
      }
    },
    "ca:nb": {
      "name": "New-Brunswick",
      "courts": {
        "court.appeal": {
          "variants": {
            "fr": {
              "name": "Cour d'appel"
            }
          }
        }
    }

Personally, I am torn. The "must conform exactly to the official standard" part of me wants to only translate the court name in the bilingual jurisdictions, but the "user friendless is most important" part thinks that having every court translated makes the interface much more user friendly, at no cost.

What do you guys think?

BE: francais abbreviations aren’t French

Dutch and French are official languages in Belgium with regions either officially French or Dutch except for Brussels that’s bilingual (plus a region where German has a certain status). abbrev:francais looks like it should be used for French abbreviations but it doesn‘t, the file lists Dutch abbreviations under those keys.

jurisupdate fails

Something’s going wrong with my current version of juris-de-desc.json (see PR).

I can‘t find anything invalid – neither non-ASCII-chars in keys, nor illegal whitespace.

$ jurisupdate -j de
Using /Users/gduffner/Documents/dev/legal-resource-registry/src as path for descriptive jurisdiction files
Will read descriptive jurisdiction files from: /Users/gduffner/Documents/dev/legal-resource-registry/src
Will write abbreviation files to: /Users/gduffner/Zotero/juris-abbrevs
Will write compact jurisdiction files to: /Users/gduffner/Zotero/juris-maps
de
Writing /Users/gduffner/Zotero/juris-abbrevs/auto-de.json
Writing /Users/gduffner/Zotero/juris-abbrevs/auto-de-deAlt.json
Writing /Users/gduffner/Zotero/juris-abbrevs/auto-de-enIBFD.json
ERROR: Unexpected token b in JSON at position 0

ES needs revision

Linguistically the file is inconsistent. A (small) number of languages have official status in Spain on a regional level and the preferred official naming of a body might be in the regional language. The abbrevs are, without marking them, partly in the regional language, partly in Spanish when the preferred official naming is in the regional language.

Examples:

  • Eivissa (Catalan, preferred official naming, in Spanish Ibiza)
  • San Feliú de Llobgregat (Spanish, instead of officially preferred Catalan Sant Feliu de Llobregat).

Refactoring of juris-XX-desc.json files

@Droitslinguistiques @georgd

Following a productive meeting with @Droitslinguistiques on Monday(CA)/Tuesday(JP), I've been mulling over the requirements. This note recaps the current state of abbreviation and jurisdiction source files, and proposes some changes for discussion.

Basic Current Design

The basic shape of jurisdiction specs looks roughly like so:

  1. Jurisdiction/court mappings are described in a juris-XX-desc.json file that provides (a) a mapping of court IDs to their names and abbreviations, and (b) of jurisdiction IDs to their names, abbreviations, and associated courts.
  2. A script uses the description files as source for generating (a) auto-XX.json abbreviation files used for rendering items of each jurisdiction, and (b) machine-readable JSON used to build database entries to support menus in the UI.
  3. For 2(a) above, abbreviations for courts in each (sub-)jurisdiction are set as that of the court, which may optionally (with prefix < or suffix >) add the jurisdiction abbreviation.

Current Hacks

(This is not meant for close reading! The description is accurate, but provided here only to illustrate that we have a wooly mess on our hands that needs to be cleaned up)

That was the simple initial design, but it hit some limitations in the early going, and the syntax of the juris-XX-desc.json files was extended in various ways. Some of the changes are documented, some are not, but all were added ad hoc to support specific quirks in requirements. The list of horribles is:

  1. The court element can be omitted by prefixing the court ID at the jurisdiction level with a minus sign (-);
  2. The jurisdiction element can be omitted by prefixing the court ID at the jurisdiction level with a plus sign (+);
  3. To accommodate court short-codes for vendor-neutral citations as well as abbreviated court names keyed as abbrev, an ABBREV segment is recognized.
  4. An explicit court short-code for a specific jurisdiction can be declared by appending :: followed by the short-code to the court ID at the jurisdiction level.
  5. In an abbreviation or short-code, to suppress rendering of a (possibly abbreviated) variable later in the cite, the triggering abbreviation can be set in a special syntax (e.g. on container-title, an abbreviation might be set as "U.S.": "!authority>>>U.S.", where the "U.S." reporter covers U.S. Supreme Court judgments exclusively).
  6. In an abbreviation or short-code, to suppress some elements of an abbreviation later in the cite, the string to be clipped out can be indicated with a further extension to this syntax (e.g. court.appeal:!authority:Ohio Ct. App.>>>Ohio, where the full expression of the court+jurisdiction would be "Ohio Ct. App. 1st Dist.")
  7. The suppression syntax in 5 & 6 above can be applied either (a) in the jurisdiction-specific short-code declaration within the juris-XX-desc.json file (in which case it passes through as an institution-entire abbreviation), or (b) in the auto-XX.json file generated from it (when a different variable family, typically container-title, is the trigger).
  8. To accommodate 7(b) above in the auto-generated abbreviation files, container-title segments to the original file (before overwriting) are preserved.
  9. Language variants of abbreviations can be setting additional abbrev keys with a colon-delimited language code (e.g. abbrev:fr).

Limitations of the Status Quo

Readability: While the original design was meant to express the entire structure of a jurisdiction and its abbreviation logic in a single file, some of the abbreviation details (for container-title abbrevs) is currently expressed in the target auto-XX.json abbreviation files, which serve both as source and output target for the compilation script. This is bad design, and the "external" abbreviation details should be moved into the juris-XX-desc.json file.

UI language: While the current format of the juris-XX-desc-json files can distinguish between the court and jurisdiction names shown in the UI (keyed as name) and their abbreviations for rendering (keyed as abbrev or ABBREV), there is no provision for language arbitration in the UI. This is a problem for jurisdictions that have multiple official languages, where the user may wish the court names to be expressed in their own.

Short-code language: The current format allows only one form of ABBREV, with no provision for variants based on the preferred language domain of the style.

(I think that covers all the limitations that we've uncovered, correct me in comments if I've missed something.)

Redesign

Aims for a redesign of the file format:

  • Express all abbreviation-related details in the juris-XX-desc.json file.
  • Allow language variants of all values, including short-codes and UI strings.
  • Keep things as compact as possible.

Here is a tentative plan, followed by a few examples:

  • In the top-level courts objects, set an optional variants object with language codes as keys to objects carrying values for one or more of the keysname, abbrev, and ABBREV.
  • In the values assigned for abbrev and ABBREV, replace the < prefix and > suffix with %s in the same location, and equally recognize %s as a mid-string placeholder.
  • Replace the courts array of keyed objects under the top-level jurisdictions key with a courts object carrying court IDs as keys, with EITHER a boolean value of true, OR the same structure as the top-level courts objects, but with all keys optional, falling back to the default values. In addition to name, abbrev, ABBREV and variants, the top-level object for a court ID may have an abbrev-select key, with a string value of jurisdiction or court to signify that the jurisdiction or court abbreviation alone should be used when generating the institution-parts abbreviation from abbrev.
  • Recognize container-title as an optional key on child objects to jurisdictions.

Examples

Alternative language for UI jurisdiction and court name

"courts": {
    "supreme.court": {
        "name": "Supreme Court",
        "ABBREV": "SC",
        "variants": {
            "fr": {
                "name": "Cour suprême"
                "ABBREV": "CS"
            }
        }
    }
},
"jurisdictions": {
    "ca": {
        "name": "Canada",
        "courts": {
            "supreme.court": true
            }
        }
    }
}

Suppress court name implicit in reporter

"courts": {
    "supreme.court": "%s Sup. Ct."
},
"jurisdictions": {
    "us": {
        "name": "U.S.",
        "courts": {
            "supreme.court": {
                "abbrev-select": "court"
            }
        },
        "container-title": {
           "L. Ed. 2d": "!authority>>>L. Ed. 2d"
        }
    }
}

Here, the name of the court will render as "Sup. Ct." unless the citation is to "L. Ed. 2d", in which case the court name (in the trailing parenthetical of a US-style cite) will be completely omitted.

Suppress jurisdiction string element if matching court short-code is used

"courts": {
    "court.appeals": {
        "name": "Court of Appeals",
        "abbrev": "%s Ct. App."
    }
},
"jurisdictions": {
    "us:oh:d1": {
        "name": "1st District",
        "abbrev": "Ohio Ct. App. 1st Dist."
        "courts": {
            "court.appeals": {
                "ABBREV": "!authority:Ohio Ct. App.>>>Ohio"
            }
        }
    }
}

Alternative language for court abbreviation

"courts": {
    "chiho.saibansho": {
        "name": "地方裁判所",
        "abbrev": "%s地方裁判所",
        "variants": {
            "en": {
                "abbrev": "%s District Court"
            }
        }
      }
},
"jurisdictions": {
    {
        "path": "jp:nagoya:gifu",
        "name": "岐阜",
        "abbrev": "岐阜",
        "courts": {
            "chiho.saibansho": {
                "variants": {
                    "en": {
                        "abbrev": "Gifu"
                    }
                }
            }
        }
    }
}

Suboptimal changes to eu.int

Searching for the reason of Juris-M/jurism-abbreviations#1 I stumbled upon commit 949e301 which does several things that are not optimal or even wrong:

  • In the courts section of the cjeu jurisdiction, ecj is marked to ignore court which can’t be correct, in my opinion — and which is the reason, the German abbreviation got lost in auto-eu.int-de.json.
  • The naming of the jurisdiction eu.int/cjeu and the court ecj got confused: the jurisdiction eu.int/cjeu is, in English, the "Court of Justice of the European Union", the court is the "European Court of Justice". In French, the jurisdiction is "Cour de Justice de l’Union Européenne" and the court is "Cour de Justice".
  • Switching from French names to English might be questionable. English has no precedence over French or any other of the 24 official languages in the Union (since this year it doesn’t even belong to the major native languages). On the other hand, French is the sole working language of the CJEU.

Court of King's Bench replacing Court of Queen's Bench

Hello Frank, I've noticed that you've been doing some work on Juris-M in the last little bit, so I thought I'd drop this here for when you have a moment to look at it.

Many Commonwealth jurisdictions have courts named after the monarch. When QE2 died, they got renamed to Court of King's Bench.

This poses a problem for Juris-M. Going forward, new cases with need the vendor neutral cite of "KB", but existing cases will still be refered to as "QB".

Now, I could create a new Court in each relevant subjurisdiction. However, I'm wondering how we should differenciate, on the UI, between the "Old" Court of Queen's Bench, and the "New" Court of King's Bench. I'm proposing to simply add King's Bench and then add a prefix to the UI name of Queen's Bench to make it "--Depreciated-- Court of Queen's Bench" and move it to the bottom of the Court list for each subjuridiction.

What do you think? Do you see a way to keep a single court, with different vendor neutral cites bases on the date decided (which I'm assuming would be VERY complicated to set up on your end) or would it be better to simply have two different court identifiers, and make sure that the prefix identifies which is the current and which is the old one.

Btw: My CanLii Juris-M translator is currently broken for these courts and also needs to work around this, as ALL cases of this court, past and present, are now under the heading of King's Bench, but that's a seperate problem for me to fix later.

UI language not displaying

Hello! I've been testing a new set of abbreviations for Canada. I set a "fr" variant for every jurisdiction and court in the "auto-ca" file.

However, when using Juris-M, even with the app set to french, the english names are still displayed in the UI.

Have I missed something in setting up the french names?

Treaty Output

I am trying to output footnote for Treaties and other UN instruments using AGLC4 which Jurism is not outputting correctly... AGLC4 suggests Treaty should be cited as: Treaty Title, opened for signature Date, Treaty Series (entered into force Date). Please help!

Special reporter citations in AT, CH and DE

Citing from official reporters of supreme federal courts

Decisions of the supreme federal courts of these three countries are cited in a special way if only cited from the official reporter and I’m not sure how to prepare this in CSL-M and the LRR.

Case citation here usually includes (at least):

  • court abbreviation
  • docket no.
  • reporter (abbreviated)
  • reporter no./vol./year

Ex. of a normal citation: AT case (with parallel citation to official reporter):

VfGH B 990/09, RdM 2010/61, 59 (Potacs) = VfSlg 18.966/2009.

Components:

  • Court abbrev (VfGH)
  • docket no. (B 990/09)
  • reporter (RdM)
  • reporter year + vol. (2010/61)
  • reporter page (59)
  • commenter (Potacs)
  • official reporter (VfSlg)
  • official reporter no. + year. (18.966/2009)

Citing a case only from the official reporter looks like this:
VfSlg 18.950/2009.

Components:

  • official reporter (VfSlg)
  • reporter no. + year (18.950/2009)

I’m absolutely not sure, how tho handle this.

In the juris-at-desc.json, would I extend the "jurisdictions": "at" object by the following for the two official reporters that would be treated in this way?

"container-title": {
        "VfSlg": "!authority>>>VfSlg",
        "VwSlg": "!authority>>>VwSlg"
      }

And how would I do it in the csl-file to discern between non-official and official reporters and between official reporters when cited alone and official reporters in a parallel citation?

Non-official reporters needing special treatment

Traditionally, when citing a published case, the decision date is omitted, and in Germany usually also the docket no. isn’t used. Now, some reporters (one of them a very prominent one) are organised in a way that makes it necessary to add the decision date for ensuring findability.

A solution might be to simply leave away date (and docket no.) from entries in Juris-M but then, the more user-friendly citation styles require always to add the decision date. Also, for the purpose of organising the Juris-M database, decision date and dockt no. are very helpful.

Do you have an idea how to handle this?

FR: missing courts and wrong abbrevs

  • juris-fr-desc.json is incomplete: the courts of first instance (the recently abolished tribunal d’instance and tribunal de grande instance, the new tribunal judiciaire), the cour d’assises, and some more are missing.
  • The abbreviations are not in line with the guide SNE Ref-Lex (http://reflex.sne.fr/jurisprudence-francaise), e.g. C.A. instead of CA, or entirely missing (Conseil d’Etat, Conseil constitutionnel).

If someone can confirm that the currently available abbreviations are not used in France, I can correct them. The missing courts needs input from someone with deeper knowledge of the French system.

Rendering full Jurisdiction name

Hello!

So the problem that I'm having is that in some contexts, I need to render the full jurisdiction name (Canada), but in other contexts, I need to render only the abbreviated version (Can).

As an example, a report from a Royal Commission should render as such :

Canada, Commission of Inquiry into the Sponsorship Program and Advertising Activities, <i> Who is Responsible? Fact Finding Report</i> (Ottawa: Public Works and Government Services Canada, 2005) at 33.

However, if I'm citing a court case from a reporter where the name of the reporter does not clearly indicate the court or jurisdiction, that information has to be included, abbreviated, in paratheses at the end (in this example, CA indicates Court of Appeal, but Qc needs to be added at the end to specify Québec):

<i>Air Canada c Joyal<i/>, [1982] CA 39 (Qc)

Right now, the LRR entry for each jurisdiction can include an "abbrev" value. In the case of the main jurisdiction, it be can be rendered using, for example <text value="country form="short"/>. To my knowledge, there is no way to do this for sub jurisdiction's abbrev value, but I may be wrong. (Edit: I was wrong. There is an issue but it is a completely different problem.) Finally, there is also a "name" value, which, again to my knowledge, is solely used in the user interface, and cannot be rendered by a citation style or module.

So my questions are :

1) Is there a way to render the "abbrev" values of sub jurisdictions?
2) Is there a way to render the "name" value assigned in the LRR?
3) If not, is there a way to add this functionality to CSL-M, and how could I help?

@georgd and I had talked about this a while back, so I'm pinging you here in case you have anything to add.

Override the jurisdiction part

Some German (spreme) state courts, but not all, use the court's seat instead of the state name as jurisdiction part. How would I override only that?

e.g. in

    "de:baden.wurttemberg": {
      "name": "Baden-Württemberg",
      "courts": {
        "fg": {},
        "lag": {},
        "lsg": {},
        "verfgh": {},
        "vgh": {}
      }
    },

the supreme adminsitrative court vgh should be VGH Mannheim instead of VGH Baden-Württemberg. I thought I had found that already but I obviously got lost...

Cannot define jurisdiction specific court names

In the Readme, it is listed that it should be possible to override the court names with a jurisdiction specific court name defined in that jurisdiction :

"zz:west": { "name": "West", "abbrev": "W.", "courts": { "court.appeal": { "name": "Court of Error", "abbrev": "%s Ct. Err" } } } }

I need to implement this for Canada, in order to get the CanLII translator I've been working on fonctionnal. This is my code for the Court of Appeal for Ontario :

"ca:on": { "name": "Ontario", "abbrev": "Ont", "ABBREV": "ON", "courts": { "court.appeal": { "name": "Court of Appeal for Ontario", "variants": { "fr": { "name": "Court d'appel de l'Ontario", "abbrev": "CA %s" } } }

However, I'm not seeing the jurisdiction specific court names show up in either the UI, the maps file, or the abbreviation files.

Is there something I'm doing wrong?

Can’t update eu.int

jurisupdate -t descriptive-to-compact -j eu.int returns an error:

ERROR: invalid court ID "ecj~chamber.1" in jurisdiction eu.int:cjeu

Is it the tilde or the period?

ECJ chambers on wrong hierarchical level

The chambers of the ECJ are listed as courts in the jurisdiction cjeu, which is wrong. They’re divisions of the court ECJ. Generally, I don’t think they fit in here at all as the different traditions compose them with different punctuation or parenthesis settings:

Currently, the abbrevs-file produces in English:

Court of Justice First Chamber

French citation rules require:

CJUE, 4ᵉ ch.

Austrian citation rules regularly only put the Grand Chamber (which currently is missing):

EuGH (GK)

Unable to set jurisdiction specific court name

Let's say that the "court" object has a name of "Supreme Court", but if that object is called for a specific jurisdiction, I want the UI to display "Supreme Court of Alberta.

I have tried to have the general court name be "Supreme Court", and then under the jurisdiction, do the following:

"ca:ab" : { courts: { "supreme.court": { "name": "Supreme Court of Alberta" } } }

However, that does not seem to add a modified name to that court when called for that jurisdiction. Instead, the "name" specificied under the jurisdiction overwrites the "abbrev" of the court object, so that the "abbrev" will now be "Supreme Court of Alberta", but will still display as "Supreme Court" in the UI.

This is honestly not a big deal, but I thought I'd bring it up, in case it is an unintended bug and not a deliberate choice.

Languages in multilingual jurisdictions

The current setup of jurism-abbreviations allows quite flexibly handling multiple languages. However, it’s possibly a bit too flexible.

The settings

Different situations are met in the wild:

  • multilingual jurisdiction with monolingual subjurisdictions: Belgium, Switzerland
  • multilingual jurisdiction with multilingual subjurisdictions: Canada, Belgium, Switzerland
  • monolingual jurisdiction with multilingual subjurisdictions (possibly with a preferred regional language): Spain, Italy

Citation requirements

  • Usually the authority is cited by its official abbreviation in (one of) the official language(s).
  • In case of multilingual jurisdiction the citing author might prefer a certain language, e.g. an author from France might prefer citing the Canadian Supreme Court by its French terms.
  • In some cases, unofficial language/script versions might be required.

The issues

  • Currently, there’s no policy how to designate a language version. In the case of juris-be-desc.json, the unmarked (primary) language is Dutch and the co-official French version is marked as francais. A French citation style now would have to include francais in jurisdiction-preferences. At the same time, juris-ca-desc.json marks French as fr which is inconsistent with Belgium and will require a second entry in jurisdiction-preferences.
  • Having an unmarked variant leads to language versions that might not be detected. E.g. if an Austrian author prefers French over Dutch in Belgian, he will use an appropriate option in jurisdiction-preferences. However, he may prefer English over French in Canadian citations and German over French in Swiss (here, German currently is the primary/unmarked language for national courts) citations. The citation style could inlude this list in the jurisdiction-preferences: de en fr, however this would lead to always reading only the French versions in all three cases, as the English and the German versions are not marked accordingly.
  • Inofficial variants should not interfere. They should only be called if explicitly needed, like e.g. a style requiring Japanese court names to be translitterated according to English translitteration rules. They should not, however be called merely because en is listed among the preferred languages in the style.

A possible solution

  • Add a property in the file to declare the content’s primary language.
  • Generate a localised file for the primary language as well.
  • Prescribe ISO two-letter languate codes for official languages.
  • Prohibit ISO two-letter codes for inofficial variants.

Should the registry distinguish between current and 'historicial' jurisdictions/courts?

In my lifetime, I experienced one (civil) or two (military) revisions of the court system. The situation only gets more complicated in Switzerland, as the cantons (states) were totally free in their court organization.

In legal research - be it historical or current - one has to reference both currently existing and no longer existing courts. In a GUI however, users could be stupefied having 'historical' courts being presented among known and current ones.

Would it be advisable to mark courts/jurisdictions as 'historical' and e.g. list them beneath current ones?

Default language is not reachable

Since the great new developments, it’s no longer possible to use the default language in citations if a second language is defined. Using the appended record as input together with jm-indigobook-law-review and the document language in Word set to en-US, I receive the following output:

Crown Forest Industries Ltd. v. Canada, Tax Treaty Case Law IBFD (CSC Jun. 22, 1995).

The court abbreviation should read SCC instead of CSC.

[
  {
    "type": "legal_case",
    "title": "Crown Forest Industries Ltd. v. Canada",
    "authority": "Supreme Court",
    "issued": {
      "date-parts": [
        [
          1995,
          6,
          22
        ]
      ]
    },
    "shortTitle": "Crown Forest",
    "note": "",
    "multi": {
      "main": {},
      "_keys": {}
    },
    "archive": "Tax Treaty Case Law IBFD",
    "jurisdiction": "ca"
  }
]

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.