[
  {
    "path": ".github/workflows/jekyll.yml",
    "content": "# Sample workflow for building jekyll website\nname: Build With Jekyll\n\non:\n  # Runs on pushes targeting the default branch\n  push:\n    branches: [\"main\"]\n\n  # Allows you to run this workflow manually from the Actions tab\n  workflow_dispatch:\n\n# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages\npermissions:\n  contents: write\n\n# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued.\n# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete.\nconcurrency:\n  group: \"pages\"\n  cancel-in-progress: false\n\njobs:\n  # Build job\n  build:\n    runs-on: ubuntu-latest\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v4\n      - name: Setup\n        uses: ruby/setup-ruby@v1\n        with:\n          ruby-version: '3.3.5'\n          bundler-cache: true\n          cache-version: 0\n      - name: Build\n        run: bundle exec jekyll build\n        env:\n          JEKYLL_ENV: production\n      - name: Upload\n        uses: actions/upload-artifact@v4\n        with:\n          name: site\n          path: _site\n          overwrite: true\n\n  # Push job\n  push:\n    runs-on: ubuntu-latest\n    needs: build\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v4\n        with:\n          ref: gh-pages\n      - name: Delete\n        run : rm -rf /tmp/site\n      - name: Download\n        uses: actions/download-artifact@v4\n        with:\n          name: site\n          path: /tmp/site\n      - name: Sync\n        run: rsync -avh --delete --exclude .git /tmp/site/ .\n      - name: Push\n        run: |\n          git status\n          git add .\n          git config --global user.name 'Deploy Bot'\n          git config --global user.email 'deploy-bot@jsonlines.org'\n          git commit --allow-empty -m 'Automated Deployment'\n          git push          \n"
  },
  {
    "path": ".gitignore",
    "content": "# Bundle generated folders\n.bundle\nvendor/bundle\n\n# Jekyll generated folders\n_site\n.sass-cache/\n.jekyll-cache/\n.jekyll-metadata\n"
  },
  {
    "path": "CNAME",
    "content": "jsonlines.org"
  },
  {
    "path": "Gemfile",
    "content": "source \"https://rubygems.org\"\n\ngem \"jekyll\", \"~> 4.3.3\"\n"
  },
  {
    "path": "README.md",
    "content": "# jsonlines\nDocumentation for the JSON Lines text file format\n\nVisit https://jsonlines.org\n\n## Development\n\n### Jekyll installation\n\nFollow steps:\n- https://jekyllrb.com/docs/installation/\n- https://jekyllrb.com/docs\n\n### Bundle installation\n\n```shell\nbundle config set --local path 'vendor/bundle'\nbundle install\n```\n\n### Build and serve the site\n\n```shell\n# just build the website\nbundle exec jekyll build\n\n# build and serve the website on default port\nbundle exec jekyll serve\n```"
  },
  {
    "path": "_config.yml",
    "content": "# Site settings\n# These are used to personalize your new site. If you look in the HTML files,\n# you will see them accessed via {{ site.title }}, {{ site.description }}, and so on.\n#\n# You can create any custom variable you would like, and they will be accessible\n# in the templates via {{ site.myvariable }}.\n\ntitle: JSON Lines\ndescription: >-\n  This page describes the JSON Lines text format, also called newline-delimited JSON.\n  JSON Lines is a convenient format for storing structured data that may be processed\n  one record at a time. It works well with unix-style text processing tools and shell\n  pipelines. It's a great format for log files. It's also a flexible format for passing\n  messages between cooperating processes.\nbaseurl: \"\" # the subpath of your site, e.g. /blog\nurl: \"https://jsonlines.org\" # the base hostname & protocol for your site, e.g. http://example.com\n\n# Build settings\n  \n# Disable warning related to https://sass-lang.com/d/slash-div\nsass:\n  quiet_deps: true\n\n# Exclude from processing.\n# The following items will not be processed, by default.\n# Any item listed under the `exclude:` key here will be automatically added to\n# the internal \"default list\".\n#\n# Excluded items can be processed by explicitly listing the directories or\n# their entries' file path in the `include:` list.\n#\nexclude:\n  - README.md\n#   - .sass-cache/\n#   - .jekyll-cache/\n#   - gemfiles/\n#   - Gemfile\n#   - Gemfile.lock\n#   - node_modules/\n#   - vendor/bundle/\n#   - vendor/cache/\n#   - vendor/gems/\n#   - vendor/ruby/\n"
  },
  {
    "path": "_data/menu.yml",
    "content": "items:\n  - label: Home\n    url: '/'\n  - label: Examples\n    url: '/examples/'\n  - label: 'Validator'\n    url: '/validator/'\n  - label: 'On the web'\n    url: '/on_the_web/'\n  - label: 'json.org'\n    url: 'https://json.org'\n"
  },
  {
    "path": "_includes/footer.html",
    "content": "<footer>\n<a href=\"https://github.com/wardi/jsonlines/issues\">Report a bug or make a suggestion</a> •\nTactile theme by <a href=\"https://twitter.com/jasonlong\">Jason Long</a> • This page is maintained by <a href=\"https://excess.org\">Ian Ward</a>.\n<br>\nGenerated by <a href=\"https://jekyllrb.com/\">Jekyll</a> on {{ site.time | date: '%Y-%m-%d %H:%M:%S %Z' }}\n</footer>\n"
  },
  {
    "path": "_includes/head.html",
    "content": "<head>\n  <meta charset='utf-8'>\n  <meta http-equiv=\"X-UA-Compatible\" content=\"chrome=1\">\n  <link rel=\"stylesheet\" type=\"text/css\" href=\"https://fonts.googleapis.com/css?family=Chivo:900\">\n  <link rel=\"stylesheet\" type=\"text/css\" href=\"/stylesheets/stylesheet.css\" media=\"screen\">\n  <link rel=\"stylesheet\" type=\"text/css\" href=\"/stylesheets/pygment_trac.css\" media=\"screen\">\n  <link rel=\"stylesheet\" type=\"text/css\" href=\"/stylesheets/print.css\" media=\"print\">\n  {%- for css in page.custom-css-list -%}\n  <link rel=\"stylesheet\" type=\"text/css\" href=\"{{ css }}\" >\n  {% endfor %}\n  <!--[if lt IE 9]>\n  <script src=\"//html5shiv.googlecode.com/svn/trunk/html5.js\"></script>\n  <![endif]-->\n  {%- for javascript in page.custom-javascript-list -%}\n  <script src=\"{{ javascript }}\"></script>\n  {% endfor %}\n  <title>{%- if page.title != 'JSON Lines' -%}JSON Lines | {%- endif -%}{{ page.title }}</title>\n</head>\n"
  },
  {
    "path": "_includes/menu.html",
    "content": "<nav>\n  <ul>\n    {% for item in site.data.menu.items -%}\n    <li>\n      {%- if item.url == page.url -%}\n      {{ item.label }}\n      {%- else -%}\n      <a href=\"{{ item.url }}\">{{ item.label }}</a>\n      {%- endif -%}\n    </li>\n    {% endfor -%}\n  </ul>\n</nav>\n"
  },
  {
    "path": "_layouts/default.html",
    "content": "<!doctype html>\n<html lang=\"en\">\n  {% include head.html %}\n  <body>\n    <div id=\"container\">\n      <div class=\"inner\">\n        <header>\n          <h1>JSON Lines</h1>\n          <h2>{% if page.subtitle %}{{ page.subtitle }}{% else %}{{ page.title }}{% endif %}</h2>\n        </header>\n        {% include menu.html %}\n        <hr>\n        <section id=\"main_content\">\n          {{ content -}}\n        </section>\n        {% include footer.html %}\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "examples/index.md",
    "content": "---\nlayout: default\ntitle: Examples\n---\n\n<h3>\n<a name=\"better-than-csv\" class=\"anchor\" href=\"#better-than-csv\"><span class=\"octicon octicon-link\"></span></a>Better than CSV</h3>\n\n<div class=\"highlight\"><pre><span class=\"p\">[</span><span class=\"s2\">\"Name\"</span><span class=\"p\">,</span> <span class=\"s2\">\"Session\"</span><span class=\"p\">,</span> <span class=\"s2\">\"Score\"</span><span class=\"p\">,</span> <span class=\"s2\">\"Completed\"</span><span class=\"p\">]</span>\n<span class=\"p\">[</span><span class=\"s2\">\"Gilbert\"</span><span class=\"p\">,</span> <span class=\"s2\">\"2013\"</span><span class=\"p\">,</span> <span class=\"mi\">24</span><span class=\"p\">,</span> <span class=\"kc\">true</span><span class=\"p\">]</span>\n<span class=\"p\">[</span><span class=\"s2\">\"Alexa\"</span><span class=\"p\">,</span> <span class=\"s2\">\"2013\"</span><span class=\"p\">,</span> <span class=\"mi\">29</span><span class=\"p\">,</span> <span class=\"kc\">true</span><span class=\"p\">]</span>\n<span class=\"p\">[</span><span class=\"s2\">\"May\"</span><span class=\"p\">,</span> <span class=\"s2\">\"2012B\"</span><span class=\"p\">,</span> <span class=\"mi\">14</span><span class=\"p\">,</span> <span class=\"kc\">false</span><span class=\"p\">]</span>\n<span class=\"p\">[</span><span class=\"s2\">\"Deloise\"</span><span class=\"p\">,</span> <span class=\"s2\">\"2012A\"</span><span class=\"p\">,</span> <span class=\"mi\">19</span><span class=\"p\">,</span> <span class=\"kc\">true</span><span class=\"p\">]</span> \n</pre></div>\n\n<p>CSV seems so easy that many programmers have written code to generate it themselves, and almost every implementation is different. Handling broken CSV files is a common and frustrating task. CSV has no standard encoding, no standard column separator and multiple character escaping standards. String is the only type supported for cell values, so some programs attempt to guess the correct types.</p>\n\n<p>JSON Lines handles tabular data cleanly and without ambiguity. Cells may use the standard JSON types.</p>\n\n<p>The biggest missing piece is an import/export filter for popular spreadsheet programs so that non-programmers can use this format.</p>\n\n<h3>\n<a name=\"self-describing\" class=\"anchor\" href=\"#self-describing\"><span class=\"octicon octicon-link\"></span></a>Self-describing data</h3>\n\n<div class=\"highlight\"><pre><span class=\"p\">{</span><span class=\"nt\">\"name\"</span><span class=\"p\">:</span> <span class=\"s2\">\"Gilbert\"</span><span class=\"p\">,</span> <span class=\"nt\">\"session\"</span><span class=\"p\">:</span> <span class=\"s2\">\"2013\"</span><span class=\"p\">,</span> <span class=\"nt\">\"score\"</span><span class=\"p\">:</span> <span class=\"mi\">24</span><span class=\"p\">,</span> <span class=\"nt\">\"completed\"</span><span class=\"p\">:</span> <span class=\"kc\">true</span><span class=\"p\">}</span>\n<span class=\"p\">{</span><span class=\"nt\">\"name\"</span><span class=\"p\">:</span> <span class=\"s2\">\"Alexa\"</span><span class=\"p\">,</span> <span class=\"nt\">\"session\"</span><span class=\"p\">:</span> <span class=\"s2\">\"2013\"</span><span class=\"p\">,</span> <span class=\"nt\">\"score\"</span><span class=\"p\">:</span> <span class=\"mi\">29</span><span class=\"p\">,</span> <span class=\"nt\">\"completed\"</span><span class=\"p\">:</span> <span class=\"kc\">true</span><span class=\"p\">}</span>\n<span class=\"p\">{</span><span class=\"nt\">\"name\"</span><span class=\"p\">:</span> <span class=\"s2\">\"May\"</span><span class=\"p\">,</span> <span class=\"nt\">\"session\"</span><span class=\"p\">:</span> <span class=\"s2\">\"2012B\"</span><span class=\"p\">,</span> <span class=\"nt\">\"score\"</span><span class=\"p\">:</span> <span class=\"mi\">14</span><span class=\"p\">,</span> <span class=\"nt\">\"completed\"</span><span class=\"p\">:</span> <span class=\"kc\">false</span><span class=\"p\">}</span>\n<span class=\"p\">{</span><span class=\"nt\">\"name\"</span><span class=\"p\">:</span> <span class=\"s2\">\"Deloise\"</span><span class=\"p\">,</span> <span class=\"nt\">\"session\"</span><span class=\"p\">:</span> <span class=\"s2\">\"2012A\"</span><span class=\"p\">,</span> <span class=\"nt\">\"score\"</span><span class=\"p\">:</span> <span class=\"mi\">19</span><span class=\"p\">,</span> <span class=\"nt\">\"completed\"</span><span class=\"p\">:</span> <span class=\"kc\">true</span><span class=\"p\">}</span> \n</pre></div>\n\n<p>JSON Lines enables applications to read objects line-by-line, with each line fully describing a JSON object.  The example above contains the same data as the <a href=\"#better-than-csv\">tabular example</a> above, but allows applications to split files on newline boundaries for parallel loading, and eliminates any ambiguity if fields are omitted or re-ordered.</p>\n\n<h3>\n<a name=\"easy-nested-data\" class=\"anchor\" href=\"#easy-nested-data\"><span class=\"octicon octicon-link\"></span></a>Easy Nested Data</h3>\n\n<div class=\"highlight\"><pre><span class=\"p\">{</span><span class=\"nt\">\"name\"</span><span class=\"p\">:</span> <span class=\"s2\">\"Gilbert\"</span><span class=\"p\">,</span> <span class=\"nt\">\"wins\"</span><span class=\"p\">:</span> <span class=\"p\">[[</span><span class=\"s2\">\"straight\"</span><span class=\"p\">,</span> <span class=\"s2\">\"7♣\"</span><span class=\"p\">],</span> <span class=\"p\">[</span><span class=\"s2\">\"one pair\"</span><span class=\"p\">,</span> <span class=\"s2\">\"10♥\"</span><span class=\"p\">]]}</span>\n<span class=\"p\">{</span><span class=\"nt\">\"name\"</span><span class=\"p\">:</span> <span class=\"s2\">\"Alexa\"</span><span class=\"p\">,</span> <span class=\"nt\">\"wins\"</span><span class=\"p\">:</span> <span class=\"p\">[[</span><span class=\"s2\">\"two pair\"</span><span class=\"p\">,</span> <span class=\"s2\">\"4♠\"</span><span class=\"p\">],</span> <span class=\"p\">[</span><span class=\"s2\">\"two pair\"</span><span class=\"p\">,</span> <span class=\"s2\">\"9♠\"</span><span class=\"p\">]]}</span>\n<span class=\"p\">{</span><span class=\"nt\">\"name\"</span><span class=\"p\">:</span> <span class=\"s2\">\"May\"</span><span class=\"p\">,</span> <span class=\"nt\">\"wins\"</span><span class=\"p\">:</span> <span class=\"p\">[]}</span>\n<span class=\"p\">{</span><span class=\"nt\">\"name\"</span><span class=\"p\">:</span> <span class=\"s2\">\"Deloise\"</span><span class=\"p\">,</span> <span class=\"nt\">\"wins\"</span><span class=\"p\">:</span> <span class=\"p\">[[</span><span class=\"s2\">\"three of a kind\"</span><span class=\"p\">,</span> <span class=\"s2\">\"5♣\"</span><span class=\"p\">]]}</span>\n</pre></div>\n\n\n<p>JSON Lines' biggest strength is in handling lots of similar nested data structures. One <code>.jsonl</code> file is easier to work with than a directory full of XML files.</p>\n\n<p>If you have large nested structures then reading the JSON Lines text directly isn't recommended. Use the \"jq\" tool to make viewing large structures easier:</p>\n\n<div class=\"highlight\"><pre>grep pair winning_hands.jsonl | jq .\n</pre></div>\n\n<div class=\"highlight\"><pre><span class=\"p\">{</span>\n  <span class=\"nt\">\"name\"</span><span class=\"p\">:</span> <span class=\"s2\">\"Gilbert\"</span><span class=\"p\">,</span> \n  <span class=\"nt\">\"wins\"</span><span class=\"p\">:</span> <span class=\"p\">[</span>\n    <span class=\"p\">[</span>\n      <span class=\"s2\">\"straight\"</span><span class=\"p\">,</span> \n      <span class=\"s2\">\"7♣\"</span>\n    <span class=\"p\">],</span> \n    <span class=\"p\">[</span>\n      <span class=\"s2\">\"one pair\"</span><span class=\"p\">,</span> \n      <span class=\"s2\">\"10♥\"</span>\n    <span class=\"p\">]</span>\n  <span class=\"p\">]</span>\n<span class=\"p\">}</span>\n<span class=\"p\">{</span>\n  <span class=\"nt\">\"name\"</span><span class=\"p\">:</span> <span class=\"s2\">\"Alexa\"</span><span class=\"p\">,</span> \n  <span class=\"nt\">\"wins\"</span><span class=\"p\">:</span> <span class=\"p\">[</span>\n    <span class=\"p\">[</span>\n      <span class=\"s2\">\"two pair\"</span><span class=\"p\">,</span> \n      <span class=\"s2\">\"4♠\"</span>\n    <span class=\"p\">],</span> \n    <span class=\"p\">[</span>\n      <span class=\"s2\">\"two pair\"</span><span class=\"p\">,</span> \n      <span class=\"s2\">\"9♠\"</span>\n    <span class=\"p\">]</span>\n  <span class=\"p\">]</span>\n<span class=\"p\">}</span>\n</pre></div>\n<hr>\n"
  },
  {
    "path": "index.md",
    "content": "---\nlayout: default\ntitle: JSON Lines\nsubtitle: Documentation for the JSON Lines text file format\n---\n\n<p>\n This page describes the JSON Lines text format, also called newline-delimited JSON.\n JSON Lines is a convenient format for storing structured data that may be processed\n one record at a time. It works well with unix-style text processing tools and shell\n pipelines. It's a great format for log files. It's also a flexible format for passing\n messages between cooperating processes.\n</p>\n<p>\n The JSON Lines format has three requirements:\n</p>\n<h3>\n <a name=\"utf-8-encoding\" class=\"anchor\" href=\"#utf-8-encoding\" id=\"utf-8-encoding\"></a>\n 1. UTF-8 Encoding\n</h3>\n<p>\n JSON allows encoding Unicode strings with only ASCII escape sequences, however those\n escapes will be hard to read when viewed in a text editor. The author of the JSON Lines\n file may choose to escape characters to work with plain ASCII files.\n</p>\n<p>\n Encodings other than UTF-8 are very unlikely to be valid when decoded as UTF-8 so the chance\n of <a href=\"https://en.wikipedia.org/wiki/Mojibake\">accidentally misinterpreting characters</a>\n in JSON Lines files is low.\n</p>\n<p>\n  Like the JSON standard <a href=\"https://datatracker.ietf.org/doc/html/rfc8259#section-8.1\">\n  a byte order mark (U+FEFF) must NOT be included</a>.\n</p>\n<h3>\n <a name=\"each-line-is-a-valid-json-value\" class=\"anchor\" href=\"#each-line-is-a-valid-json-value\" id=\"each-line-is-a-valid-json-value\"></a>\n 2. Each Line is a Valid JSON Value\n</h3>\n<p>\n The most common values will be objects or arrays, but any JSON value is permitted.\n e.g. <code>null</code> is a valid value but a blank line is not.\n</p>\n<p>\n See <a href=\"https://json.org/\">json.org</a> for a definition of JSON values.\n</p>\n<h3>\n <a name=\"line-terminator-is-n\" class=\"anchor\" href=\"#line-terminator-is-n\" id=\"line-terminator-is-n\"></a>\n 3. Line Terminator is <code>'\\n'</code>\n</h3>\n<p>\n This means <code>'\\r\\n'</code> is also supported because surrounding white space is\n implicitly ignored when parsing JSON values.\n</p>\n<p>\n Including a line terminator after the last JSON value in a file is strongly recommended\n but not required. Including a line terminator after every JSON value makes generating and\n concatenating JSON Lines files easier. If a line terminator follows the last JSON value\n in a file, it must be the last byte in the file.\n</p>\n<h3>\n <a name=\"conventions\" class=\"anchor\" href=\"#conventions\" id=\"conventions\"></a>\n Conventions\n</h3>\n<p>\n JSON Lines files may be saved with the file extension <code>.jsonl</code>.\n</p>\n<p>\n Stream compressors like <code>gzip</code> or <code>bzip2</code> are recommended for\n saving space, resulting in <code>.jsonl.gz</code> or <code>.jsonl.bz2</code> files.\n</p>\n<p>\n MIME type may be <code>application/jsonl</code>, but this is not yet standardized; any help\n writing the RFC would be greatly appreciated (see <a href=\"https://github.com/wardi/jsonlines/issues/19\">issue</a>).\n</p>\n<p>\n Text editing programs call the first line of a text file \"line 1\". The first value in a\n JSON Lines file should also be called \"value 1\".\n</p>\n"
  },
  {
    "path": "javascripts/validator.js",
    "content": "/* VALIDATOR */\n\n$(document).ready(() => {\n  // CodeMirror editor\n  let editor = CodeMirror.fromTextArea(jQuery('.validator textarea')[0], {\n    lineNumbers: true,\n    theme: 'abbott',\n    mode: 'javascript',\n  });\n  \n  // clear button\n  jQuery('.validator input[type=\"button\"][value=\"clear\"]').click(() => {\n    editor.setValue('');\n  });\n\n  // validate button\n  jQuery('.validator input[type=\"button\"][value=\"validate\"]').click(() => {\n    let jsonl = editor.getValue();\n    let lines = jsonl.split('\\n');\n    let errors = [];\n    for (let i = 0; i < lines.length; i++) {\n      let line = lines[i]\n      if (i !== lines.length - 1 || lines[i] !== '') {\n        try {\n          JSON.parse(line);\n        } catch (e) {\n          if (e instanceof SyntaxError) {\n            errors.push(`line ${i + 1}: error ${e}\\n`);\n          } else {\n            throw e;\n          }\n        }\n      }\n    }\n\n    let result = jQuery('.validator div.result ul');\n    result.empty();\n    if (0 < errors.length) {\n      errors.forEach((error) => {\n        result.append(`<li>${error}</li>`);\n      });\n    } else {\n      result.append('valid jsonl')\n    }\n  });\n});\n"
  },
  {
    "path": "on_the_web/index.md",
    "content": "---\nlayout: default\ntitle: On The Web\n---\n\n<p><a href=\"https://airbyte.io\">Airbyte</a> is an open-source data integration tool that uses JSON Lines to communicate between containerized source applications that pull data from files/APIs/databses and containerized destination applications that write data to warehouses.</p>\n\n<p><a href=\"https://spark.apache.org\">Apache Spark</a> uses JSONL for reading and writing JSON data.</p>\n\n<p><a href=\"https://arangodb.com\">ArangoDB</a> is an open source multi-model database. The JSON lines format allows to import huge amounts of documents sequentially (via <a href=\"https://www.arangodb.com/docs/stable/programs-arangoimport-examples-json.html\">arangoimport</a>).</p>\n\n<p><a href=\"https://cloud.google.com/bigquery\">BigQuery</a> uses JSON Lines as one of the supported formats to load data into the database.</p>\n\n<p><a href=\"https://bkl.gopatchy.io/\">BKL</a> is a layered templating configuration tool that supports JSON Lines input and output.</p>\n\n<p><a href=\"https://okfnlabs.org/blog/2014/09/01/bubbles-python-etl.html\">Bubbles</a> supports JSON Lines datastores</p>\n\n<p><a href=\"https://clickhouse.yandex/\">ClickHouse</a> is an open source column-oriented DBMS. It supports JSON lines as <a href=\"https://clickhouse.yandex/reference_en.html#JSONEachRow\">JSONEachRow</a> format for input and output.</p>\n\n<p><a href=\"https://www.htmlvalidator.com/\">CSS HTML Validator for Windows v22.0211+</a> now supports JSON Lines syntax checking.</p>\n\n<p><a href=\"https://github.com/dart-lang/test/blob/master/pkgs/test/doc/json_reporter.md\">Dart</a> uses JSON Lines as one of the possible reporters when running tests.</p>\n\n<p><a href=\"https://dataflowkit.com\">Dataflow kit</a> is a web scraping open source framework written in Go. JSON Lines is one of the supported formats for storing results.</p>\n\n<p><a href=\"https://pkg.go.dev/encoding/json#NewEncoder\">Go Standard library's json.Encoder</a> will produce JSON lines by default. The decoder parses Concatenated JSON, which is compatible with, though less strict than, JSON lines</p>\n\n<p><a href=\"https://github.com/simonfrey/jsonl\">Golang JSONL library</a></p>\n\n<p><a href=\"https://www.graylog.org/resources/gelf/\">Graylog GELF</a> is format for log messages, their stream is de-facto JSON lines.</p>\n\n<p><a href=\"https://immich.app\">Immich</a> is a self-hosted photo and video management solution. It uses JSON Lines for <a href=\"https://immich.app/blog/sync-v2\">efficient syncing</a> between its server and mobile clients, enabling incremental, resumable synchronization with minimal memory overhead.</p>\n\n<p><a href=\"https://kubernetes.io\">Kubernetes (k8s)</a> is an open-source container orchestration system. It uses JSON Lines as format for <a href=\"https://kubernetes.io/docs/tasks/debug/debug-cluster/audit/\">auditing</a>.</p>\n\n<p><a href=\"https://www.liquid-technologies.com/xml-studio\">Liquid Studio</a> includes a <a href=\"https://www.liquid-technologies.com/json-lines-editor\">JSON Lines Editor</a> in a unique split view. The top view can load Terabyte+ JSON Lines files, the bottom view's JSON editor contains the selected JSON lines item, with syntax highlighting, schema aware validation, auto complete/intellisense, and other tools.</p>\n\n<p><a href=\"https://logstash.net\">Logstash</a> supports JSON Lines via the <a href=\"https://logstash.net/docs/latest/codecs/json_lines\">json_lines codec</a></p>\n\n<p><a href=\"https://mattermost.com/\">Mattermost</a> is an open-source, self-hostable online chat service. It uses JSON Lines as the format for <a href=\"https://docs.mattermost.com/onboard/bulk-loading-data.html\">bulk data migration</a> on self-hosted instances.</p>\n\n<p><a href=\"https://miller.readthedocs.io/en/latest/file-formats/#json-lines\">Miller</a> supports JSON Lines format as input.</p>\n\n<p><a href=\"https://github.com/ndjson/ndjson-spec\">NDJSON</a> is a similar format that also allows blank lines</p>\n\n<p><a href=\"https://neo4j.com/developer\">Neo4j</a> the open-source graph database supports JSONL export and import via its standard library procedures <a href=\"https://neo4j.com/labs/apoc/4.1/export/json/#export-database-json\"><code>apoc.export/import.json</code></a> to allow stream processing of nodes and relationships.</p>\n\n<p><a href=\"https://platform.openai.com/docs/guides/evals#uploading-test-data\">OpenAI Evals</a> is an AI Evaluations (Evals) application using JSON Lines to pass in bulk data. </p>\n\n<p><a href=\"https://petl.readthedocs.io/en/stable/io.html#databases\">petl</a> is a general purpose Python package for extracting, transforming and loading tables of data. It allows importing and exporting documents/records between many databases and file formats, including <a href=\"https://petl.readthedocs.io/en/stable/io.html#json-files\">JSON lines</a>, in local and <a href=\"https://petl.readthedocs.io/en/stable/io.html#remote-i-o-helper-classes\">remote</a> filesystems and clouds.</p>\n\n<p><a href=\"https://github.com/indykoning/php-jsonl\">php-jsonl</a> is a PHP library for reading &amp; writing JSON Lines documents, taking advantage of the streaming benefits.</p>\n\n<p><a href=\"https://plot.ly/streaming/\">plot.ly</a> uses JSON Lines for its streaming data API</p>\n\n<p><a href=\"https://github.com/pytest-dev/pytest-reportlog\">pytest-reportlog</a> is a pytest plugin which writes testing report data in JSON lines format</p>\n\n<p><a href=\"https://www.rumbledb.org/\">Rumble</a> is a JSONiq engine that runs on top of Spark. It can process datasets in the JSON lines format that have billions of objects and more.</p>\n\n<p><a href=\"https://www.scrapy.org\">Scrapy</a> is a framework for web scraping &amp; crawling, it supports and recommends JSON lines since long -- <a href=\"https://twitter.com/pablohoffman/status/547385799093022723\">it might've even coined the term</a>.</p>\n\n<p><a href=\"https://github.com/jwodder/serde-jsonlines\">serde-jsonlines</a> is a Rust library for reading &amp; writing JSON Lines documents.</p>\n\n<p><a href=\"https://shopify.dev/api/usage/bulk-operations/queries\">Shopify GraphQL Bulk Operations API</a>, designed for very large data exports from Shopify stores, returns results in the form of a JSONL file.</p>\n\n<p><a href=\"https://github.com/paolosimone/virtual-json-viewer\">Virtual JSON Viewer</a> is a browser extension for navigating large JSON content which natively supports JSON Lines format.</p>\n"
  },
  {
    "path": "params.json",
    "content": "{\"name\":\"Jsonlines\",\"tagline\":\"Documentation for the JSON Lines text file format\",\"body\":\"### JSON Lines: Simple. Like JSON.\\r\\n\\r\\nThis page describes the JSON Lines text format. JSON Lines is a convenient format for storing\\r\\nstructured data that may be processed one record at a time. It works well with unix-style\\r\\ntext processing tools and shell pipelines.\\r\\n\\r\\nJSON Lines files may be saved with the file extension `.jsonl`.\\r\\n\\r\\nStream compressors like `gzip` or `bzip2`\\r\\nare recommended for saving space, resulting in `.jsonl.gz` or `.jsonl.bz2` files.\\r\\n\\r\\n### UTF-8 Encoding\\r\\n\\r\\nUTF-8 is backwards compatible with ASCII. JSON allows encoding Unicode strings with only ASCII escape sequences, however those escapes are ugly in a text editor.\\r\\n\\r\\nChoosing UTF-8 as the standard lets the JSON Lines\\r\\nauthor choose to escape characters or not. Also, if a file is saved with a different encoding it is very\\r\\nunlikely to be valid UTF-8, making the mistake quickly obvious.\\r\\n\\r\\n### Each Line is a Valid JSON Value\\r\\n\\r\\nThe most common values will be objects or arrays, but any of the following is valid:\\r\\n\\r\\n* string\\r\\n* number\\r\\n* object\\r\\n* array\\r\\n* `true`\\r\\n* `false`\\r\\n* `null`\\r\\n\\r\\nSee <json.org> for more information.\\r\\n\\r\\n### Line Separator is `'\\\\n'`\\r\\n\\r\\nThis means `'\\\\r\\\\n'` is also supported because white space within lines is ignored, as dictated\\r\\nby the JSON spec.\\r\\n\\r\\nThe last character in the file *may* be a line separator, and it will be treated the same as\\r\\nif there was no line separator.\\r\\n\\r\\n### Count Lines From 1\\r\\n\\r\\nText editing programs call the first line of a text file \\\"line 1\\\". We also call the first JSON value in a JSON Lines file value 1.\\r\\n\",\"google\":\"\",\"note\":\"Don't delete this file! It's used internally to help with page regeneration.\"}"
  },
  {
    "path": "stylesheets/print.css",
    "content": "html, body, div, span, applet, object, iframe,\nh1, h2, h3, h4, h5, h6, p, blockquote, pre,\na, abbr, acronym, address, big, cite, code,\ndel, dfn, em, img, ins, kbd, q, s, samp,\nsmall, strike, strong, sub, sup, tt, var,\nb, u, i, center,\ndl, dt, dd, ol, ul, li,\nfieldset, form, label, legend,\ntable, caption, tbody, tfoot, thead, tr, th, td,\narticle, aside, canvas, details, embed, \nfigure, figcaption, footer, header, hgroup, \nmenu, nav, output, ruby, section, summary,\ntime, mark, audio, video {\n  margin: 0;\n  padding: 0;\n  border: 0;\n  font-size: 100%;\n  font: inherit;\n  vertical-align: baseline;\n}\n/* HTML5 display-role reset for older browsers */\narticle, aside, details, figcaption, figure, \nfooter, header, hgroup, menu, nav, section {\n  display: block;\n}\nbody {\n  line-height: 1;\n}\nol, ul {\n  list-style: none;\n}\nblockquote, q {\n  quotes: none;\n}\nblockquote:before, blockquote:after,\nq:before, q:after {\n  content: '';\n  content: none;\n}\ntable {\n  border-collapse: collapse;\n  border-spacing: 0;\n}\nbody {\n  font-size: 13px;\n  line-height: 1.5; \n  font-family: 'Helvetica Neue', Helvetica, Arial, serif;\n  color: #000;\n}\n\na {\n  color: #d5000d;\n  font-weight: bold;\n}\n\nheader {\n  padding-top: 35px;\n  padding-bottom: 10px;\n}\n\nheader h1 {\n  font-weight: bold;\n  letter-spacing: -1px;\n  font-size: 48px;\n  color: #303030;\n  line-height: 1.2;\n}\n\nheader h2 {\n  letter-spacing: -1px;\n  font-size: 24px;\n  color: #aaa;\n  font-weight: normal;\n  line-height: 1.3;\n}\n#downloads {\n  display: none;\n}\n#main_content {\n  padding-top: 20px;\n}\n\ncode, pre {\n  font-family: Monaco, \"Bitstream Vera Sans Mono\", \"Lucida Console\", Terminal;\n  color: #222;\n  margin-bottom: 30px;\n  font-size: 12px;\n}\n\ncode {\n  padding: 0 3px;\n}\n\npre {\n  border: solid 1px #ddd;\n  padding: 20px;\n  overflow: auto;\n}\npre code {\n  padding: 0;\n}\n\nul, ol, dl {\n  margin-bottom: 20px;\n}\n\n\n/* COMMON STYLES */\n\ntable {\n  width: 100%;\n  border: 1px solid #ebebeb;\n}\n\nth {\n  font-weight: 500;\n}\n\ntd {\n  border: 1px solid #ebebeb;\n  text-align: center; \n  font-weight: 300;\n}\n\nform {\n  background: #f2f2f2;\n  padding: 20px;\n  \n}\n\n\n/* GENERAL ELEMENT TYPE STYLES */\n\nh1 {\n  font-size: 2.8em;\n} \n\nh2 {\n  font-size: 22px;\n  font-weight: bold;\n  color: #303030;\n  margin-bottom: 8px;\n} \n\nh3 {\n  color: #d5000d;\n  font-size: 18px;\n  font-weight: bold;\n  margin-bottom: 8px;\n} \n \nh4 {\n  font-size: 16px;\n  color: #303030;\n  font-weight: bold;\n} \n\nh5 {\n  font-size: 1em;\n  color: #303030;\n} \n\nh6 {\n  font-size: .8em;\n  color: #303030;\n} \n\np {\n  font-weight: 300;\n  margin-bottom: 20px;\n}\n \na {\n  text-decoration: none;\n}\n\np a {\n  font-weight: 400;\n}\n\nblockquote {\n  font-size: 1.6em;\n  border-left: 10px solid #e9e9e9;\n  margin-bottom: 20px;\n  padding: 0 0 0 30px;\n}\n\nul li {\n  list-style: disc inside;\n  padding-left: 20px;\n}\n\nol li {\n  list-style: decimal inside;\n  padding-left: 3px;\n}\n\ndl dd {\n  font-style: italic;\n  font-weight: 100;\n}\n\nfooter {\n  margin-top: 40px;\n  padding-top: 20px;\n  padding-bottom: 30px;\n  font-size: 13px;\n  color: #aaa;\n}\n\nfooter a {\n  color: #666;\n}\n\n/* MISC */\n.clearfix:after {\n  clear: both;\n  content: '.';\n  display: block;\n  visibility: hidden;\n  height: 0;\n}\n\n.clearfix {display: inline-block;}\n* html .clearfix {height: 1%;}\n.clearfix {display: block;}"
  },
  {
    "path": "stylesheets/pygment_trac.css",
    "content": ".highlight  { background: #ffffff; }\n.highlight .c { color: #999988; font-style: italic } /* Comment */\n.highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */\n.highlight .k { font-weight: bold } /* Keyword */\n.highlight .o { font-weight: bold } /* Operator */\n.highlight .cm { color: #999988; font-style: italic } /* Comment.Multiline */\n.highlight .cp { color: #999999; font-weight: bold } /* Comment.Preproc */\n.highlight .c1 { color: #999988; font-style: italic } /* Comment.Single */\n.highlight .cs { color: #999999; font-weight: bold; font-style: italic } /* Comment.Special */\n.highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */\n.highlight .gd .x { color: #000000; background-color: #ffaaaa } /* Generic.Deleted.Specific */\n.highlight .ge { font-style: italic } /* Generic.Emph */\n.highlight .gr { color: #aa0000 } /* Generic.Error */\n.highlight .gh { color: #999999 } /* Generic.Heading */\n.highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */\n.highlight .gi .x { color: #000000; background-color: #aaffaa } /* Generic.Inserted.Specific */\n.highlight .go { color: #888888 } /* Generic.Output */\n.highlight .gp { color: #555555 } /* Generic.Prompt */\n.highlight .gs { font-weight: bold } /* Generic.Strong */\n.highlight .gu { color: #800080; font-weight: bold; } /* Generic.Subheading */\n.highlight .gt { color: #aa0000 } /* Generic.Traceback */\n.highlight .kc { font-weight: bold } /* Keyword.Constant */\n.highlight .kd { font-weight: bold } /* Keyword.Declaration */\n.highlight .kn { font-weight: bold } /* Keyword.Namespace */\n.highlight .kp { font-weight: bold } /* Keyword.Pseudo */\n.highlight .kr { font-weight: bold } /* Keyword.Reserved */\n.highlight .kt { color: #445588; font-weight: bold } /* Keyword.Type */\n.highlight .m { color: #009999 } /* Literal.Number */\n.highlight .s { color: #d14 } /* Literal.String */\n.highlight .na { color: #008080 } /* Name.Attribute */\n.highlight .nb { color: #0086B3 } /* Name.Builtin */\n.highlight .nc { color: #445588; font-weight: bold } /* Name.Class */\n.highlight .no { color: #008080 } /* Name.Constant */\n.highlight .ni { color: #800080 } /* Name.Entity */\n.highlight .ne { color: #990000; font-weight: bold } /* Name.Exception */\n.highlight .nf { color: #990000; font-weight: bold } /* Name.Function */\n.highlight .nn { color: #555555 } /* Name.Namespace */\n.highlight .nt { color: #f995a7 } /* Name.Tag */\n.highlight .nv { color: #008080 } /* Name.Variable */\n.highlight .ow { font-weight: bold } /* Operator.Word */\n.highlight .w { color: #bbbbbb } /* Text.Whitespace */\n.highlight .mf { color: #009999 } /* Literal.Number.Float */\n.highlight .mh { color: #009999 } /* Literal.Number.Hex */\n.highlight .mi { color: #00c7c7 } /* Literal.Number.Integer */\n.highlight .mo { color: #009999 } /* Literal.Number.Oct */\n.highlight .sb { color: #d14 } /* Literal.String.Backtick */\n.highlight .sc { color: #d14 } /* Literal.String.Char */\n.highlight .sd { color: #d14 } /* Literal.String.Doc */\n.highlight .s2 { color: #f995a7 } /* Literal.String.Double */\n.highlight .se { color: #d14 } /* Literal.String.Escape */\n.highlight .sh { color: #d14 } /* Literal.String.Heredoc */\n.highlight .si { color: #d14 } /* Literal.String.Interpol */\n.highlight .sx { color: #d14 } /* Literal.String.Other */\n.highlight .sr { color: #009926 } /* Literal.String.Regex */\n.highlight .s1 { color: #d14 } /* Literal.String.Single */\n.highlight .ss { color: #990073 } /* Literal.String.Symbol */\n.highlight .bp { color: #999999 } /* Name.Builtin.Pseudo */\n.highlight .vc { color: #008080 } /* Name.Variable.Class */\n.highlight .vg { color: #008080 } /* Name.Variable.Global */\n.highlight .vi { color: #008080 } /* Name.Variable.Instance */\n.highlight .il { color: #009999 } /* Literal.Number.Integer.Long */\n\n.type-csharp .highlight .k { color: #0000FF }\n.type-csharp .highlight .kt { color: #0000FF }\n.type-csharp .highlight .nf { color: #000000; font-weight: normal }\n.type-csharp .highlight .nc { color: #2B91AF }\n.type-csharp .highlight .nn { color: #000000 }\n.type-csharp .highlight .s { color: #A31515 }\n.type-csharp .highlight .sc { color: #A31515 }\n"
  },
  {
    "path": "stylesheets/stylesheet.css",
    "content": "/* http://meyerweb.com/eric/tools/css/reset/ \n   v2.0 | 20110126\n   License: none (public domain)\n*/\nhtml, body, div, span, applet, object, iframe,\nh1, h2, h3, h4, h5, h6, p, blockquote, pre,\na, abbr, acronym, address, big, cite, code,\ndel, dfn, em, img, ins, kbd, q, s, samp,\nsmall, strike, strong, sub, sup, tt, var,\nb, u, i, center,\ndl, dt, dd, ol, ul, li,\nfieldset, form, label, legend,\ntable, caption, tbody, tfoot, thead, tr, th, td,\narticle, aside, canvas, details, embed, \nfigure, figcaption, footer, header, hgroup, \nmenu, nav, output, ruby, section, summary,\ntime, mark, audio, video {\n\tmargin: 0;\n\tpadding: 0;\n\tborder: 0;\n\tfont-size: 100%;\n\tfont: inherit;\n\tvertical-align: baseline;\n}\n/* HTML5 display-role reset for older browsers */\narticle, aside, details, figcaption, figure, \nfooter, header, hgroup, menu, nav, section {\n\tdisplay: block;\n}\nbody {\n\tline-height: 1;\n}\nol, ul {\n\tlist-style: none;\n}\nblockquote, q {\n\tquotes: none;\n}\nblockquote:before, blockquote:after,\nq:before, q:after {\n\tcontent: '';\n\tcontent: none;\n}\ntable {\n\tborder-collapse: collapse;\n\tborder-spacing: 0;\n}\n\n/* LAYOUT STYLES */\nbody {\n  font-size: 1em;\n  line-height: 1.5; \n  background: #e7e7e7 url(../images/body-bg.png) 0 0 repeat;\n  font-family: 'Helvetica Neue', Helvetica, Arial, serif;\n  text-shadow: 0 1px 0 rgba(255, 255, 255, 0.8);\n  color: #494955;\n}\n\na {\n  color: #d5000d;\n}\na:hover {\n  color: #c5000c;\n}\n\nheader {\n  padding-top: 35px;\n  padding-bottom: 25px;\n}\n\nheader h1 {\n  font-family: 'Chivo', 'Helvetica Neue', Helvetica, Arial, serif; font-weight: 900;\n  letter-spacing: -1px;\n  font-size: 48px;\n  color: #303030;\n  line-height: 1.2;\n}\n\nheader h2 {\n  letter-spacing: -1px;\n  font-size: 24px;\n  color: #474747;\n  font-weight: normal;\n  line-height: 1.3;\n}\n\n#container {\n  background: transparent url(../images/highlight-bg.jpg) 50% 0 no-repeat;\n  min-height: 595px;\n}\n\n.inner {\n  width: 700px;\n  margin: 0 auto;\n}\n\n#container .inner img {\n  max-width: 100%;\n}\n\n#downloads {\n  margin-bottom: 40px;\n}\n\na.button {\n  -moz-border-radius: 30px;\n  -webkit-border-radius: 30px;                     \n  border-radius: 30px;\n  border-top: solid 1px #cbcbcb;\n  border-left: solid 1px #b7b7b7;\n  border-right: solid 1px #b7b7b7;\n  border-bottom: solid 1px #b3b3b3;\n  color: #303030;\n  line-height: 25px;\n  font-weight: bold;\n  font-size: 15px;\n  padding: 12px 8px 12px 8px;\n  display: block;\n  float: left;\n  width: 179px;\n  margin-right: 14px;  \n  background: #fdfdfd; /* Old browsers */\n  background: -moz-linear-gradient(top,  #fdfdfd 0%, #f2f2f2 100%); /* FF3.6+ */\n  background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#fdfdfd), color-stop(100%,#f2f2f2)); /* Chrome,Safari4+ */\n  background: -webkit-linear-gradient(top,  #fdfdfd 0%,#f2f2f2 100%); /* Chrome10+,Safari5.1+ */\n  background: -o-linear-gradient(top,  #fdfdfd 0%,#f2f2f2 100%); /* Opera 11.10+ */\n  background: -ms-linear-gradient(top,  #fdfdfd 0%,#f2f2f2 100%); /* IE10+ */\n  background: linear-gradient(top,  #fdfdfd 0%,#f2f2f2 100%); /* W3C */\n  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#fdfdfd', endColorstr='#f2f2f2',GradientType=0 ); /* IE6-9 */\n  -webkit-box-shadow: 10px 10px 5px #888;\n  -moz-box-shadow: 10px 10px 5px #888;\n  box-shadow: 0px 1px 5px #e8e8e8;\n}\na.button:hover {\n  border-top: solid 1px #b7b7b7;\n  border-left: solid 1px #b3b3b3;\n  border-right: solid 1px #b3b3b3;\n  border-bottom: solid 1px #b3b3b3;\n  background: #fafafa; /* Old browsers */\n  background: -moz-linear-gradient(top,  #fdfdfd 0%, #f6f6f6 100%); /* FF3.6+ */\n  background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#fdfdfd), color-stop(100%,#f6f6f6)); /* Chrome,Safari4+ */\n  background: -webkit-linear-gradient(top,  #fdfdfd 0%,#f6f6f6 100%); /* Chrome10+,Safari5.1+ */\n  background: -o-linear-gradient(top,  #fdfdfd 0%,#f6f6f6 100%); /* Opera 11.10+ */\n  background: -ms-linear-gradient(top,  #fdfdfd 0%,#f6f6f6 100%); /* IE10+ */\n  background: linear-gradient(top,  #fdfdfd 0%,#f6f6f6, 100%); /* W3C */\n  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#fdfdfd', endColorstr='#f6f6f6',GradientType=0 ); /* IE6-9 */\n}\n\na.button span {\n  padding-left: 50px;\n  display: block;\n  height: 23px;\n}\n\n#download-zip span {\n  background: transparent url(../images/zip-icon.png) 12px 50% no-repeat;\n}\n#download-tar-gz span {\n  background: transparent url(../images/tar-gz-icon.png) 12px 50% no-repeat;\n}\n#view-on-github span {\n  background: transparent url(../images/octocat-icon.png) 12px 50% no-repeat;\n}\n#view-on-github {\n  margin-right: 0;\n}\n\ncode, pre {\n  font-family: Monaco, \"Bitstream Vera Sans Mono\", \"Lucida Console\", Terminal, monospace;\n  color: #222;\n  margin-bottom: 30px;\n  font-size: 14px;\n}\n\ncode {\n  background-color: #f2f2f2;\n  border: solid 1px #ddd;\n  padding: 0 3px;\n}\n\npre {\n  padding: 20px;\n  background: #262626;\n  color: #f2f2f2;\n  text-shadow: none;\n  overflow: auto;\n}\npre code {\n  color: #f2f2f2;\n  background-color: #303030;\n  border: none;\n  padding: 0;\n}\n\nul, ol, dl {\n  margin-bottom: 20px;\n}\n\n\n/* COMMON STYLES */\n\nhr {\n  height: 1px;\n  line-height: 1px;\n  margin-top: 1em;\n  padding-bottom: 1em;\n  border: none;\n  background: transparent url('../images/hr.png') 50% 0 no-repeat;\n}\n\nstrong {\n  font-weight: bold;\n}\n\nem {\n  font-style: italic;\n}\n\ntable {\n  width: 100%;\n  border: 1px solid #ebebeb;\n}\n\nth {\n  font-weight: 500;\n}\n\ntd {\n  border: 1px solid #ebebeb;\n  text-align: center; \n  font-weight: 300;\n}\n\nform {\n  background: #f2f2f2;\n  padding: 20px;\n  \n}\n\n\n/* GENERAL ELEMENT TYPE STYLES */\n\nh1 {\n  font-size: 32px;\n} \n\nh2 {\n  font-size: 22px;\n  font-weight: bold;\n  color: #303030;\n  margin-bottom: 8px;\n} \n\nh3 {\n  color: #d5000d;\n  font-size: 18px;\n  font-weight: bold;\n  margin-bottom: 8px;\n} \n \nh4 {\n  font-size: 16px;\n  color: #303030;\n  font-weight: bold;\n} \n\nh5 {\n  font-size: 1em;\n  color: #303030;\n} \n\nh6 {\n  font-size: .8em;\n  color: #303030;\n} \n\np {\n  font-weight: 300;\n  margin-bottom: 20px;\n}\n \na {\n  text-decoration: none;\n}\n\np a {\n  font-weight: 400;\n}\n\nblockquote {\n  font-size: 1.6em;\n  border-left: 10px solid #e9e9e9;\n  margin-bottom: 20px;\n  padding: 0 0 0 30px;\n}\n\nul li {\n  list-style: disc inside;\n  padding-left: 20px;\n}\n\nol li {\n  list-style: decimal inside;\n  padding-left: 3px;\n}\n\ndl dt {\n  color: #303030;\n}\n\nfooter {\n  background: transparent url('../images/hr.png') 0 0 no-repeat;\n  margin-top: 40px;\n  padding-top: 20px;\n  padding-bottom: 30px;\n  font-size: 13px;\n  color: #aaa;\n}\n\nfooter a {\n  color: #666;\n}\nfooter a:hover {\n  color: #444;\n}\n\nnav li {\n  display: inline;\n  list-style-type: none;\n  padding-right: 20px;\n  padding-left: 0;\n}\n\n/* MISC */\n.clearfix:after {\n  clear: both;\n  content: '.';\n  display: block;\n  visibility: hidden;\n  height: 0;\n}\n\n.clearfix {display: inline-block;}\n* html .clearfix {height: 1%;}\n.clearfix {display: block;}\n\n\n/* VALIDATOR */\n\n.validator .result {\n  padding: 20px 0 0 0;\n}\n\n/* #Media Queries\n================================================== */\n\n/* Smaller than standard 960 (devices and browsers) */\n@media only screen and (max-width: 959px) {}\n\n/* Tablet Portrait size to standard 960 (devices and browsers) */\n@media only screen and (min-width: 768px) and (max-width: 959px) {}\n\n/* All Mobile Sizes (devices and browser) */\n@media only screen and (max-width: 767px) {\n  header {\n    padding-top: 10px;\n    padding-bottom: 10px;\n  }\n  #downloads {\n    margin-bottom: 25px;\n  }\n  #download-zip, #download-tar-gz {\n    display: none;\n  }\n  .inner {\n    width: 94%;\n    margin: 0 auto;\n  }\n}\n\n/* Mobile Landscape Size to Tablet Portrait (devices and browsers) */\n@media only screen and (min-width: 480px) and (max-width: 767px) {}\n\n/* Mobile Portrait Size to Mobile Landscape Size (devices and browsers) */\n@media only screen and (max-width: 479px) {}\n"
  },
  {
    "path": "validator/index.md",
    "content": "---\nlayout: default\ntitle: Validator\ncustom-javascript-list:\n  - /javascripts/vendor/jquery-3.7.0.min.js\n  - /javascripts/vendor/codemirror-6.65.7.min.js\n  - /javascripts/vendor/codemirror-6.65.7-javascript.min.js\n  - /javascripts/validator.js\n\ncustom-css-list:\n  - /stylesheets/vendor/codemirror-6.65.7.min.css\n  - /stylesheets/vendor/codemirror-6.65.7-abbott.min.css\n---\n\n<div id=\"main_content\" class=\"validator\">\n  <textarea></textarea>\n  <input type=\"button\" value=\"clear\"/>\n  <input type=\"button\" value=\"validate\"/>\n  <div class=\"result\"><ul></ul></div>\n</div>\n"
  }
]