Skip to content

Commit fd997ed

Browse files
committed
Merge remote-tracking branch 'origin/main' into ndrh-2026-videos
# Conflicts: # content/events/hck26-2026-janelia-ndrh.md
2 parents 0a16e46 + 032cf7b commit fd997ed

22 files changed

Lines changed: 263 additions & 71 deletions

.github/workflows/link-check.yml

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,5 +22,21 @@ jobs:
2222
id: lychee
2323
uses: lycheeverse/lychee-action@v2
2424
with:
25-
# NOTE: Lychee (and sphinx) encounter issues with SSL certificates for INCF URLs, so use --insecure
26-
args: --verbose --no-progress './content/**/*.md' './content/**/*.html' './content/**/*.rst' --insecure
25+
# --base resolves root-relative paths (e.g. /events/) against the live site
26+
# --accept includes 403/429 since many destinations (mathworks, hilton, doi.org,
27+
# slack invites) reject lychee's user-agent rather than the link being broken
28+
# --insecure: lychee (and sphinx) hit SSL cert issues on INCF URLs
29+
args: >-
30+
--verbose
31+
--no-progress
32+
--base 'https://neurodatawithoutborders.github.io/'
33+
--accept '200..=299,403,429'
34+
--max-retries 2
35+
--insecure
36+
'./content/**/*.md'
37+
'./content/**/*.html'
38+
'./content/**/*.rst'
39+
# Don't block PRs on the report; the job summary still surfaces broken links
40+
# so they can be triaged separately. Pre-existing dead links in archived
41+
# event pages otherwise fail every PR.
42+
fail: false

assets/css/style.css

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1083,6 +1083,76 @@ ol.custom-ordered-list li::before {
10831083
padding: 0 10px !important;
10841084
}
10851085

1086+
/* Site-wide search: icon toggle + dropdown panel */
1087+
.site-search-wrapper {
1088+
position: relative;
1089+
}
1090+
.site-search-toggle {
1091+
display: inline-flex;
1092+
align-items: center;
1093+
justify-content: center;
1094+
width: 40px;
1095+
height: 40px;
1096+
border-radius: 50% !important;
1097+
cursor: pointer;
1098+
}
1099+
.site-search-toggle:hover,
1100+
.site-search-toggle[aria-expanded="true"] {
1101+
background-color: rgba(255, 255, 255, 0.12) !important;
1102+
}
1103+
.site-search-toggle .bi-search {
1104+
font-size: 1.2rem;
1105+
line-height: 1;
1106+
color: #ffffff !important;
1107+
}
1108+
.site-search-toggle:hover .bi-search,
1109+
.site-search-toggle[aria-expanded="true"] .bi-search {
1110+
color: #ffffff !important;
1111+
}
1112+
.site-search-panel {
1113+
position: absolute;
1114+
top: calc(100% + 8px);
1115+
right: 0;
1116+
width: min(420px, 92vw);
1117+
background: #fff;
1118+
border: 1px solid #ebebeb;
1119+
border-radius: 0.5rem;
1120+
box-shadow: 0 8px 24px rgba(33, 37, 41, 0.12);
1121+
padding: 12px;
1122+
z-index: 1050;
1123+
}
1124+
.site-search-panel[hidden] {
1125+
display: none;
1126+
}
1127+
.site-search-panel .pagefind-ui__search-input {
1128+
width: 100%;
1129+
height: 40px;
1130+
font-size: 14px;
1131+
padding: 8px 12px;
1132+
border: 1px solid #d0d4dd;
1133+
border-radius: 0.5rem;
1134+
}
1135+
.site-search-panel .pagefind-ui__drawer {
1136+
position: static !important;
1137+
top: auto !important;
1138+
right: auto !important;
1139+
left: auto !important;
1140+
width: 100% !important;
1141+
border: 0 !important;
1142+
box-shadow: none !important;
1143+
padding: 0 !important;
1144+
margin-top: 8px;
1145+
max-height: 60vh;
1146+
overflow-y: auto;
1147+
}
1148+
@media (max-width: 991.98px) {
1149+
.site-search-panel {
1150+
right: auto;
1151+
left: 0;
1152+
width: 100%;
1153+
}
1154+
}
1155+
10861156
/* Contact Us */
10871157
.contactP a {
10881158
color: #171b26 !important;

assets/js/main.js

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,45 @@ document.addEventListener("DOMContentLoaded", function () {
108108

109109
// PageFind Init
110110
window.addEventListener('DOMContentLoaded', (event) => {
111-
new PagefindUI({ element: "#search", showSubResults: true });
111+
if (document.getElementById("search")) {
112+
new PagefindUI({ element: "#search", showSubResults: true });
113+
}
114+
if (document.getElementById("site-search")) {
115+
new PagefindUI({
116+
element: "#site-search",
117+
showSubResults: true,
118+
showImages: false,
119+
resetStyles: false,
120+
});
121+
}
122+
123+
// Site-search toggle
124+
const searchToggle = document.querySelector(".site-search-toggle");
125+
const searchPanel = document.querySelector(".site-search-panel");
126+
if (searchToggle && searchPanel) {
127+
const closePanel = () => {
128+
searchPanel.hidden = true;
129+
searchToggle.setAttribute("aria-expanded", "false");
130+
};
131+
const openPanel = () => {
132+
searchPanel.hidden = false;
133+
searchToggle.setAttribute("aria-expanded", "true");
134+
const input = searchPanel.querySelector(".pagefind-ui__search-input");
135+
if (input) input.focus();
136+
};
137+
searchToggle.addEventListener("click", (e) => {
138+
e.stopPropagation();
139+
searchPanel.hidden ? openPanel() : closePanel();
140+
});
141+
document.addEventListener("click", (e) => {
142+
if (!searchPanel.hidden && !searchPanel.contains(e.target) && e.target !== searchToggle) {
143+
closePanel();
144+
}
145+
});
146+
document.addEventListener("keydown", (e) => {
147+
if (e.key === "Escape" && !searchPanel.hidden) closePanel();
148+
});
149+
}
112150
});
113151

114152
if (logos) {

assets/jsconfig.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
"baseUrl": ".",
44
"paths": {
55
"*": [
6-
"../../../Library/Caches/hugo_cache/modules/filecache/modules/pkg/mod/github.com/gohugoio/hugo-mod-jslibs-dist/popperjs/v2@v2.21100.20000/package/dist/cjs/*",
7-
"../../../Library/Caches/hugo_cache/modules/filecache/modules/pkg/mod/github.com/twbs/bootstrap@v5.3.2+incompatible/js/*"
6+
"../../../../Library/Caches/hugo_cache/modules/filecache/modules/pkg/mod/github.com/gohugoio/hugo-mod-jslibs-dist/popperjs/v2@v2.21100.20000/package/dist/cjs/*",
7+
"../../../../Library/Caches/hugo_cache/modules/filecache/modules/pkg/mod/github.com/twbs/bootstrap@v5.3.2+incompatible/js/*"
88
]
99
}
1010
}

content/_index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ hero_section:
99
btn_link: "/about-nwb/"
1010
banner_section:
1111
enable: true
12-
title: "NWB needs your urgent help! <a href='/supporting-nwb/' style='color: #664d03; font-weight: 600;'>Learn how you can support NWB</a>"
12+
title: "<a href='/supporting-nwb/' style='color: #664d03; font-weight: 600;'>Learn how you can support NWB</a>"
1313
card_section:
1414
enable: true
1515
cards:

content/community/educators.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ resources_teaching_fair:
5252
url: "https://pynwb.readthedocs.io/en/stable/tutorials/index.html"
5353
- title: "MatNWB Tutorials"
5454
content: "MATLAB-based tutorials for working with NWB data. Ideal for courses already using MATLAB as a primary teaching language. Useful for MATLAB-based courses and labs."
55-
url: "https://neurodatawithoutborders.github.io/matnwb/"
55+
url: "https://matnwb.readthedocs.io/en/latest/pages/tutorials/index.html"
5656
- title: "NWB YouTube Channel"
5757
content: "Video tutorials, webinars, and recorded training sessions covering various aspects of NWB. Useful for visual demos and asynchronous learning."
5858
url: "https://www.youtube.com/@NeurodataWithoutBorders"

content/events/hck26-2026-janelia-ndrh.md

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
---
22
title: "NeuroDataReHack 2026"
3-
date: 2026-07-13
3+
date: 2026-07-12
44
endDate: 2026-07-17
55
location: "HHMI Janelia Research Campus, Ashburn, VA"
66
eventType: "Hackathon"
77
image: "/images/events/hck_2x_2026-janelia-ndrh/ndrh_2026_banner.png"
8-
weight: 20260713
8+
weight: 20260712
99
summary: "Unlock new discoveries in neurophysiology through secondary analysis."
1010
draft: false
1111
organizers:
@@ -177,10 +177,12 @@ Following the event, participants will be invited to apply for a Kavli Foundatio
177177

178178
## Eligibility
179179

180-
This course is intended for PhD students, postdoctoral researchers, principal investigators, or similar.
180+
Eligibility is broad. This course is intended for PhD students, postdoctoral researchers, principal investigators, or similar.
181181
Advanced undergraduates may be considered on a case-by-case basis. We welcome applicants from all areas of
182182
neuroscience, including but not limited to experimentalists, computational neuroscientists, and data scientists.
183183
Applicants should have basic programming experience in Python or MATLAB and experience with neurophysiology research.
184+
Preference will be given to applicants who have a specific project in mind that involves reanalyzing existing
185+
neurophysiology data in NWB format and who has not previously attended a NeuroDataReHack event.
184186

185187
## Logistics
186188

content/faq/_index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ See the [Installing PyNWB](https://pynwb.readthedocs.io/en/stable/install_users.
2424

2525
### How do I install MatNWB? {#install-matnwb}
2626

27-
See the [MatNWB documentation](https://matnwb.readthedocs.io/en/latest/pages/getting_started/installation_users.html) for details.
27+
See the [MatNWB documentation](https://matnwb.readthedocs.io/en/latest/pages/getting_started/installation.html) for details.
2828

2929
### What is the difference between PyNWB and nwb-schema? {#pynwb-vs-schema}
3030

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
---
2+
title: "NWB & DANDI Newsletter Winter 2026"
3+
weight: 1
4+
date: "2026-05-08"
5+
subtitle: "NeuroDataReHack 2026 + Cosyne tutorial, leadership additions, new funding through 2027, NWB 2.9 schema, and PyNWB 3 / HDMF 4 / AqNWB 0.2 / NeuroConv 0.9 releases"
6+
image: "/images/newsletter_2026-winter_banner.png"
7+
ext_link: "https://us3.campaign-archive.com/?u=eacaccc485a4e5f36034bbdbd&id=86d4c15809"
8+
tags: announcement, newsletter
9+
---
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
---
2+
title: "PyNWB 4.0.0 Released"
3+
weight: 1
4+
date: "2026-06-30"
5+
subtitle: "A major release bringing HERD external resource annotations, the NWBEP001 EventsTable, and the NWB 2.10.0 schema to the Python reference API"
6+
image: "/images/pynwb_4.0.0_banner.png"
7+
tags: announcement, software, pynwb, release
8+
---
9+
10+
We're excited to announce the release of [**PyNWB 4.0.0**](https://github.com/NeurodataWithoutBorders/pynwb/releases/tag/4.0.0), the latest major version of the Python reference API for reading and writing Neurodata Without Borders files. This release pairs two long-anticipated capabilities, **HERD** external resource annotations and the **NWBEP001 EventsTable**, with the new NWB **2.10.0** schema, alongside expanded Python support and a round of cleanup that removes long-deprecated functionality.
11+
12+
## HERD: linking NWB data to external resources
13+
14+
A headline feature of PyNWB 4.0.0 is support for **HERD** (the HDMF External Resources Data structure), exposed as the new `external_resources` field on `NWBFile`.
15+
16+
HERD provides a standardized way to associate **external resource annotations** with the contents of your NWB file. The most common use case is mapping entries in your data, such as species, brain regions, genotypes, or behavioral conditions, to terms in external ontologies and controlled vocabularies. Instead of recording a free-text label like "mouse," you can link that value to a precise, globally resolvable identifier (for example, an NCBI Taxonomy term), making your data more **machine-readable, interoperable, and [FAIR](https://www.go-fair.org/fair-principles/)**.
17+
18+
To get started, see the new tutorials: [Linking to External Resources (HERD)](https://pynwb.readthedocs.io/en/stable/tutorials/general/plot_external_resources.html) and [Annotating Multiple Streamed NWB Files with a Single HERD](https://pynwb.readthedocs.io/en/stable/tutorials/general/resources_streaming.html).
19+
20+
## NWBEP001 and the EventsTable
21+
22+
PyNWB 4.0.0 also integrates [**NWBEP001**](https://github.com/nwb-extensions/nwbep-review/issues/4), the first [NWB Enhancement Proposal](/enhancement-proposals/) to graduate into the core standard. NWB Enhancement Proposals are the formal mechanism for proposing broadly useful additions to the NWB specification; they are typically prototyped and refined as NWB extensions (NDX) before being folded into the core schema. NWBEP001 followed exactly this path, and its acceptance brings a dedicated, standardized way to represent **events** in NWB.
23+
24+
This release adds the new neurodata types defined by the proposal:
25+
26+
- **`EventsTable`**: a table for storing events, including a `source_description` attribute documenting where the events came from
27+
- **`TimestampVectorData`** and **`DurationVectorData`**: column types for event timing and durations
28+
- A new **`events`** group on `NWBFile` to hold event tables
29+
- **`MeaningsTable`**: a table for documenting the meaning of categorical column values of another table, such as the events table
30+
31+
`NWBFile` also gains convenience methods for managing multiple event tables, including `merge_events_tables()` to combine event tables and `get_all_events()` to retrieve all events across the file.
32+
33+
## More new capabilities
34+
35+
Beyond the two headline features, PyNWB 4.0.0 adds several quality-of-life improvements:
36+
37+
- New `get_starting_time()` and `get_duration()` methods on `TimeSeries`, `TimeIntervals`, and `Units`
38+
- **Python 3.14** support, and a bump to **HDMF ≥ 6.1.0**
39+
- **pandas 3.0** compatibility
40+
41+
It also resolves a number of bugs, including fixes to `TimeSeries.get_timestamps()` for numpy arrays, round-tripping of `Units` waveform metadata, and parsing of legacy `Device.model` strings.
42+
43+
## Breaking changes
44+
45+
As a major release, PyNWB 4.0.0 removes functionality that has been deprecated for some time. Highlights include:
46+
47+
- Removal of the deprecated `ProcessingModule` methods `add_container`, `get_container`, `add_data_interface`, and `get_data_interface`
48+
- Removal of the `extensions` argument from `get_type_map`, `get_manager`, and `NWBHDF5IO`
49+
- Removal of the `notes` argument and property from `ScratchData`
50+
- Removal of the `ic_electrodes` argument from `NWBFile`
51+
- Removal of the `paths` argument from `pynwb.validate`
52+
- `NWBFile.icephys_filtering` is now read-only
53+
- **Python 3.9** is now deprecated
54+
55+
If your code relies on any of these, review the [full release notes](https://github.com/NeurodataWithoutBorders/pynwb/releases/tag/4.0.0) before upgrading.
56+
57+
## Get started
58+
59+
You can upgrade today:
60+
61+
```bash
62+
pip install --upgrade pynwb
63+
```
64+
65+
For complete details, see the [PyNWB 4.0.0 release notes](https://github.com/NeurodataWithoutBorders/pynwb/releases/tag/4.0.0) and the [PyNWB documentation](https://pynwb.readthedocs.io/). Questions and feedback are always welcome on the [NWB Helpdesk](https://github.com/NeurodataWithoutBorders/helpdesk/discussions).
66+
67+
Subscribe to our [mailing list](https://mailchi.mp/fe2a9bc55a1a/nwb-signup) to stay up to date on PyNWB releases and other NWB news.

0 commit comments

Comments
 (0)