Latest commit

History

287 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Trama ✍️

A file-first desktop application for writers and worldbuilders, built with Electron, Preact, and Tailwind CSS.

Trama opens a folder on your machine and works directly with standard Markdown files and YAML frontmatter. Your manuscript, outline, and lore stay on disk in formats you can edit anywhere.

🚀 Features

✅ Currently Implemented

Project & files

  • File-first workflow — Data lives in your folders; Trama reads and writes real .md files and keeps .trama.index.json in sync.
  • Section sidebar — Trees scoped to book/, outline/, and lore/ with filter, create/rename/delete, and drag-and-drop reorder.
  • Smart conflict handling — Detects external file changes and helps you resolve edits safely.
  • Git version history — Save snapshots, browse revisions per document, preview past versions in the editor, and restore when you need to roll back. Local Git on your machine; no remote or account required.

Editing

  • Rich Markdown editor — Quill-based visual editing with Markdown persistence and YAML frontmatter.
  • Split workspace — Two panes side by side, draggable divider, per-pane back/forward history, and shared zoom.
  • Focus mode & fullscreen — Distraction-free writing with line, sentence, or paragraph emphasis around the caret.
  • Paste from Markdown — Clipboard Markdown becomes rich editor content.
  • Smart typography — Common shortcuts (e.g. -- → em dash) with undo support.
  • Wiki tag links — Tag index stays fresh after saves; Ctrl/Cmd+click jumps to linked documents.
  • Images — Embedded images are stored under project-local res/ when you save.

Special document types

  • Map documents — Image-based maps with pan/zoom and interactive markers tied to your lore.

Themes & chrome

  • Appearance — Light, dark, and system themes.
  • Context menu — Workspace actions (split, focus, export, and more) from the native right-click menu.

Import, export & integrations

  • AI import / export — Structured clipboard import (=== FILE: … ===) with preview and replace/append modes; export selected project files for LLM workflows, with optional frontmatter stripping.
  • Book export — Multi-format export (Markdown, HTML, DOCX, EPUB, PDF) with layout directives and images.
  • ZuluPad import — Bring .zulu notes into your project structure.

⏳ Planned

  • Project templates — Pre-defined schemas for characters, locations, and world-building notes.

🛠️ Tech Stack

📦 Getting Started

Prerequisites

  • Node.js (Project uses package.json with ESM)
  • npm

Installation

  1. Clone the repository:
    git clone https://github.com/luisoncpp/trama.git
    cd trama
  2. Install dependencies:
    npm install

Development

Run the development server (starts both Vite and Electron):

npm run dev

Testing

Run the test suite (Vitest):

npm run test

In agent or sandboxed environments, prefer the PowerShell runner:

powershell -ExecutionPolicy Bypass -File scripts/run-tests.ps1

For smoke tests (requires build):

npm run test:smoke

Building

To create a production-ready Windows installer:

npm run dist:win

To build without packaging:

npm run pack:win

📂 Project Structure

  • electron/: Main process, IPC handlers, and services (TypeScript).
    • ipc/handlers/: Typed IPC handler modules (project, AI, book export, Zulu, Git history).
    • services/: Document repository, index service, watcher, export pipelines.
  • src/: Preact renderer source code.
    • features/project-editor/: Domain-driven feature modules (editor, sidebar, pane workspace).
    • shared/: Shared IPC types and constants between main and renderer.
  • mds/: Design specifications, architecture docs, implementation plans, and lessons learned.
  • tests/: Comprehensive test suite (unit, integration, and smoke tests).

🧭 Developer Documentation Entry

If you are starting a new implementation conversation, begin with:

This entrypoint routes to the mandatory docs that are often missed:

🤝 Contributing

Contributions are welcome. Please read mds/dev-workflow.md for the development workflow, testing requirements, and documentation update protocol.

📄 License

GPL-3.0-or-later - see the LICENSE file for details.

About

Application for traditional novelists, provides a pleaseant UI for this task, features to keep the outlines, notes and lore organized, and integration with Git for version control. It integrates well with coding assistants(it's mostly markdown) but its focus is traditional writing(not AI writing).

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Latest commit

History

287 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Trama ✍️

A file-first desktop application for writers and worldbuilders, built with Electron, Preact, and Tailwind CSS.

Trama opens a folder on your machine and works directly with standard Markdown files and YAML frontmatter. Your manuscript, outline, and lore stay on disk in formats you can edit anywhere.

🚀 Features

✅ Currently Implemented

Project & files

  • File-first workflow — Data lives in your folders; Trama reads and writes real .md files and keeps .trama.index.json in sync.
  • Section sidebar — Trees scoped to book/, outline/, and lore/ with filter, create/rename/delete, and drag-and-drop reorder.
  • Smart conflict handling — Detects external file changes and helps you resolve edits safely.
  • Git version history — Save snapshots, browse revisions per document, preview past versions in the editor, and restore when you need to roll back. Local Git on your machine; no remote or account required.

Editing

  • Rich Markdown editor — Quill-based visual editing with Markdown persistence and YAML frontmatter.
  • Split workspace — Two panes side by side, draggable divider, per-pane back/forward history, and shared zoom.
  • Focus mode & fullscreen — Distraction-free writing with line, sentence, or paragraph emphasis around the caret.
  • Paste from Markdown — Clipboard Markdown becomes rich editor content.
  • Smart typography — Common shortcuts (e.g. -- → em dash) with undo support.
  • Wiki tag links — Tag index stays fresh after saves; Ctrl/Cmd+click jumps to linked documents.
  • Images — Embedded images are stored under project-local res/ when you save.

Special document types

  • Map documents — Image-based maps with pan/zoom and interactive markers tied to your lore.

Themes & chrome

  • Appearance — Light, dark, and system themes.
  • Context menu — Workspace actions (split, focus, export, and more) from the native right-click menu.

Import, export & integrations

  • AI import / export — Structured clipboard import (=== FILE: … ===) with preview and replace/append modes; export selected project files for LLM workflows, with optional frontmatter stripping.
  • Book export — Multi-format export (Markdown, HTML, DOCX, EPUB, PDF) with layout directives and images.
  • ZuluPad import — Bring .zulu notes into your project structure.

⏳ Planned

  • Project templates — Pre-defined schemas for characters, locations, and world-building notes.

🛠️ Tech Stack

📦 Getting Started

Prerequisites

  • Node.js (Project uses package.json with ESM)
  • npm

Installation

  1. Clone the repository:
    git clone https://github.com/luisoncpp/trama.git
    cd trama
  2. Install dependencies:
    npm install

Development

Run the development server (starts both Vite and Electron):

npm run dev

Testing

Run the test suite (Vitest):

npm run test

In agent or sandboxed environments, prefer the PowerShell runner:

powershell -ExecutionPolicy Bypass -File scripts/run-tests.ps1

For smoke tests (requires build):

npm run test:smoke

Building

To create a production-ready Windows installer:

npm run dist:win

To build without packaging:

npm run pack:win

📂 Project Structure

  • electron/: Main process, IPC handlers, and services (TypeScript).
    • ipc/handlers/: Typed IPC handler modules (project, AI, book export, Zulu, Git history).
    • services/: Document repository, index service, watcher, export pipelines.
  • src/: Preact renderer source code.
    • features/project-editor/: Domain-driven feature modules (editor, sidebar, pane workspace).
    • shared/: Shared IPC types and constants between main and renderer.
  • mds/: Design specifications, architecture docs, implementation plans, and lessons learned.
  • tests/: Comprehensive test suite (unit, integration, and smoke tests).

🧭 Developer Documentation Entry

If you are starting a new implementation conversation, begin with:

This entrypoint routes to the mandatory docs that are often missed:

🤝 Contributing

Contributions are welcome. Please read mds/dev-workflow.md for the development workflow, testing requirements, and documentation update protocol.

📄 License

GPL-3.0-or-later - see the LICENSE file for details.

About

Application for traditional novelists, provides a pleaseant UI for this task, features to keep the outlines, notes and lore organized, and integration with Git for version control. It integrates well with coding assistants(it's mostly markdown) but its focus is traditional writing(not AI writing).

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

287 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Trama ✍️

A file-first desktop application for writers and worldbuilders, built with Electron, Preact, and Tailwind CSS.

Trama opens a folder on your machine and works directly with standard Markdown files and YAML frontmatter. Your manuscript, outline, and lore stay on disk in formats you can edit anywhere.

🚀 Features

✅ Currently Implemented

Project & files

  • File-first workflow — Data lives in your folders; Trama reads and writes real .md files and keeps .trama.index.json in sync.
  • Section sidebar — Trees scoped to book/, outline/, and lore/ with filter, create/rename/delete, and drag-and-drop reorder.
  • Smart conflict handling — Detects external file changes and helps you resolve edits safely.
  • Git version history — Save snapshots, browse revisions per document, preview past versions in the editor, and restore when you need to roll back. Local Git on your machine; no remote or account required.

Editing

  • Rich Markdown editor — Quill-based visual editing with Markdown persistence and YAML frontmatter.
  • Split workspace — Two panes side by side, draggable divider, per-pane back/forward history, and shared zoom.
  • Focus mode & fullscreen — Distraction-free writing with line, sentence, or paragraph emphasis around the caret.
  • Paste from Markdown — Clipboard Markdown becomes rich editor content.
  • Smart typography — Common shortcuts (e.g. -- → em dash) with undo support.
  • Wiki tag links — Tag index stays fresh after saves; Ctrl/Cmd+click jumps to linked documents.
  • Images — Embedded images are stored under project-local res/ when you save.

Special document types

  • Map documents — Image-based maps with pan/zoom and interactive markers tied to your lore.

Themes & chrome

  • Appearance — Light, dark, and system themes.
  • Context menu — Workspace actions (split, focus, export, and more) from the native right-click menu.

Import, export & integrations

  • AI import / export — Structured clipboard import (=== FILE: … ===) with preview and replace/append modes; export selected project files for LLM workflows, with optional frontmatter stripping.
  • Book export — Multi-format export (Markdown, HTML, DOCX, EPUB, PDF) with layout directives and images.
  • ZuluPad import — Bring .zulu notes into your project structure.

⏳ Planned

  • Project templates — Pre-defined schemas for characters, locations, and world-building notes.

🛠️ Tech Stack

📦 Getting Started

Prerequisites

  • Node.js (Project uses package.json with ESM)
  • npm

Installation

  1. Clone the repository:
    git clone https://github.com/luisoncpp/trama.git
    cd trama
  2. Install dependencies:
    npm install

Development

Run the development server (starts both Vite and Electron):

npm run dev

Testing

Run the test suite (Vitest):

npm run test

In agent or sandboxed environments, prefer the PowerShell runner:

powershell -ExecutionPolicy Bypass -File scripts/run-tests.ps1

For smoke tests (requires build):

npm run test:smoke

Building

To create a production-ready Windows installer:

npm run dist:win

To build without packaging:

npm run pack:win

📂 Project Structure

  • electron/: Main process, IPC handlers, and services (TypeScript).
    • ipc/handlers/: Typed IPC handler modules (project, AI, book export, Zulu, Git history).
    • services/: Document repository, index service, watcher, export pipelines.
  • src/: Preact renderer source code.
    • features/project-editor/: Domain-driven feature modules (editor, sidebar, pane workspace).
    • shared/: Shared IPC types and constants between main and renderer.
  • mds/: Design specifications, architecture docs, implementation plans, and lessons learned.
  • tests/: Comprehensive test suite (unit, integration, and smoke tests).

🧭 Developer Documentation Entry

If you are starting a new implementation conversation, begin with:

This entrypoint routes to the mandatory docs that are often missed:

🤝 Contributing

Contributions are welcome. Please read mds/dev-workflow.md for the development workflow, testing requirements, and documentation update protocol.

📄 License

GPL-3.0-or-later - see the LICENSE file for details.

About

Application for traditional novelists, provides a pleaseant UI for this task, features to keep the outlines, notes and lore organized, and integration with Git for version control. It integrates well with coding assistants(it's mostly markdown) but its focus is traditional writing(not AI writing).

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

287 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Trama ✍️

A file-first desktop application for writers and worldbuilders, built with Electron, Preact, and Tailwind CSS.

Trama opens a folder on your machine and works directly with standard Markdown files and YAML frontmatter. Your manuscript, outline, and lore stay on disk in formats you can edit anywhere.

🚀 Features

✅ Currently Implemented

Project & files

  • File-first workflow — Data lives in your folders; Trama reads and writes real .md files and keeps .trama.index.json in sync.
  • Section sidebar — Trees scoped to book/, outline/, and lore/ with filter, create/rename/delete, and drag-and-drop reorder.
  • Smart conflict handling — Detects external file changes and helps you resolve edits safely.
  • Git version history — Save snapshots, browse revisions per document, preview past versions in the editor, and restore when you need to roll back. Local Git on your machine; no remote or account required.

Editing

  • Rich Markdown editor — Quill-based visual editing with Markdown persistence and YAML frontmatter.
  • Split workspace — Two panes side by side, draggable divider, per-pane back/forward history, and shared zoom.
  • Focus mode & fullscreen — Distraction-free writing with line, sentence, or paragraph emphasis around the caret.
  • Paste from Markdown — Clipboard Markdown becomes rich editor content.
  • Smart typography — Common shortcuts (e.g. -- → em dash) with undo support.
  • Wiki tag links — Tag index stays fresh after saves; Ctrl/Cmd+click jumps to linked documents.
  • Images — Embedded images are stored under project-local res/ when you save.

Special document types

  • Map documents — Image-based maps with pan/zoom and interactive markers tied to your lore.

Themes & chrome

  • Appearance — Light, dark, and system themes.
  • Context menu — Workspace actions (split, focus, export, and more) from the native right-click menu.

Import, export & integrations

  • AI import / export — Structured clipboard import (=== FILE: … ===) with preview and replace/append modes; export selected project files for LLM workflows, with optional frontmatter stripping.
  • Book export — Multi-format export (Markdown, HTML, DOCX, EPUB, PDF) with layout directives and images.
  • ZuluPad import — Bring .zulu notes into your project structure.

⏳ Planned

  • Project templates — Pre-defined schemas for characters, locations, and world-building notes.

🛠️ Tech Stack

📦 Getting Started

Prerequisites

  • Node.js (Project uses package.json with ESM)
  • npm

Installation

  1. Clone the repository:
    git clone https://github.com/luisoncpp/trama.git
    cd trama
  2. Install dependencies:
    npm install

Development

Run the development server (starts both Vite and Electron):

npm run dev

Testing

Run the test suite (Vitest):

npm run test

In agent or sandboxed environments, prefer the PowerShell runner:

powershell -ExecutionPolicy Bypass -File scripts/run-tests.ps1

For smoke tests (requires build):

npm run test:smoke

Building

To create a production-ready Windows installer:

npm run dist:win

To build without packaging:

npm run pack:win

📂 Project Structure

  • electron/: Main process, IPC handlers, and services (TypeScript).
    • ipc/handlers/: Typed IPC handler modules (project, AI, book export, Zulu, Git history).
    • services/: Document repository, index service, watcher, export pipelines.
  • src/: Preact renderer source code.
    • features/project-editor/: Domain-driven feature modules (editor, sidebar, pane workspace).
    • shared/: Shared IPC types and constants between main and renderer.
  • mds/: Design specifications, architecture docs, implementation plans, and lessons learned.
  • tests/: Comprehensive test suite (unit, integration, and smoke tests).

🧭 Developer Documentation Entry

If you are starting a new implementation conversation, begin with:

This entrypoint routes to the mandatory docs that are often missed:

🤝 Contributing

Contributions are welcome. Please read mds/dev-workflow.md for the development workflow, testing requirements, and documentation update protocol.

📄 License

GPL-3.0-or-later - see the LICENSE file for details.

About

Application for traditional novelists, provides a pleaseant UI for this task, features to keep the outlines, notes and lore organized, and integration with Git for version control. It integrates well with coding assistants(it's mostly markdown) but its focus is traditional writing(not AI writing).

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Latest commit

History

287 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Trama ✍️

A file-first desktop application for writers and worldbuilders, built with Electron, Preact, and Tailwind CSS.

Trama opens a folder on your machine and works directly with standard Markdown files and YAML frontmatter. Your manuscript, outline, and lore stay on disk in formats you can edit anywhere.

🚀 Features

✅ Currently Implemented

Project & files

  • File-first workflow — Data lives in your folders; Trama reads and writes real .md files and keeps .trama.index.json in sync.
  • Section sidebar — Trees scoped to book/, outline/, and lore/ with filter, create/rename/delete, and drag-and-drop reorder.
  • Smart conflict handling — Detects external file changes and helps you resolve edits safely.
  • Git version history — Save snapshots, browse revisions per document, preview past versions in the editor, and restore when you need to roll back. Local Git on your machine; no remote or account required.

Editing

  • Rich Markdown editor — Quill-based visual editing with Markdown persistence and YAML frontmatter.
  • Split workspace — Two panes side by side, draggable divider, per-pane back/forward history, and shared zoom.
  • Focus mode & fullscreen — Distraction-free writing with line, sentence, or paragraph emphasis around the caret.
  • Paste from Markdown — Clipboard Markdown becomes rich editor content.
  • Smart typography — Common shortcuts (e.g. -- → em dash) with undo support.
  • Wiki tag links — Tag index stays fresh after saves; Ctrl/Cmd+click jumps to linked documents.
  • Images — Embedded images are stored under project-local res/ when you save.

Special document types

  • Map documents — Image-based maps with pan/zoom and interactive markers tied to your lore.

Themes & chrome

  • Appearance — Light, dark, and system themes.
  • Context menu — Workspace actions (split, focus, export, and more) from the native right-click menu.

Import, export & integrations

  • AI import / export — Structured clipboard import (=== FILE: … ===) with preview and replace/append modes; export selected project files for LLM workflows, with optional frontmatter stripping.
  • Book export — Multi-format export (Markdown, HTML, DOCX, EPUB, PDF) with layout directives and images.
  • ZuluPad import — Bring .zulu notes into your project structure.

⏳ Planned

  • Project templates — Pre-defined schemas for characters, locations, and world-building notes.

🛠️ Tech Stack

📦 Getting Started

Prerequisites

  • Node.js (Project uses package.json with ESM)
  • npm

Installation

  1. Clone the repository:
    git clone https://github.com/luisoncpp/trama.git
    cd trama
  2. Install dependencies:
    npm install

Development

Run the development server (starts both Vite and Electron):

npm run dev

Testing

Run the test suite (Vitest):

npm run test

In agent or sandboxed environments, prefer the PowerShell runner:

powershell -ExecutionPolicy Bypass -File scripts/run-tests.ps1

For smoke tests (requires build):

npm run test:smoke

Building

To create a production-ready Windows installer:

npm run dist:win

To build without packaging:

npm run pack:win

📂 Project Structure

  • electron/: Main process, IPC handlers, and services (TypeScript).
    • ipc/handlers/: Typed IPC handler modules (project, AI, book export, Zulu, Git history).
    • services/: Document repository, index service, watcher, export pipelines.
  • src/: Preact renderer source code.
    • features/project-editor/: Domain-driven feature modules (editor, sidebar, pane workspace).
    • shared/: Shared IPC types and constants between main and renderer.
  • mds/: Design specifications, architecture docs, implementation plans, and lessons learned.
  • tests/: Comprehensive test suite (unit, integration, and smoke tests).

🧭 Developer Documentation Entry

If you are starting a new implementation conversation, begin with:

This entrypoint routes to the mandatory docs that are often missed:

🤝 Contributing

Contributions are welcome. Please read mds/dev-workflow.md for the development workflow, testing requirements, and documentation update protocol.

📄 License

GPL-3.0-or-later - see the LICENSE file for details.

About

Application for traditional novelists, provides a pleaseant UI for this task, features to keep the outlines, notes and lore organized, and integration with Git for version control. It integrates well with coding assistants(it's mostly markdown) but its focus is traditional writing(not AI writing).

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

287 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Trama ✍️

A file-first desktop application for writers and worldbuilders, built with Electron, Preact, and Tailwind CSS.

Trama opens a folder on your machine and works directly with standard Markdown files and YAML frontmatter. Your manuscript, outline, and lore stay on disk in formats you can edit anywhere.

🚀 Features

✅ Currently Implemented

Project & files

  • File-first workflow — Data lives in your folders; Trama reads and writes real .md files and keeps .trama.index.json in sync.
  • Section sidebar — Trees scoped to book/, outline/, and lore/ with filter, create/rename/delete, and drag-and-drop reorder.
  • Smart conflict handling — Detects external file changes and helps you resolve edits safely.
  • Git version history — Save snapshots, browse revisions per document, preview past versions in the editor, and restore when you need to roll back. Local Git on your machine; no remote or account required.

Editing

  • Rich Markdown editor — Quill-based visual editing with Markdown persistence and YAML frontmatter.
  • Split workspace — Two panes side by side, draggable divider, per-pane back/forward history, and shared zoom.
  • Focus mode & fullscreen — Distraction-free writing with line, sentence, or paragraph emphasis around the caret.
  • Paste from Markdown — Clipboard Markdown becomes rich editor content.
  • Smart typography — Common shortcuts (e.g. -- → em dash) with undo support.
  • Wiki tag links — Tag index stays fresh after saves; Ctrl/Cmd+click jumps to linked documents.
  • Images — Embedded images are stored under project-local res/ when you save.

Special document types

  • Map documents — Image-based maps with pan/zoom and interactive markers tied to your lore.

Themes & chrome

  • Appearance — Light, dark, and system themes.
  • Context menu — Workspace actions (split, focus, export, and more) from the native right-click menu.

Import, export & integrations

  • AI import / export — Structured clipboard import (=== FILE: … ===) with preview and replace/append modes; export selected project files for LLM workflows, with optional frontmatter stripping.
  • Book export — Multi-format export (Markdown, HTML, DOCX, EPUB, PDF) with layout directives and images.
  • ZuluPad import — Bring .zulu notes into your project structure.

⏳ Planned

  • Project templates — Pre-defined schemas for characters, locations, and world-building notes.

🛠️ Tech Stack

📦 Getting Started

Prerequisites

  • Node.js (Project uses package.json with ESM)
  • npm

Installation

  1. Clone the repository:
    git clone https://github.com/luisoncpp/trama.git
    cd trama
  2. Install dependencies:
    npm install

Development

Run the development server (starts both Vite and Electron):

npm run dev

Testing

Run the test suite (Vitest):

npm run test

In agent or sandboxed environments, prefer the PowerShell runner:

powershell -ExecutionPolicy Bypass -File scripts/run-tests.ps1

For smoke tests (requires build):

npm run test:smoke

Building

To create a production-ready Windows installer:

npm run dist:win

To build without packaging:

npm run pack:win

📂 Project Structure

  • electron/: Main process, IPC handlers, and services (TypeScript).
    • ipc/handlers/: Typed IPC handler modules (project, AI, book export, Zulu, Git history).
    • services/: Document repository, index service, watcher, export pipelines.
  • src/: Preact renderer source code.
    • features/project-editor/: Domain-driven feature modules (editor, sidebar, pane workspace).
    • shared/: Shared IPC types and constants between main and renderer.
  • mds/: Design specifications, architecture docs, implementation plans, and lessons learned.
  • tests/: Comprehensive test suite (unit, integration, and smoke tests).

🧭 Developer Documentation Entry

If you are starting a new implementation conversation, begin with:

This entrypoint routes to the mandatory docs that are often missed:

🤝 Contributing

Contributions are welcome. Please read mds/dev-workflow.md for the development workflow, testing requirements, and documentation update protocol.

📄 License

GPL-3.0-or-later - see the LICENSE file for details.

About

Application for traditional novelists, provides a pleaseant UI for this task, features to keep the outlines, notes and lore organized, and integration with Git for version control. It integrates well with coding assistants(it's mostly markdown) but its focus is traditional writing(not AI writing).

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

287 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Trama ✍️

A file-first desktop application for writers and worldbuilders, built with Electron, Preact, and Tailwind CSS.

Trama opens a folder on your machine and works directly with standard Markdown files and YAML frontmatter. Your manuscript, outline, and lore stay on disk in formats you can edit anywhere.

🚀 Features

✅ Currently Implemented

Project & files

  • File-first workflow — Data lives in your folders; Trama reads and writes real .md files and keeps .trama.index.json in sync.
  • Section sidebar — Trees scoped to book/, outline/, and lore/ with filter, create/rename/delete, and drag-and-drop reorder.
  • Smart conflict handling — Detects external file changes and helps you resolve edits safely.
  • Git version history — Save snapshots, browse revisions per document, preview past versions in the editor, and restore when you need to roll back. Local Git on your machine; no remote or account required.

Editing

  • Rich Markdown editor — Quill-based visual editing with Markdown persistence and YAML frontmatter.
  • Split workspace — Two panes side by side, draggable divider, per-pane back/forward history, and shared zoom.
  • Focus mode & fullscreen — Distraction-free writing with line, sentence, or paragraph emphasis around the caret.
  • Paste from Markdown — Clipboard Markdown becomes rich editor content.
  • Smart typography — Common shortcuts (e.g. -- → em dash) with undo support.
  • Wiki tag links — Tag index stays fresh after saves; Ctrl/Cmd+click jumps to linked documents.
  • Images — Embedded images are stored under project-local res/ when you save.

Special document types

  • Map documents — Image-based maps with pan/zoom and interactive markers tied to your lore.

Themes & chrome

  • Appearance — Light, dark, and system themes.
  • Context menu — Workspace actions (split, focus, export, and more) from the native right-click menu.

Import, export & integrations

  • AI import / export — Structured clipboard import (=== FILE: … ===) with preview and replace/append modes; export selected project files for LLM workflows, with optional frontmatter stripping.
  • Book export — Multi-format export (Markdown, HTML, DOCX, EPUB, PDF) with layout directives and images.
  • ZuluPad import — Bring .zulu notes into your project structure.

⏳ Planned

  • Project templates — Pre-defined schemas for characters, locations, and world-building notes.

🛠️ Tech Stack

📦 Getting Started

Prerequisites

  • Node.js (Project uses package.json with ESM)
  • npm

Installation

  1. Clone the repository:
    git clone https://github.com/luisoncpp/trama.git
    cd trama
  2. Install dependencies:
    npm install

Development

Run the development server (starts both Vite and Electron):

npm run dev

Testing

Run the test suite (Vitest):

npm run test

In agent or sandboxed environments, prefer the PowerShell runner:

powershell -ExecutionPolicy Bypass -File scripts/run-tests.ps1

For smoke tests (requires build):

npm run test:smoke

Building

To create a production-ready Windows installer:

npm run dist:win

To build without packaging:

npm run pack:win

📂 Project Structure

  • electron/: Main process, IPC handlers, and services (TypeScript).
    • ipc/handlers/: Typed IPC handler modules (project, AI, book export, Zulu, Git history).
    • services/: Document repository, index service, watcher, export pipelines.
  • src/: Preact renderer source code.
    • features/project-editor/: Domain-driven feature modules (editor, sidebar, pane workspace).
    • shared/: Shared IPC types and constants between main and renderer.
  • mds/: Design specifications, architecture docs, implementation plans, and lessons learned.
  • tests/: Comprehensive test suite (unit, integration, and smoke tests).

🧭 Developer Documentation Entry

If you are starting a new implementation conversation, begin with:

This entrypoint routes to the mandatory docs that are often missed:

🤝 Contributing

Contributions are welcome. Please read mds/dev-workflow.md for the development workflow, testing requirements, and documentation update protocol.

📄 License

GPL-3.0-or-later - see the LICENSE file for details.

About

Application for traditional novelists, provides a pleaseant UI for this task, features to keep the outlines, notes and lore organized, and integration with Git for version control. It integrates well with coding assistants(it's mostly markdown) but its focus is traditional writing(not AI writing).

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Latest commit

History

287 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Trama ✍️

A file-first desktop application for writers and worldbuilders, built with Electron, Preact, and Tailwind CSS.

Trama opens a folder on your machine and works directly with standard Markdown files and YAML frontmatter. Your manuscript, outline, and lore stay on disk in formats you can edit anywhere.

🚀 Features

✅ Currently Implemented

Project & files

  • File-first workflow — Data lives in your folders; Trama reads and writes real .md files and keeps .trama.index.json in sync.
  • Section sidebar — Trees scoped to book/, outline/, and lore/ with filter, create/rename/delete, and drag-and-drop reorder.
  • Smart conflict handling — Detects external file changes and helps you resolve edits safely.
  • Git version history — Save snapshots, browse revisions per document, preview past versions in the editor, and restore when you need to roll back. Local Git on your machine; no remote or account required.

Editing

  • Rich Markdown editor — Quill-based visual editing with Markdown persistence and YAML frontmatter.
  • Split workspace — Two panes side by side, draggable divider, per-pane back/forward history, and shared zoom.
  • Focus mode & fullscreen — Distraction-free writing with line, sentence, or paragraph emphasis around the caret.
  • Paste from Markdown — Clipboard Markdown becomes rich editor content.
  • Smart typography — Common shortcuts (e.g. -- → em dash) with undo support.
  • Wiki tag links — Tag index stays fresh after saves; Ctrl/Cmd+click jumps to linked documents.
  • Images — Embedded images are stored under project-local res/ when you save.

Special document types

  • Map documents — Image-based maps with pan/zoom and interactive markers tied to your lore.

Themes & chrome

  • Appearance — Light, dark, and system themes.
  • Context menu — Workspace actions (split, focus, export, and more) from the native right-click menu.

Import, export & integrations

  • AI import / export — Structured clipboard import (=== FILE: … ===) with preview and replace/append modes; export selected project files for LLM workflows, with optional frontmatter stripping.
  • Book export — Multi-format export (Markdown, HTML, DOCX, EPUB, PDF) with layout directives and images.
  • ZuluPad import — Bring .zulu notes into your project structure.

⏳ Planned

  • Project templates — Pre-defined schemas for characters, locations, and world-building notes.

🛠️ Tech Stack

📦 Getting Started

Prerequisites

  • Node.js (Project uses package.json with ESM)
  • npm

Installation

  1. Clone the repository:
    git clone https://github.com/luisoncpp/trama.git
    cd trama
  2. Install dependencies:
    npm install

Development

Run the development server (starts both Vite and Electron):

npm run dev

Testing

Run the test suite (Vitest):

npm run test

In agent or sandboxed environments, prefer the PowerShell runner:

powershell -ExecutionPolicy Bypass -File scripts/run-tests.ps1

For smoke tests (requires build):

npm run test:smoke

Building

To create a production-ready Windows installer:

npm run dist:win

To build without packaging:

npm run pack:win

📂 Project Structure

  • electron/: Main process, IPC handlers, and services (TypeScript).
    • ipc/handlers/: Typed IPC handler modules (project, AI, book export, Zulu, Git history).
    • services/: Document repository, index service, watcher, export pipelines.
  • src/: Preact renderer source code.
    • features/project-editor/: Domain-driven feature modules (editor, sidebar, pane workspace).
    • shared/: Shared IPC types and constants between main and renderer.
  • mds/: Design specifications, architecture docs, implementation plans, and lessons learned.
  • tests/: Comprehensive test suite (unit, integration, and smoke tests).

🧭 Developer Documentation Entry

If you are starting a new implementation conversation, begin with:

This entrypoint routes to the mandatory docs that are often missed:

🤝 Contributing

Contributions are welcome. Please read mds/dev-workflow.md for the development workflow, testing requirements, and documentation update protocol.

📄 License

GPL-3.0-or-later - see the LICENSE file for details.

About

Application for traditional novelists, provides a pleaseant UI for this task, features to keep the outlines, notes and lore organized, and integration with Git for version control. It integrates well with coding assistants(it's mostly markdown) but its focus is traditional writing(not AI writing).

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages