Home — Runestone Academy (original) (raw)
March 16, 2026
Easy Install
I know that running your own server is not for everyone, but we want to make it was easy as possible for Runestone to support the students who need us. But sometimes Government regulations or institutional policies make it difficult to use a third party hosting service. For those of you who want to run your own server, we have created an easy install script that will set up a Runestone server on your machine. This script will install all the necessary dependencies and configure the server for you.
To use the easy install script, copy and paste the following command into your terminal:
bash <(curl -fsSL https://raw.githubusercontent.com/RunestoneInteractive/rs/main/init_runestone.sh)
This will download and run the easy install script. The script will ask you a few questions about your setup, It will then install all the necessary dependencies and configure the server for you. You will need to have Docker installed on your machine for this to work. If you do not have Docker installed, there are some great tutorials online that can help you get started such as Docker for Beginners.
Why Run your own Server?
There are a few reasons why you might want to run your own server:
- You may have legal or institutional requirements that we as a small non-profit, open-source organization cannot meet. We are committed to the National Data Privacy Agreement But we understand that some institutions may have additional requirements that we cannot meet. If this is the case, running your own server may be the best option for you.
- You want to have more control over your data and how it is stored.
- You want to be able to customize the server to fit your specific needs.
- You want to be able to run the server on your own hardware.
- You want to be able to run the server in an environment that does not allow third party hosting services.
All of these are valid reasons, and we understand that running your own server is not for everyone. We are here to support you regardless of how you choose to use our software. If you have any questions about running your own server, please feel free to reach out to us on our public forumsor GitHub. We are happy to help you get set up and answer any questions you may have. We also welcome contributions to the easy install script, if you have any improvements or suggestions please let us know!
I would also like to acknowledge Tyler Conzet for his work on the easy install script. Tyler was a former student of mine and has been a great contributor to the Runestone project. He has done a lot of work on the easy install script and has made it much easier for people to run their own servers. Thank you Tyler!
Keeping up to date
If you choose to run your own server, it is important to keep it up to date. We are constantly making improvements and adding new features to the software, and it is important to keep your server up to date in order to take advantage of these improvements. We recommend that you check for updates regularly and apply them as soon as possible. You can check for updates by running the following command in your terminal:
cd /wherever/you/installed/runestone docker compose pull docker compose stop && docker compose up -d
Occasionally it may be necessary to run a database migration when we make changes to the database schema. If this is the case, we will provide instructions on how to run the migration. We will also provide instructions on how to roll back the migration if something goes wrong. We recommend that you back up your database before applying any updates, just in case something goes wrong. Most updates should be seamless, but occasionally we add more data to the database in the form of new columns or new tables. These migrations will not result in the loss of any data, but it is always a good idea to have a backup just in case something goes wrong.
Feedback
As this is a new feature, we would love to hear your feedback on the easy install script. If you have any suggestions for improvements or if you encounter any issues, please let us know on our public forums or GitHub. Your feedback is invaluable to us and helps us improve the software for everyone. We are committed to making the easy install script as user-friendly and reliable as possible, and we appreciate any feedback you can provide.
October 10, 2025
Mid-term Updates
It has been a relatively calm Fall 2025 semester! Thanks to everyone for your patience and issue reports. I had a wonderful September exploring six of our amazing national parks! I am back to work and have been able to address a number of issues and feature requests. Here are some highlights:
- New course creation page
- Grading Updates – Se note on timezones below
- LTI 1.3 bug fixes
- Improved user interface for creating assignments
- Bug fixes and performance improvements
- We are making good progress toward removing the legacy instructor interface and hope to have this completed in summer 2026.
- Improvements to student accommodations
One specific change that I would like to highlight is:
- We will now accept late submissions for assignments as long as you have the accept late submissions option enabled. Whether you have checked the released grades option or not. This was a highly requested feature and I am glad to be able to deliver it.
- To support this change we have added a new attribute for every course, which is the home timezone for the course. You should go to the course settings page and set this to your local timezone. This will ensure that all assignment due dates are interpreted correctly. If you do not set this, it will default to UTC which may cause confusion. This also prevents students from changing their timezone to get around due dates. If you have any questions about this, please let me know.
I am also considering adding an accommodation that would allow instructors to email students a link to an assignment that is not yet visible. This would allow students with accommodations to access assignments early or late. Please let me know if this would be useful. This is different than the current “visible” option in that the assignment would not be visible to students unless they had the link.
This is a community effort, and I am grateful for everyone’s contributions. Thank you! For those of you who are new, welcome to the community! Please remember that this is a volunteer effort, we don’t have full time staff of support people to answer your questions. qn Please be patient and respectful of others’ time and efforts, please use our public forums to ask questions or discuss problems. If you find that something is not working, please take some time to investigate and report the issue on GitHub. The more information you can provide, the better! Do not presume that because you are having a problem, that everyone else is. Please help us help you! You may use the software differently from others. We welcome constructive feedback and suggestions.
For those of you that use our accommodations feature I would love to hear your feedback. I am considering adding the option to allow students to access an assignment if they have a direct link to a non-visible assignment and have an accommodation that allows them to do so. Please let me know if this would be useful.
August 22, 2025
GenAI in CS Consortium
Exciting news! Runestone Academy received funding from the GenAI in CS Consortium to support educators in strategically integrating genAI into their teaching methods and curricula. The consortium is a destination for academics seeking example courses and overall guidance. Check it out at TeachCSwithAI.org
Our first project will be to integrate Runestone books with Learning Clues to provide secure 24x7 tutoring for your students. Students will be able to ask questions, and have a conversation with AI with all of the responses grounded in the content provided on Runestone Academy.
August 17, 2025
Fall 2025 Transitions
Welcome back! Registrations have begun to soar for the Fall 2025 semester, and we are excited to see many new faces joining our community. As we prepare for the upcoming semester, here are some important updates and transitions to keep in mind. We realize that transitions like this can be challenging and confusing, we appreciate your patience and understanding as we work through these changes.
New Instructor Dashboard
You will notice a revamped instructor dashboard. It has a new look, and uses a modern web framework on the backend. Please let us know if you encounter any issues as the backend code is new. Please check existing issues before you make a new one. This new dashboard should replicate the old functionality, but we may have missed some edge cases in our rewrite. The old dashboard will remain available, probably for the entire 2024/2025 year, but I won’t be fixing any bugs or doing any enhancements to the old interface. Think of it as a faithful backup in case something critical goes wrong with the new dashboard.
New Assignment Builder
The story for the new assignment builder is similar. It has been completely rewritten using a modern web framework on the backend. Notably, the database for the two builders is identical and shared. You can see the assignments in both. Really Important The old assignment builder used the authoring language restructuredText plus our extensions for you to write questions. The new assignment builder uses a different approach, rather than saving the RST for you to edit, the new assignment builder saves the questions in a JSON format. I have tried to write a converter and have converted old activecode, shortanswer, and multiple choice questions to the new json format so you can edit those old question in the new assignment builder. That was a one time conversion. If you write new questions in the old assignment builder you will not be able to edit them in the new assignment builder. Please use the new assignment builder - we think it is much more user friendly and easier to use. The old questions had a myriad of options :option: in the RST. Many of them were experimental, or implemented for a particular project and many of them are not that useful. So far we have only added the most used options to the new assignment builder. If you find that you need an option that is not available, please let us know.
As with the instructor dashboard, please report any issues you encounter. The old assignment builder will also remain available for the 2024/2025 year, but it will not be receiving any enhancements or bug fixes.
LTI 1.3 Support
Many schools have told us they are moving to LTI 1.3 for their LMS integration and will no longer support LTI 1.1. We have added support for LTI 1.3 in addition to the existing LTI 1.1 support. LTI 1.1 support is only available through the old instructor dashboard, and I won’t be moving any support to the new dashboard since most schools will no longer support 1.1.
Unfortunately LTI 1.3 will need to be configured by your LMS administrator. We have been testing it out in production with Canvas, Moodle, and D2L. If you want to use LTI 1.3 you will need to create an issue on github https://github.com/RunestoneInteractive/rs/issues/new/choose`_ to have us enable your domain. As you will read on the issue template, if your school is going to require us to fill out forms and provide things like HECVATs and VPATs and then LTI 1.3 support is a paid feature. As an open source project we do not have the resources to fill out forms for every school that wants to use our software. If you are a small school or a school in a developing country please let us know and we will work with you to get LTI 1.3 enabled.
On the positive side, if you are using 1.3 and you have pre-released your assignment (on the grading page), then grades will be automatically sent back to your LMS. This is a big improvement over LTI 1.1 where you had to remember to push the grades back.
More to Come
We are continuously working on improving the platform. There are only a few more things to migrate away from our old web framework. These include:
- Grading
- Peer Instruction
- Practice
As we migrate each of these components we will keep the old in place so they can be used in parallel. I hope that all of the above can be completed by the end of the school year so that we have a fully modernized code base for fall 2026. As with any system that has been around for a long time, there are lots of features that have been added over the years. We will be evaluating each feature to see if it is still useful and if it is worth migrating to the new framework. We have a lot of usage data to help us make these decisions, but if you find that a feature you use has not been migrated, please let us know.
Brad Miller
Professor Emeritus, Luther College
Founder, President, Chief Developer, Runestone Academy
August 01, 2025
Docker Images for Macs and Linux
One of my hoped for quality of life improvements for the Runestone platform is to make it easier for everyone to run a Runestone server own their own computer. This is especially important for authors who want to test their books locally before pushing them to the Runestone server. We made great progress on this front a couple years ago when I created a container registry on github to hold our docker images for all of our servers. The problem was that the images were built for x86_64 architecture, and so they would not run on ARM based machines like the new Apple Silicon Macs. I didn’t know how to build multi-architecture docker images, and I didn’t have the time to learn how to do it.
Like many things in life, solving the problem is not that hard if you take the time to learn how to do it. I finally carved some time out of my routine of fixing bugs and adding features to learn how to build multi-architecture docker images. I am pleased to announce that we now have images for the Runestone servers that will run on both x86_64 and ARM architectures. This means that you can now run a Runestone server on your Mac or Linux machine without having to build the images yourself! These images are the same images we use in production, so you can be sure that they are stable and reliable.
Attention
Details on how to get configured and running are here: Runestone Server Setup. In my experience the vast majority of the problems that people have when trying to run a Runestone server on their own machine are related to the configuration of the server. The sample env file should work for most people, but you may need to tweak it a bit to get it to work on your machine. If you run into problems, please feel free to create an issue on our GitHub repository, and we will do our best to help you get it working.
The next step would be to create a script that will automatically get the server up and running with minimal user intervention. If anyone is interested in helping with that, please let me know. I would be happy to work with you to get it set up.
July 19, 2025
Mid-July Update
Today is July 19, 2025, and we are excited to share the latest updates with you. We have been hard at work on several projects, and we are pleased to announce that we have made significant progress on the following:
LTI 1.3: We are continuing to roll out LTI 1.3 support across more Learning Management Systems (LMS). This integration will enhance the usability of Runestone in various educational environments, making it easier for instructors to incorporate our resources into their courses. We are happy to report that we have successfully tested it with Desire2Learn, Moodle, and Canvas. If you want to get LTI 1.3 set up for your course please create an issue on our GitHub repository, and we will assist you in the setup process. Note there is a special category for LTI Support issues. Please refer to the LTI documentation in The Instructor Guide for more information. If you have questions please ask them on the #lti_community_support channel in the Runestone discord.
New Assignment Builder: The new assignment builder has been well received, and we are continuing to refine it based on user feedback. We have added several new features, and fixed many bugs. The assignment builder now supports a wider range of question types, including fill-in-the-blank and matching questions. We encourage all instructors to try it out and share their experiences with us.
Quality of Life Improvements: We have made several quality of life improvements to the platform, including: - Improved Course Selection Page - Improved Instructor Dashboard - Better support for MathJax and LaTeX rendering in several areas - Support for attaching pdfs, and image files to short answer questions - many more small improvements to the user interface
Internals : We have made significant internal improvements to our platform, including updates our logging system, optimizing our database queries, and improving the overall performance of the site. These changes will help us provide a more reliable and efficient system.
The internal updates also make it easier for anyone to contribute to Runestone. If you are interested in helping out with a feature or a bug fix I would welcome your help! The documentation is available at Runestone Development Docs. If you have any questions or need assistance, please feel free to reach out to us. We have especially simplified the process by creating database API’s to do most everything you need to do with the database. No need to know or use SQL.
Book Updates
As we continue the transition to writing books in PreTeXt there are several books that are no longer being updated in their original format. In particular the following books have been replaced by new versions:
- How to Think Like a Computer Scientist (
thinkcspy) switch tohttlacs - CSAwesome now has a new edition and a new look, You should switch to
csawesome2which follows the latest college board standards for APCSA. - Problem Solving with Algorithms and Data Structures using Python
pythondshas been replaced bypswadsup. - Problem Solving with Algorithms and Data Structures using C++
cppdshas been replaced bycppds2. - C++ for Python Programmers
cpp4pythonhas been replaced bycpp4py-v2. - Java for Python Programmers
java4pythonhas been replaced byjava4py2. - How to Think Like a Computer Scientist C++ edition (
thinkcpp) has been replaced bythinkcpp2.
We’ll mark these and other books as deprecated in the library in the next few weeks to make it easier to find the latest version.
Retiring restructuredText
This is a good time to remind everyone that the markup extensions to restructuredText will no longer be developed. In fact there are quite a few features that are supported in PreTeXt that are not supported in restructuredText. If you are writing a new book, or updating an existing book, we encourage you to use PreTeXt. Beginning with the 8.0 release of the runestone components, we will not include the python code for the markup. Beginning with that release we will just provide the javascript for the interactive components. We look forward to continuing to develop new and innovative interactive components that support student learning with Markdown in PreTeXt.
June 14, 2025
Mid-June Update
Today is June 14, 2025, and we are excited to share the latest updates with you. We have been hard at work on several projects, and we are pleased to announce that we have made significant progress on the following:
- LTI 1.3: We launched LTI 1.3 today. This will allow Runestone to be integrated into many more LMSs and will make it easier for instructors to use our platform in their courses. For now you will need to contact us in order to use this feature, but we will be rolling it out to all users over the course of the summer.
- New Instructor Dashboard: We have been working on a new instructor dashboard that will provide a more streamlined and user-friendly experience for instructors. This includes improved navigation, and better organization. It also provides us with a base to continue porting and updating code that has been with us for more than a decade, and badly needs a refresh. This will become the default destination for instructors from the user menu, as we update books. In the meantime the url is /admin/instructor/menu
- Peer Instruction Interface: We have made significant improvements to the peer instruction interface.
- Accessibility Improvements: We have been working steadily on improving the accessibility of our platform. This includes making sure that all of our interactive elements are keyboard accessible, and that they work well with screen readers.
- Assignment Builder: We have been working on a new assignment builder that will allow instructors to create assignments more easily. This includes the ability to add multiple choice questions, short answer questions, and more. This is now the default from from the new instructor dashboard. We know there are still some rough edges, but please give it a try and let us know what you think.
- Internal Improvements: We have been working on a number of internal improvements to our platform, including updating our dependencies, improving our logging, and optimizing our code for better performance.
All of these updates are part of our ongoing effort to improve Runestone Academy and provide a better experience for instructors and students. We appreciate your support and feedback as we continue to work on these projects. You can help us by trying out the new features and letting us know what you think. Reporting bugs and issues is extremely helpful, and we appreciate your patience as we work to resolve them.
May 28, 2025
Summer Roadmap 2025
I’m excited to share our roadmap for the summer of 2025! This summer brings a number of projects both large and small. Here is a high level overview of what I hope to accomplish:
- Launching LTI 1.3: This has been in development for a while, and we are excited to finally launch it. This will allow Runestone to be integrated into many more LMSs and will make it easier for instructors to use our platform in their courses. It will also pass back grades for students immediately. How can I help? If you are an instructor and would be willing to test this out with your LMS please let us know! We want to make sure this is rock solid for the Fall! BTW, if you have a big IT department who is going to ask me to fill out a bunch of forms and sign a bunch of documents, please know that this will be a paid for feature. I just don’t have the time and energy to fill out a bunch of forms and sign a bunch of documents for free. I’ll announce the pricing for this in a few week.
- JOBE Updates: This is also essentially complete, and updates Java to Java 21 and C/C++ compiler to gcc-14.2. This will allow us to support the latest versions of these languages in our interactive textbooks. How can I help? If you are an instructor who uses JOBE in your course, please let us know if you have any specific needs or concerns with this update.
- Manual Grading updates: There are very few things that need manual grading any more. But this is probably the key thing to port away from web2py to FastAPI. I’m not sure what this will look like but I welcome ideas, sketches, and mockups.
- New Textbooks: We have a number of new textbooks in the works, including a new book on Quantum Computing, and a new book on Computer Security. We will also be phasing out the RST version of how to think like a computer scientist and replacing it with the PreTeXt version.The same goes for the python data structures book. Also a brand new PreTeXt version of CSAwesome, and a PreTeXt version of Python for Everyone. Each new book that goes from RST to PTX exposes a few bugs, or feature requests. These are fun to find and fix. How can I help? If you are an instructor who has used the books in the past we definitely don’t want regressions, so please check them out!
- The New Assignment Builder: This is ready to be called a beta!!, but it is going to be out in the fall. Its available now from the assignment page, and we would really love to have you try it out. Some of the work left to do is to make current problems compatible with this new assignment builder. That may take a bit of time, so please be patient.
- Accessibility Improvements: We are committed to making Runestone more accessible to all users. This summer we will be continuing our work on improving the accessibility of our interactive elements. This includes making sure that all of our interactive elements are keyboard accessible, and that they work well with screen readers. How can I help? If you can install the WAVE accessibility tool in your browser, and run it on Runestone Academy, we would love to hear about any issues you find. Many a11y issues are easy to fix, so if you are just getting into web development this is a good starting point for you.
- New LLM based features: The first step in this is to allow an instructor to store their LLM API token on Runestone Academy. We have some great new features for automatically generating parsons problems, and for chat within the peer instruction interface. I’d also like to add a feature that helps instructors make lesson plans for their courses. And lots more. We would love to hear your ideas for how we can use LLMs to improve the Runestone experience. How can I help? If you are an instructor who has used LLMs in your course, please let us know what features you would find most useful.
- Digital Ocean Spaces for template files: This is a small but important change that will allow us to store template files in a more efficient way. This will help us reduce the size of our docker images and make it easier to scale up/down.
- New Fluent based logging This is mostly under the hood stuff, but this will centralize the logging from all of our workers and make it easier to debug issues that arise. How can I help? If you are a developer who has worked with our codebase in the past, we would love your help implementing this and making sure it works well.
- Porting the remaining code from web2py to FastAPI: This has been a long ongoing project, but we need to make a final push to get the remaining code ported over. This will allow us to take advantage of the performance improvements that FastAPI provides and make it easier to maintain our codebase in the future. How can I help? If you are a developer who has wondered how to get started in the past, we would love your help porting the remaining code.
- Making more anonymous data avilable for educational research: We have a lot of data on how students interact with our platform, and we want to make more of that data available for educational research. This will help us understand how students learn and how we can improve our platform. How can I help? If you are an educational researcher who is interested in using our data, please let us know and we can work together to make that happen.
- Making a clean break with RST: We have been using reStructuredText (RST) for a long time, but we are ready to make a clean break and move to PreTeXt (PTX) for all of our textbooks. This will allow us to take advantage of the features that PTX provides and make it easier to maintain our codebase in the future. We will start by making a branch for the runestone 7.7 series. In case there are critical bug fixes. Runestone components 8.0 and beyond will continue to be on main.
- Lots of little things…
I have suggestions!
If you have suggestions for features or improvements that you would like to see in Runestone, please let us know! We are always looking for ways to improve the platform and make it more useful for instructors and students. Please feeel free to reach out to us by creating an issue on github. Please do not email me.
This feels like a good time to thank all of our contributors who have helped us get to this point. We are a small team, but we have a lot of great people working with us to make Runestone the best it can be. Thank you for your support and for using Runestone!
A Note on Open Source
As we embark on this summer roadmap, I want to take a moment to reflect on the nature of open source software and how it relates to our work at Runestone Academy. Open source is a collaborative effort where anyone can contribute, but it doesn’t mean that every suggestion or request will be implemented. We appreciate all ideas and feedback, but we also need to prioritize our resources and focus on what aligns with our goals.
We are a small team of people who are passionate about open educational resources. The other day I asked GPT to help me come up with an infographic that might help non-coders understand how open source works. Here is what we came up with:
Note: The mathematics example was GPT’s idea, not mine. But I like the analogy. So if you are a mathematician, please don’t be offended.
Here is another way to think about it: Open source software is like a community garden.
Anyone can plant something, anyone can weed, and anyone can enjoy the harvest. But if you walk into the garden and say, “You should plant tomatoes over there,” the response is usually, “That’s a great idea—would you like to help plant them?”
In open source:
- Developers contribute their time voluntarily.
- Ideas are welcome, but implementation is not guaranteed.
- If you want something changed, you have a few options: Do it yourself (if you can code). Find someone who will (sometimes you can pay or persuade). Make a compelling case and hope a contributor finds it worthwhile.
Open source thrives on shared goals, not demands. It’s a gift economy—like Wikipedia or community theater. Participation is appreciated, but it doesn’t come with customer support unless someone offers it.
If you have made it this far, I hope you understand that we are always looking for ways to improve Runestone Academy, but we also need to be realistic about what we can accomplish with our limited resources. We appreciate your understanding and support as we continue to work on making Runestone the best it can be.
February 12, 2025
Miller Named Distinguished Member of the ACM
Runestone Academy founder and president, Dr. Bradley Miller, has been named a Distinguished Member of the Association for Computing Machinery (ACM) for his contributions to the development of recommender systems for eCommerce and interactive textbooks for computer science and mathematics. The ACM is the world’s largest educational and scientific computing society, and this honor is given to only 1% of its members. Dr. Miller was recognized for his work in the development of the Runestone Interactive platform, which has been used by over 1 million students and teachers around the world to learn computer science. He has also been a leader in the development of open educational resources (OER) and has been a strong advocate for the use of technology in education.
“Each year we look forward to selecting a new class of ACM Distinguished Members from among our worldwide association of 110,000 colleagues,” explained ACM President Yannis Ioannidis. “ACM’s motto is ‘advancing computing as a science and profession.’”
I am really honored to be recognized by the ACM for my work in computer science education and open educational resources. I have been fortunate to work with many talented people over the years, and this award is a reflection of their hard work as well. I am especially grateful to the Runestone team for their dedication and commitment to making computer science education accessible to all. As a Professor Emeritus of Luther College, I’m especially proud of this honor; if you look at the other 55 people named this year they are from Google, Microsoft, and lots of prestigious research universities around the world. I am proud to be a part of this community and to be able to contribute to the advancement of computing as a science and profession. I look forward to continuing to work with my colleagues in the field to make computer science education more accessible and effective for all students.
You can read more about the announcement On the ACM Website.
September 18, 2024
DDoS Update
The Distributed Denial of Service (DDoS) attack is ongoing. Even after I moved our load balancer to new hardware and a new IP address. This means that the attackers are not just targeting the IP address of the load balancer, but they are targeting “runestone.academy” by name. This is a much more serious attack and it is taking a lot of time to mitigate.
I’ve learned a lot about how to mitigate these attacks and I’m implementing the solutions as quickly as I can without causing a lot of downtime. I’m sorry for the inconvenience this is causing you. I think are to the point where we have minimized it. When a new wave of attacks hits it just takes a minute or so to block the attackers. So, just keep that in mind, take a breath, wait a minute and refresh your page. I’m also sorry that I have to spend so much time on this instead of working on new features for Runestone.
These kinds of sustained attacks do not come for free. There are literally thousands of IP addresses involved over a period of days. This is not just a kid in a basement with a botnet. This is a reasonably well-funded and well-organized attack. I’m not sure what the motive is, but it is clear that they are not going to give up easily. Could it be an evil publisher trying to squash free textbook distribution? Could it be one of our “competitors” trying to take us down? Could it be a foreign government trying to disrupt education in the US? I don’t know. I do know that I’m not going to give up easily either.
The cartoon at the top was generated yesterday by DALL-E. It is a cartoon of me wearing many hats. I thought it was appropriate for the situation. GitHub co-pilot suggested that I should be wearing a tinfoil hat. I’m not sure that would help. It also suggested that I should write that I am working with the NSA, CIA, and Department of Homeland Security to track down the attackers. That is certainly not true. I’m just a guy trying to keep the Runestone servers up and running.
I also want to assure you that, so far, the attack has been limited to, and stopped by the load balancer, our application servers and database are secured behind the load balancer and an additional firewall. So, even if the load balancer were to go down, the application servers would still be up and running. Yes, timeouts of API calls to save data to the database might happen, but you should get a dialog if that happens, so that you can reclick the button and have it save the latest answer again.
Again, please remember to check the Runestone Status Page if you are having trouble accessing the Runestone books. It updates every 5 minutes and is served from a completely different server, so is unaffected by the DDoS attacks.



