> ## Documentation Index
> Fetch the complete documentation index at: https://beads.gascity.com/llms.txt
> Use this file to discover all available pages before exploring further.

# bd import

> Import issues from a JSONL file or stdin into the database

Generated from `bd help --doc import`.

Import issues from a JSONL file (newline-delimited JSON) into the database.

If no file is specified, imports from the configured import.path under .beads/
(default: issues.jsonl). Use "-" to read from stdin. This is the incremental counterpart to
'bd export': new issues are created and existing issues are updated (upsert
semantics).

Memory records (lines with "\_type":"memory") are automatically detected and
imported as persistent memories (equivalent to 'bd remember'). This makes
'bd export | bd import' a full round-trip for both issues and memories.

Each JSONL line should map to an issue. The importer accepts every field
'bd export' emits — see 'bd export' output for the canonical schema. Only
"title" is required; everything else is optional.

Common fields:
title                  Required. Short summary.
description            Long-form body.
design, notes,         Additional content sections.
acceptance\_criteria
issue\_type             bug | feature | task | epic | chore | ...
priority               0-4 (0 = critical). 0 is preserved (no omitempty).
status                 open | in\_progress | blocked | closed | ...
(rows with status "tombstone" are skipped)
assignee, owner,       Ownership metadata.
created\_by
labels                 Array of strings.
dependencies           Array of \{issue\_id, depends\_on\_id, type, ...}.
comments               Array of comment objects.
external\_ref,          Cross-system identifiers (e.g. "gh-9").
source\_system
due\_at, defer\_until    RFC3339 timestamps for scheduling.
metadata               Arbitrary JSON object preserved verbatim.

Timestamps (created\_at, updated\_at, started\_at, closed\_at) are preserved
when present in the JSONL and otherwise filled in by the importer. The
legacy "wisp" boolean is accepted as an alias for "ephemeral".

By default a row only rewrites an existing local issue when its
updated\_at is strictly newer. Older rows are skipped (reported as
stale\_skipped\_ids) and rows with the same updated\_at keep every local
column — updated\_at has second granularity, so a timestamp tie can be
two distinct same-second updates, and the local row wins the tie
(reported as tie\_kept\_local\_ids; the row's labels/comments/dependencies
still merge). The guard is also enforced inside the upsert itself, so a
local update that lands while the import is running is preserved rather
than overwritten. Existing issues that the import did rewrite are listed
with a field-level summary (updated\_issues), so local state changed by
an import is visible. To deliberately restore an older snapshot, pass
\--allow-stale, which imports every row even when it overwrites newer
local state.

EXAMPLES:
bd import                        # Import from configured import.path
bd import backup.jsonl           # Import from a specific file
bd import -i backup.jsonl        # Legacy alias for a specific file
bd import -                      # Read JSONL from stdin
cat issues.jsonl | bd import -   # Pipe JSONL from another tool
bd import --dry-run              # Show what would be imported
bd import --dedup                # Skip issues with duplicate titles
bd import --allow-stale old.jsonl # Restore an older snapshot (overwrites newer local rows)
bd import --json                 # Structured output with created and skipped IDs

```
bd import [file|-] [flags]
```

**Flags:**

```
      --allow-stale    Import rows even when older than the local issue (required to restore an older snapshot)
      --dedup          Skip lines whose title matches an existing open issue
      --dry-run        Show what would be imported without importing
  -i, --input string   Read JSONL from a specific file
```
