The full design is recorded as decision records under
docs/adr/
and narrative documents under
docs/design/.
A design document describes how one part of ntropy works today. A decision
record holds one choice behind that, dated, in the order the choices were
made.
Design documents
- The ANSI engine
- CLI reference (v1)
- Configuration
- Encryption
- The HTML engine
- Language server
- Query and search
- Rendering
- Shell integration
- Site export
- Site frontend
- The typst engine
- Vault layout and views
Decision records
- 0001. Record architecture decisions
- 0002. Stateless filesystem scanning over a derived index
- 0003. Flat single-vault storage layout
- 0004. Note identity and filename strategy
- 0005. Permissive frontmatter schema with recognized fields
- 0006. Hierarchical tags by slash convention
- 0007. Vault directory layout
- 0008. Materialized symlink views
- 0009. Generic group-by-field view definitions
- 0010. Render derived dates in system local timezone
- 0011. Embed ripgrep libraries for full-text search
- 0012. Query DSL with hand-rolled parser
- 0013. Library/binary split with thiserror and anyhow
- 0014. Interactive-by-default CLI with auto output mode
- 0015. Editor integration and new-note flow
- 0016. Configuration format, location and vault resolution
- 0017. Note templates with placeholder substitution
- 0018. CLI command surface
- 0019. Scan robustness and resource tolerance
- 0020. Unix-only v1 with soft performance target
- 0021. Testing strategy with insta across all layers
- 0022. Distribute via crates.io for v1 under MPL-2.0
- 0023. Slug, tag and disambiguator normalization rules
- 0024. v1 dependency selection
- 0025. Plain output format, ordering and edit ambiguity
- 0026. Project-local vault pointer file
- 0027. In-house fuzzy picker over nucleo and crossterm
- 0028. Note-to-note links as standard Markdown links
- 0029. Language server over lsp-server with a session scan cache
- 0030. Replace the ripgrep stack with the regex crate for full-text search
- 0031. Merge edit into search
- 0032. Auto-managed .gitignore for view directories
- 0033. Aligned plain-table output
- 0034. Context-aware frontmatter substitution
- 0035. Generic --print flag replaces --no-edit
- 0036. Interactivity keyed to the controlling terminal
- 0037. Render command surface
- 0038. Pluggable rendering engine with pandoc and typst
- 0039. Vault seed content as embedded files
- 0040. Custom typst engine with own Markdown emitter
- 0041. Opt-in vault encryption with age
- 0042. Empty note creation for machine authors
- 0043. Write command for note content
- 0044. Cross-document links between rendered notes
- 0045. Vault render themes
- 0046. Static site export with a
sitecommand and anhtmlrender format - 0047. Themes directory split by type
- 0048. Site themes as stylesheets and assets
- 0049. Shared Markdown walk with Typst and HTML emitters
- 0050. Page templates with minijinja
- 0051. Browser-side code in TypeScript with a committed build
- 0052. Client-side search as a TypeScript reimplementation of the query DSL
- 0053. Syntax highlighting with Shiki in the browser
- 0054. Site navigation and URL scheme
- 0055. Theme directory layout with fonts, icons, and embedded assets
- 0056. Sidebar order, labels, landing notes, and a nav table
- 0057. The html artifact as a page with a files directory
- 0058. Theme templates overriding the built-in ones by name
- 0059. Width-aware picker columns
- 0060. Additional picker actions on accept keys
- 0061. Global config directory override
- 0064. View names are validated slug segments
- 0066. Editor value run through the shell
- 0067. Duplicate note IDs
- 0068. Unique view leaf names per directory, ignoring case
- 0069. Picker paging keys and a hand-drawn renderer
- 0070. Trust model for discovered vaults
- 0071. Escaping untrusted text for the terminal
- 0072. Export paths stay inside the vault and the output
- 0073. What html and site exports copy from the vault
- 0074. typst runs in ntropy's working directory
- 0075. Version numbers cover the CLI, not the library
- 0076. Adjacent terms in a query are an implicit and
- 0077. Punctuation in slugs and tags
- 0078. Field predicates ignore name case and compare numbers by their spelling
- 0079. Note writes are flushed to disk
- 0080. A rekey stages its new key before replacing notes
- 0081. Numbers and booleans in titles and tags read as text
- 0082. ANSI render format drawn by patine
- 0083.
showprints a note drawn for the terminal - 0084. The ansi drawing follows patine 2.2
- 0085. Page templates render with minijinja 3
- 0086. Note links may carry a heading anchor
- 0087. Heading ids avoid the ids of the page
- 0088. Links to a note's own headings resolve in its PDF
- 0089. Previous and next run through the whole sidebar