Answers for district IT

Why do school districts self-host software, and what does it take?

Districts self-host for three reasons that hold up: data stays on infrastructure the district controls, per-student pricing stops scaling with enrollment, and an open-source system cannot be discontinued or repriced out from under them. What it costs is a server, a backup routine that is actually tested, and a few hours of someone's month for updates. Districts without a person who can comfortably administer a Linux server and a database should choose hosted — the software is the easy part.

The reasons that hold up

Data control is the most cited and the most legitimate. When student records live on a server the district operates, the answer to a parent asking where their child's data is stored is short and verifiable. It also simplifies the vendor-agreement question, because there is no third party processing the data and therefore no data privacy agreement to negotiate, no subprocessor list to review, and no breach notification dependency on someone else's incident response.

Cost predictability is the second. Most K-12 software prices per student or per seat, which means the bill grows with enrollment and every additional module is another multiplication. Self-hosting converts a recurring per-student cost into a fixed infrastructure cost that does not care whether you have four thousand students or fourteen thousand.

Continuity is the third and the one districts underrate until it bites. Education software vendors get acquired, sunset products, and change pricing at renewal, and a district mid-year with a discontinued product has very few options. Open-source software under a license you can rely on cannot be taken away — worst case, the project stops receiving updates and you keep running what you have while you plan a migration on your own timeline.

There are weaker reasons that come up and deserve less weight. Customization is often cited but rarely exercised; most districts never modify the code. Performance is rarely the issue, since the workloads involved are small by modern standards. And "the cloud is insecure" is not a serious argument — a well-run hosted service is usually more secure than a server in a closet that nobody has patched since installation.

What it actually takes to run

The infrastructure requirement for a district-scale application is modest. A single virtual machine with a few gigabytes of memory handles a district of several thousand students comfortably, whether that is a cloud instance for a small monthly cost or a virtual machine on hardware you already own. Software that ships as a single binary with an embedded database is dramatically easier here than one requiring a separate database server, a cache, a queue, and a web server.

What you need in place: a hostname and a TLS certificate, which Let's Encrypt makes free and automatic; a way to reach the server for administration; a firewall configuration; and a decision about whether the application is reachable from the public internet. It usually needs to be, since staff and families use it from home, which means you are operating an internet-facing service and should think about it that way.

Backups are the part that separates districts that will be fine from districts that will have a bad year. A backup you have never restored is a hypothesis. Set up automated daily backups to storage separate from the server itself, and then actually restore one to a scratch environment once a term. This exercise takes an hour and is the single highest-value thing on this list.

Updates are the ongoing cost. Budget a few hours a month: read the release notes, take a backup, apply the update, verify the application starts and a few key workflows work. Security updates for the operating system are separate and should be automated where possible. A district that goes eighteen months without updating has accumulated real risk, and the eventual jump across many versions is far harder than incremental ones.

Monitoring can be simple. An uptime check that emails someone when the site stops responding, plus disk space alerting, covers the failures that actually occur.

Security obligations you take on

Self-hosting moves responsibility, it does not remove it. The district becomes accountable for the things a hosted provider would otherwise handle, and being clear-eyed about that list is the difference between a good decision and a regrettable one.

Patching, both the application and the operating system underneath. Access control for the server itself — who has SSH access, using keys rather than passwords, and what happens to that access when they leave. Encryption of backups, especially if they land in cloud storage. Log retention sufficient to investigate an incident. And an incident response plan that names who does what, because discovering you do not have one during an incident is the worst possible time.

The application's own security features still matter and should be turned on: two-factor authentication for administrators, permissions granular enough that a building secretary cannot see district-wide data, and building-level scoping so access matches responsibility. These are the controls that limit the damage of a compromised account, which is the most likely incident by a wide margin.

Be realistic about your threat model. K-12 districts are actively targeted, primarily through ransomware and credential compromise rather than sophisticated application exploits. That means the defenses that matter most are offline-capable backups, multi-factor authentication, and prompt patching — none of which are exotic, all of which require someone to own them.

One genuine advantage of open source here: the code is inspectable. Your security staff, or a contracted reviewer, can read what the application does with student data rather than relying on a vendor questionnaire. Few districts exercise this, but the option is real and it matters for the districts that do.

When hosted is the better answer

If nobody at the district is comfortable administering a Linux server, choose hosted. This is not a judgment about capability; it is about capacity. A one-person IT department covering fifteen buildings does not have the hours, and a self-hosted system that goes unpatched and unbackedup is worse than a hosted one on every dimension including data protection.

If your infrastructure staff are already at capacity, the marginal cost of self-hosting is not the server — it is the attention, and attention is the scarce resource in district IT. Adding a system that needs monthly care to a team that is behind on the systems it already has is a predictable failure.

If you need guaranteed uptime with someone to call at 6 AM, hosted is the honest answer. A self-hosted system's recovery time is however long it takes your one person to get to a laptop.

A reasonable middle path exists with software that offers both: self-host to evaluate, in a scratch environment against a copy of real data, and then decide. Evaluating an open-source system costs nothing but time and tells you far more than a vendor demo, because you are running your own data through your own workflows. Districts that do this arrive at the purchase decision with actual evidence.

And note that with genuinely open-source software the decision is reversible in both directions. Starting hosted and moving in-house later, or the reverse, is a data export and an import rather than a migration project — which is a materially different position than being locked into a proprietary platform.

Doing it well: a short checklist

Put the server somewhere with a real network, not under a desk. A small cloud instance costs less per year than most districts spend on a single software renewal, and it comes with power, cooling, network, and snapshots you did not have to build.

Automate the certificate. Expired TLS certificates are the most common self-inflicted outage in self-hosted deployments, and they are entirely preventable.

Use the application's own permission model rather than giving everyone administrator access because it is simpler. The day someone's account is phished, the blast radius is determined by this decision.

Write down how the thing works — where it runs, how to reach it, where backups go, how to restore, what the update procedure is — and put that document somewhere other than the server it describes. This is the deliverable that makes the system survivable when the person who set it up moves on, which is the most likely thing to eventually go wrong.

Test the restore. It bears repeating because it is the step everyone skips, and it is the one that determines whether a bad day is an inconvenience or a catastrophe.

Common questions

What does it cost to self-host K-12 software?

The infrastructure is modest — a single small virtual machine handles a district of several thousand students, at a cost well under most software renewals. The real cost is staff attention: budget a few hours a month for updates, backup verification, and the occasional issue. If that time does not exist, hosted is cheaper in practice.

Is self-hosted software more secure than a hosted service?

Only if you run it well. Self-hosting moves responsibility for patching, access control, backup encryption, and incident response to the district. A well-maintained self-hosted server can be more secure because there is no third-party data processor; an unpatched one in a closet is considerably less secure than any reputable hosted provider.

Do we still need a data privacy agreement if we self-host?

Not with the software vendor, because no third party is processing the data — that is one of the genuine simplifications. You are still subject to FERPA, COPPA where applicable, and your state's student data privacy statutes, and you may have agreements with whoever provides your hosting infrastructure.

What happens if the open-source project stops being maintained?

You keep running the version you have while you plan a migration on your own schedule, and the source code remains available to you or a contractor. That is a materially better position than a proprietary product being discontinued mid-year, which leaves a district with no version and no timeline of its own.

How do we back up a self-hosted school system properly?

Automated daily backups to storage separate from the server, encrypted, with a retention window long enough to survive a problem you did not notice immediately. Then restore one to a scratch environment once a term. A backup that has never been restored is a hypothesis, and the restore test is the highest-value hour on the whole list.

Can we start self-hosted and move to hosted later?

With genuinely open-source software, yes, and in either direction — it is an export and an import rather than a migration project. That reversibility is a reason to evaluate by self-hosting against a copy of your real data, which tells you far more than a vendor demo, before deciding how you want to run it long term.

How Chalk approaches this

Chalk is open source under the AGPL and free to self-host forever, with no feature held back for the hosted version. It runs as a single binary with an embedded database, so a small virtual machine covers a district. If you would rather not run it, the hosted option is priced by fleet size rather than per seat — and because the software is the same either way, moving between them is an export and an import.

See the full feature catalog →

Run this playbook on your own fleet.

Chalk installs to a populated inventory from your SIS and Google Admin in about 30 minutes. Self-host free forever under AGPL-3.0, or let us host it — priced by fleet size, never per seat.