Welcome to Pennant! An Open-Source Computational Notebook Supporting Real-Time Collaboration and Flexible Code Execution in Markdown, JavaScript, and Python.
- Real-Time Collaboration: Powered by Yjs, a CRDT that enables real-time collaboration and synchronization between different users.
- Versatile Code Editing: CodeMirror 6 provides a rich coding environment, integrated with Yjs for collaborative editing.
- Offline Persistence: Efficient caching and offline capabilities with y-indexeddb.
- Drag-and-Drop Functionality: Powered by react-dnd.
- Markdown Support: Enhanced markdown editing experience with BlockNote.
- Python Support: Fully equipped to handle Python notebooks.
- Shared Execution Context: Facilitates collaborative coding where outputs are updated in real-time, and visible to all connected users.
- Notebook-Style Code Execution: Independently run cells or the full notebook, tailored for exploratory coding and enhanced learning.
Pennant is structured as a multi-repo project for modular development and deployment. The instructions below are for the client repository only. For detailed setup instructions for all components, please refer to the CONTRIBUTING.md file.
- Set up a
.env
file in your project root using.env.example
as a template. - Fill in the necessary environment variables.
Clone the repo
git clone https://github.com/pennant-notebook/client.git
Install NPM packages
npm install
To start the development server, run:
npm start
- Comprehensive testing with Playwright for E2E and component tests.
- Tests are organized in the
__tests__
directory.
For E2E tests:
npm run test:e2e
For component tests:
npm run test:ct
The preliminary documentation is available at https://docs.trypennant.com.
Please feel free to explore and provide feedback to help us improve.
Support for additional programming languages: Golang, Ruby
Feel free to submit issues, feature requests, or pull requests. Your contributions are highly valued and welcome. For detailed guidelines, refer to CONTRIBUTING.md.
Our work builds upon the foundations laid by several outstanding open source projects and the generous support of JetBrains:
- Yjs: The CRDT framework that enables RTC through its efficient shared data model and types.
- CodeMirror: The open source text editor that powers Chrome DevTools.
- BlockNote: Markdown editor that powers our markdown cells.
- TypeScript: Our compiler and language toolkit.
Pennant Notebook is MIT licensed.