npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@geoalgeria/ecoles

v1.0.0

Published

Schools of Algeria — 11,000+ geocoded schools and kindergartens from OpenStreetMap, classified by cycle (primaire/moyen/secondaire/préscolaire), with Arabic & French names, commune/wilaya linkage and GPS coordinates. JSON, CSV, GeoJSON, TypeScript.

Downloads

96

Readme

English | Français | العربية

@geoalgeria/ecoles

The schools of Algeria — as data you can install.

npm npm downloads License: MIT

11,830 geocoded schools across all 69 wilayas of Algeria — every one with coordinates, classified by cycle (primaire · moyen/CEM · secondaire/lycée · préscolaire), most with Arabic and/or French names, and commune/wilaya linkage. Extracted from OpenStreetMap and framed honestly against the ~28,000 establishments of the national school network. Shipped as JSON, CSV, GeoJSON, and TypeScript. Part of GeoAlgeria.

npm install @geoalgeria/ecoles
import ecoles from "@geoalgeria/ecoles";

const all = ecoles.ecoles();   // 11,830 geocoded schools

// Lycées in a wilaya (joins GeoAlgeria's wilaya_code)
const lyceesSetif = all.filter((e) => e.wilaya_code === "19" && e.cycle === "secondaire");

// Only the named ones, with a French label
const named = all.filter((e) => e.name_fr);

What you can build

  • School maps & locators — coordinates on all 11,830 records, ready for a map or nearest-school distance sorting.
  • Cycle breakdowns — filter primaire / moyen / secondaire / préscolaire, or rank school density per commune/wilaya across the country.
  • Bilingual directories — thousands of Arabic and French names, side by side.

What's inside

| Dataset | Count | Coordinates | Notes | | --- | --- | --- | --- | | Schools | 11,830 | ✅ all | 8,640 named, 69 wilayas |

By cycle

| Cycle | Count | Meaning | | --- | --- | --- | | primaire | 4,020 | école primaire (ISCED 1) | | moyen | 2,377 | collège d'enseignement moyen / CEM (ISCED 2) | | secondaire | 1,574 | lycée (ISCED 3) | | prescolaire | 268 | préscolaire / maternelle / روضة (ISCED 0) | | autre | 3,591 | school of undetermined cycle (unnamed, or a name with no cycle word) |

This is an OpenStreetMap extract, not an official registry. Coverage is partial and uneven by wilaya — ~11.8k schools mapped against the ~28,000 in the national network (primaire + moyen + secondaire, Ministry of National Education, approximate). Counts move as OpenStreetMap is edited; each rebuild reflects the current state of the map.

Cycle is inferred. It comes from isced:level and the French/Arabic name — a CEM always names itself متوسطة/collège, a lycée ثانوية/lycée, a maternelle روضة/préscolaire. A bare "école"/"مدرسة" with no cycle word is classified primaire by Algerian convention (a standalone school is a primary school); anything unresolved is autre. 93% of named schools resolve to a specific cycle.

By kindkind is the establishment type, orthogonal to cycle, so you can filter out (or in) the special-purpose places OSM files under amenity=school:

| Kind | Count | Meaning | Cycle | | --- | --- | --- | --- | | regular | 11,640 | a standard école / CEM / lycée / maternelle | its real cycle | | formation | 91 | vocational / training centre | autre | | coranique | 40 | Quranic school | autre | | langues | 24 | language school / institute | autre | | special | 30 | adapted / special-needs school (deaf, blind…) | keeps its cycle | | conduite | 5 | driving school (auto-école) | autre |

The four non-K-12 kinds (formation/coranique/langues/conduite) carry cycle autre — they're not primary schools even though their name contains "école"; kind is what makes them findable instead of buried in autre.

Also on each record: isced_levels (the OSM isced:level served, normalized to a sorted list like "1;2" — on 2,037 records), address (from OSM addr:* tags — on 2,625), and sector (public/private where the map signals it).

Formats

The npm package ships the JSON (importable directly):

import ecoles from "@geoalgeria/ecoles/data/ecoles.json" with { type: "json" };
// or via CDN, no install:
// https://cdn.jsdelivr.net/npm/@geoalgeria/ecoles/data/ecoles.json

The loaders and record shapes are fully typed — TypeScript definitions ship in the package:

import ecoles, { type Ecole } from "@geoalgeria/ecoles";
const all: Ecole[] = ecoles.ecoles();

CSV and GeoJSON are in the repo under data/ and bundled in every GitHub Release:

data/
  ecoles.json              # 11,830 schools (array)
  metadata.json            # source, counts, coverage, generated_at
  csv/ecoles.csv           # repo + Release bundle (not in npm tarball)
  geojson/ecoles.geojson   # Point features

Record shape

{
  "id": "16-00042",
  "source": "osm",
  "osm_id": "way/292876445",
  "name": "Lycée El Idrissi",
  "name_ar": "ثانوية الإدريسي",
  "name_fr": "Lycée El Idrissi",
  "cycle": "secondaire",
  "cycle_label_fr": "Lycée",
  "cycle_label_ar": "ثانوية",
  "kind": "regular",
  "kind_label_fr": "École ordinaire",
  "kind_label_ar": "مدرسة عادية",
  "isced_levels": "3",
  "sector": null,
  "wilaya": "Alger",
  "wilaya_ar": "الجزائر",
  "wilaya_code": "16",
  "commune": "Casbah",
  "commune_code": 1607,
  "address": null,
  "lat": 36.779365,
  "lng": 3.05949,
  "geo_precision": "osm_centroid"
}

id is a stable {wilaya_code}-{seq} key synthesized by GeoAlgeria; osm_id links back to the upstream object. name is the best available display name and is null for unnamed points. cycle is the education level and kind the establishment type (see above), each with bilingual labels. isced_levels and address come straight from OSM (null when the tags are absent). sector is "public"/"private" only when the map carries an explicit signal, else null. geo_precision is osm_node (a surveyed point) or osm_centroid (a building outline's centre). wilaya_code joins to GeoAlgeria's wilaya_code.

Commune/wilaya linkage is derived, not from the source. OpenStreetMap does not carry Algerian administrative codes. GeoAlgeria attaches wilaya_code, commune_code, and commune by a nearest-centroid join against the geoalgeria commune set. Wilaya assignment is effectively exact; commune is best-effort (centroid proximity, not polygon containment).

Need the administrative divisions too?

For wilayas, dairas, and communes, use the main geoalgeria package — it's how you turn a school's commune_code into a polygon or centroid. Use @geoalgeria/ecoles when you only need the schools.

Source & method

Run npm run fetch to regenerate every output. It:

  1. queries OpenStreetMap (Overpass) for amenity=school and amenity=kindergarten inside Algeria;
  2. classifies the cycle from isced:level and the French/Arabic name;
  3. de-duplicates the same school mapped as both a node and a building;
  4. attaches commune/wilaya by nearest commune centroid.

Raw source pulls are cached under research/ecoles/.

License & attribution

Package code is MIT. The data is from OpenStreetMap© OpenStreetMap contributors, licensed under the ODbL 1.0. If you use or redistribute this dataset, you must attribute OpenStreetMap contributors and keep derived databases under a compatible license.

Verify against official sources for authoritative information. This dataset is provided for reference and to power GeoAlgeria.

API docs & field reference → · Browse all packages →


Made by Yasser's Studio · LinkedIn · X · [email protected]