{"id":23281994,"url":"https://github.com/ndimensional/prototype","last_synced_at":"2025-08-21T13:33:12.192Z","repository":{"id":47749722,"uuid":"155439961","full_name":"nDimensional/prototype","owner":"nDimensional","description":"A scratch space for notes, links, reminders, and whatever else you want to keep around","archived":false,"fork":false,"pushed_at":"2023-04-29T18:29:52.000Z","size":5247,"stargazers_count":10,"open_issues_count":4,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-12-16T18:35:47.880Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nDimensional.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-10-30T18:54:10.000Z","updated_at":"2024-08-06T21:19:40.000Z","dependencies_parsed_at":"2022-08-23T07:10:20.592Z","dependency_job_id":null,"html_url":"https://github.com/nDimensional/prototype","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nDimensional%2Fprototype","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nDimensional%2Fprototype/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nDimensional%2Fprototype/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nDimensional%2Fprototype/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nDimensional","download_url":"https://codeload.github.com/nDimensional/prototype/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":230516201,"owners_count":18238353,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-12-20T00:13:31.842Z","updated_at":"2024-12-20T00:13:32.601Z","avatar_url":"https://github.com/nDimensional.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# prototype\n\n\u003e A scratch space for notes, links, reminders, and whatever else you want to keep around\n\nPrototype is a WebExtension that replaces the new tab page with a self-styling scratchpad. It's built with [SlateJS](https://github.com/ianstormtaylor/slate).\n\nYou can play with it at https://prototypical.xyz.\n\n## Install\n\n- [Chrome](https://chrome.google.com/webstore/detail/prototype/mcfikpkmjbdlfjdlmbeodbfkenhpieam)\n- [Firefox](https://addons.mozilla.org/en-US/firefox/addon/prototypical/)\n\nOr build and package the ZIP yourself:\n\n```\nnpm install\nnpm run build -- --env.hydrate --env.storage\nnpm run package\n```\n\n- The `--env.hydrate` flag enables \"local sever-side rendering\" where an HTML snapshot of the page will get written to localStorage every 2 seconds (and `onbeforeunload`), in addition to the regular JSON representation of the editor's value. The page will check for this snapshot on initial page and render it with `React.hydrate` if it exists.\n- The `--env.storage` flag writes the JSON editor value and page settings to the WebExtension [Storage API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage) `window.browser.storage` instead of `localStorage`.\n\n## Philosophy\n\n**See the whole state**. The page is \"rendered as source\" - there are no menus or buttons or [invisible formatting](https://xkcd.com/2109/) or any hidden state whatsoever. Every piece of style is a pure function of the _visible text_. This makes it easy to learn, easy to manipulate, easy to copy \u0026 paste, and grounds reading \u0026 writing in the same shared environment.\n\nCtrl-B and Ctrl-I keyboard shortcuts are deliberately excluded. 🙃\n\n## Relation to Markdown\n\nThe Prototype editor does not use Markdown. It uses its own markup language, also called Prototype.\n\nThe most symbolic difference is using a single pair of asterisks for bold and a single pair of underscores for italics. This is what Slack and Facebook Messenger use for styling; it makes more sense to most people and two-character style directives look atrocious and waste space.\n\nThere are no ordered lists, and only `-` makes unordered lists (not `*`). List elements are indented with tab characters, not spaces.\n\nThere are checklists, which start with `[ ]` or `[x]`. Their checked state can be toggled with Ctrl-Enter or Cmd-Enter.\n\nThere's no way to escape style characters.\n\nThere are only H1-H3 headers.\n\nThere are no newlines within paragraphs. With the exeption of lists (which are conceptually grouped as a single \"list\" block) and code blocks (eventually), every newline character begins an independent, self-contained block.\n\nImages can be embedded either with `![alt text](http://web.site)` or just with `!http://web.site`. This mirrors links, which can be inlined like Markdown's `[text](http://web.site)`, but also auto-link when pasted directly as `http://web.site`.\n\n## Roadmap\n\n**Code blocks**. These are straightforward and just need implementation. They're identified by an opening line matching ` /^```[-a-z]*$/ ` and extend to a closing line matching ` /^```$/ `.\n\n**Inline tables as TSVs**. This is spiritually pure interpretation of the tab character, and is vastly superior to Markdown's ASCII-art approach. This means single-column tables won't be possible, and that any line with a tab character will be rendered as a table row. There are lots of edges cases around cursor \u0026 selection behavior to iron out first.\n\n**Inline LaTeX**. This is on hold mostly for performance reasons. [KaTeX](https://github.com/KaTeX/KaTeX) is large and requires its own CSS stylesheet; ideally the library could be loaded dynamically (only if necessary) and each instance of `$inline latex$` would render in a shadow root with a single global instance of the KaTeX CSS attached as a [constructable stylesheet](https://developers.google.com/web/updates/2019/02/constructable-stylesheets).\n\n**Definitions**. Allow arbitrary URI \"terms\" to be defined with `[text of term]: http://web.site`, and then used as inline links (`[text of term]`), inline images (`![text of term]`), This continues the generalization of Markdown's handling of images described earlier, where the `[link text](http://web.site)` construction is interpreted as an \"inline definition\" (also allowing `[link text]` to be re-used further on). This sort of retcons an object model onto Markdown's link syntax.\n\n**Margin notes**. Re-use the term definition syntax for unstructured text: `[text of term]: some unstructured text as a margin note`, and render `some unstructured text as a margin note` in the margin wherever `[text of term]` is invoked. Consider limiting margin notes to numeric terms.\n\n**Transclusion by content hash**. Why not?\n\n## Fonts\n\n- [iA Writer Quatto](https://github.com/iaolo/iA-Fonts/tree/master/iA%20Writer%20Quattro), a fork of [IBM Plex](https://github.com/IBM/plex)\n- [ET Book](https://edwardtufte.github.io/et-book/) by Dmitry Krasny, Bonnie Scranton, and Edward Tufte\n- [Fira Code](https://github.com/tonsky/FiraCode), an extension of Fira Mono by Carrois Apostrophe with programming ligatures\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fndimensional%2Fprototype","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fndimensional%2Fprototype","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fndimensional%2Fprototype/lists"}