The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.
fireData provides an R interface to common operations in selected Google Firebase services, enabling you to: - Store and retrieve data from Firebase Realtime Database - Store and query documents in Cloud Firestore - Authenticate users with email/password, Google OAuth, or anonymous login - Upload and download files from Cloud Storage
The package focuses on common REST operations for these four services. It does not cover every Firebase product or every advanced endpoint; see Firebase feature support.
From the Firebase Console, you’ll need:
There are several ways to configure fireData:
Option A: Environment Variables (Recommended for production)
Sys.setenv(FIREBASE_PROJECT_ID = "your-project-id")
Sys.setenv(FIREBASE_API_KEY = "your-api-key")
Sys.setenv(FIREBASE_DATABASE_URL = "https://your-database-url")
Sys.setenv(FIREBASE_STORAGE_BUCKET = "your-project-id.firebasestorage.app")Option B: Configuration File
Configuration files use the following format:
default:
project_id: your-project-id
api_key: your-api-key
database_url: https://your-database-url
storage_bucket: your-project-id.firebasestorage.appOption C: Interactive Wizard
The wizard configures the current session by default. Saving requires
save = TRUE and an explicit file path; the parent directory
must exist.
library(fireData)
# Create connection (uses config from environment/file)
conn <- firebase_connect()
# Or with explicit values
conn <- firebase_connect(
project_id = "my-project",
api_key = "AIzaSy...",
database_url = "https://your-database-url",
storage_bucket = "my-project.firebasestorage.app"
)
print(conn)The Realtime Database stores data as one large JSON tree. It’s great for simple data structures and real-time sync.
# Push data with auto-generated key
path <- rtdb_push(conn, "messages", list(
text = "Hello from R!",
author = "R User",
timestamp = as.character(Sys.time())
))
print(path)
# "messages/-NxYz123..."
# Set data at specific path (overwrites)
rtdb_set(conn, "users/user123", list(
name = "John Doe",
email = "john@example.com"
))
# Update specific fields (merge)
rtdb_update(conn, "users/user123", list(
lastLogin = as.character(Sys.time())
))Cloud Firestore is a flexible, scalable NoSQL database. Unlike the Realtime Database, Firestore stores data in documents organized into collections, making it better for complex, structured data.
| Feature | Realtime Database | Cloud Firestore |
|---|---|---|
| Data model | Large JSON tree | Documents in collections |
| Queries | Limited filtering | Rich queries with multiple filters |
| Scaling | Limited | Automatic, global |
| Offline support | Basic | Advanced |
| Best for | Simple data, real-time sync | Complex data, advanced queries |
# Authenticate first (Firestore requires auth)
result <- auth_sign_in(conn, "user@example.com", "password")
conn <- firebase_set_token(conn, result)
# Create/overwrite a document
firestore_set(conn, "users", "user123", list(
name = "John Doe",
email = "john@example.com",
age = 30,
active = TRUE
))
# Add document with auto-generated ID
result <- firestore_add(conn, "messages", list(
text = "Hello Firestore!",
timestamp = Sys.time()
))
print(result$.id) # Auto-generated document ID
# Get a document
user <- firestore_get(conn, "users", "user123")
print(user$name)
# Update specific fields (without overwriting entire document)
firestore_update(conn, "users", "user123", list(
lastLogin = Sys.time(),
loginCount = 42
))
# Delete a document
firestore_delete(conn, "users", "user123")# List all documents in a collection
result <- firestore_list(conn, "users", page_size = 50)
for (user in result$documents) {
print(paste(user$name, "-", user$email))
}
# Paginate through large collections
result <- firestore_list(conn, "users", page_size = 10)
while (!is.null(result$nextPageToken)) {
# Process result$documents
result <- firestore_list(conn, "users", page_size = 10,
page_token = result$nextPageToken)
}Firestore supports powerful queries with multiple filters:
# Query with filters
results <- firestore_query(conn, "products") |>
fs_where("price", "<", 100) |>
fs_where("inStock", "==", TRUE) |>
fs_order_by("price", "asc") |>
fs_limit(20) |>
fs_execute()
for (product in results) {
print(paste(product$name, "- $", product$price))
}
# Available filter operators:
# "==" (equal), "!=" (not equal)
# "<", "<=", ">", ">=" (comparisons)
# "array-contains", "array-contains-any"
# "in", "not-in"
# Select specific fields only
results <- firestore_query(conn, "users") |>
fs_select("name", "email") |>
fs_limit(100) |>
fs_execute()Firestore supports nested data with subcollections:
# Upload file
result <- storage_upload(conn,
file_path = "local/image.jpg",
object_name = "images/photo.jpg"
)
print(result$url)
# Download file
dest_file <- tempfile(fileext = ".jpg")
storage_download(conn, "images/photo.jpg", dest_file)
unlink(dest_file)
# List files
files <- storage_list(conn, prefix = "images/")
# Get download URL
url <- storage_get_url(conn, "images/photo.jpg")fireData seamlessly handles R data frames:
fireData provides informative error messages:
?fireData for a complete function
referenceThese binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.