• This repository has been archived on 04/Oct/2024
  • Stars
    star
    3,868
  • Rank 11,335 (Top 0.3 %)
  • Language
    JavaScript
  • License
    Other
  • Created over 11 years ago
  • Updated 3 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Collaborative Text Editor Powered by Firebase

Firepad Actions Status Coverage Status Version

Firepad is an open-source, collaborative code and text editor. It is designed to be embedded inside larger web applications.

Join our Firebase Google Group to ask questions, request features, or share your Firepad apps with the community.

Status

Status: Frozen

This repository is no longer under active development. No new features will be added and issues are not actively triaged. Pull Requests which fix bugs are welcome and will be reviewed on a best-effort basis.

If you maintain a fork of this repository that you believe is healthier than the official version, we may consider recommending your fork. Please open a Pull Request if you believe that is the case.

Table of Contents

Getting Started With Firebase

Firepad requires Firebase in order to sync and store data. Firebase is a suite of integrated products designed to help you develop your app, grow your user base, and earn money. You can sign up here for a free account.

Live Demo

Visit firepad.io to see a live demo of Firepad in rich text mode, or the examples page to see it setup for collaborative code editing.

a screenshot of demo.firepad.io including a picture of two cats and a discussion about fonts

Downloading Firepad

Firepad uses Firebase as a backend, so it requires no server-side code. It can be added to any web app by including a few JavaScript files:

<head>
  <!-- Firebase -->
  <script src="https://www.gstatic.com/firebasejs/7.13.2/firebase-app.js"></script>
  <script src="https://www.gstatic.com/firebasejs/7.13.2/firebase-auth.js"></script>
  <script src="https://www.gstatic.com/firebasejs/7.13.2/firebase-database.js"></script>

  <!-- CodeMirror -->
  <script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.17.0/codemirror.js"></script>
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.17.0/codemirror.css"/>

  <!-- Firepad -->
  <link rel="stylesheet" href="https://firepad.io/releases/v1.5.10/firepad.css" />
  <script src="https://firepad.io/releases/v1.5.10/firepad.min.js"></script>
</head>

Then, you need to initialize the Firebase SDK and Firepad:

<body onload="init()">
  <div id="firepad"></div>
  <script>
    function init() {
      // Initialize the Firebase SDK.
      firebase.initializeApp({
        apiKey: '<API_KEY>',
        databaseURL: 'https://<DATABASE_NAME>.firebaseio.com'
      });

      // Get Firebase Database reference.
      var firepadRef = firebase.database().ref();

      // Create CodeMirror (with lineWrapping on).
      var codeMirror = CodeMirror(document.getElementById('firepad'), { lineWrapping: true });

      // Create Firepad (with rich text toolbar and shortcuts enabled).
      var firepad = Firepad.fromCodeMirror(firepadRef, codeMirror,
          { richTextShortcuts: true, richTextToolbar: true, defaultText: 'Hello, World!' });
    }
  </script>
</body>

Documentation

Firepad supports rich text editing with CodeMirror and code editing via Ace. Check out the detailed setup instructions at firepad.io/docs.

Examples

You can find some Firepad examples here.

Contributing

If you'd like to contribute to Firepad, please first read through our contribution guidelines. Local setup instructions are available here.

Database Structure

How is the data structured in Firebase?

  • <document id>/ - A unique hash generated when pushing a new item to Firebase.
    • users/
      • <user id>/ - A unique hash that identifies each user.
        • cursor - The current location of the user's cursor.
        • color - The color of the user's cursor.
    • history/ - The sequence of revisions that are automatically made as the document is edited.
      • <revision id>/ - A unique id that ranges from 'A0' onwards.
        • a - The user id that made the revision.
        • o/ - Array of operations (eg TextOperation objects) that represent document changes.
        • t - Timestamp in milliseconds determined by the Firebase servers.
    • checkpoint/ - Snapshot automatically created every 100 revisions.
      • a - The user id that triggered the checkpoint.
      • id - The latest revision at the time the checkpoint was taken.
      • o/ - A representation of the document state at that time that includes styling and plaintext.

Repo Structure

Here are some highlights of the directory structure and notable source files:

  • dist/ - output directory for all files generated by grunt (firepad.js, firepad.min.js, firepad.css, firepad.eot).
  • examples/ - examples of embedding Firepad.
  • font/ - icon font used for rich text toolbar.
  • lib/
    • firepad.js - Entry point for Firepad.
    • text-operation.js, client.js - Heart of the Operation Transformation implementation. Based on ot.js but extended to allow arbitrary attributes on text (for representing rich-text).
    • annotation-list.js - A data model for representing annotations on text (i.e. spans of text with a particular set of attributes).
    • rich-text-codemirror.js - Uses AnnotationList to track annotations on the text and maintain the appropriate set of markers on a CodeMirror instance.
    • firebase-adapter.js - Handles integration with Firebase (appending operations, triggering retries, presence, etc.).
  • test/ - Jasmine tests for Firepad (many of these were borrowed from ot.js).

More Repositories

1

reactfire

Hooks, Context Providers, and Components that make it easy to interact with Firebase.
TypeScript
3,540
star
2

angularfire

AngularJS bindings for Firebase
JavaScript
2,728
star
3

firechat

Real-time Chat powered by Firebase
JavaScript
2,414
star
4

firebase-arduino

Arduino samples for Firebase.
C++
945
star
5

bolt

Bolt Compiler (Firebase Security and Modeling)
TypeScript
897
star
6

firebase-queue

JavaScript
787
star
7

action-hosting-deploy

Automatically deploy shareable previews for your Firebase Hosting sites
TypeScript
699
star
8

emberfire

The officially supported adapter for using Firebase with Ember
TypeScript
684
star
9

mlkit-material-android

ML Kit Showcase App with Material Design
Java
490
star
10

polymerfire

Polymer Web Components for Firebase
HTML
459
star
11

flutterfire_desktop

An early-stage, experimental pure-Dart implementation of Firebase SDKs.
Dart
406
star
12

mlkit-custom-image-classifier

Easily collect data and train image classification models.
Dart
403
star
13

firebase-import

Node module for importing large data into Firebase.
JavaScript
370
star
14

custom-auth-samples

Samples showcasing how to sign in Firebase using additional Identity Providers
Java
323
star
15

firebase-framework-tools

Experimental addon to the Firebase CLI to add web framework support
JavaScript
285
star
16

firechat-ios

An example chat application built using the Firebase iOS SDK
Objective-C
246
star
17

experimental-extensions

πŸ§ͺ A laboratory for new extensions created by Firebase
TypeScript
244
star
18

make-it-so-android

Kotlin
218
star
19

protobuf-rules-gen

This is an experimental protoc plugin that generates Firebase Rules for Cloud Firestore based on Google's Protocol Buffer format. This allows you to easily validate your data in a platform independent manner.
C++
198
star
20

karas-coffee

TypeScript
162
star
21

rxfire

TypeScript
140
star
22

unity-solutions

Use Firebase tools to incorporate common features into your games!
C#
128
star
23

firebase-video-samples

This repository contains sample code for some of the videos on the Firebase YouTube channel.
Swift
118
star
24

user-data-protection

Generalizable examples of protecting user data in Firebase Applications
JavaScript
97
star
25

expense-tracker

JavaScript
84
star
26

mlkit-material-ios

These apps demonstrate how to build an end-to-end user experience with Google ML Kit APIs and following the new Material for ML design guidelines.
Objective-C
80
star
27

firebase-auth-service-worker-sessions

JavaScript
79
star
28

TubeSock

A WebSocket client library implemented in Java
Java
79
star
29

codelab-friendlyeats-flutter

FlutterFire Firestore codelab. Develop a cross platform restaurant recommendation app with Flutter.
Dart
78
star
30

fastlane-plugin-firebase_test_lab

Test your app with Firebase Test Lab with ease using fastlane
Ruby
74
star
31

auth-without-play-services

Demonstrates how to implement Firebase Auth on devices without Google Play services
Kotlin
70
star
32

user-privacy

Sample of general purpose functions for user data deletion and export
JavaScript
68
star
33

remote-styles

Conditionally load CSS from Firebase Remote Config
TypeScript
64
star
34

analytics-webview

Java
63
star
35

firebase-streaming-import

public node.js script for streaming large JSON files into a Firebase
Python
61
star
36

cocos2dx-cpp-sample

Firebase Cocos2d-x samples
C++
53
star
37

firestore-codelab-extended-swift

Swift
48
star
38

codelab-kanban-fire

TypeScript
43
star
39

firebase-continue

Firebase Continue enables mobile developers to integrate activity transitioning from their mobile apps to the web
JavaScript
36
star
40

firestoreodm-flutter

Dart
35
star
41

MLKit-ARKit

Swift
34
star
42

parse-migration-tools

JavaScript
26
star
43

firepad-demo

http://demo.firepad.io/ sources
CSS
16
star
44

palm-chatbot-angular

TypeScript
15
star
45

compass-travel-planning-sample

TypeScript
15
star
46

firestore-nlp-extension

TypeScript
15
star
47

codelab-ai-genkit-rag

TypeScript
12
star
48

codelab-measure-android-view-performance

Java
11
star
49

MLKit-ARCore

Swift
11
star
50

firebase-auth-migration-helpers

Objective-C
11
star
51

codelab-contentrecommendation-android

Kotlin
11
star
52

firebase-js-sdk-performance-dashboard

Firebase JS SDK Performance Dashboard
TypeScript
9
star
53

firebase_fcm_flutter

Java
8
star
54

compass-ai-travel-planning-sample-flutter

This is a travel demo built in Flutter using Firebase Data Connect and Firebase Genkit to find ideal itineraries from a database of travel plans.
Dart
8
star
55

cmake-way-for-firebase

C++
6
star
56

codelab-fcm-and-fiam

Kotlin
5
star
57

codelab-textclassification-android

Jupyter Notebook
5
star
58

fcm-external-prober

Go
4
star
59

codelab-rules

JavaScript
4
star
60

angularfire-expert-led-class

TypeScript
4
star
61

crashlytics-migration-ios

Swift
4
star
62

crashlytics-migration-android

Java
4
star
63

firebase-console-performance-dashboard

TypeScript
4
star
64

codelab-digitclassifier-android

Kotlin
3
star
65

codelab-appdistribution-android

Kotlin
3
star
66

codelab-gemini-api-extensions

TypeScript
3
star
67

ai-extensions-codelab

JavaScript
3
star
68

poem-from-image

TypeScript
3
star
69

codelab-actions-firestore

JavaScript
3
star
70

vertexai-sdk-test-data

Python
3
star
71

firebase-apple-sdk-triage

This repo contains a collection of "skeleton" apps for quickly reproducing issues from the firebase-ios-sdk.
Swift
2
star
72

github-actions

Python
2
star
73

firebase-functions-go

Go
2
star
74

changelog

TypeScript
2
star
75

codelab-contentrecommendation-ios

Swift
2
star
76

codelab-textclassification-ios

Swift
1
star
77

codelab-digitclassifier-ios

Swift
1
star
78

codelab-feature-rollout-performance

This is the source code that accompanies the Firebase Performance Monitoring Codelab: https://firebase.google.com/codelabs/feature-rollout-performance
Java
1
star