{
 "schema_version": "1.0",
 "page_kind": "article",
 "pack_kind": "generate",
 "slug": "a-short-history-of-ollama",
 "title": "A short history of Ollama",
 "dek": "Two founders who had sold their first company to Docker in 2015, a one-command model server that began with llama.cpp compiled in and came back to llama.cpp's own server in 2026, and every default we found that moved under its users, dated.",
 "published": "2026-10-02",
 "series": [
  "notes"
 ],
 "licence": "CC BY 4.0",
 "status": "pending-judge",
 "pack_note": "no judge is seated, so every chip is held",
 "notice": "items with published:false are held and are not this page's published words",
 "source": {
  "url": "https://research.strata2signal.com/a-short-history-of-ollama/",
  "md_url": "https://research.strata2signal.com/a-short-history-of-ollama/index.md",
  "md_sha": "dc53c2d2bbd789e8667a5f5e1ff4958feb8604c01e7edb7fd332b3f469aaaf01",
  "html_sha": "36149a914f8b11190e646fc19c36b8478fcfbc2fcf9a45effd1fc8a2079fc803",
  "anchors_sha": "e57610511aacbc692a4d26b33858dc135d9c6209bfbcfbcdc87cf0f5fc993c8a"
 },
 "short": {
  "paragraph": "Most of the language-model readings this workshop has published were taken through Ollama, the program that turns an open-weight model into one command. It pulls the weights, loads them when asked, and by default answers over a local address and lets them go five minutes after the last request. This is the history of the project and the company behind it: a first release on 2023-07-08, llama.cpp underneath, then engines of its own, then llama.cpp's own server again from 2026, and $88M raised by July 2026. It is also a dated record of the defaults that moved under its users, among them a penalty on repeated words, the context window, the number of requests it serves at once, and the engine itself.",
  "from_dek": false,
  "counts": {
   "words": 6710,
   "minutes": 30,
   "tables": 3,
   "kit": false
  },
  "bullets": []
 },
 "sections": [
  {
   "id": "the-server-under-most-of-our-numbers",
   "heading": "The server under most of our numbers",
   "level": 2,
   "span": [
    2639,
    3753
   ],
   "chunks": [
    [
     2639,
     3753
    ]
   ],
   "chars": 1114,
   "digest": null,
   "digest_skipped": null
  },
  {
   "id": "the-engine-underneath",
   "heading": "The engine underneath: llama.cpp",
   "level": 2,
   "span": [
    3753,
    5456
   ],
   "chunks": [
    [
     3753,
     5456
    ]
   ],
   "chars": 1703,
   "digest": "Georgi Gerganov created llama.cpp on 2023-03-10, a C and C++ program for running models on processors or graphics cards. Ollama uses llama.cpp, having transitioned from compiling it in, to running it as a separate process, to using its own engines, and back to running it again.",
   "digest_skipped": null
  },
  {
   "id": "who-are-these-people",
   "heading": "Who are these people, and where did they come from?",
   "level": 2,
   "span": [
    5456,
    7233
   ],
   "chunks": [
    [
     5456,
     7233
    ]
   ],
   "chars": 1777,
   "digest": null,
   "digest_skipped": null
  },
  {
   "id": "what-have-they-shipped",
   "heading": "What have they shipped, and what ran underneath?",
   "level": 2,
   "span": [
    7233,
    10915
   ],
   "chunks": [
    [
     7233,
     10915
    ]
   ],
   "chars": 3682,
   "digest": null,
   "digest_skipped": null
  },
  {
   "id": "who-owns-it",
   "heading": "Who owns it, and who pays for it",
   "level": 2,
   "span": [
    10915,
    13681
   ],
   "chunks": [
    [
     10915,
     13681
    ]
   ],
   "chars": 2766,
   "digest": null,
   "digest_skipped": null
  },
  {
   "id": "what-it-speaks-and-where-it-runs",
   "heading": "What it speaks, and where it runs",
   "level": 2,
   "span": [
    13681,
    17061
   ],
   "chunks": [
    [
     13681,
     17061
    ]
   ],
   "chars": 3380,
   "digest": null,
   "digest_skipped": null
  },
  {
   "id": "how-it-serves-a-request",
   "heading": "How it serves a request",
   "level": 2,
   "span": [
    17061,
    19771
   ],
   "chunks": [
    [
     17061,
     19771
    ]
   ],
   "chars": 2710,
   "digest": null,
   "digest_skipped": null
  },
  {
   "id": "who-can-talk-to-it",
   "heading": "Who can talk to it",
   "level": 2,
   "span": [
    19771,
    23804
   ],
   "chunks": [
    [
     19771,
     23804
    ]
   ],
   "chars": 4033,
   "digest": null,
   "digest_skipped": null
  },
  {
   "id": "the-defaults-that-moved",
   "heading": "The defaults that moved",
   "level": 2,
   "span": [
    23804,
    26984
   ],
   "chunks": [
    [
     23804,
     26984
    ]
   ],
   "chars": 3180,
   "digest": "This section lists various settings that have changed over time, such as the default context length, the number of parallel requests, the engine used for GGUF models, and the repeat penalty sampler setting.",
   "digest_skipped": null
  },
  {
   "id": "what-to-take-with-you",
   "heading": "What to take with you",
   "level": 2,
   "span": [
    26984,
    28300
   ],
   "chunks": [
    [
     26984,
     28300
    ]
   ],
   "chars": 1316,
   "digest": null,
   "digest_skipped": null
  },
  {
   "id": "how-to-check-our-work-and-see-it-live",
   "heading": "How to check our work — and see it live",
   "level": 2,
   "span": [
    28300,
    29630
   ],
   "chunks": [
    [
     28300,
     29630
    ]
   ],
   "chars": 1330,
   "digest": null,
   "digest_skipped": "credits"
  },
  {
   "id": "the-rest-of-the-seminar",
   "heading": "The rest of the seminar",
   "level": 2,
   "span": [
    29630,
    31082
   ],
   "chunks": [
    [
     29630,
     31082
    ]
   ],
   "chars": 1452,
   "digest": null,
   "digest_skipped": "credits"
  },
  {
   "id": "who-ran-this-and-thanks",
   "heading": "Who ran this, and thanks",
   "level": 2,
   "span": [
    31082,
    32555
   ],
   "chunks": [
    [
     31082,
     32555
    ]
   ],
   "chars": 1473,
   "digest": null,
   "digest_skipped": "credits"
  },
  {
   "id": "sources",
   "heading": "Sources",
   "level": 2,
   "span": [
    32555,
    52842
   ],
   "chunks": [
    [
     32555,
     33067
    ],
    [
     33067,
     52842
    ]
   ],
   "chars": 20287,
   "digest": null,
   "digest_skipped": null
  }
 ],
 "chips": [
  {
   "id": "c-e4edaea5",
   "q": "what is the history of the ollama project?",
   "a": "The project was founded by Jeffrey Morgan and Michael Chiang, who previously worked on Kitematic. The repository was created on 2023-06-26 and was originally named proto before being renamed to ollama eighteen minutes later.",
   "cites": [
    "who-are-these-people"
   ],
   "published": false,
   "publish_state": "held",
   "quote": "",
   "quote_cite": ""
  },
  {
   "id": "c-233d6e68",
   "q": "what api routes does ollama provide?",
   "a": "The API includes /api/generate and /api/chat for answers, /api/embed for embeddings, and /api/ps for loaded models. It also provides library routes to pull, push, create, copy, show, list, and delete models.",
   "cites": [
    "what-it-speaks-and-where-it-runs"
   ],
   "published": false,
   "publish_state": "held",
   "quote": "",
   "quote_cite": ""
  },
  {
   "id": "c-273b5220",
   "q": "how has the default context length changed?",
   "a": "The default context length moved from 2,048 to 4,096 tokens in April 2025. By February 2026, it changed again to automatically select 4,096, 32,768, or 262,144 tokens based on the total memory of the detected graphics cards.",
   "cites": [
    "the-defaults-that-moved"
   ],
   "published": false,
   "publish_state": "held",
   "quote": "",
   "quote_cite": ""
  }
 ],
 "related": [
  {
   "slug": "the-free-speed-wasnt-free",
   "why": "shares ground with § The defaults that moved · § The part that isn't about speed"
  },
  {
   "slug": "how-we-work",
   "why": "shares ground with § The engine underneath: llama.cpp · § The plain-english version"
  },
  {
   "slug": "a-short-history-of-vllm",
   "why": "shares ground with § The engine underneath: llama.cpp · § Who are these people, and where did they come from?"
  }
 ],
 "thanks": "## Who ran this, and thanks {#who-ran-this-and-thanks}\n\nThanks to **Ollama** (MIT), its team and its contributors, whose release notes, commits and documentation are dated and still up, which is why this page could be written from primary sources rather than from memory; to **Georgi Gerganov** and **the ggml authors** for **llama.cpp** (MIT), the engine at the bottom of most of this shelf's language-model numbers, and for a server README that states its defaults; to **Apple** for **MLX** (MIT). On NVIDIA cards that stack runs over **CUDA** (NVIDIA, proprietary, the one closed piece in it). The founding and funding lines rest on Ollama's own posts, Jeffrey Morgan's words on **Hacker News**, **Docker**'s 2015 announcement, **Y Combinator**'s directory, the lead investor **Tomasz Tunguz**'s own post, and reports by **TNW** and **BetaKit**; the exposure history on **Wiz**'s disclosure and the **SentinelLABS** and **Censys** research, in SentinelLABS's own report; the Hugging Face path on **Hugging Face**'s own documentation; the Turbo page on the **Internet Archive**'s Wayback Machine, which kept it after the live address moved; and the release, commit and pull-request dates on **GitHub**'s record of the repository. None of them owed us anything. A small human team asked for this page, chose what it would and would not claim, and signed off on it; a fleet of AI agents fetched and read every source listed below and drafted it under that team's rulings.",
 "kit": null,
 "seat_class": {
  "writer": "gemma-class",
  "judge": null,
  "writer_runtime": "vllm"
 },
 "bench": {
  "bullets_written": 3,
  "bullets_kept": 0,
  "digests_written": 11,
  "digests_kept": 2,
  "chips_written": 8,
  "chips_kept": 3,
  "chips_grounded": 0,
  "chips_published": 0,
  "dropped_by": {
   "new_noun": 1,
   "figure": 0,
   "length": 0,
   "cite": 0,
   "judge": 0,
   "quote": 0,
   "directive": 0,
   "redaction": 1,
   "profanity": 0,
   "identifier": 0,
   "bare_figure": 1,
   "house_voice": 0,
   "hand-edit": 14
  },
  "new_noun_tokens_checked": [
   "0.32.13",
   "0.32.9",
   "048",
   "096",
   "1.1",
   "144",
   "2",
   "20",
   "2023-03-10",
   "2023-06-26",
   "2025",
   "2026",
   "2026-08-16",
   "262",
   "32",
   "4",
   "512",
   "65M",
   "768",
   "88M",
   "AMD",
   "API",
   "Apple",
   "April",
   "B",
   "Benchmark",
   "C",
   "CORS",
   "Chiang",
   "Docker",
   "February",
   "GGUF",
   "GPUs",
   "Gerganov",
   "GitHub",
   "Go",
   "Hykes",
   "Jeffrey",
   "Kitematic",
   "License",
   "Linux",
   "MIT",
   "MLX",
   "Metal",
   "Michael",
   "Modelfile",
   "Morgan",
   "NVIDIA",
   "OLLAMANUMPARALLEL",
   "Ollama",
   "Ollama's",
   "Pro",
   "ROCm",
   "Series",
   "Theory",
   "Tomasz",
   "Tunguz",
   "University",
   "VPN",
   "Ventures",
   "Vulkan",
   "Waterloo",
   "Windows",
   "YC",
   "v0.0.1",
   "v0.40.0"
  ],
  "new_noun_tokens_withheld": 1,
  "figure_definition": "v3",
  "figure_boundary": "guarded",
  "drops": [
   {
    "kind": "digest",
    "reason": "new_noun",
    "item": null,
    "item_chars": 8,
    "withheld": "a string naming something the article does not",
    "detail": ""
   },
   {
    "kind": "bullet",
    "reason": "bare_figure",
    "item": "the server turns away new requests beyond a queue of 512",
    "detail": "the cited section writes this figure as '512 requests' and the bullet prints '512' alone"
   },
   {
    "kind": "chip",
    "reason": "redaction",
    "item": null,
    "item_chars": 278,
    "withheld": "a string carrying a fenced literal",
    "detail": ""
   },
   {
    "kind": "bullet",
    "reason": "hand-edit",
    "item": null,
    "item_chars": 27,
    "text_sha": "bd27853590aa",
    "figure": "88",
    "withheld": "one bullet removed from this pack by hand",
    "removed_utc": "2026-10-02",
    "why": "the line gives $88M as the company's total with no date; the section has the figure in the company's own words on 2026-07-09, and the page dates it each time it states it (by July 2026; had raised $88M by 2026-07-09), so the line reads as a current total the page does not claim",
    "detail": "removed from this pack by hand on 2026-10-02 (UTC), after the writer ran and after the gates had counted: the line gives $88M as the company's total with no date; the section has the figure in the company's own words on 2026-07-09, and the page dates it each time it states it (by July 2026; had raised $88M by 2026-07-09), so the line reads as a current total the page does not claim. Not a gate drop, and recorded here so the ledger adds up."
   },
   {
    "kind": "bullet",
    "reason": "hand-edit",
    "item": null,
    "item_chars": 84,
    "text_sha": "4b7f289f2b8c",
    "figure": "2023-06-26",
    "withheld": "one bullet removed from this pack by hand",
    "removed_utc": "2026-10-02",
    "why": "the line counts its eighteen minutes from a date, which does not parse: the section counts them from the repository going up on GitHub on 2023-06-26, so the rename came about eighteen minutes after that first upload, on the same day, and the line drops the event the minutes are counted from",
    "detail": "removed from this pack by hand on 2026-10-02 (UTC), after the writer ran and after the gates had counted: the line counts its eighteen minutes from a date, which does not parse: the section counts them from the repository going up on GitHub on 2023-06-26, so the rename came about eighteen minutes after that first upload, on the same day, and the line drops the event the minutes are counted from. Not a gate drop, and recorded here so the ledger adds up."
   },
   {
    "kind": "digest",
    "reason": "hand-edit",
    "item": null,
    "item_chars": 256,
    "text_sha": "da397f29e82c",
    "section": "who-are-these-people",
    "withheld": "one section digest removed from this pack by hand",
    "removed_utc": "2026-10-02",
    "why": "the digest carries a claim this section does not hold: that the project was inspired by a server example, which is Morgan's sentence in the section on the engine underneath and is about llama.cpp's server example, a referent the digest drops; it also states the founders' college as fact, where the page gives the college as BetaKit's report",
    "detail": "removed from this pack by hand on 2026-10-02 (UTC), after the writer ran and after the gates had counted: the digest carries a claim this section does not hold: that the project was inspired by a server example, which is Morgan's sentence in the section on the engine underneath and is about llama.cpp's server example, a referent the digest drops; it also states the founders' college as fact, where the page gives the college as BetaKit's report. Not a gate drop, and recorded here so the ledger adds up."
   },
   {
    "kind": "digest",
    "reason": "hand-edit",
    "item": null,
    "item_chars": 224,
    "text_sha": "29beebc8e1e9",
    "section": "who-owns-it",
    "withheld": "one section digest removed from this pack by hand",
    "removed_utc": "2026-10-02",
    "why": "the digest says the company has raised $88M with no date; the section has the figure in the company's own words on 2026-07-09, and the page dates it each time it states it (had raised $88M by 2026-07-09), so the digest reads as a current total the page does not claim",
    "detail": "removed from this pack by hand on 2026-10-02 (UTC), after the writer ran and after the gates had counted: the digest says the company has raised $88M with no date; the section has the figure in the company's own words on 2026-07-09, and the page dates it each time it states it (had raised $88M by 2026-07-09), so the digest reads as a current total the page does not claim. Not a gate drop, and recorded here so the ledger adds up."
   },
   {
    "kind": "digest",
    "reason": "hand-edit",
    "item": null,
    "item_chars": 244,
    "text_sha": "74f61be49a23",
    "section": "how-it-serves-a-request",
    "withheld": "one section digest removed from this pack by hand",
    "removed_utc": "2026-10-02",
    "why": "the digest says the window is set by available memory; the section says it is chosen from the memory of every card the server can see, added up (262,144 tokens from 47 GiB, 32,768 from 23 GiB, 4,096 below that), and the page uses the words available memory for the slot count's older rule, which read free memory",
    "detail": "removed from this pack by hand on 2026-10-02 (UTC), after the writer ran and after the gates had counted: the digest says the window is set by available memory; the section says it is chosen from the memory of every card the server can see, added up (262,144 tokens from 47 GiB, 32,768 from 23 GiB, 4,096 below that), and the page uses the words available memory for the slot count's older rule, which read free memory. Not a gate drop, and recorded here so the ledger adds up."
   },
   {
    "kind": "digest",
    "reason": "hand-edit",
    "item": null,
    "item_chars": 239,
    "text_sha": "60d79cf477d6",
    "section": "who-can-talk-to-it",
    "withheld": "one section digest removed from this pack by hand",
    "removed_utc": "2026-10-02",
    "why": "the digest says the company recommends a VPN or a proxy, in the present tense; the section gives two comments of February 2025, a team member's 'Usually I recommend using a VPN' and a collaborator's 'The core team currently recommends using a proxy', and the page's summary dates it: in February 2025 the maintainers recommended a VPN or a proxy",
    "detail": "removed from this pack by hand on 2026-10-02 (UTC), after the writer ran and after the gates had counted: the digest says the company recommends a VPN or a proxy, in the present tense; the section gives two comments of February 2025, a team member's 'Usually I recommend using a VPN' and a collaborator's 'The core team currently recommends using a proxy', and the page's summary dates it: in February 2025 the maintainers recommended a VPN or a proxy. Not a gate drop, and recorded here so the ledger adds up."
   },
   {
    "kind": "digest",
    "reason": "hand-edit",
    "item": null,
    "item_chars": 251,
    "text_sha": "98dab80775c5",
    "section": "what-to-take-with-you",
    "withheld": "one section digest removed from this pack by hand",
    "removed_utc": "2026-10-02",
    "why": "the digest says the server binds the loopback address by default and drops the exception the section puts in the same sentence: except in its official Docker image, which at v0.34.4 sets the server to listen on every interface",
    "detail": "removed from this pack by hand on 2026-10-02 (UTC), after the writer ran and after the gates had counted: the digest says the server binds the loopback address by default and drops the exception the section puts in the same sentence: except in its official Docker image, which at v0.34.4 sets the server to listen on every interface. Not a gate drop, and recorded here so the ledger adds up."
   },
   {
    "kind": "digest",
    "reason": "hand-edit",
    "item": null,
    "item_chars": 225,
    "text_sha": "52e67ce75ac1",
    "section": "sources",
    "withheld": "one section digest removed from this pack by hand",
    "removed_utc": "2026-10-02",
    "why": "the Sources list names real people (founders, maintainers, investors, researchers); a model does not paraphrase a named third party, and pack_corpus.NEVER_GENERATED does not match the heading",
    "detail": "removed from this pack by hand on 2026-10-02 (UTC), after the writer ran and after the gates had counted: the Sources list names real people (founders, maintainers, investors, researchers); a model does not paraphrase a named third party, and pack_corpus.NEVER_GENERATED does not match the heading. Not a gate drop, and recorded here so the ledger adds up."
   },
   {
    "kind": "chip",
    "reason": "hand-edit",
    "item": null,
    "item_chars": 303,
    "text_sha": "205b6750e537",
    "chip_id": "c-4b880d94",
    "withheld": "one chip removed from this pack by hand",
    "removed_utc": "2026-10-02",
    "why": "the answer gives the first README's line of 2023-07-08, a fast inference server written in Go and powered by llama.cpp, as what Ollama is today, without saying whose words they are; the page quotes that line as the README's and makes no speed claim of its own, and cgo, which the answer names, is not in its cited section",
    "detail": "removed from this pack by hand on 2026-10-02 (UTC), after the writer ran and after the gates had counted: the answer gives the first README's line of 2023-07-08, a fast inference server written in Go and powered by llama.cpp, as what Ollama is today, without saying whose words they are; the page quotes that line as the README's and makes no speed claim of its own, and cgo, which the answer names, is not in its cited section. Not a gate drop, and recorded here so the ledger adds up."
   },
   {
    "kind": "chip",
    "reason": "hand-edit",
    "item": null,
    "item_chars": 241,
    "text_sha": "fa4954fc4e19",
    "chip_id": "c-70ea5947",
    "withheld": "one chip removed from this pack by hand",
    "removed_utc": "2026-10-02",
    "why": "the answer gives $88M as the company's total with no date; the section has the figure in the company's own words on 2026-07-09, and the page dates it each time it states it (had raised $88M by 2026-07-09); this pack's second bullet and its digest of this section left for the same reason",
    "detail": "removed from this pack by hand on 2026-10-02 (UTC), after the writer ran and after the gates had counted: the answer gives $88M as the company's total with no date; the section has the figure in the company's own words on 2026-07-09, and the page dates it each time it states it (had raised $88M by 2026-07-09); this pack's second bullet and its digest of this section left for the same reason. Not a gate drop, and recorded here so the ledger adds up."
   },
   {
    "kind": "chip",
    "reason": "hand-edit",
    "item": null,
    "item_chars": 240,
    "text_sha": "b868e459ceda",
    "chip_id": "c-c91fd668",
    "withheld": "one chip removed from this pack by hand",
    "removed_utc": "2026-10-02",
    "why": "the answer says a CORS filter and an allowed-hosts check prevent unauthorized access from browsers, and drops the condition the section puts on the second: it runs only while the server is bound to the loopback address; it also gives the loopback default without the official Docker image's exception, and the section says neither check asks who you are",
    "detail": "removed from this pack by hand on 2026-10-02 (UTC), after the writer ran and after the gates had counted: the answer says a CORS filter and an allowed-hosts check prevent unauthorized access from browsers, and drops the condition the section puts on the second: it runs only while the server is bound to the loopback address; it also gives the loopback default without the official Docker image's exception, and the section says neither check asks who you are. Not a gate drop, and recorded here so the ledger adds up."
   },
   {
    "kind": "digest",
    "reason": "hand-edit",
    "item": null,
    "item_chars": 243,
    "text_sha": "7d2e16438a17",
    "section": "the-server-under-most-of-our-numbers",
    "withheld": "one section digest removed from this pack by hand",
    "removed_utc": "2026-10-02",
    "why": "the cited section never states the cause; 'because Ollama was upgraded' is the page summary's sentence, not this section's",
    "detail": "removed from this pack by hand on 2026-10-02 (UTC), after the writer ran and after the gates had counted: the cited section never states the cause; 'because Ollama was upgraded' is the page summary's sentence, not this section's. Not a gate drop, and recorded here so the ledger adds up."
   },
   {
    "kind": "chip",
    "reason": "hand-edit",
    "item": null,
    "item_chars": 302,
    "text_sha": "4c1f0973541e",
    "chip_id": "c-488a2fd6",
    "withheld": "one chip removed from this pack by hand",
    "removed_utc": "2026-10-02",
    "why": "gives the engines for GGUF and safetensors models as what recent releases use, with no version; the page dates them to v0.30.0, reads them at v0.34.4, and says a default that holds at 0.34 may not at 0.36",
    "detail": "removed from this pack by hand on 2026-10-02 (UTC), after the writer ran and after the gates had counted: gives the engines for GGUF and safetensors models as what recent releases use, with no version; the page dates them to v0.30.0, reads them at v0.34.4, and says a default that holds at 0.34 may not at 0.36. Not a gate drop, and recorded here so the ledger adds up."
   },
   {
    "kind": "digest",
    "reason": "hand-edit",
    "item": null,
    "item_chars": 270,
    "text_sha": "035c17f0b9eb",
    "section": "what-it-speaks-and-where-it-runs",
    "withheld": "one section digest removed from this pack by hand",
    "removed_utc": "2026-10-02",
    "why": "drops two conditions the section states: that MLX support is in preview, and the NVIDIA hardware floor it names",
    "detail": "removed from this pack by hand on 2026-10-02 (UTC), after the writer ran and after the gates had counted: drops two conditions the section states: that MLX support is in preview, and the NVIDIA hardware floor it names. Not a gate drop, and recorded here so the ledger adds up."
   }
  ]
 },
 "generated_utc": "2026-10-02T03:45:59Z"
}
