Apollo Tracing and Logging in GraphQL Database Language

Apollo Tracing and Logging in GraphQL: Complete Guide for Monitoring and Debugging APIs

Modern GraphQL APIs offer developers unparalleled control and efficiency Apollo Tracing in GraphQL – into when building

scalable, client-focused data services. But with great flexibility comes the challenge of maintaining performance, visibility, and reliability across complex query layers. Apollo Tracing and Logging are powerful features designed to give teams deep insights into request flow, field resolution times, and potential bottlenecks in your GraphQL server. These tools make it easier to trace individual operations, log runtime behavior, and catch performance issues before they escalate. Whether you’re debugging slow queries or monitoring production traffic, Apollo’s observability tools empower developers to act with precision. In this guide, you’ll learn how to set up and use Apollo Tracing and Logging to keep your GraphQL APIs fast, reliable, and transparent.

Introduction to Apollo Tracing and Logging in GraphQL APIs

GraphQL APIs offer flexibility and power in how data is fetched, but this complexity often makes them harder to monitor and debug. As applications grow, it becomes crucial to understand what’s happening behind every query. This is where Apollo Tracing and Apollo Logging come into play. These tools help developers gain real-time insights into API behavior, monitor resolver performance, and debug issues with precision. In this complete guide, you’ll learn how to set up Apollo Tracing and Logging, why they matter, and how they can improve your GraphQL observability and performance.es runtime events and errors. Together, they help optimize performance, identify bottlenecks, and improve query reliability. These features are especially valuable in production environments with complex schemas and high traffic. By integrating Apollo Tracing and Logging, teams can ensure stable, efficient, and observable GraphQL APIs. In this guide, we’ll explore how to set them up and use them effectively.

What Is Apollo Tracing?

Apollo Tracing is a performance monitoring tool built into Apollo Server. It provides execution metrics about each part of a GraphQL query. When enabled, it shows how long each resolver took to execute, making it easier to spot slow fields and bottlenecks. Tracing data is exposed through the GraphQL response extensions or sent to Apollo Studio for visualization.

Benefits:

  • Tracks resolver-level latency
  • Helps optimize slow queries
  • Assists with performance profiling
  • Useful for debugging in both development and production

What Is Apollo Logging?

Apollo Logging refers to capturing runtime logs of GraphQL operations, resolver behavior, errors, and context. While Apollo Server doesn’t ship with logging by default, it allows you to integrate popular logging libraries like Winston, Pino, or Morgan. These logs help in identifying system anomalies, user behavior patterns, and internal server errors.

Key Features:

  • Error tracking and structured logs
  • Insight into incoming requests and execution path
  • Can log custom data like user ID or tokens
  • Integrates well with log management tools (e.g., Loggly, ELK Stack)

Why Tracing and Logging Are Essential in GraphQL APIs:

  1. Improved Performance Visibility: Tracing shows exactly which resolvers are slowing down queries. This enables teams to fine-tune backend functions and avoid expensive operations.
  2. Faster Debugging of Errors: Logs provide a step-by-step breakdown of query execution. You can trace issues back to specific operations, users, or services.
  3. Better API Observability: Combining tracing and logging creates a complete observability loop. This is critical for production APIs where downtime is unacceptable.
  4. Security and Audit Compliance: Logging allows tracking of sensitive or malicious API usage patterns. It supports audit trails and user session tracking for compliance.
  5. Developer Collaboration and CI/CD: Apollo Studio and logging tools integrate easily into pipelines. This enables developers to review query performance with every deployment.

How to Enable Apollo Tracing in GraphQL

const { ApolloServer, gql } = require('apollo-server');

const typeDefs = gql`
  type Query {
    hello: String
  }
`;

const resolvers = {
  Query: {
    hello: () => 'Hello World!',
  },
};

const server = new ApolloServer({
  typeDefs,
  resolvers,
  plugins: [require('apollo-tracing').plugin()],
});

server.listen().then(({ url }) => {
  console.log(` Server ready at ${url}`);
});

Tracing will now be included in your response’s extensions.tracing section.

How to Add Logging to Apollo Server

Using Winston Logger as an example:

const winston = require('winston');
const logger = winston.createLogger({
  level: 'info',
  format: winston.format.json(),
  transports: [new winston.transports.Console()],
});

const server = new ApolloServer({
  typeDefs,
  resolvers,
  context: ({ req }) => {
    logger.info(`Incoming request: ${req.body.operationName}`);
    return {};
  },
  formatError: (error) => {
    logger.error(`GraphQL Error: ${error.message}`);
    return error;
  },
});

Best Practices for Apollo Tracing and Logging

  • Enable tracing only in development or staging unless using Apollo Studio in production.
  • Structure logs with identifiers (e.g., user ID, request ID) for easy correlation.
  • Monitor and alert on specific resolver times using custom plugins or integrations.
  • Mask sensitive data in logs to protect user privacy and follow compliance.
  • Use tools like Grafana, Kibana, or Apollo Studio for better visualization and query analytics.

Why Do We Need Apollo Tracing and Logging in GraphQL?

As GraphQL APIs grow in complexity, monitoring query behavior becomes increasingly important. Apollo Tracing and Logging offer powerful insights into resolver performance and runtime events. These tools help developers detect bottlenecks, track errors, and optimize queries with precision. Without them, diagnosing performance issues in GraphQL can be slow and error-prone.

1. Detect and Fix Performance Bottlenecks

Apollo Tracing allows developers to measure how long each resolver takes to execute. This visibility helps identify slow operations or fields that may be delaying the entire query response. Without tracing, spotting these bottlenecks would require manual profiling or guesswork. By using these insights, teams can optimize performance at a granular level. This is especially important for queries that aggregate data from multiple microservices. Tracing data enables faster, data-driven performance tuning.

2. Enhance Debugging Efficiency

Apollo Logging captures detailed runtime data about each request, including errors, context, and field execution paths. This level of detail is essential when debugging hard-to-find bugs or unexpected behavior in your GraphQL server. Instead of checking logs across multiple services manually, developers can trace exactly what went wrong and where. This shortens debugging cycles significantly. Combined with structured logging, it creates a clear audit trail of each operation.

3. Improve API Observability

Modern APIs require observability—not just monitoring. Apollo Tracing and Logging offer real-time insights into what’s happening inside your GraphQL server. They reveal how data is being fetched, how long it takes, and what the user experience looks like from the inside. Observability improves confidence when deploying changes, fixing bugs, or managing load spikes. It also enables smoother collaboration between frontend and backend teams. Tracing and logging are key tools in achieving full-stack visibility.

4. Ensure Better Production Monitoring

In production environments, minor resolver slowdowns or failed queries can go unnoticed until they affect user experience. Apollo’s tracing and logging solutions integrate with external monitoring tools like Apollo Studio, Grafana, and Datadog. This allows you to track key metrics like resolver latency and error rates in real-time. Alerts can be configured to notify teams when something goes wrong. Continuous monitoring reduces downtime and supports high availability of your GraphQL services.

5. Support Scalable and Distributed Architectures

As GraphQL adoption grows, many teams shift to microservices or Apollo Federation. In such environments, tracing requests across services becomes crucial. Apollo Tracing provides visibility across federated subgraphs, making it easier to diagnose where performance issues originate. Logging adds context to each request, which is especially useful when coordinating between teams or debugging distributed APIs. Together, they help maintain consistent performance and reliability at scale.

6. Enable Data-Driven Development Decisions

Apollo Tracing helps teams understand which queries are used most often and how long they take to resolve. With this information, developers can prioritize optimizations based on actual usage, not assumptions. Logging complements this by showing which operations cause frequent errors or slowdowns. Together, they offer concrete data to guide performance improvements, refactor inefficient schemas, and evolve the API architecture intelligently. This promotes smarter, data-backed development workflows.

7. Improve Developer Collaboration and CI/CD Processes

In a collaborative development environment, tracing and logging provide a shared source of truth about how the GraphQL server performs. Teams can review query metrics, error logs, and resolver behavior during code reviews or CI/CD pipeline stages. This reduces the risk of deploying poorly optimized or broken code to production. Apollo Tracing also integrates with Apollo Studio, enabling performance regression checks after each release. This visibility fosters proactive engineering and safer deployments.

8. Enhance User Experience Through Faster APIs

When tracing and logging are actively used, API response times can be continuously monitored and optimized. This translates to smoother frontend interactions, faster loading times, and fewer client-side errors. Developers can fix performance drags before users even notice them. Logging also captures user-specific issues, allowing support teams to resolve problems faster. Ultimately, Apollo’s observability tools contribute directly to a more reliable and responsive user experience.

Examples of Apollo Tracing and Logging in GraphQL

Apollo Tracing and Logging provide deep insights into GraphQL query execution and server behavior. By using practical examples, developers can better understand how to implement these tools effectively. Below are real-world use cases that demonstrate how to monitor and debug GraphQL APIs with Apollo.

Example #FeatureKey Benefit
1Basic Tracing PluginMeasure resolver execution time
2Operation LoggingLog incoming queries with metadata
3Error LoggingCapture and log errors for debugging
4Combined Tracing & LoggingFull observability for production

1. Enabling Apollo Tracing in Development Mode

You want to analyze the execution time of each resolver to optimize slow fields during development.

const { ApolloServer, gql } = require('apollo-server');
const { plugin } = require('apollo-tracing');

const typeDefs = gql`
  type Query {
    greet: String
  }
`;

const resolvers = {
  Query: {
    greet: () => 'Hello from Apollo!',
  },
};

const server = new ApolloServer({
  typeDefs,
  resolvers,
  plugins: [plugin()], // Enable Apollo Tracing plugin
});

server.listen().then(({ url }) => {
  console.log(` Server ready at ${url}`);
});

This example uses the apollo-tracing plugin to inject trace data into the extensions section of the GraphQL response. Tools like Apollo Studio can then visualize this data to highlight resolver execution time.

2. Logging Each GraphQL Operation with Winston

You want to capture logs of every query/mutation with operation name and timestamp.

const { ApolloServer, gql } = require('apollo-server');
const winston = require('winston');

const logger = winston.createLogger({
  level: 'info',
  format: winston.format.combine(
    winston.format.timestamp(),
    winston.format.json()
  ),
  transports: [new winston.transports.Console()],
});

const typeDefs = gql`
  type Query {
    status: String
  }
`;

const resolvers = {
  Query: {
    status: () => 'Service is up!',
  },
};

const server = new ApolloServer({
  typeDefs,
  resolvers,
  context: ({ req }) => {
    logger.info(`Incoming Operation: ${req.body.operationName}`);
    return {};
  },
});

server.listen().then(({ url }) => {
  console.log(` Server running at ${url}`);
});

This example logs the operationName from every request using Winston, which supports custom formats, timestamps, and external transports (e.g., files, cloud services).

3. Logging Errors in Resolvers for Debugging

You want to catch and log resolver-level errors in your GraphQL API for investigation.

const { ApolloServer, gql } = require('apollo-server');
const winston = require('winston');

const logger = winston.createLogger({
  level: 'error',
  format: winston.format.simple(),
  transports: [new winston.transports.Console()],
});

const typeDefs = gql`
  type Query {
    riskyAction: String
  }
`;

const resolvers = {
  Query: {
    riskyAction: () => {
      throw new Error('Something went wrong!');
    },
  },
};

const server = new ApolloServer({
  typeDefs,
  resolvers,
  formatError: (err) => {
    logger.error(`GraphQL Error: ${err.message}`);
    return err;
  },
});

server.listen().then(({ url }) => {
  console.log(` Running at ${url}`);
});

When an error is thrown from the resolver, the formatError function logs it via Winston. This is helpful for capturing stack traces and improving server stability.

4. Combining Tracing and Logging in Production

You want full observability track resolver timing (tracing) and log critical events (logging).

const { ApolloServer, gql } = require('apollo-server');
const { plugin: tracingPlugin } = require('apollo-tracing');
const winston = require('winston');

const logger = winston.createLogger({
  level: 'info',
  transports: [new winston.transports.Console()],
});

const typeDefs = gql`
  type Query {
    userInfo(id: ID!): String
  }
`;

const resolvers = {
  Query: {
    userInfo: (_, { id }) => {
      logger.info(`Fetching user info for ID: ${id}`);
      return `User ID: ${id}`;
    },
  },
};

const server = new ApolloServer({
  typeDefs,
  resolvers,
  plugins: [tracingPlugin()],
  context: ({ req }) => {
    logger.info(`Operation: ${req.body.operationName || 'Unnamed'}`);
    return {};
  },
  formatError: (error) => {
    logger.error(`GraphQL Error: ${error.message}`);
    return error;
  },
});

server.listen().then(({ url }) => {
  console.log(` Server up at ${url}`);
});

This comprehensive setup uses Apollo Tracing for performance insights and Winston logging for tracking operations and errors. Ideal for production observability and debugging.

Advantages of Using Apollo Tracing and Logging in GraphQL APIs

These are the Advantages of Using Apollo Tracing and Logging in GraphQL APIs:

  1. Granular Resolver Performance Insights: Apollo Tracing breaks down the execution time of each resolver in your GraphQL queries. This fine-grained view helps you identify slow fields that impact performance. It’s especially useful when dealing with nested or complex query structures. Developers can use this data to target specific bottlenecks. Over time, this improves the responsiveness of your API. It promotes more efficient backend development and tuning.
  2. Real-Time Error Tracking and Debugging: Apollo Logging provides immediate visibility into errors during query execution. Instead of relying on vague client-side error messages, developers get exact locations and causes. It logs stack traces and context, helping teams troubleshoot faster. This is critical in production environments. You reduce debugging time and improve overall reliability. It builds confidence in your API’s error handling capabilities.
  3. Enhanced API Observability: Together, tracing and logging increase the observability of your GraphQL server. You can understand what’s happening behind the scenes of every request. This includes how long it takes, which resolver ran, and where any failure occurred. Greater observability helps you monitor, analyze, and optimize behavior continuously. It’s a foundational feature for modern DevOps workflows. It aligns well with SRE and performance engineering practices.
  4. Integration with Monitoring Tools: Apollo supports integrations with external monitoring and observability platforms like Apollo Studio, Datadog, Grafana, and Prometheus. These tools visualize traces and logs in real-time dashboards. They help teams create alerts, analyze trends, and ensure system health. This leads to better uptime and user experience. It turns raw data into actionable insights that are easy to share across teams.
  5. Better Collaboration Between Teams: When tracing and logs are shared, frontend and backend teams can align on performance goals. Frontend developers gain insight into which queries need refinement. Backend teams get visibility into how APIs are consumed. This reduces blame and guesswork when performance issues arise. Collaboration becomes data-driven instead of assumption-based. It supports agile development and continuous improvement.
  6. Faster Root Cause Analysis: With Apollo Logging, you can immediately trace errors back to their origin. It saves time by avoiding manual checks or trial-and-error debugging. Whether it’s a failed resolver, a misconfigured schema, or a broken external API call, logging exposes it clearly. This speed is critical during production outages or high-severity issues. It ensures your team responds quickly to maintain API stability.
  7. Improved CI/CD Validation and Testing: Apollo Tracing data can be used in test environments to benchmark changes before deployment. It ensures that new schema changes or resolvers don’t introduce regressions. Logging captures unexpected behavior early in the CI/CD pipeline. Together, they reduce the risk of deploying breaking changes to production. This leads to more reliable releases and better version control. It supports test-driven and performance-aware development workflows.
  8. Optimized User Experience Through Faster APIs: Slow APIs degrade frontend performance and user satisfaction. By using tracing to measure resolver latency, developers can make APIs faster. Logging helps detect failures before users are impacted. As a result, response times improve and error rates drop. This creates a smoother user experience across all client applications. Performance improvements lead to higher engagement and retention.
  9. Greater Scalability for Microservices and Federation: In a distributed GraphQL architecture like Apollo Federation, tracing is essential to track queries across subgraphs. Logging complements this by capturing context per service. This enables effective scaling, load balancing, and fault isolation. You gain insights into how individual services contribute to total query time. Tracing and logging make large GraphQL ecosystems easier to manage. They help maintain performance and reliability at scale.
  10. Compliance, Auditing, and Security Monitoring: Apollo Logging can be configured to capture metadata for compliance purposes. You can track who accessed what data and when. Combined with authentication and authorization mechanisms, this creates a secure logging framework. It’s essential for meeting regulations like GDPR or HIPAA. Security teams can also monitor suspicious access patterns or unexpected query volumes. This strengthens your GraphQL API’s operational security.

Disadvantages of Using Apollo Tracing and Logging in GraphQL APIs

These are the Disadvantages of Using Apollo Tracing and Logging in GraphQL APIs:

  1. Performance Overhead in Production: Apollo Tracing adds additional metadata to each query response. While this is helpful for debugging, it can increase response size and slow down execution. In high-traffic production environments, this overhead may degrade performance. Logging large volumes of data can also strain system resources. For APIs with tight latency requirements, this is a potential drawback. Careful configuration is necessary to balance observability with speed.
  2. Increased Complexity in Configuration: Integrating Apollo Tracing and Logging into your server setup requires additional code, libraries, and tuning. Developers must configure plugins, context, and formatting correctly. Errors in setup may result in missing data or broken logs. Managing different configurations for development, staging, and production adds complexity. This can slow onboarding for new team members. The more complex the setup, the more prone it is to misconfiguration.
  3. Larger Payload Sizes with Tracing: Tracing adds detailed execution metadata to each GraphQL response under the extensions field. This extra information increases the size of the API response. On slow networks or mobile clients, this can affect perceived performance. It also places additional processing burden on clients that consume the response. This may not be ideal in lightweight or low-bandwidth environments. Developers need to disable tracing where not needed.
  4. Higher Storage and Logging Costs: Logging every GraphQL operation, variable, and error generates large volumes of data. In cloud-based environments, this leads to higher storage, ingestion, and analysis costs. Platforms like AWS CloudWatch or third-party log services can become expensive at scale. Organizations must implement retention policies or filtering to control expenses. Without careful management, logging can quickly exceed budget limits.
  5. Risk of Sensitive Data Exposure: Logging full GraphQL queries and variables may inadvertently store sensitive data such as tokens, emails, or personal identifiers. If logs are not properly sanitized or access-controlled, this can lead to security and privacy issues. Developers must implement masking or redaction to protect sensitive fields. Failure to do so can violate compliance regulations like GDPR or HIPAA. Logging must be handled with a security-first mindset.
  6. Not Suitable for All Environments: While tracing is helpful during development or QA, it may not be suitable for production environments due to performance and security concerns. In some cases, minimal observability is preferred to maximize speed. Teams need to maintain separate configurations for each environment. This increases operational overhead. It also means developers must be careful when merging configuration changes across environments.
  7. Learning Curve for New Developers: Apollo Tracing and structured logging are powerful, but they require an understanding of the Apollo Server internals and plugin architecture. New developers may take time to understand how to configure and interpret tracing data. Similarly, building and parsing log formats, especially in tools like Winston, requires experience. Without documentation or mentoring, this can slow down development velocity.
  8. Limited Tracing Support in Non-Apollo Clients: Apollo Tracing is optimized for use with Apollo Studio and Apollo tools. If you’re using other GraphQL clients or monitoring stacks, full tracing support may be limited or unavailable. Compatibility issues may arise when integrating with alternative observability platforms. This restricts flexibility and increases vendor lock-in. Developers might need to implement custom tracing solutions, increasing workload.
  9. Logging Noise and Data Overload: Without proper filters, GraphQL logging can produce excessive and irrelevant logs. This makes it difficult to identify real issues amidst a flood of routine entries. Teams must design log levels and filters carefully to avoid “noise.” Too much unstructured logging can make analysis tools less effective. Noise in logs leads to alert fatigue and reduced productivity during incident response.
  10. Potential for Misuse or Over-Reliance: Developers might rely too heavily on tracing and logging instead of writing well-tested, optimized code. Tracing is diagnostic, not a substitute for proper testing, profiling, or error handling. Similarly, excessive logging can be used to patch poor architecture instead of fixing root causes. Without discipline, teams can become reactive rather than proactive. Observability tools are helpful—but not replacements for best practices.

Future Development and Enhancement of Using Apollo Tracing and Logging in GraphQL APIs

Following are the Future Development and Enhancement of Using Apollo Tracing and Logging in GraphQL APIs:

  1. Native Integration with More Observability Platforms: Apollo is expected to expand support for out-of-the-box integrations with popular observability tools like Datadog, New Relic, and OpenTelemetry. This will reduce manual setup and make tracing/logging data more accessible to DevOps teams. Enhanced native support will allow seamless plug-and-play experiences. These integrations will boost performance monitoring and distributed tracing. Teams can centralize metrics, logs, and traces for analysis. This advancement will streamline enterprise adoption.
  2. Smarter Log Filtering and Dynamic Sampling: Future updates may include intelligent log filtering based on severity, context, or user behavior. This will prevent excessive logging noise while retaining meaningful data. Dynamic sampling mechanisms could allow you to trace only high-latency or failing requests. This helps in reducing resource usage and storage costs. Smarter filtering ensures observability remains performant and useful. It’s a step toward more efficient, data-driven monitoring.
  3. Enhanced Support for Apollo Federation and Subgraphs: Apollo will likely improve tracing and logging features across federated services and subgraphs. Today, developers often struggle with correlating logs and traces across microservices. Future enhancements may include automated correlation IDs and shared context propagation. This will enable full query lifecycle visibility across all subgraphs. It ensures smoother debugging and higher reliability in distributed systems. Federation-aware tracing will become a core strength.
  4. Visual Dashboards with Custom Metrics: Apollo Studio and similar platforms may introduce customizable visual dashboards for GraphQL APIs. Developers could build their own charts showing resolver performance, error spikes, or API usage trends. This will empower teams to monitor KPIs aligned with business goals. Graph-based performance heatmaps may also be introduced. Such visual tools will simplify analysis for both technical and non-technical stakeholders. Real-time metrics at a glance will drive quick decision-making.
  5. Privacy-Aware Logging and Tracing Features: With growing emphasis on data privacy regulations (like GDPR, HIPAA), Apollo may introduce built-in data masking and redaction tools. This would allow developers to prevent sensitive user data from appearing in logs or traces. Configurable privacy rules could be applied to certain fields automatically. This ensures compliance and builds user trust. Privacy-focused observability will become essential in sensitive industries. It also reduces the risk of data exposure in audits.
  6. AI-Powered Anomaly Detection: Future versions of Apollo Studio or third-party plugins might offer AI or ML-powered alerting systems. These tools can detect anomalies in resolver timing, error rates, or unusual traffic patterns. Early detection of anomalies can prevent outages and performance drops. AI models will learn your API’s behavior and predict issues before they escalate. Such predictive observability helps maintain stability. It’s the future of intelligent, automated operations.
  7. Built-in Performance Budget Monitoring: Apollo may soon support setting and monitoring performance budgets per resolver or operation. Developers can define acceptable execution thresholds and receive alerts if exceeded. This enables continuous performance tuning during development. Performance budgets promote accountability and prevent slow queries from reaching production. It’s a proactive approach to maintaining fast and efficient APIs. Teams can improve end-user experience through preventative practices.
  8. Better Mobile and Edge Analytics: As edge computing and mobile GraphQL clients grow, tracing from those endpoints becomes vital. Apollo may offer enhanced edge-aware logging to capture query performance on mobile and edge servers. Lightweight tracing that doesn’t impact battery or bandwidth could be included. Real-world client-side performance metrics will guide optimization efforts. These insights can help tailor APIs to edge or mobile usage patterns. It’s key to supporting modern hybrid infrastructures.
  9. Developer-Friendly CLI and SDK Enhancements: Apollo’s CLI tools and SDKs may evolve to simplify tracing/logging configuration even further. Developers might soon have access to pre-built logging templates and trace visualizations from the terminal. Improved developer experience will reduce setup time and errors. CLI feedback loops and telemetry will help teams debug faster. Automation-ready features can be embedded into CI/CD pipelines easily. These tools will empower developers at all levels.
  10. Open Standards and Community Collaboration: Future enhancements may be driven by open standards like OpenTelemetry and broader GraphQL community input. Apollo may contribute tracing data in formats compatible with vendor-neutral ecosystems. This will encourage collaboration, extensibility, and transparency. By supporting standards, Apollo ensures long-term interoperability. Community-built plugins for custom logging or tracing will also grow. An open, flexible observability ecosystem is on the horizon.

Conclusion

Apollo Tracing and Logging are essential components of a robust GraphQL development workflow. They provide deep visibility into resolver execution, help debug issues quickly, and support proactive performance tuning. When integrated with modern observability platforms, these tools empower developers to deliver faster, more stable, and scalable APIs. Whether you’re working in development or managing production traffic, adopting Apollo’s monitoring features ensures you stay ahead of performance problems and provide the best experience for users.

Further Reading & Referrals


Discover more from PiEmbSysTech

Subscribe to get the latest posts sent to your email.

Leave a Reply

Scroll to Top

Discover more from PiEmbSysTech

Subscribe now to keep reading and get access to the full archive.

Continue reading